Más contenido relacionado
La actualidad más candente (20)
Similar a 2016年6月版データマエショリスト入門 (20)
2016年6月版データマエショリスト入門
- 2. 自己紹介
• 松村優哉 @y__mattu
• ブログ:http://y-mattu.hatenablog.com/
• 大学4年生
• 勉強している分野:統計学、マーケティング
• 言語:SAS, R
• R歴:1年半くらい
22016/6/19 Tokyo.R #54
- 9. データの読み込み(CSV)
• パッケージを使わない場合
• 高速な読み込み1
• 高速な読み込み2
2016/6/19 Tokyo.R #54 9
dat <- read.csv(“sample.csv”, stringAsFactors = FALSE)
library(readr)
dat <- read_csv(“sample.csv”)
library(data.table)
dat <- fread(“sample.csv”, data.table = FALSE)
data.tableではなくdata.frameとして扱いたい場合は追加
おまじない
- 11. データの読み込み速度比較
2016/6/19 Tokyo.R #54 11
> system.time(csv1 <- read.csv(“log.csv"))
# ユーザ システム 経過
# 59.801 1.337 63.681
実行時間を計測
> system.time(csv2 <- readr::read_csv(“log.csv"))
# ユーザ システム 経過
# 5.005 0.527 7.732
> system.time(csv3 <- data.table::fread(“log.csv"))
# ユーザ システム 経過
# 3.502 0.425 6.965
- 12. データの読み込み(TSV)
• パッケージを使わない場合
• {readr}
• {data.table}
2016/6/19 Tokyo.R #54 12
dat <- read.delim(“sample.tsv”, strringAsFactors=FALSE,
sep = “¥t”)
dat <- readr::read_tsv(“sample.tsv”)
dat <- data.table::fread(“sample.tsv”, data.table = FALSE)
- 13. データの読み込み(その他の区切り値)
• パッケージを使わない場合
• {readr}
• {data.table}
2016/6/19 Tokyo.R #54 13
dat <- read.table(“sample.tsv”, strringAsFactors=FALSE,
sep = “|”)
dat <- readr::read_delim(“sample”, “|”)
dat <- data.table::fread(“sample”)
- 16. エンコーディング(例:CSVをCP932で)
• パッケージを使わない場合
• {readr}
• {data.table}
2016/6/19 Tokyo.R #54 16
dat <- read.csv(“sample.csv”, strringAsFactors = FALSE,
fileEncoding = “cp932”)
dat <- readr::read_csv(“sample.csv”,
locale=locale(encoding=“cp932"))
dat <- data.table::fread(“sample.csv”, data.table = FALSE) %>%
dplyr::mutate(VAR1 = iconv(VAR1, from = “UTF8", to =
“CP932"))
- 18. データの構造を確認
• Rの標準関数
• {dplyr}
2016/6/19 Tokyo.R #54 18
> str(d)
#'data.frame': 150 obs. of 5 variables:
# $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
# $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
# $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
# $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
> dplyr::glimpse(d)
# Observations: 150
# Variables: 5
# $ Sepal.Length (dbl) 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...
# $ Sepal.Width (dbl) 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3.0, 3.0...
# $ Petal.Length (dbl) 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4, 1.1...
# $ Petal.Width (dbl) 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1...
# $ Species (fctr) setosa, setosa, setosa, setosa, setosa, setosa, setosa, setosa, set...
- 21. データの構造を確認
• summary関数で要約統計量
2016/6/19 Tokyo.R #54 21
> summary(iris)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
# 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
# Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
# Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
# 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
# Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
- 23. 集計してみる
• {dplyr}
2016/6/19 Tokyo.R #54 23
> group_by(d, Species) %>%
+ summarise(number = n())
#Source: local data frame [3 x 2]
# Species number
# (chr) (int)
#1 setosa 50
#2 versicolor 50
#3 virginica 50
数えたい変数でグルーピング
summarise関数
の中でカウント
- 26. ダミー変数も作れる
2016/6/19 Tokyo.R #54 26
species_dummy <- d %>%
mutate(category = factor(Species,
levels=c(“setosa”, “virginica”, “versicolor”),
labels=LETTERS[1:3]))
- 29. 特定の行を取り出したい
setosaのみ, 長さx以上, etc…
• Rの標準関数
2016/6/19 Tokyo.R #54 29
iris_setosa <- subset(d, Species == “setosa”) #条件を指定
iris5 <- iris5 <- subset(d, Sepal.Length > 5.0) #条件を指定
- 30. 特定の行を取り出したい
setosaのみ, 長さx以上, etc…
• {dplyr}
• 複数条件も可能
(参考文献「dplyrを使いこなす!基礎編」を参照)
2016/6/19 Tokyo.R #54 30
iris_setosa <- filter(d, Species == “setosa”) #条件を指定
iris5 <- filter(d, Sepal.Length > 5.0) #条件を指定
- 39. なぜ{dplyr}なのか
• 速い
• 依存パッケージ{magrittr}により%>%が使える
• %>%を使わないと
2016/6/19 Tokyo.R #54 39
d <- iris
sepal_length <- select(d, contains(“Sepal”), Speceis)
sepal_group <- group_by(sepal_length, Speceis)
sepal_mean <- summarise(d_length,
s.w.mean = mean(Sepal.Width),
s.l.mean = mean(Sepal.Length))
sepal_mean