tokyo r50 beginner_2

36
<#> 続続続続続 Tokyo.R #50 続続 続続

Upload: takashi-minoda

Post on 07-Jan-2017

3.109 views

Category:

Data & Analytics


3 download

TRANSCRIPT

Page 1: Tokyo r50 beginner_2

<#>

続はじめてのTokyo.R #50 簑田 高志

Page 2: Tokyo r50 beginner_2

目次1.自己紹介2.変更点3.前回のおさらい4.今回の内容1) 条件分岐2) ループ3) グラフ作成4) データベースとの接続5) 統計解析5. まとめ

※ スクリーンショットや機能等は Mac 版となります。

Page 3: Tokyo r50 beginner_2

• 名前 : 簑田 高志• Twitter :aad34210• ブログ :http://

pracmper.blogspot.com/• 出身地 : 熊本県• 出身学部 : 法学部• 仕事 :E-commerce のアナリストインターネット広告のビジネスアナリスト

自己紹介

Page 4: Tokyo r50 beginner_2

本を共同翻訳しました

Page 5: Tokyo r50 beginner_2

書籍の内容・翻訳者より・目次・はじめに・まえがき・謝辞1 章 R を手に入れる1.1 R のダウンロード1.2 R のバージョン1.3 32bit と 64bit1.4 インストール1.5 Revolution R Community Edition1.6 まとめ2 章 R の環境2.1 コマンドラインインターフェイス (CLI)2.2 RStudio2.3 Revolution Analytics RPE   (R Productivity Environment)2.4 まとめ3 章 R パッケージ3.1 インストールパッケージ3.2 ロードパッケージ3.3 パッケージの作成3.4 まとめ4 章 R の基本4.1 基本的な数学4.2 変数4.3 データ型4.4 ベクトル4.5 関数 (Function) の呼び出し4.6 関数ドキュメント4.7 欠損値4.8 まとめ5 章 高度なデータ構造5.1 データフレーム (data.frame)5.2 リスト (List)5.3 マトリックス (Matrix)5.4 アレイ (Array)5.5 まとめ

6 章 R へのデータ取り込み6.1 CSV の読み込み6.2 Excel の読み込み6.3 データベースからの読み込み6.4 他社統計ツールからの読み込み6.5 R バイナリファイル6.6 R に入っているデータ6.7 Web サイトからの抽出6.8 まとめ7 章 統計的なグラフィクス7.1 基本グラフィクス7.2 ggplot27.3 まとめ8 章 R の関数を書く8.1 ハロー、ワールド!8.2 関数の引数8.3 値の返却8.4 do.call8.5 まとめ9 章 制御文9.1 if と else9.2 Switch9.3 ifelse9.4 複合テスト9.5 まとめ10 章 ループ: R の方法ではない反復方法10.1 for ループ10.2 while ループ10.3 ループの制御10.4 まとめ11 章 グループピング操作11.1 Apply ファミリー11.2 aggregate11.3 plyr11.4 data.table11.5 まとめ12 章 データ整形12.1 cbind と rbind12.2 Join12.3 reshape212.4 まとめ

13 章 文字列操作13.1 paste13.2 sprintf13.3 テキストの抽出13.4 正規表現13.5 まとめ14 章 確率分布14.1 正規分布14.2 二項分布14.3 ポアソン分布14.4 その他の分布14.5 まとめ15 章 基本統計15.1 要約統計15.2 相関と共分散15.3 t 検定15.4 分散分析15.5 まとめ16 章 線形モデル16.1 単回帰16.2 重回帰16.3 まとめ17 章 一般化線形モデル17.1 ロジスティック回帰17.2 ポアソン回帰17.3 その他の一般化線形モデル17.4 生存時間分析17.5 まとめ18 章 モデル評価18.1 残差18.2 モデル比較18.3 クロスバリデーション18.4 ブートストラップ18.5 ステップワイズ変数選択法18.6 まとめ19 章 正則化と縮小19.1 Elastic Net19.2 Bayesian shrinkage19.3 まとめ

20 章 非線形モデル20.1 非線形最小二乗法20.2 スプライン20.3 一般化加法モデル20.4 決定木20.5 ランダムフォレスト20.6 まとめ21 章 時系列と自己相関21.1 自己回帰移動平均21.2 VAR21.3 GARCH21.4 まとめ22 章 クラスタリング22.1 K-means22.2 PAM22.3 階層型クラスタリング22.4 まとめ23 章 knitr パッケージによる再現性・レポートとスライドショー23.1 Latex プログラムのインストール23.2 Latex 入門23.3 Latex を使った knitr23.4 マークダウンのヒント23.5 knitr とマークダウンの利用23.6 Pandoc23.7 まとめ24 章 R パッケージの構築24.1 フォルダ構成24.2 パッケージファイル24.3 パッケージドキュメンテーション24.4 チェック、構築とインストール24.5 CRAN への登録24.6 C++ コード24.7 まとめ付録 A 情報リソースA.1 MeetupA.2 Stack OverflowA.3 TwitterA.4 カンファレンスA.5 Web サイトA.6 ドキュメントA.7 書籍A.8 まとめ付録 B 用語集 / 索引

