※資料作成は岩嵜航さん(東北大学)にご協力いただきました。

(左右キーで進みます!)

Return to HOME

研究の基本プロセスはいつも一緒

1. 課題を見つける/仮説を立てる

2. 実験や観察をしてデータを集める

3. データを整理する

4. データを解析して仮説を検証する


  • 実験や観察は研究の半分くらい!
  • 残り半分はデータの整理&解析!
  • 解析によっては宝石になるはずのデータも単なる石ころに…!
Return to HOME

科学の営み = 巨人の肩に立つ

先人たちの積み重ねに基づいて、新しい発見をする

記録を残すことは何より重要

  • 実験や野外観察では些細なことも漏らさず記録。
  • 生データは何重にもバックアップ。

データ整理・解析・作図も不可欠。だけど…

  • 再現不能の職人技で切り抜けてしまう人も多い。
  • コピペ、メニュー選択、配色と配置を微調整…

猜疑が生じたら…?別の人が研究を発展させたいとき…?

❌(証拠はないけど…)「あります!」
⭕「誰でも確実に再現できるプロトコルがこちらです」

Return to HOME

再現不可能な職人的研究の例…

  • 動物園の混合展示で、各動物がどのように分布・行動しているか。それらを決める要因は何か。
  • 膨大な観察データに基づく超大作卒論。

生データ:ここはまだそんなに悪くない

  • 週に1回、各個体の位置と行動を種ごとのファイルに記録。
  • タブは個体、A,B列はXY座標でそれ以降は行動、各行は時刻。

コピペを駆使して条件ごとに複製・集計

  • ちゃんと合ってるのかな…ファイルもタブもたくさん…
  • どこから何をコピーしてたのか、もはや思い出せない…

コピペを駆使して条件ごとに複製・集計

  • ちゃんと合ってるのかな…ファイルもタブもたくさん…
  • どこから何をコピーしてたのか、もはや思い出せない…

手動で数え、濃淡を計算し、
画像ソフトで塗る…

  • 泣きながら何十枚も…。無料期間が終わって今は使えない…。

目作業・手作業 = シーシュボスの岩

  • 膨大な単純作業がそもそもツラい
  • 人間だもの、ミスは防ぎきれない
  • ミスを防ぐためのチェックもツラい
  • ミスを発見 → 初めからやり直し
  • 新たなデータ・研究 → 初めからやり直し
  • 熟練してもツラいまま
  • その時の自分しかできない、記録に残らない
    検証のしようがない
  • 卒論なら努力賞で良いかもだけど、科学の手続きとしては問題
Return to HOME

プログラミングで大量のファイルを捌く

  • 先の例に負けず生データはどっさり。でも頑張るのは機械。

プログラミングで再現性の良い研究を!

  • 規則性のある退屈な仕事は人間よりも機械の方が得意
  • 一度書いたプログラムは、データが変わっても使いまわせる
  • 自分以外の人でも再現・検証できる
  • きれいな図を簡単にかける
  • 部分的に改変しながらいろんな解析を試せる。
    仮説検証だけなく、仮説生成(探索的データ解析)にも良い
  • やれば上達する!どんどん楽になる!!

Rとは



統計解析と作図の機能が充実したプログラミング言語

クロスプラットフォーム

  • Linux, Mac, Windowsで動く。

オープンソース

  • 永久に無償で、すべての機能を使える。
  • 集合知によって常に進化している。

コミュニティ

  • 相談できる人や参考になるウェブサイトがたくさん見つかる。
    他のプログラミング言語でもできなくはない。Pythonもいい。

本実習の目標

科学的なデータ解析の基本を身につける

  • 解析しやすいデータの形
  • 再現可能な解析方法

必要な解析方法を調べ、実践する方法を知る

  • 困ったらどうしたら良いか

これさえ押さえれば、具体的なやり方は覚えなくてOK

Return to HOME

