Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20170923 excelユーザーのためのr入門

2,099 views

Published on

Tokyo.R#65 初心者セッション

Published in: Data & Analytics
  • Hi there! Essay Help For Students | Discount 10% for your first order! - Check our website! https://vk.cc/80SakO
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

20170923 excelユーザーのためのr入門

  1. 1. Excel ユーザーのためのR 入門 2017-09-23 Tokyo.R#65 @kashitan
  2. 2. Agenda • データハンドリング • 集約関数 • ピボットテーブル • 分析ツール
  3. 3. sample data http://tomslee.net/airbnb-data-collection-get-the-data
  4. 4. Agenda • データハンドリング • 集約関数 • ピボットテーブル • 分析ツール
  5. 5. data.frame ExcelのsheetはRのdata.frame
  6. 6. > sheet1 <- data.frame( + name = c("Access", + "Excel", + "Powerpoint", + "Word"), + price = rep(15984, 4), + stringsAsFactors = FALSE + ) data.frame() にc() で値を列挙 data.frameの作成
  7. 7. d <- read.table() テキストファイルの取り込みはread.table() * read.csv()でも可 テキストファイルの取り込み
  8. 8. d <- read.table( file = "ファイル名" ) ファイル名はfileで指定 テキストファイルの取り込み
  9. 9. d <- read.table( file = "ファイル名", header = TRUE ) 先頭行をデータの見出しとして使用するはheader = TRUE テキストファイルの取り込み
  10. 10. d <- read.table( file = "ファイル名", header = TRUE, fileEncoding = "CP932" ) エンコーディングはfileEncodingで指定 テキストファイルの取り込み
  11. 11. d <- read.table( file = "ファイル名", header = TRUE, fileEncoding = "CP932", sep = "," ) 区切り文字はsepで指定 テキストファイルの取り込み
  12. 12. d <- read.table( file = "ファイル名", header = TRUE, fileEncoding = "CP932", sep = ",", quote = "¥"" ) 文字列の引用符はquoteで指定 テキストファイルの取り込み
  13. 13. d <- read.table( file = "ファイル名", header = TRUE, fileEncoding = "CP932", sep = ",", quote = "¥"" ) データ形式は自動で判別される テキストファイルの取り込み
  14. 14. d <- read.table( file = "ファイル名", header = TRUE, fileEncoding = "CP932", sep = ",", quote = "¥"", stringsAsFactors = FALSE ) 文字列はFactor型となるのでstringsAsFactor = FALSEを推奨 テキストファイルの取り込み
  15. 15. d <- read.table( file = "ファイル名", header = TRUE, fileEncoding = "CP932", sep = ",", quote = "¥"" , colClasses = c("integer", "integer", ...) ) 明示的にデータ形式を指定する場合はcolClassesで指定 テキストファイルの取り込み
  16. 16. • 数値 • 日付 • 時刻 • 文字列 • TRUE(), FALSE() ⇒numeric, integer ⇒Date ⇒POSIXct, POSIXlt, POSIXt ⇒character ⇒logical データ形式の対応は上記の通り Excelのデータ形式とRのデータ型
  17. 17. > d[1, c("room_id")] [1] 6119821 シート名!列名行番号 変数名[行番号, c(列名)] データの参照
  18. 18. > d$room_id[1] [1] 6119821 変数名$列名[行番号] データの参照 シート名!列名行番号
  19. 19. > d[1, 1] [1] 6119821 変数名 [行番号, 列番号] データの参照 シート名!列名行番号
  20. 20. > d[2:3, ] room_id survey_id host_id ... 2 13785072 1435 1243056 ... 3 19165502 1435 35011953 ... 列番号を省略するとすべての列が返される 複数行の参照
  21. 21. > d[, 2:3] survey_id host_id 1 1435 31751507 2 1435 1243056 3 1435 35011953 4 1435 109568126 … 行番号を省略するとすべての列が返される 複数列の参照
  22. 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. 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 四則演算は同じ 四則演算
  24. 24. > d$price[2] %/% 10 [1] 25 > d$price[2] %% 10 [1] 2 整数商は%/%, 余りは%% 剰余
  25. 25. > d$price[2] [1] 252 > d$price[2]^2 [1] 63504 > sqrt(d$price[2]) [1] 15.87451 累乗、平方根は同じ 累乗, 平方根
  26. 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 対数
  27. 27. > d$overall_satisfaction[1] [1] 4.5 > ifelse(d$overall_satisfaction[1] > 3, + "pos", "neg") [1] "pos" Excelのif()はRのifelse() 条件分岐
  28. 28. > d$overall_satisfaction[1] [1] 4.5 > d$price[1] [1] 90 > d$overall_satisfaction[1] > 3 & + d$price[1] == 90 [1] TRUE Excelのand()は& 条件分岐
  29. 29. > d$overall_satisfaction[1] [1] 4.5 > d$price[1] [1] 90 > d$overall_satisfaction[1] < 3 | + d$price[1] > 100 [1] FALSE Excelのor()は| 条件分岐
  30. 30. > d$overall_satisfaction[1] [1] 4.5 > d$overall_satisfaction[1] > 3 [1] TRUE > !(d$overall_satisfaction[1] > 3) [1] FALSE Excelのnot()は! 条件分岐
  31. 31. > is.na(d$country[1]) [1] TRUE 欠損値の確認はis.na () 欠損値の確認
  32. 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() 文字列の連結
  33. 33. > substr(d$room_type[2], 1, 5) [1] "Share" > # 4文字目から6文字目 > substr(d$room_type[2], 4, 6) [1] "red" 文字列の一部取り出しはsubstr() 文字列の一部取り出し
  34. 34. > # 文字列の長さを取得 > n <- nchar(d$room_type[2]) > substr(d$room_type[2], n-4+1, n) [1] "room" Excelのright()は少し工夫が必要 文字列の一部取り出し
  35. 35. > # stringr::str_subは負数で > # 末尾からの位置を指定できる > library(stringr) > str_sub(d$room_type[2], -4) [1] "room" Excelのright()はstringr::str_sub()が便利 文字列の一部取り出し
  36. 36. > d$neighborhood[1] [1] "Pike-Market" > gsub(d$neighborhood[1], + "Pike-Market", + "1st Starbucks") [1] "1st Starbucks" Excelのsubstitute()はRのgsub() 文字列の置換
  37. 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. 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. 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. 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. 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. 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()
  43. 43. merge() の引数で結果が異なる vlookup() 指定なし all = TRUE all.x = TRUE all.y = TRUE
  44. 44. > write.table(d, + file = "file_name.txt", + quote = FALSE, + na = "", + sep = "¥t", + row.names = FALSE, + fileEncoding = "UTF8") テキストファイルへの出力はwrite.table() テキストファイルへの出力
  45. 45. > save(d, m, + file = "airbnb_seattle.RData") data.frameなどのオブジェクトを保存する場合はsave() 名前を付けて保存
  46. 46. > load(file = "airbnb_seattle.RData") 保存したオブジェクトを読み込むにはload() ファイルを開く
  47. 47. • quotient • mod • ln • log10 • log(x, 底) • sqrt ⇒%/% ⇒%% ⇒log(x) ⇒log(x, 10) ⇒log(x, 底) ⇒sqrt データハンドリングまとめ
  48. 48. • if • and • or • not • 並べ替え • フィルター • vlookup ⇒ifelse ⇒& ⇒| ⇒not ⇒order ⇒subset ⇒merge データハンドリングまとめ
  49. 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 データハンドリングまとめ
  50. 50. • テキストファイルの取込 • テキストファイルに出力 • オブジェクトの保存 • オブジェクトの読み込み ⇒read.table, read.csv ⇒write.table, write.csv ⇒save ⇒load データハンドリングまとめ
  51. 51. Agenda • データハンドリング • 集約関数 • ピボットテーブル • 分析ツール
  52. 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. 53. > max(d$price) [1] 10000 > min(d$price) [1] 10 > median(d$price) [1] 110 > # mode()はデータ型を返す > mode(d$price) [1] "numeric" Rには最頻値を返す関数はない 最大値, 最小値, 中央値, 最頻値
  54. 54. > range(d$price) [1] 10 10000 > range(d$price)[1] [1] 10 > range(d$price)[2] [1] 10000 範囲(最大値と最小値の差) Rのrange()は最大値と最小値がベクトルで返る
  55. 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()は四分位数がベクトルで返る
  56. 56. > quantile(d$price, 0.1) 10% 55 > quantile(d$price, c(0.1, 0.9)) 10% 90% 55 250 パーセンタイル値 Excelのpercentile()はRのquantile()に引数で分位点を指定
  57. 57. • sum • average • median • mode • var • stdev ⇒sum ⇒mean ⇒median ⇒なし ⇒var ⇒sd まとめ
  58. 58. • max • min • quartile • percentile ⇒max ⇒min ⇒quantile ⇒quantile 集約関数まとめ
  59. 59. Agenda • データハンドリング • 集約関数 • ピボットテーブル • 分析ツール
  60. 60. Excel のピボットテーブルは 神ツール
  61. 61. 想像してください
  62. 62. 予測モデルの更新が 終わりました! 重要変数を 送ります!
  63. 63. 目的変数と 説明変数※の クロス集計表も お願いね ※ 説明変数は200個くらいある
  64. 64. Excel のピボットテーブルは 神ツール ですが繰り返し作業はツラい
  65. 65. R なら繰り返し作業もツラくない
  66. 66. > 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()
  67. 67. > 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()の引数に集約関数を指定
  68. 68. > # {dplyr}と{tidyr}を使用しないと > # 難しい 総計に対する比率, 累計, etc… Excelの総計に対する比率は累計などはRのデフォルトだと難しい
  69. 69. > 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再入門を参照
  70. 70. # 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再入門を参照
  71. 71. > 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再入門を参照
  72. 72. # 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再入門を参照
  73. 73. Agenda • データハンドリング • 集約関数 • ピボットテーブル • 分析ツール
  74. 74. • ファイル → オプション Excelの分析ツール
  75. 75. Excelの分析ツール 1. アドインを選択 2. 分析ツールを選択 3. 設定を選択
  76. 76. Excelの分析ツール 分析ツールにチェックしてOK
  77. 77. • データ → データ分析 Excelの分析ツール データ分析がデータタブに 追加される
  78. 78. Excelの分析ツール
  79. 79. Excelの分析ツール • 基本統計量 : データの要約 • ヒストグラム : データの分布を確認 • 相関 : 項目間の関係性を確認 • 回帰分析 : ある項目の予測式を作成
  80. 80. > summary(d[, c("price", + "accommodates", + "bedrooms")]) 基本統計量 基本統計量の算出はsummary()
  81. 81. 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() は標準偏差やデータの個数などは表示されない
  82. 82. > 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()は因子型の場合に水準毎のデータ数を返す
  83. 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. 84. > hist(d[d$price < 600, c("price")]) ヒストグラム ヒストグラムの描画はhist ()
  85. 85. ヒストグラム ヒストグラムの描画はhist ()
  86. 86. > 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を参照
  87. 87. > b <- seq(from = 0, to = 600, by = 100) > hist(d[d$price < 600, c("price")], + breaks = b) ヒストグラム 区間配列の変更するにはhist () の引数breaksを指定
  88. 88. 相関 相関係数(そうかんけいすう、英: correlation coefficient) は、2つの確率変数の間にある線形な関係の強弱を測る指 標である[1]。相関係数は無次元量で、−1以上1以下の実数 に値をとる。相関係数が正のとき確率変数には正の相関が、 負のとき確率変数には負の相関があるという。また相関係 数が0のとき確率変数は無相関であるという[2][3] 。 https://ja.wikipedia.org/wiki/相関係数
  89. 89. > cor(d[d$price < 9000, + c("price", + "accommodates", + "bedrooms", + "reviews")]) 相関 相関係数行列の算出はcor()
  90. 90. 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 相関
  91. 91. 相関≠因果関係 相関
  92. 92. 疑似相関 http://tylervigen.com/spurious-correlations
  93. 93. 回帰分析 回帰(かいき、英: regression)とは、統計学において、Y が連続値の時にデータに Y = f(X) というモデル(「定量的な 関係の構造[1]」)を当てはめる事。別の言い方では、連続尺 度の従属変数(目的変数)Y と独立変数(説明変数)X の 間にモデルを当てはめること。X が1次元ならば単回帰、X が2次元以上ならば重回帰と言う。Y が離散の場合は分類 と言う。 回帰分析(かいきぶんせき、英: regression analysis)とは、 回帰により分析する事。 回帰で使われる、最も基本的なモデルは Y = AX + B とい う形式の線形回帰である。 https://ja.wikipedia.org/wiki/回帰分析
  94. 94. 回帰分析 アッシェンフェルターのワイン方程式 ワインの品質=12.145 +0.00117 × 冬の降雨量 +0.0614 × 育成期平均気温 −0.00386 × 収穫期降雨量
  95. 95. > lm.mdl <- lm( + price~accommodates+bedrooms, + data = d[d$price < 9000, ]) 回帰分析 シンプルな回帰分析はlm()
  96. 96. > 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()で結果を確認
  97. 97. > 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
  98. 98. > 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では因子型の変数も使用可能
  99. 99. > 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)
  100. 100. 回帰分析 回帰分析はお手軽だけど 多重共線性(通称マルチコ)など ハマるところが多いので要注意
  101. 101. まとめ • 基本統計量 : データの要約 • ヒストグラム : データの分布を確認 • 相関 : 項目間の関係性を確認 • 回帰分析 : ある項目の予測式を作成 R でもっと簡単に
  102. 102. Have Fun!!

×