R
入門
R言語

たのしいR言語入門

More than 1 year has passed since last update.


はじめに

この記事は、社内の勉強会「R言語を使った統計入門」の発表資料です

株式会社ネクストにはネクスト大学という制度があり、職種や部門を越えてお互いに教え合う文化を醸成しています(社外への宣伝)



自己紹介

二宮健



  • デジタルマーケティングUのエンジニア


    • MAM(有料集客の管理ツール)の開発

    • 具体的にはデータ集計バッチとか広告のAPIとか



  • Rを使って×専門的な分析 ○データの検証や集計




参考書籍

Rで楽しむ統計 奥村晴彦 (著), 石田基広 (監修)


  • この発表は1章の内容に対応しますが、Rに特有の詰まりどころや便利な機能も紹介します

  • 特に「この本を使って統計・データ解析を勉強する際に、スムーズに始めるためのプログラミングの前提知識」を共有するつもりです



今回覚えて帰ってほしいこと


  1. 他のデータ分析ツールと比較したRの特徴

  2. Rによるプログラミングの基礎



今回話をしないこと


  • 統計学やデータ分析について(次回やります)

  • 最低限の話しかしないので、もし実際にRを使って分析したい場合、その都度勉強が必要です



数値計算用ツールのRの紹介



はじめまして、R


Rとは,オープンソースの言語処理系である。対話形式で使われることが多い。

特に統計・データ解析,統計グラフ作成に強い。


(『Rで楽しむ統計』P.1より)

※オープンソースとは「誰でもソースコードを見られるソフトウェア」のことだと考えてください



R以外のツールやプログラミング言語


数値計算



  • Python + pydataのライブラリ: Rとほぼ同等の機能、実運用までOK


  • Matlab: 大学や研究機関でよく使われる(ただし高額)


  • Julia: RやPythonのいいとこ取りした新興勢力


データ分析



  • SPSS, SASなどのBIツール


  • Excel: みんな使える

  • (Python + pydata)



Rの良いところ・悪いところ


良いところ


  • 慣れれば、データ分析中に高速で試行錯誤できる

  • 最新の統計手法のパッケージが揃っている

  • データ処理・集計のベストプラクティスがまとまっている(例: 整然データ


悪いところ


  • 落とし穴が多い(古い仕様が残っている)

  • 他のプログラミング言語に比べると、実行が遅い



こんなあなたにはR


○ユーザー行動を可視化したい

Excelでもがんばればできるけど、Rのほうができることの幅が広くなる

(より専門的な作業が早くできる)


△新しい機械学習の機能を実装したい

エンジニアのあなたにはPython!

ただし、このゼミで学ぶことはpandasで活かせます

例) ディープラーニングによる不整合画像検出



Rを使った例

社内用の資料で説明します



インストール方法

※今回はサーバーにあるRStudioを利用するのでインストール不要です

普段のPCで利用したい方は、三重大学の奥村研のページにある手順でインストールしてください



Excelと比較したデータ集計



ハンズオンの前に、Excelと比較しながらRでのデータ集計(のイメージ)を軽く説明します

Excelで分析しているとき、「表形式のデータ」をよく扱いますよね?

※ アヤメ(花)のサンプルデータのirisデータを使って説明します

キャプチャ.JPG


Rには「表形式のデータ」を扱うための「データフレーム」というデータ構造があります

> #データフレームであることを確認

> class(iris)
[1] "data.frame"
>
> # 中身を確認(headは冒頭6行を取り出す関数)
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
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
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa



列の合計値を計算したい

Excelなら

キャプチャ.JPG

Rなら

> # "$"で列を取り出す

> iris$Sepal.Length
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8
(以下略)
>
> # 合計値を出す
> sum(iris$Sepal.Length)
[1] 876.5



分布を知りたい

がく片の長さ(Sepal.Length)の分布を知りたい(どれくらいの長さが多いのか調べたい)

Excelなら平均値を計算する

Rならグラフ(ヒストグラム)を描く

> # Sepal.Lengthのヒストグラムを描く

> hist(iris$Sepal.Length)


こんなグラフが描けます

zu.png



○○ごとの平均値を計算したい