Rと接する上での心構え

エラー文を恐れない

熟練したプログラマーでエラーは当たり前。エラー文はRさんからのメッセージ。まずは落ち着いてエラー文を読んで、コードを書きなおしてみよう。

困ったらググる

Rは全世界にユーザーがいるので、自分が困っていることは、必ず誰かが解決している。困ったら、日本語で、英語で、エラー文で、ググって調べると解決策が見つかるはず!

Return to HOME

プログラミングの身につけ方

とにかく手を動かして体感すること!

  1. コードはコピペして手元で動かしてみよう
  2. 動いたら、自分用に改変しよう(引用も忘れずに)
    • 動かなかったらエラーコードを見ながら動くまで試行錯誤
  3. 改変したコードが動かなかったら、何が悪いのか調べよう
    • コードやデータをよく見比べる

エラーを解決した経験値 = プログラミングの経験値

  • エラーを恐れずどんどん書こう!

困ったら…

この実習の取り組み方(1/2)

1. この枠が出てきたらコピペして自分のPCで走らせる

  • (やり方はこのあと教えます)
head(iris)      

2. コンソールを確認する

  • 思ったとおりの出力が出てきたか?
  • ErrorやWarning(赤文字)が出ていたらよく読んで対応する
    • 問題ないWarningもあるのでよく読んで

3. [練習問題]はまず答えを見ずに自分でコードを書いてみる

  • これまでのコードをコピペして改変すればできるはず
Return to HOME

この実習の取り組み方(2/2)

4. 自分のデータをとる(自由課題)

5. スライドを見直して、使えそうな方法で解析する

  • ErrorやWarning(赤文字)が出たら何とか解決する
  • 前半の演習部分でのエラー経験がここで生きてくる(はず)!
Return to HOME

さっそく使ってみよう!

RStudioの設定を確認!

  • Win: Tools → Global options
  • Mac: RStudio → References


Return to HOME

プロジェクトを作ろう!

  • まずは「プロジェクト」を作成する
  • 以下の順でクリックして進む
    • File → New Project → New Directory → New Project → Create New Project

プロジェクトを作ろう!

  • Directory name:「R_training_2022」と入力
  • Create project as subdirectry of:
    • Cドライブの直下 or User名の直下
    • Pathに日本語が入っていないことを確認
  • Create Projectをクリック

基本1:スクリプトに書いてから実行

  • 以下の順でクリックして進む

基本1:スクリプトに書いてから実行

  • 以下の順でクリックして進む
    • File → New File → R Script

基本2:スクリプトを保存する

  • 以下の順でクリックして進む
    • File → Save
    • ファイル名は「R_training_2022_script」
    • 場所はさっき作ったプロジェクト(フォルダ)の中
    • 保存されている場所を確かめておこう
  • スクリプトを書いたら消さずに保存すること!
    • 書いた/集めたスクリプトは財産
    • 保存しておけばまた使い回せる
Return to HOME

基本3:Rと会話する

  • まずは1+1から!
  • スクリプトに1 + 1と書く → 1 + 1を選択 → Ctrl + Enter
  • コンソールに入れないとRに伝わらない
Return to HOME

基本3:Rと会話する

できた人は・・・

[練習問題]

  • 1 + 2 + 3
  • 3 * 7 * 2
  • 4 ÷ 2
  • 4 ÷ 3
  • 他にも好きな計算をしてみよう!
Return to HOME

覚えておくと役立つこと(1)

  • 記号の前後にはスペースを空けるクセをつけよう!
  • 1+1 ←Bad
  • 1 + 1 ←Good!!
  • コードが見やすくなり、間違いが起こりにくい!
Return to HOME

覚えておくと役立つこと(2)

変数を使ってみよう!

変数に値を代入する ※代入演算子は 「=」「<-」

