r入門(dplyrでデータ加工)-tokyor42

39
R入門(dplyrでデータ加工) 42R勉強会@東京(#TokyoR@gepuro

Upload: atsushi-hayakawa

Post on 15-Jun-2015

7.150 views

Category:

Technology


4 download

DESCRIPTION

R入門(dplyrでデータ加工)-TokyoR42

TRANSCRIPT

Page 1: R入門(dplyrでデータ加工)-TokyoR42

R入門(dplyrでデータ加工)第42回R勉強会@東京(#TokyoR)

@gepuro

Page 2: R入門(dplyrでデータ加工)-TokyoR42

自己紹介

早川 敦士 @gepuro電気通信大学大学院 修士2年専門:信頼性工学

言語:R言語、Python特技:花火打ち揚げ

Page 3: R入門(dplyrでデータ加工)-TokyoR42

ハッカーズバーでバイトしてます

http://hackersbar.net/

Page 4: R入門(dplyrでデータ加工)-TokyoR42

告知

2014年12月6日にJapan.Rを開催します。

Page 5: R入門(dplyrでデータ加工)-TokyoR42

分析ツール

● R○ 無料,非エンジニアでも扱いやすい言語

● Python○ Numpy, Scipy, Scikit-learnなどの科学計算ライブラリ

が充実。エンジニアに親しまれやすい

● Julia○ 2012年登場,玄人向け, 開発段階

● Excel○ ほとんどの人が使える。ピボットテーブル便利

● などJapan.Rでパネルディスカッションを予定してます。

Page 6: R入門(dplyrでデータ加工)-TokyoR42

R言語(あーるげんご)はオープンソース・フリーソフトウェアの統計解析向けのプログラミング言語及びその開発実行環境である。

wikipediaより

Page 7: R入門(dplyrでデータ加工)-TokyoR42

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/

Page 8: R入門(dplyrでデータ加工)-TokyoR42

分析作業の流れ

データベース

データ加工

モデリング・可視化

Page 9: R入門(dplyrでデータ加工)-TokyoR42

分析作業の流れ

データ取得

データ加工

モデリング・可視化

SQL クローリング

Page 10: R入門(dplyrでデータ加工)-TokyoR42

分析作業の流れ

データベース

データ加工

モデリング・可視化

マージ

型変換

縦横変換

集計

データフレーム

Page 11: R入門(dplyrでデータ加工)-TokyoR42

分析作業の流れ

データベース

データ加工

モデリング・可視化

重回帰分析 ヒストグラム

散布図決定木分析

Page 12: R入門(dplyrでデータ加工)-TokyoR42

分析作業の流れ

データベース

データ加工

モデリング・可視化

マージ

型変換

縦横変換

集計

今日はここを扱う

データフレーム

Page 13: R入門(dplyrでデータ加工)-TokyoR42

変数

> hako <- 1> hako[1] 1> hako * 2[1] 2

Page 14: R入門(dplyrでデータ加工)-TokyoR42

配列

> hakos <- c(1,2,3)> hakos[1] 1 2 3> hakos + hakos[1] 2 4 6> hakos * 10[1] 10 20 30

Page 15: R入門(dplyrでデータ加工)-TokyoR42

配列その2

> hakos[1] 1 2 3> hakos[1][1] 1> hakos[2][1] 2

Page 16: R入門(dplyrでデータ加工)-TokyoR42

for

for(i in 1:10){ print(i)}

Page 17: R入門(dplyrでデータ加工)-TokyoR42

if

a <- 2if(a %% 2 == 0){ print("偶数")}else{ print("奇数")}

Page 18: R入門(dplyrでデータ加工)-TokyoR42

データフレーム

> df <- data.frame(a=1:3, b=4:6)> df a b1 1 42 2 53 3 6

Page 19: R入門(dplyrでデータ加工)-TokyoR42

データフレームその2

> df$c <- df$a + df$b> df a b c1 1 4 52 2 5 73 3 6 9

Page 20: R入門(dplyrでデータ加工)-TokyoR42

データフレームその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

行にアクセス

列にアクセス

Page 21: R入門(dplyrでデータ加工)-TokyoR42

データ読み込み

通常の方法

> train <- read.csv("data/train.csv")

高速読み込み

> library(data.table)> train <- fread("data/train.csv")

Page 22: R入門(dplyrでデータ加工)-TokyoR42

データの集計

データ処理のパッケージを読み込み

> library(dplyr)

サンプルデータの読み込み

> data(iris)

Page 23: R入門(dplyrでデータ加工)-TokyoR42

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

Page 24: R入門(dplyrでデータ加工)-TokyoR42

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

Page 25: R入門(dplyrでデータ加工)-TokyoR42

> 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

左から来たものを右へ受け流す

Page 26: R入門(dplyrでデータ加工)-TokyoR42

> 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という列ごとに処理する

Page 27: R入門(dplyrでデータ加工)-TokyoR42

集計する

> 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

Page 28: R入門(dplyrでデータ加工)-TokyoR42

> 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

Page 29: R入門(dplyrでデータ加工)-TokyoR42

> 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

列を追加する

Page 30: R入門(dplyrでデータ加工)-TokyoR42

> 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

列を選択する

Page 31: R入門(dplyrでデータ加工)-TokyoR42

> 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行を表示

Page 32: R入門(dplyrでデータ加工)-TokyoR42

> 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

Page 33: R入門(dplyrでデータ加工)-TokyoR42

> 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

データを条件で抽出する

Page 34: R入門(dplyrでデータ加工)-TokyoR42

> 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

Page 35: R入門(dplyrでデータ加工)-TokyoR42

> 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()で降順にする

Page 36: R入門(dplyrでデータ加工)-TokyoR42

縦に結合

> iris1 <- iris[1:50,]> iris2 <- iris[51:100,]> rbind_list(iris1, iris2) %>%+ dim(.)[1] 100 5

Page 37: R入門(dplyrでデータ加工)-TokyoR42

マージ

● 内部結合○ inner_join(df1, df2, by=c(“列名”))

● 左結合○ left_join(df1, df2, by=c(“列名”))

Page 39: R入門(dplyrでデータ加工)-TokyoR42

告知

2014年12月6日にJapan.Rを開催します。

LTを募集してます。

6人ぐらい?