Rにやらせてラクしよう — データの可視化と下ごしらえ

岩嵜 航 (Watal M. Iwasaki)
総研大 先導科学研究科
(SOKENDAI, The Graduate University for Advanced Studies)
  1. どうしてRを使うの?
  2. Rの基本
  3. R + ggplot2 — きれいなグラフを簡単に合理的に
  4. R + tidyverse — 使える形にデータを整える
2018-05-18 名古屋大学 アドバンス生命理学特論 IGER Seminar

目次: Rの基本 ~15分

  • Rのインストール
  • Rとの対話
  • プロジェクトの作成
  • 表形式ファイルの読み書き
  • パッケージの利用
  • 疑問やエラーが生じたら

R環境のインストール

R本体
コマンドを解釈して実行するコア部分
よく使われる関数なども標準パッケージとして同梱
https://cran.rstudio.com/ からダウンロードしてインストール
RStudio Desktop
Rをより快適に使うための総合開発環境(IDE)
必須ではないけど、結構みんな使ってるらしい
https://www.rstudio.com/ からダウンロードしてインストール

とりあえず起動してコンソールにコマンドを打つ

x = 2980 のようにして作った変数はワークスペースに溜まっていく。

RStudioの設定: 毎回まっさらな環境で始めよう

ワークスペース .RData は保存しない、読み込まないのが安全。

https://r4ds.had.co.nz/workflow-projects.html

“プロジェクト"を作成する

New Project > New Directory > ~/project/nagoya2018

ファイルをプロジェクト内に配置する

データ、スクリプト、結果を分離する。
(Excelで作業するとゴチャマゼになりがち)
例えばこんな感じのディレクトリ(=フォルダ)構造を目指す:

nagoya2018/               # プロジェクトの最上階
├── data/                 # 元データを置くところ
│   ├── iris.tsv
│   └── diamonds.xlsx
├── nagoya2018.Rproj      # これダブルクリックでRStudioを起動
├── hello.R
├── output/               # 結果の出力先
│   ├── iris-petal.png
│   └── iris-summary.tsv
├── transform.R           # データ整理・変形のスクリプト
└── visualize.R           # 作図のスクリプト

プロジェクト最上階を作業ディレクトリとし、
ファイル読み書きの基準にする。(後で詳しく)

Rスクリプトに書いてから、実行する

途中まで書いて tab を押すと、続きを提案・補完してくれる。
実行したい部分を選択して ctrl-return

データの型

  • NULL: 空っぽ
  • vector: 基本型。一次元の配列。
    • logical: 論理値 (TRUE or FALSE)
    • numeric: 数値 (整数 42L と 実数 3.1416)
    • character: 文字列 ("historgram.png")
    • factor: 因子 (文字列っぽいけど微妙に違う)
    • ↑それぞれに欠損値 NA も定義されてる
  • matrix: 二次元の行列。vector同様、全要素が同じ型。
  • list: 異なる型でも詰め込める太っ腹ベクトル。
  • data.frame: 同じ長さのベクトルを並べた長方形のテーブル。重要。
    tibble とか tbl_df と呼ばれる亜種もあるけどほぼ同じ。

vector: 1次元の配列。基本。

1個の値でもベクトル扱い。
同じ長さ(または長さ1)の相手との計算が得意。

x = c(2, 8, 6)  # 長さ3の数値ベクトル
x + x           # 同じ長さ同士の計算
[1]  4 16 12
y = 42          # 長さ1の数値ベクトル
x + y           # 長さ3 + 長さ1 = 長さ3 (それぞれ足し算)
[1] 44 50 48
# こういうfor文は書かずに済む
z = c(0, 0, 0)
for (i in seq_len(3)) {
  z[i] = x[i] + y
}

data.frame: 長方形のテーブル。重要。

iris はアヤメ属3種150個体に関する測定データ。
Rに最初から入ってて、例としてよく使われる。

print(iris)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
           <dbl>       <dbl>        <dbl>       <dbl>     <fct>
  1          5.1         3.5          1.4         0.2    setosa
  2          4.9         3.0          1.4         0.2    setosa
  3          4.7         3.2          1.3         0.2    setosa
  4          4.6         3.1          1.5         0.2    setosa
 --                                                            
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica

長さ150の数値ベクトル4本と因子ベクトル1本。

data.frameの読み書き

  • カンマ区切り(CSV)とかタブ区切り(TSV)のテキストが無難。
  • ファイル名は作業ディレクトリからの相対パスで指定。
install.packages("readr") # R標準の read.table() とかは難しいので
library(readr)            # パッケージのやつを使うよ
readr::write_tsv(iris, "data/iris.tsv")
readr::read_tsv("data/iris.tsv")
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
           <dbl>       <dbl>        <dbl>       <dbl>     <chr>
  1          5.1         3.5          1.4         0.2    setosa
  2          4.9         3.0          1.4         0.2    setosa
  3          4.7         3.2          1.3         0.2    setosa
  4          4.6         3.1          1.5         0.2    setosa
 --                                                            
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica

readxlパッケージを使うとExcelファイルも読み込める。

パッケージ

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

Standard Packages
Rの標準機能。何もしなくても使用可能
Contributed Packages
有志により開発され、 CRAN にまとめて公開されている。
要インストール。使う前に読み込むおまじないが必要。
install.packages("readr")  # 一度やればOK
library(readr)             # 読み込みはRを起動するたびに必要
update.packages()          # たまには更新しよう
素のRも覚えきってないのにいきなりパッケージ?
大丈夫。誰も覚えきってない。
パッケージを使わないR作業 = 火もナイフも使わない料理

tidyverse

Rでデータを上手に扱うためのパッケージ群

install.packages("tidyverse")
library(tidyverse)
# 関連パッケージが一挙に読み込まれる
  • 統一的な使い勝手
  • 暗黙の処理をなるべくしない安全設計
  • シンプルな関数を繋げて使うデザイン
https://r4ds.had.co.nz/introduction.html

ほかにもたくさん

  • readxl: エクセル形式の読み込み
  • stringr: 文字列の処理
  • Bioconductor: バイオインフォマティクス関連
  • igraph: グラフ(ネットワーク)関連
  • rgl: 3Dの作図
  • R Markdown: Rコマンドと結果を埋め込んだPDFやHTMLを作る。
    この発表スライドもそうやって作った。
    レポート作成や共同研究者への報告にも便利!

たくさんありすぎて選べない?
まずは人気のパッケージを https://awesome-r.com/ で探してみるとか。

疑問やエラーの解決方法

  • RStudio内にヘルプを表示: ?sum, help.start()
  • 変数の構造を確かめる: str(iris), attributes(iris)
  • エラー文をちゃんと読む: No such file or directory
  • パッケージの公式ドキュメントをちゃんと読む
  • パッケージ名やエラー文をコピペしてウェブ検索
    StackOverflow や個人サイトに解決策
  • 身近な経験者に訊く
  • Slackの r-wakalang で質問を投稿する。
    内容によってチャンネルを選ぶ: #r_beginners, #statistics
  • 質問するときは、状況を再現できる小さな例 (reprex) を添えて

このパートのまとめ: Rの基本

  • R本体とRStudioのインストール。
  • コンソールでRと対話できるけど、スクリプトに書いてから実行しよう。
  • プロジェクトの構造を決めて、ファイルの読み書きをスムーズに。
  • 数値や文字列という基本型があり、data.frameという構造が特に重要。
  • パッケージを使うことで効率よく作業できる。
  • 疑問の答えは、Rの中にも、インターネットにもある。