x = 2          #xに2を代入
x              #xは何か訊く

  • スクリプトを書くだけでは何も起こらないので
  • 選択した状態で Ctrl + Enterしてコンソールへ渡す!
  • 「#」をつけるとRは無視してくれます。メモを書くのに便利。
Return to HOME

変数を使ってみよう!

変数に値を代入する ※代入演算子は 「=」「<-」

x = 2          #xに2を代入
x              #xってなんだっけ?
## [1] 2
  • ↑ こういう結果がコンソールに表示されるはず
  • 今後、コードと結果はこのように示します!
Return to HOME

変数を使ってみよう!

変数に値を代入する ※代入演算子は 「=」「<-」

x = 2          #xに2を代入
x              #xってなんだっけ?
## [1] 2
y = 5          #yに5を代入
y              #yってなんだっけ?
Return to HOME

変数を使ってみよう!

変数に値を代入する ※代入演算子は 「=」「<-」

x = 2          #xに2を代入
x              #xってなんだっけ?
## [1] 2
y = 5          #yに5を代入
y              #yってなんだっけ?
## [1] 5
x + y          #xとyを足す      
Return to HOME

変数を使ってみよう!

変数に値を代入する ※代入演算子は 「=」「<-」

x = 2          #xに2を代入
x              #xってなんだっけ?
## [1] 2
y = 5          #yに5を代入
y              #yってなんだっけ?
## [1] 5
x + y          #xとyを足す      
## [1] 7
Return to HOME

変数を使ってみよう!

変数に値を代入する ※代入演算子は 「=」「<-」

[練習問題]

  • xとyをかけてみよう
  • x ÷ y は?
  • 他にもいろいろ計算してみよう
  • (次ページに答えがあります)
  • (進む前にまず自分で考えてみて…!)
Return to HOME

変数を使ってみよう!

変数に値を代入する ※代入演算子は 「=」「<-」

[練習問題]

x * y       
## [1] 10
x / y       
## [1] 0.4
Return to HOME

覚えておくと役立つこと(3)

Rで扱うデータの型(class)を知ろう

要素の型

  • logical:論理値 例)TRUE, FALSE
  • numeric:数値 例)1, 2, 3, 4, 5…
  • character:文字列 例)“a”, “b”… (““で囲むと文字になる)
  • factor:因子
Return to HOME

データ型(class)を扱おう

変数のデータの型を調べる/変える

class(x)           #xはどのclass?
## [1] "numeric"
is.numeric(x)      #xはnumeric(数値)?
## [1] TRUE
is.character(x)    #xは文字列(character)?
## [1] FALSE
z = as.character(x)    #x(= 2)を文字列(character)としてzに入れて!
Return to HOME

データ型(class)を扱おう

[練習問題]

  • zの型を訊いてみよう
  • zを数値としてzに上書きして、zの型を確認しよう
  • (次ページに答えがあります)
Return to HOME

データ型(class)を扱おう

[練習問題]

class(z)               #zはどのclass?
## [1] "character"
z = as.numeric(z)      #zを数値としてzに入れて!(自動的に上書きになる)
class(z)               #zはどのclass?
## [1] "numeric"
Return to HOME

Rで扱うデータの種類を知ろう

データの種類

  • ベクトル(vector)…1次元の配列。全要素が同じ型。
  • データフレーム(data.frame)
    • 同じ長さのvectorを並べた長方形のテーブル。超重要!
  • 行列(matrix)…2次元の行列。全要素が同じ型。
  • リスト(list)…異なる型でも詰め込める太っ腹vector。

ベクトル(vector)を扱おう

vector…同じ型の要素の1次元の配列。

  • 例)c(1, 2, 3, 5),c(“Yuki”, “Ryoya”, “Azusa”)
  • ちなみにcはconbine(結合)のcからきてる
x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)  #xに数値を代入
x * 3                                 #xに3をかける
##  [1]  3  6  9 12 15 18 21 24 27 30
sqrt(x)                               #xを平方する
##  [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427
##  [9] 3.000000 3.162278
  • 一回でベクトル全てに計算を当てはめてくれる!便利!