がく片の長さ(Sepal.Length)の平均値をアヤメの種類(Species)ごとに計算したい

zu.png


Excelなら、ピボットテーブルを使います

キャプチャ.JPG


Rならこう書けます

> # 集計用のパッケージ

> library(dplyr)
>
> # SpeciesごとにSepal.Lengthの平均(mean)を集計する
> iris %>%
+ group_by(Species) %>%
+ summarise(mean = mean(Sepal.Length))
# A tibble: 3 × 2
Species mean
<fctr> <dbl>
1 setosa 5.006
2 versicolor 5.936
3 virginica 6.588

※ 「これくらい簡単に集計できる」という例のため、暗記する必要はありません

データフレームを集計するためのdplyrパッケージの詳しい使い方が気になる方は@matsuou1さんの『dplyrを使いこなす!基礎編』を見てください



ここまででイメージを持ってもらいたいこと

Rには次の2つの強みがあります


  1. Rでは「データフレーム」を操作してデータを集計する


    • 他のプログラミング言語よりも簡単

    • Excelでは「表形式のデータ」以外でも入力できてしまうので、手順化(≒プログラム化)しづらいこともある



  2. 簡単にグラフが描ける


    • グラフを見ながら仮説検証できる

    • 高速なPDCAが可能!





Rによるプログラミングの基礎


ここから実際にプログラムを実行しながら学んでいきましょう



簡単な計算

四則演算(+-÷×)ができます

> 123 + 456

[1] 579
>
> # 円周率のπ
> pi
[1] 3.141593
>
> 2 * pi
[1] 6.283185



変数の代入

何度も使う変数には、名前を付けましょう

> # C言語のようにこう書けますが、

> x = 12345
>
> # デジタルマーケティングUではこう書くよう決めています
> #(コーディング規約)
> x <- 12345
> x
[1] 12345
>
> x + 1
[1] 12346
>
> # 大文字と小文字は区別されるので大文字のXに代入しても
> X <- 10
> # 小文字のxの値は元のままです
> x
[1] 12346



関数

関数とは「何らかのインプットに対して処理を加えアウトプットを返すもの」です

> # 値を丸める

> floor(1.9)
[1] 1
>
> # 平方根√2
> x <- sqrt(2)
> x
[1] 1.414214

出典: はじめての「R」


r-51-638.jpg

出典: はじめての「R」


関数は自分で定義することもできます

> # xとyを足し算する

> plus <- function(x, y) {
+ return (x + y)
+ }
>
> plus(1, 2)
[1] 3
> plus(3, 4)
[1] 7



ベクトル

他のプログラミング言語での「配列」に似たものです

ベクトルはcという関数を使って定義します

> c(1, 2, 3, 4, 5)

[1] 1 2 3 4 5
> # 整数の順列はこうも書けます
> 1:5
[1] 1 2 3 4 5


ベクトルに対する四則演算は、全体に作用します

> x <- c(3.14, 2.718, 0.577)

> x + 10
[1] 13.140 12.718 10.577

関数も多くの場合はベクトル全体に作用します

これにより、他の多くのプログラミング言語よりも計算をシンプルに書けます

> # √2 平方根

> sqrt(2)
[1] 1.414214
> sqrt(1:5)
[1] 1.000000 1.414214 1.732051 2.000000 2.236068


そのため、Rでは繰り返し文(for)はあまり使いません

> # こんな風にはふつうは書きません

> x <- c(3.14, 2.718, 0.577)
> result <- c()
> for(i in x) {
+ result <- c(result, i + 10)
+ }
> result
[1] 13.140 12.718 10.577
>
> # こう書きます
> result <- x + 10
[1] 13.140 12.718 10.577



リスト

Rには、ベクトルの他に「複数の値を持つ」ための仕組みがもう一つあります

リストでは他の種類の型(整数、文字列)が混ぜられます

> list(1, "a", 3.14)

[[1]]
[1] 1

[[2]]
[1] "a"

[[3]]
[1] 3.14
>
> # ベクトルでは他のデータ型は混ぜられません
> # (文字列と数値を混ぜると、全部文字列型に変換されます)
> c(1, "a", 3.14)
[1] "1" "a" "3.14"