1 章〜 24 章+ α全 448 ページ

Page 6: Tokyo r50 beginner_2

書籍の内容 特徴

• R をはじめたばかりの人から、 R を使って解析に挑戦してみたい人、データ分析ってどういう事ができるのだろうか?ということを知りたい人に最適。• R でできることを「俯瞰」して見ることができる。• もともとはコロンビア大学の統計学の教授の

Jared.P. Landarさんが自分が大学院時代に教えてもらいたかった内容がベース。• ゼミ生も実験台に…

Page 7: Tokyo r50 beginner_2

変更点

Page 8: Tokyo r50 beginner_2

はじめての R はいつが「はじめて?」「はじめての R」を最初に作成   もう⇛ 5年前!

Page 9: Tokyo r50 beginner_2

いろいろ変わりましたこの 5年の間に Rも大きな進歩■パッケージの進化 ■外部環境の変化

■開発環境の進化

• apply , aggregate  ⇛  dplyr• plot    ⇛ ggplot2• ---    ⇛ shiny , googlevis , rCharts…

Page 10: Tokyo r50 beginner_2

内容改定しました「はじめての R」も改定。

変更点 これまで これから環境 R コンソール RStudio

データ可視化 plot , Lattice ggplot2

データベースの操作 MySQL,PostgreSQL Bigquery(Google)

Page 11: Tokyo r50 beginner_2

はじめての

Page 12: Tokyo r50 beginner_2

条件分岐

Page 13: Tokyo r50 beginner_2

条件分岐とは

値: A

条件

値: Z 値: K

A >= 0 → KA < 0 → Z

• ある条件で場合分けをしたい場合に利用する。

Page 14: Tokyo r50 beginner_2

条件分岐とは• 条件分岐とは?

• ある条件で場合分けをしたい場合は If 文、 Else 文を使う。• if (条件文 ){処理内容}

• 例えば…• 売上金額が 10万以上であれば、 A-Class 、それ以外は Other 。

x <- 100000if (x >= 100000)

{print ("A-Class")} else {print("Other")}

Page 15: Tokyo r50 beginner_2

条件分岐とは• 条件分岐ができる関数を作ってみよう

check.amount <- function(x){

if (x >= 100000) { print("A-Class") }

else { print("Other") }

}

# A−Classcheck.amount(100000)# Othercheck.amount(5000)

Page 16: Tokyo r50 beginner_2

条件分岐とは• IFELSE 文

• IFELSE 文で一つのコードで IF 文ができる。• ifelse(条件,データが真の場合,偽の場合 )

• 例えば…• 売上金額が 10万以上であれば、 A クラス、それ以外は Other 。

x <- 100000ifelse(x >= 100000 , "A-Class" ,  "B-Class")

Page 17: Tokyo r50 beginner_2

条件分岐とは• SWITCH 文

• 複数の条件で分岐させたい場合• switch( データ,ケース 1 , ケース 2 , 一致する場合がないケース )

• 例えば…• Tokyo から売上が上がっている場合は、 Japan を。それ以外は Other

city <- "Tokyo”switch(city ,"Tokyo" = print("Japan") , print("Other"))

Page 18: Tokyo r50 beginner_2

ループ

Page 19: Tokyo r50 beginner_2

ループ• For 文は他のプログラミング言語と同じように、「繰り返し」処理ができる。• 幾つもの同じような処理をコピペして処理をさせなくても、ループ処理を利用することにより、大幅に作業時間を減らすことができる。

処理 A

処理 A 処理 A

処理 A 処理 A

4 回同じ処理を繰り返す

繰り返し文を利用して処理を 4 回行う。

Page 20: Tokyo r50 beginner_2

FOR 文• For 文

• ある処理を繰り返し行いたい場合に利用する。• for ( ループ変数 in リスト ) {処理}

• 例えば…• 1〜 5 までを合計する。

• ベクトルを表示させる。

x <- 0for (i in 1:5) {x <- x +1}x

x <- c(10000 , 20000 , 30000)for (i in 1:length(x)){print(x[i])}

Page 21: Tokyo r50 beginner_2

WHILE 文• While 文

• ある条件が成り立っている場合にずっとループ処理をし続ける。• 注意:ずっと条件が成り立っている場合は、無限ループしてしまうので、気をつけること。