ベクトル(vector)を扱おう

vector…同じ型の要素の1次元の配列。

y = 1:10       #1から10までの整数からなるベクトル
y                  #yは何か訊く
##  [1]  1  2  3  4  5  6  7  8  9 10
x < 5              #5よりも小さい?(こういう訊き方もできます)
##  [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
Return to HOME

ベクトル(vector)を扱おう

[練習問題]

  • -5から2までの整数からなるベクトルzを作ろう
  • ベクトルxとyをかけよう
  • ベクトルxとzをかけたらどうなる?
  • (次ページに答えがあります)
Return to HOME

ベクトル(vector)を扱おう

[練習問題]

z = -5:2     
z
## [1] -5 -4 -3 -2 -1  0  1  2
x*y
##  [1]   1   4   9  16  25  36  49  64  81 100
x*z       #要素の数が一致しないためにエラーになる
## Warning in x * z: longer object length is not a multiple of shorter object
## length
##  [1]  -5  -8  -9  -8  -5   0   7  16 -45 -40
Return to HOME

Rで扱うデータの種類を知ろう

データの種類

  • ベクトル(vector)…1次元の配列。全要素が同じ型。
  • データフレーム(data.frame)
    • 同じ長さのvectorを並べた長方形のテーブル。超重要!
  • 行列(matrix)…2次元の行列。全要素が同じ型。
  • リスト(list)…異なる型でも詰め込める太っ腹vector。
Return to HOME

データフレームを使ってみよう

data.frame…同じ長さのベクトルでできた長方形のデータ

データフレームを作るには…

  1. ベクトルを結合させる
  2. CSVファイルを読み込む → あとでやります
Return to HOME

データフレームを使ってみよう

ベクトルを結合させてdata.frameを作る

x = 1:10            #1から10までの整数からなるベクトル
y = -4:5            #-4から5までの整数からなるベクトル
q = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j") #文字10個
theDF = data.frame(x, y, q) #theDFという名前のデータフレームにまとめる
theDF                #theDFの中身を見せて
##     x  y q
## 1   1 -4 a
## 2   2 -3 b
## 3   3 -2 c
## 4   4 -1 d
## 5   5  0 e
## 6   6  1 f
## 7   7  2 g
## 8   8  3 h
## 9   9  4 i
## 10 10  5 j
Return to HOME

データフレームを使ってみよう

列のタイトルをつけることもできます

theDF = data.frame(First = x, Second = y, Moji = q)
theDF                         #theDFの中身を見せて
##    First Second Moji
## 1      1     -4    a
## 2      2     -3    b
## 3      3     -2    c
## 4      4     -1    d
## 5      5      0    e
## 6      6      1    f
## 7      7      2    g
## 8      8      3    h
## 9      9      4    i
## 10    10      5    j
Return to HOME

データフレームを使ってみよう

データフレームを眺めてみよう

nrow(theDF)       #theDFの行数は?
## [1] 10
ncol(theDF)       #theDFの列数は?
## [1] 3
head(theDF)       #最初の数行を見る。データの確認によく使います!覚えてね!
##   First Second Moji
## 1     1     -4    a
## 2     2     -3    b
## 3     3     -2    c
## 4     4     -1    d
## 5     5      0    e
## 6     6      1    f
Return to HOME

データフレームを使ってみよう

[練習問題]

  • 以下のようなdata.frameを作ってtheDF2と名付けよう。
##   bio logy
## 1   1    x
## 2   3    y
## 3   5    z
  • theDF2の中身をheadで確認しよう。
  • (次ページに答えがあります)
Return to HOME

データフレームを使ってみよう

[練習問題]

