r入門(dplyrでデータ加工)-tokyor42
DESCRIPTION
R入門(dplyrでデータ加工)-TokyoR42TRANSCRIPT
R入門(dplyrでデータ加工)第42回R勉強会@東京(#TokyoR)
@gepuro
自己紹介
早川 敦士 @gepuro電気通信大学大学院 修士2年専門:信頼性工学
言語:R言語、Python特技:花火打ち揚げ
ハッカーズバーでバイトしてます
http://hackersbar.net/
告知
2014年12月6日にJapan.Rを開催します。
分析ツール
● R○ 無料,非エンジニアでも扱いやすい言語
● Python○ Numpy, Scipy, Scikit-learnなどの科学計算ライブラリ
が充実。エンジニアに親しまれやすい
● Julia○ 2012年登場,玄人向け, 開発段階
● Excel○ ほとんどの人が使える。ピボットテーブル便利
● などJapan.Rでパネルディスカッションを予定してます。
R言語(あーるげんご)はオープンソース・フリーソフトウェアの統計解析向けのプログラミング言語及びその開発実行環境である。
wikipediaより
R言語の使い方に困ったら
● Rjpwiki○ http://www.okada.jp.org/RWiki/
● RPubs○ https://rpubs.com/
● seekR○ http://seekr.jp/
● R-tips○ http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
● JIN’S Page○ http://www1.doshisha.ac.jp/~mjin/R/
分析作業の流れ
データベース
データ加工
モデリング・可視化
分析作業の流れ
データ取得
データ加工
モデリング・可視化
SQL クローリング
分析作業の流れ
データベース
データ加工
モデリング・可視化
マージ
型変換
縦横変換
集計
データフレーム
分析作業の流れ
データベース
データ加工
モデリング・可視化
重回帰分析 ヒストグラム
散布図決定木分析
分析作業の流れ
データベース
データ加工
モデリング・可視化
マージ
型変換
縦横変換
集計
今日はここを扱う
データフレーム
変数
> hako <- 1> hako[1] 1> hako * 2[1] 2
配列
> hakos <- c(1,2,3)> hakos[1] 1 2 3> hakos + hakos[1] 2 4 6> hakos * 10[1] 10 20 30
配列その2
> hakos[1] 1 2 3> hakos[1][1] 1> hakos[2][1] 2
for
for(i in 1:10){ print(i)}
if
a <- 2if(a %% 2 == 0){ print("偶数")}else{ print("奇数")}
データフレーム
> df <- data.frame(a=1:3, b=4:6)> df a b1 1 42 2 53 3 6
データフレームその2
> df$c <- df$a + df$b> df a b c1 1 4 52 2 5 73 3 6 9
データフレームその3
> df a b c1 1 4 52 2 5 73 3 6 9
> df[1,] a b c1 1 4 5> df[,1][1] 1 2 3
行にアクセス
列にアクセス
データ読み込み
通常の方法
> train <- read.csv("data/train.csv")
高速読み込み
> library(data.table)> train <- fread("data/train.csv")
データの集計
データ処理のパッケージを読み込み
> library(dplyr)
サンプルデータの読み込み
> data(iris)
dplyrで集計
> iris %>% + group_by(Species) %>% + summarise(SLM= mean(Sepal.Length))Source: local data frame [3 x 2]
Species SLM1 setosa 5.0062 versicolor 5.9363 virginica 6.588
irisというデータセットを利用する
> iris %>% + group_by(Species) %>% + summarise(SLM= mean(Sepal.Length))Source: local data frame [3 x 2]
Species SLM1 setosa 5.0062 versicolor 5.9363 virginica 6.588
> iris %>% + group_by(Species) %>% + summarise(SLM= mean(Sepal.Length))Source: local data frame [3 x 2]
Species SLM1 setosa 5.0062 versicolor 5.9363 virginica 6.588
左から来たものを右へ受け流す
> iris %>% + group_by(Species) %>% + summarise(SLM= mean(Sepal.Length))Source: local data frame [3 x 2]
Species SLM1 setosa 5.0062 versicolor 5.9363 virginica 6.588
Speciesという列ごとに処理する
集計する
> iris %>% + group_by(Species) %>% + summarise(SLM= mean(Sepal.Length))Source: local data frame [3 x 2]
Species SLM1 setosa 5.0062 versicolor 5.9363 virginica 6.588
> iris %>%+ mutate(Sepal.LW = Sepal.Length + Sepal.Width) %>%+ select(Sepal.Length, Sepal.Width, Sepal.LW) %>%+ head(., n=3) Sepal.Length Sepal.Width Sepal.LW1 5.1 3.5 8.62 4.9 3.0 7.93 4.7 3.2 7.9
dplyrで集計 パターン2
> iris %>%+ mutate(Sepal.LW = Sepal.Length + Sepal.Width) %>%+ select(Sepal.Length, Sepal.Width, Sepal.LW) %>%+ head(., n=3) Sepal.Length Sepal.Width Sepal.LW1 5.1 3.5 8.62 4.9 3.0 7.93 4.7 3.2 7.9
列を追加する
> iris %>%+ mutate(Sepal.LW = Sepal.Length + Sepal.Width) %>%+ select(Sepal.Length, Sepal.Width, Sepal.LW) %>%+ head(., n=3) Sepal.Length Sepal.Width Sepal.LW1 5.1 3.5 8.62 4.9 3.0 7.93 4.7 3.2 7.9
列を選択する
> iris %>%+ mutate(Sepal.LW = Sepal.Length + Sepal.Width) %>%+ select(Sepal.Length, Sepal.Width, Sepal.LW) %>%+ head(., n=3) Sepal.Length Sepal.Width Sepal.LW1 5.1 3.5 8.62 4.9 3.0 7.93 4.7 3.2 7.9
先頭の3行を表示
> iris %>%+ filter(Species=="setosa") %>%+ head(., n=3) Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa
dplyrで集計 パターン3
> iris %>%+ filter(Species=="setosa") %>%+ head(., n=3)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa
データを条件で抽出する
> iris %>%+ arrange(Sepal.Length) %>%+ head(., n=3) Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 4.3 3.0 1.1 0.1 setosa2 4.4 2.9 1.4 0.2 setosa3 4.4 3.0 1.3 0.2 setosa
dplyrで集計 パターン4
> iris %>%+ arrange(Sepal.Length) %>%+ head(., n=3) Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 4.3 3.0 1.1 0.1 setosa2 4.4 2.9 1.4 0.2 setosa3 4.4 3.0 1.3 0.2 setosa
並び替え
desc()で降順にする
縦に結合
> iris1 <- iris[1:50,]> iris2 <- iris[51:100,]> rbind_list(iris1, iris2) %>%+ dim(.)[1] 100 5
マージ
● 内部結合○ inner_join(df1, df2, by=c(“列名”))
● 左結合○ left_join(df1, df2, by=c(“列名”))
縦横の変換
reshape2 — 柔軟なデータ変形ツール
http://meme.biology.tohoku.ac.jp/students/iwasaki/rstats/reshape2.htmlを参考
告知
2014年12月6日にJapan.Rを開催します。
LTを募集してます。
6人ぐらい?