• while (条件式 ) {処理}• 例えば…

• 5以下を足し続ける。x <- 0 while (x <= 4) {x <- x +1}x

Page 22: Tokyo r50 beginner_2

ループの制御• ループを回している間にループ自体を制御したい場合があります。• その際は” next” と” break” を使います。

for(i in 1:10) { if (i == 3) {next} print(i) }

# [1] 1# [1] 2# [1] 4 ← 3 をスキップ# [1] 5# [1] 6# [1] 7# [1] 8# [1] 9# [1] 10

for(i in 1:10) { if (i == 3) {break} print(i) }

# [1] 1# [1] 2 ← 3 の手前で処理終了

Page 23: Tokyo r50 beginner_2

グラフ作成

Page 24: Tokyo r50 beginner_2

グラフは ggplot2• Hadley Wickhamさんが作ったグラフパッケージ• grammar of graphics 理論に基づいたチャートを作成可能• Excel では書けないようなチャートを構文を追加していくことで作成可能

• 過去に発表しています。• http://www.slideshare.net/aad34210/ggplot2-110129-6739813

Page 25: Tokyo r50 beginner_2

散布図ggplot(iris , aes(x = Sepal.Length , y = Sepal.Width)) + geom_jitter()

ggplot(iris , aes(x = Sepal.Length , y = Sepal.Width , colour = Species)) + geom_jitter()

Page 26: Tokyo r50 beginner_2

散布図 (facet_wrap)

ggplot(iris , aes(x = Sepal.Length , y = Sepal.Width )) + geom_jitter() + facet_wrap(~Species)

Page 27: Tokyo r50 beginner_2

散布図(回帰直線)ggplot(iris , aes(x = Sepal.Length , y = Sepal.Width )) + geom_jitter() + facet_wrap(~Species) + stat_smooth(method = "lm")

Page 28: Tokyo r50 beginner_2

データベースからの抽出

Page 29: Tokyo r50 beginner_2

RODBC 、 JDBC経由

# パッケージインストールinstall.packages(“RODBC”)library(RODBC)

# コネクションの作成channel <- odbcConnect(“[DNS]”, uid=“[UserID]”, pwd=“[Password]”)

# SQLsqlQuery(channel, paste("select State, Murder from USArrests","where Rape > 30 order by Murder"))

# コネクション クローズclose(channel)

• 運用している DB(MySQL 、 PostgreSQL)などから ODBC経由で接続• SQL を投げて結果を取得。

Page 30: Tokyo r50 beginner_2

BigQuery を利用する# install packagesinstall.packages("devtools")install.packages("httpuv")

library(devtools)library(httpuv)

# devtoolsdevtools::install_github("hadley/devtools")# bigquerydevtools::install_github("hadley/bigrquery")library(bigrquery)( # ブラウザでの認証が入る)# Run queryprj <- “**********"sql <- "SELECT * FROM [publicdata:samples.wikipedia] LIMIT 1000"results <- query_exec(sql , project = prj)

• Google が提供している BigQuery を利用する。• Google の BigQuery は別途利用できるように設定

Page 31: Tokyo r50 beginner_2

統計解析

Page 32: Tokyo r50 beginner_2

単回帰を実行install.packages("UsingR")library(UsingR)data(father.son)

lm_father_son <- lm(sheight ~ fheight , data = father.son)summary(lm_father_son)

#Call:#lm(formula = sheight ~ fheight, data = father.son)

#Residuals:# Min 1Q Median 3Q Max #-8.8772 -1.5144 -0.0079 1.6285 8.9685

#Coefficients:# Estimate Std. Error t value Pr(>|t|) sheight = 0.51*fheight + 33.8 ⇛#(Intercept) 33.88660 1.83235 18.49 <2e-16 ***#fheight 0.51409 0.02705 19.01 <2e-16 ***---#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

#Residual standard error: 2.437 on 1076 degrees of freedom#Multiple R-squared: 0.2513, Adjusted R-squared: 0.2506 #F-statistic: 361.2 on 1 and 1076 DF, p-value: < 2.2e-16

• 2つの変数間の関係、回帰式を算出する。• UsingR パッケージ中の father.son(父親と子供の身長)データを利用

Page 33: Tokyo r50 beginner_2

単回帰を実行• 先ほどの ggplot2 の +geom_smooth(method = “lm”) を利用してみる

Page 34: Tokyo r50 beginner_2

まとめ

Page 35: Tokyo r50 beginner_2

まとめ1) 条件分岐

IF文、Which文、 functionとの組み合わせ2) ループ For文3) グラフ作成 ggplot24) データベースからの抽出 RODBC、 BigQuery5) 統計解析 単回帰

Page 36: Tokyo r50 beginner_2

ご静聴ありがとうございました