Weitere ähnliche Inhalte Ähnlich wie 20170923 excelユーザーのためのr入門 (20) Mehr von Takashi Kitano (13) 20170923 excelユーザーのためのr入門6. > sheet1 <- data.frame(
+ name = c("Access",
+ "Excel",
+ "Powerpoint",
+ "Word"),
+ price = rep(15984, 4),
+ stringsAsFactors = FALSE
+ )
data.frame() にc() で値を列挙
data.frameの作成
10. d <- read.table(
file = "ファイル名",
header = TRUE,
fileEncoding = "CP932"
)
エンコーディングはfileEncodingで指定
テキストファイルの取り込み
11. d <- read.table(
file = "ファイル名",
header = TRUE,
fileEncoding = "CP932",
sep = ","
)
区切り文字はsepで指定
テキストファイルの取り込み
12. d <- read.table(
file = "ファイル名",
header = TRUE,
fileEncoding = "CP932",
sep = ",",
quote = "¥""
)
文字列の引用符はquoteで指定
テキストファイルの取り込み
13. d <- read.table(
file = "ファイル名",
header = TRUE,
fileEncoding = "CP932",
sep = ",",
quote = "¥""
)
データ形式は自動で判別される
テキストファイルの取り込み
14. d <- read.table(
file = "ファイル名",
header = TRUE,
fileEncoding = "CP932",
sep = ",",
quote = "¥"",
stringsAsFactors = FALSE
)
文字列はFactor型となるのでstringsAsFactor = FALSEを推奨
テキストファイルの取り込み
15. d <- read.table(
file = "ファイル名",
header = TRUE,
fileEncoding = "CP932",
sep = ",",
quote = "¥"" ,
colClasses = c("integer", "integer", ...)
)
明示的にデータ形式を指定する場合はcolClassesで指定
テキストファイルの取り込み
16. • 数値
• 日付
• 時刻
• 文字列
• TRUE(), FALSE()
⇒numeric, integer
⇒Date
⇒POSIXct, POSIXlt, POSIXt
⇒character
⇒logical
データ形式の対応は上記の通り
Excelのデータ形式とRのデータ型
20. > d[2:3, ]
room_id survey_id host_id ...
2 13785072 1435 1243056 ...
3 19165502 1435 35011953 ...
列番号を省略するとすべての列が返される
複数行の参照
21. > d[, 2:3]
survey_id host_id
1 1435 31751507
2 1435 1243056
3 1435 35011953
4 1435 109568126
…
行番号を省略するとすべての列が返される
複数列の参照
22. > d[, c("survey_id", "host_id")]
survey_id host_id
1 1435 31751507
2 1435 1243056
3 1435 35011953
4 1435 109568126
…
列名をベクトルで与えてもOK
複数列の参照
23. > d$price[2] + 10
[1] 262
> d$price[2] - 10
[1] 242
> d$price[2] * 10
[1] 2520
> d$price[2] / 10
[1] 25.2
四則演算は同じ
四則演算
26. > # デフォルトの底はe
> log(d$price[2])
[1] 5.529429 >
> log(d$price[2], 10)
[1] 2.401401
> log(d$price[2], 2)
[1] 7.97728
Excelのlog()の底のデフォルトは10, Rのlog()は自然数e
対数
32. > # sepで連結時の文字を指定
> paste(d$room_type[2], d$city[2],
+ sep="-")
[1] "Shared room-Seattle"
> # paste0()はpaste(..., sep="")と同じ
> paste0(d$room_type[2], d$city[2])
[1] "Shared roomSeattle"
文字列の連結はpaste(), paste0()
文字列の連結
34. > # 文字列の長さを取得
> n <- nchar(d$room_type[2])
> substr(d$room_type[2], n-4+1, n)
[1] "room"
Excelのright()は少し工夫が必要
文字列の一部取り出し
35. > # stringr::str_subは負数で
> # 末尾からの位置を指定できる
> library(stringr)
> str_sub(d$room_type[2], -4)
[1] "room"
Excelのright()はstringr::str_sub()が便利
文字列の一部取り出し
37. > d$room_type[1]
[1] "Shared room"
> tolower(d$room_type[1])
[1] "shared room"
> toupper(d$room_type[1])
[1] "SHARED ROOM"
Excelのlower(), upper()はRのtolower(), toupper ()
大文字, 小文字の変換
38. > d$subtotal <- d$reviews * d$price
> d$subtotal
[1] 7290 0 0 0 0 0 0 0 0 0 4470 0 …
[16] 0 0 0 0 100 0 0 765 252 567 …
[31] 525 0 0 79 138 219 1152 248 …
[46] 2625 2015 1950 0 0 0 144 0 48…
[61] 225 405 49 0 48 200 0 360 …
…
Rでは同じ長さのベクトルの演算は、各要素ごとの演算となる
ベクトル演算
39. > d[order(d$price),
+ c("room_id", "price")]
room_id price
110 18852442 10
4370 13726014 10
4371 4825073 10
135 13560642 14
6302 6015931 19
order () で並べ替えの順番を取得して行に指定
並べ替え
40. > d[order(d$price,
+ decreasing = TRUE),
+ c("room_id", "price")]
room_id price
194 5240694 10000
193 153967 9300
195 16816051 1395
197 16740073 1200
降順はdescreasing = TRUE
並べ替え
41. > subset(d,
+ room_type == "Private room")
room_id host_id room_type ...
15647498 60642090 Private room ...
15906510 103181101 Private room ...
5978216 31036041 Private room ... ...
subset() で条件に合致するレコードを取得
フィルター
42. > merge(
+ d[, c("room_id", "city", "country")],
+ m, by="city", all.x = TRUE)
city room_id country.x country.y
1 Seattle 6119821 NA USA
2 Seattle 13785072 NA USA
3 Seattle 19165502 NA USA
…
merge() で複数のdata.frameをJOINすることが可能
vlookup()
44. > write.table(d,
+ file = "file_name.txt",
+ quote = FALSE,
+ na = "",
+ sep = "¥t",
+ row.names = FALSE,
+ fileEncoding = "UTF8")
テキストファイルへの出力はwrite.table()
テキストファイルへの出力
45. > save(d, m,
+ file = "airbnb_seattle.RData")
data.frameなどのオブジェクトを保存する場合はsave()
名前を付けて保存
46. > load(file = "airbnb_seattle.RData")
保存したオブジェクトを読み込むにはload()
ファイルを開く
47. • quotient
• mod
• ln
• log10
• log(x, 底)
• sqrt
⇒%/%
⇒%%
⇒log(x)
⇒log(x, 10)
⇒log(x, 底)
⇒sqrt
データハンドリングまとめ
48. • if
• and
• or
• not
• 並べ替え
• フィルター
• vlookup
⇒ifelse
⇒&
⇒|
⇒not
⇒order
⇒subset
⇒merge
データハンドリングまとめ
49. • &, concatenate
• left
• mid
• right
• substitute
• lower
• upper
⇒paste, paste0, stringr::str_c
⇒substr, stringr::str_sub
⇒substr, stringr::str_sub
⇒substr, stringr::str_sub
⇒gsub, stringr::str_replace_all
⇒tolower
⇒toupper
データハンドリングまとめ
52. > sum(d$price)
[1] 913518
> mean(d$price)
[1] 142.7595
> var(d$price)
[1] 38718.49
> sd(d$price)
[1] 196.7701
average()はmean() , stdev()はsd()
合計, 平均, 分散, 標準偏差
53. > max(d$price)
[1] 10000
> min(d$price)
[1] 10
> median(d$price)
[1] 110
> # mode()はデータ型を返す
> mode(d$price)
[1] "numeric"
Rには最頻値を返す関数はない
最大値, 最小値, 中央値, 最頻値
54. > range(d$price)
[1] 10 10000
> range(d$price)[1]
[1] 10
> range(d$price)[2]
[1] 10000
範囲(最大値と最小値の差)
Rのrange()は最大値と最小値がベクトルで返る
55. > quantile(d$price)
0% 25% 50% 75% 100%
10 79 110 172 10000
> quantile(d$price)[2]
25%
79
> quantile(d$price)[4]
75%
172
四分位数
Rのquantile()は四分位数がベクトルで返る
57. • sum
• average
• median
• mode
• var
• stdev
⇒sum
⇒mean
⇒median
⇒なし
⇒var
⇒sd
まとめ
58. • max
• min
• quartile
• percentile
⇒max
⇒min
⇒quantile
⇒quantile
集約関数まとめ
67. > table(d$neighborhood, d$room_type)
Entire home/apt Private room …
Adams 73 39 …
Alki 56 17 …
Arbor Heights 10 5 …
Atlantic 64 31 …
Belltown 317 14 …
Bitter Lake 10 9 …
Briarcliff 26 9 …
Brighton 13 12 …
…
データの個数
データの個数のカウントはtable()
68. > tapply(d$reviews,
+ list(d$neighborhood, d$room_type), + sum)
Entire home/apt Private room …
Adams 2793 1468 …
Alki 1697 555 …
Arbor Heights 196 122 …
Atlantic 1983 1618 …
Belltown 11029 133 …
Bitter Lake 293 109 …
Briarcliff 337 125 …
Brighton 706 334 …
Broadview 523 379 …
合計, 平均, 最大, 最小
合計や平均, 最大, 最小はtapply()の引数に集約関数を指定
70. > library(dplyr)
> library(tidyr)
> d %>%
+ select(neighborhood, room_type, reviews) %>%
+ mutate(prop = reviews/sum(reviews)*100) %>%
+ group_by(neighborhood, room_type) %>%
+ summarise(prop = sum(prop)) %>%
+ ungroup() %>%
+ spread(key = room_type, value = prop)
総計に対する比率
詳しくはdplyr再入門を参照
71. # A tibble: 88 x 4
neighborhood `Entire home/apt` `Private room` …
* <fctr> <dbl> <dbl> <dbl>
1 Adams 1.34847410 0.70875760 …
2 Alki 0.81931992 0.26795672 …
3 Arbor Heights 0.09462976 0.05890220 …
4 Atlantic 0.95740212 0.78117833 …
5 Belltown 5.32485528 0.06421305 …
6 Bitter Lake 0.14146184 0.05262573 …
7 Briarcliff 0.16270525 0.06035061 …
8 Brighton 0.34086026 0.16125684 …
総計に対する比率
詳しくはdplyr再入門を参照
72. > d %>%
+ select(neighborhood, room_type, reviews) %>%
+ group_by(neighborhood, room_type) %>%
+ summarise(subtotal = sum(reviews)) %>%
+ ungroup() %>%
+ arrange(room_type, neighborhood) %>%
+ group_by(room_type) %>%
+ mutate(cumsum = cumsum(subtotal)) %>%
+ ungroup() %>%
+ select(neighborhood, room_type, cumsum) %>%
+ spread(key = room_type, value = cumsum)
累計
詳しくはdplyr再入門を参照
73. # A tibble: 88 x 4
neighborhood`Entire home/apt` `Private room` …
* <fctr> <int> <int> …
1 Adams 2793 1468 …
2 Alki 4490 2023 …
3 Arbor Heights 4686 2145 …
4 Atlantic 6669 3763 …
5 Belltown 17698 3896 …
6 Bitter Lake 17991 4005 …
7 Briarcliff 18328 4130 …
8 Brighton 19034 4464 …
累計
詳しくはdplyr再入門を参照
78. • データ → データ分析
Excelの分析ツール
データ分析がデータタブに
追加される
82. price accommodatesbedrooms …
Min. : 10.0 Min. : 1.000 Min. : 0.000
1st Qu.: 79.0 1st Qu.: 2.000 1st Qu.: 1.000
Median : 110.0 Median : 3.000 Median : 1.000
Mean : 142.8 Mean : 3.571 Mean : 1.385
3rd Qu.: 172.0 3rd Qu.: 4.000 3rd Qu.: 2.000
Max. :10000.0 Max. :16.000 Max. :10.000
基本統計量
Rのsummary() は標準偏差やデータの個数などは表示されない
83. > summary(d[, c("room_type", "country")])
room_type country
Entire home/apt: 4526 Mode:logical
Private room : 1727 NA's:6399
Shared room : 146
基本統計量
Rのsummary()は因子型の場合に水準毎のデータ数を返す
84. > summary(d[, c("room_type", "country")])
room_type country
Entire home/apt: 4526 Mode:logical
Private room : 1727 NA's:6399
Shared room : 146
基本統計量
Rのsummary()は欠損の数を表示
87. > h <- hist(d[d$price < 600,
+ c("price")])
> h$counts
[1] 521 2448 1546 879 395 272 108
75 37 52 11 9
ヒストグラム
頻度の取得はhist () のオブジェクトに保存しcountsを参照
88. > b <- seq(from = 0, to = 600, by = 100)
> hist(d[d$price < 600, c("price")],
+ breaks = b)
ヒストグラム
区間配列の変更するにはhist () の引数breaksを指定
90. > cor(d[d$price < 9000,
+ c("price",
+ "accommodates",
+ "bedrooms",
+ "reviews")])
相関
相関係数行列の算出はcor()
91. price accommodates bedrooms
price 1.0000000 0.65552315 0.6131361
accommodates 0.6555231 1.00000000 0.7817959
bedrooms 0.6131361 0.78179593 1.0000000
reviews -0.1697077 -0.08256885 -0.1515890
相関
94. 回帰分析
回帰(かいき、英: regression)とは、統計学において、Y
が連続値の時にデータに Y = f(X) というモデル(「定量的な
関係の構造[1]」)を当てはめる事。別の言い方では、連続尺
度の従属変数(目的変数)Y と独立変数(説明変数)X の
間にモデルを当てはめること。X が1次元ならば単回帰、X
が2次元以上ならば重回帰と言う。Y が離散の場合は分類
と言う。
回帰分析(かいきぶんせき、英: regression analysis)とは、
回帰により分析する事。
回帰で使われる、最も基本的なモデルは Y = AX + B とい
う形式の線形回帰である。
https://ja.wikipedia.org/wiki/回帰分析
96. > lm.mdl <- lm(
+ price~accommodates+bedrooms,
+ data = d[d$price < 9000, ])
回帰分析
シンプルな回帰分析はlm()
97. > summary(lm.mdl)
(中略)
Residual standard error: 75.32 on 6394 degrees of
freedom
Multiple R-squared: 0.4558,
Adjusted R-squared: 0.4556
F-statistic: 2677 on 2 and 6394 DF,
p-value: < 2.2e-16
回帰分析
summary()で結果を確認
98. > summary(lm.mdl)
(中略)
Coefficients: Estimate Std. Error t value Pr(>|t|)
(Intercept) 27.9864 1.8074 15.48 <2e-16 ***
accommodates 21.1150 0.6895 30.62 <2e-16 ***
bedrooms 26.3005 1.5032 17.50 <2e-16 ***
回帰分析
price = 27.9864 + 21.1150 ×accommodates + 26.3005 × bedrooms
99. > lm.mdl <- lm(price~accommodates+bedrooms+room_type, data = d[d$price < 9000, ])
> summary(lm.mdl)
(中略)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 53.0719 2.2779 23.299 < 2e-16 ***
accommodates 15.0748 0.7576 19.898 < 2e-16 ***
bedrooms 32.3503 1.5096 21.430 < 2e-16 ***
room_typePrivate room -39.9984 2.3746 -16.844 < 2e-16 ***
room_typeShared room -48.4926 6.3565 -7.629 2.71e-14 ***
回帰分析
Rでは因子型の変数も使用可能
100. > lm.mdl <- lm(price~accommodates+bedrooms+room_type, data = d[d$price < 9000, ])
> summary(lm.mdl)
(中略)
Residual standard error: 73.6 on 6392 degrees of freedom
Multiple R-squared: 0.4805, Adjusted R-squared: 0.4802
F-statistic: 1478 on 4 and 6392 DF, p-value: < 2.2e-16
回帰分析
補正R2も少し改善(0.4556 → 0.4802)
102. まとめ
• 基本統計量 : データの要約
• ヒストグラム : データの分布を確認
• 相関 : 項目間の関係性を確認
• 回帰分析 : ある項目の予測式を作成
R でもっと簡単に