リストは次のように使います

> # リストを代入する

> x <- list(1, 2, 3)
>
> # 1番目の要素を取り出す(※[[0]]でないことに注意!)
> x[[1]]
[1] 1

リストに対する四則演算は、ベクトルと違い全体に作用しません(エラーが出ます)

> x <- list(1, 2, 3)

> # 間違ったプログラム!
> x + 1
Error in x + 1 : non-numeric argument to binary operator
>
> # リスト全体に足し算したいときは、汎関数(高階関数)のlapplyを使う必要があります
> # 最初に覚える必要はないですし、この場合はベクトルを使ったほうが自然です
> plus10 <- function(x) { x + 10 }
> lapply(list(1, 2, 3), plus10)
[[1]]
[1] 11

[[2]]
[1] 12

[[3]]
[1] 13


リストには名前も付けられ、これを「名前付きリスト」と呼ぶこともあります

(むしろ、名前付きリストのほうがよく使われます)

PHPやRubyの「連想配列」や「ハッシュテーブル」のような使い方ができます

> ninomiya <- list(名字 = "二宮", 名前 = "健", ユニット = "デジタルマーケティングU")

> ninomiya
$名字
[1] "二宮"

$名前
[1] "健"

$ユニット
[1] "デジタルマーケティングU"

> # 名字を取り出す
> ninomiya$名字
[1] "二宮"



データフレーム

先ほども出ましたが「表形式のデータ」を表現するためのデータ構造です

データフレームの実体は「同じ長さのベクトル」が入った「リスト」です

> 身長 <- c(168.5, 172.8, 159.0)

> 体重 <- c(69.5, 75.0, 56.5)
> X <- data.frame(身長, 体重)
> X
身長 体重
1 168.5 69.5
2 172.8 75.0
3 159.0 56.5
>
> # リストと同様、$で値を取り出します
> X$身長
[1] 168.5 172.8 159.0
> # 取り出した値はベクトルなので、演算を要素全体に適用できます
> X$身長 / 100
[1] 1.685 1.728 1.590


後から行を追加することもできます

> # 行を追加する

> X$性別 <- c("M", "M", "F")
> X
身長 体重 性別
1 168.5 69.5 M
2 172.8 75.0 M
3 159.0 56.5 F
>
> X$BMI <- round(X$体重 / (X$身長 / 100) ^ 2)
> X
身長 体重 性別 BMI
1 168.5 69.5 M 24
2 172.8 75.0 M 25
3 159.0 56.5 F 22



ファイルを読み込む

大きなデータは画面からタイプするのは大変です

Rでは、csvやExcelファイルを読み込むこともできます

> # 参考(今回のハンズオン用のサーバーにはcsvを置いていないのでエラーが出ます)

> X <- read.csv("D:/work/X.csv", stringsAsFactors = FALSE)

より詳しくは、『Rで楽しむ統計』のP.7~を読んでください



図を描く

Rには「グラフを簡単に描ける」という特徴的な機能があります

ヒストグラム(度数分布表)を描いてみましょう

> # 正規分布の乱数を100万個作る

> x <- rnorm(1000000)
> # ヒストグラムを描く
> hist(x)


zu.png



パッケージのインストール

Rは外部パッケージをインストールすることで機能を拡張することができます

「世界中の統計学者が作成した統計モデルを簡単に使える」ことが、Rを使う最大のメリットです

> # install.packageでインストールできます

> # ハンズオンでは元々インストールされています
> install.packages("readxl")
>
> # インストール後はlibrary関数でインポートできる
> library(readxl)



まとめ


ここまでできれば、『Rで楽しむ統計』でRを使いながらデータ分析を試せるようになっているはずです



今回覚えて帰ってほしいこと


  1. 他のデータ分析ツールと比較したRの特徴


    • データ分析で試行錯誤するためのツール

    • 世界中の統計学者が作ったモデルを利用できる



  2. Rによるプログラミングの基礎


    • 変数や関数

    • リストとベクトルの使い方

    • 表形式のデータをデータフレームで表現する





参考資料


参加していただきありがとうございますm(_ _)m