a = c(1, 3, 5)
b = c("x", "y", "z")
theDF2 = data.frame(bio = a, logy = b)
head(theDF2)
bio = c(1, 3, 5)
logy = c("x", "y", "z")
theDF2 = data.frame(bio, logy)
head(theDF2)
##   bio logy
## 1   1    x
## 2   3    y
## 3   5    z
Return to HOME

データフレームを使ってみよう

データフレームからデータを取り出そう

theDF$Moji      # theDFのMoji列
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
theDF[3, 2]     # theDFの3行目2列目
## [1] -2
theDF[3, 2:3]    # theDFの3行目2~3列目
##   Second Moji
## 3     -2    c
Return to HOME

データフレームを使ってみよう

データフレームからデータを取り出そう

theDF[, 3]      # theDFの3列目
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
theDF[2, ]      # theDFの2行目
##   First Second Moji
## 2     2     -3    b
Return to HOME

データフレームを使ってみよう

[練習問題]

  • 以下のデータを取り出そう!
    • theDF2のbio列
    • theDF2の2行目
    • theDF2の2列目
  • (次ページに答えがあります)
Return to HOME

データフレームを使ってみよう

[練習問題]

theDF2$bio      # theDF2のbio列
## [1] 1 3 5
theDF2[2, ]    # theDF2の2行目
##   bio logy
## 2   3    y
theDF2[, 2]    # theDF2の2列目
## [1] "x" "y" "z"
Return to HOME

パッケージ(package)を使おう!

パッケージとは:

便利な関数やデータセットなどをひとまとめにしたもの


Standard Packages

  • Rの標準機能。何もしなくても使用可能。

Contributed Packages

  • 有志により開発され、CRANにまとめて公開されている。
  • 要インストール。使う前に読み込むおまじないが必要。
Return to HOME

パッケージを使ってみよう

パッケージをインストールする

コードを打つ

install.packages("tidyverse")    #インストールは最初の1回でOK
library(tidyverse)               #読み込みはRを起動するたびに必要

マウスでポチポチもできる

パッケージを使ってみよう

パッケージをインストールする

コードを打つ

install.packages("tidyverse")    #インストールは最初の1回でOK
library(tidyverse)               #読み込みはRを起動するたびに必要

マウスでポチポチもできる

tidyverseをインストールしよう!

install.packages("tidyverse")    #インストールは最初の1回でOK
library(tidyverse)               #読み込みはRを起動するたびに必要

tidyverseとは:データを上手に扱うためのパッケージ群

  • 統一的な使い勝手
  • 暗黙の処理をなるべくしない安全設計
  • シンプルな関数をつなげて使うデザイン
Return to HOME

疑問やエラーの解決方法(1/2)

  • エラーの8割は凡ミスです!よく確認しよう!
    • 左にがついてたり、コードに波線がある場合はミスあり
      • なくなるまで試行錯誤(そのまま走らせてもダメ)
    • (ミスを発見しやすいように表示を大きく!!)
    • 手で打つとミスが多くなるので、コピペ推奨
    • エラーコードをよく読もう
    • よくあるエラー集を作りました
  • パッケージ名やエラー文をコピペしてウェブ検索しよう
    • ググる能力 ≒ コードを書く能力(まずは日本語で、なければ英語で、画像検索するのも良い)
    • r-wakalang(熟練Rおじさんが教えてくれるSlack)
Return to HOME

疑問やエラーの解決方法(2/2)

  • Rヘルプやパッケージの公式ドキュメントを読もう
    • コンソールに以下を打つとheadのHelpが表示される
?head
  • headを好きな関数に変えればOK
Return to HOME

引用

引用

書籍

  • 「みんなのR」(ISBN: 978-4839962159)
  • 「Rによるやさしい統計学」(ISBN: 978-4274067105)
  • 「<新版>統計学の基礎」(ISBN: 978-4890261710)
  • 「データ解析のための統計モデリング入門」(ISBN: 978-4000069731)

Step 3:データを可視化しよう

Return to HOME