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.

20140625 rでのデータ分析(仮) for_tokyor

1,792 views

Published on

第52回R勉強会@東京 飛び入り発表資料

Published in: Data & Analytics
  • Be the first to comment

20140625 rでのデータ分析(仮) for_tokyor

  1. 1. Rでのデータ分析(仮) 2014-06-25
  2. 2. > summary(kitano) Name: Takashi Kitano Twitter: @kashitan R History: 2年6ヶ月
  3. 3. 夏ですね
  4. 4. 夏といえば
  5. 5. ご存知ですか? 統計学とビールの深い関係
  6. 6. おむつとビール •  データマイニングで最も有名な例 「おむつを買った人はビールを買う傾向がある」という米国における マーケットバスケット分析の事例。1990年代半ばから2000年代初めに かけてメディアや講演などでよく語られ、データマイニングという言葉 と概念を一躍有名にした。 情報マネジメント用語辞典:おむつとビール(おむつとびーる)より
  7. 7. スチューデントのt分布 •  仮説検定などで使用されるt分布はギネスビール社の醸 造技術者ウィリアム・ゴセットが発見 ギネスビール社では企業秘密の問題で社員が論文を 出すことを禁止していたので、ゴセットは Student(「スチューデント」)というペンネームで 論文を発表した。この彼の最も有名な業績はス チューデントのt分布と呼ばれる。 ウィリアム・ゴセット - Wikipediaより ウィリアム・ゴセット
  8. 8. ビールなしでは 分析は語れない
  9. 9. Rでのデータ分析(仮)   でのビール分析 2014-06-25
  10. 10. アジェンダ 1.  データの準備・確認・加工 - 前処理 2.  エネルギー(kcal)を推定する - 重回帰分析 3.  カテゴリを判別する - 決定木 ※ 今回Rによるデータ操作などについてはあまり触れません Appendixを参照ください
  11. 11.   ? なにそれ? おいしいの? 自主規制
  12. 12. R is a free software environment for statistical computing and graphics. http://www.r-project.orgより Rは統計処理とグラフ描画のための無償 のソフトウェア環境です。
  13. 13. A3 abc abcdeFBA ABCExtremes ABCoptim ABCp2 abctools abd abf2 abind abn abundant accelerometry AcceptanceSampling ACCLMA accrual accrued ACD Ace acepack acer aCGH.Spline acm4r ACNE acopula aCRM acs acss acss.data ACTCD Actigraphy actuar ActuDistns ada adabag adagio AdapEnetClass AdaptFit AdaptFitOS AdaptiveSparsity adaptivetau adaptMCMC adaptsmoFMRI adaptTest additivityTests ade4 ade4TkGUI adegenet adehabitat adehabitatHR adehabitatHS adehabitatLT adehabitatMA adephylo AdequacyModel ADGofTest adhoc adimpro adlift ADM3 AdMit ads aemo AER afex AFLPsim aftgee AGD agop agRee Agreement agricolae agridat agrmt AGSDest ahaz AICcmodavg AID aidar AIM akima akmeans alabama ALDqr aLFQ AlgDesign algstat ALKr allan allanvar allelematch AlleleRetain allelic AllPossibleSpellings alm alphahull alphashape3d alr3 alr4 ALS ALSCPC amap AMAP.Seq amei Amelia amen AmericanCallOpt AMGET aml AMOEBA AMORE AmpliconDuo anacor anaglyph analogue AnalyzeFMRI anametrix anapuce AncestryMapper anchors AnDE andrews anesrake Animal animalTrack animation AnnotLists anoint anominate ant AnthropMMD Anthropometry antitrust AntWeb aod aods3 AOfamilies aoristic apcluster ape aplpack apmsWAPP appell apple AppliedPredictiveModeling approximator aprof APSIMBatch apsimr apsrtable apt apTreeshape aqfig aqp aqr AquaEnv AR1seg ARAMIS archetypes ArDec arf3DS4 arfima argosfilter argparse argparser arm arnie aroma.affymetrix aroma.apd aroma.cn aroma.core ARPobservation aRpsDCA ArrayBin arrayhelpers ars ARTIVA ARTP arules arulesNBMiner arulesSequences arulesViz asbio ascii ascrda asd ash aspace aspect assertive assertthat AssetPricing AssotesteR aster aster2 astro astroFns astsa asympTest asypow AtelieR ATmet AtmRay attfad AUC AUCRF audio audiolyzR audit autoencoder automap autopls AutoSEARCH avgrankoverlap aws awsMethods AWS.tools aylmer B2Z b6e6rl babel BaBooN BACCO backtest BACprior BAEssd bagRboostR BalancedSampling BaM bamdit BAMMtools bams bandit barcode bark Barnard bartMachine BAS BaSAR base64 base64enc baseline basicspace BASIX BaSTA batade batch BatchExperiments BatchJobs batchmeans BayesBridge bayesclust BayesComm bayescount BayesCR BayesDA bayesDem BayesFactor bayesGARCH bayesGDS BayesGESM Bayesianbetareg BayesLCA bayesLife BayesLogit bayesm bayesMCClust BayesMed bayesmix BayesNI BayesPen bayesPop bayespref bayesQR BayesQTLBIC bayess BayesSAE BayesSingleSub bayesSurv bayesTFR Bayesthresh BayesValidate BayesVarSel BayesX BayesXsrc BayHap BayHaz BaylorEdPsych BaySIC BAYSTAR BB bbefkr bbemkr BBmisc bbmle BBMM bbo BBRecapture bc3net BCA BCBCSF BCDating BCE BCEA BCEs0 Bchron Bclim bclust bcool bcp bcpa bcpmeta bcrm bcv bda BDgraph bdoc bdpv bdsmatrix bdvis bdynsys beadarrayFilter beadarrayMSV beanplot bear BEDASSLE beeswarm benchden benchmark Benchmarking benford.analysis BenfordTests bentcableAR BEQI2 ber Bergm BerlinData berryFunctions Bessel BEST bestglm betafam betapart betaper betareg betategarch bethel bezier bfa bfast bfp bgeva BGLR bgmm BGPhazard BGSIMD BH Bhat BHH2 biasbetareg BiasedUrn bibtex biclust 5,600以上の 統計処理・可視化の パッケージ 7,500
  14. 14.   ? なにそれ? おいしいの? Excelじゃ ダメなんでしょうか? 自主規制
  15. 15. •  検定はExcelで十分 (と思う)
  16. 16. •  回帰分析はキツい –  変数の上限が16個 –  因子型の変数をサポートし ない –  変数選択が手動
  17. 17. Webデータ分析&データサイエンスで役立つ統計 学・機械学習系の分析手法10選 銀座で働くデータサイエンティストのブログより 株式会社リクルートコミュニケーションズ データサイエンティスト 尾崎 隆⽒ 1.  回帰分析 2.  独立性の検定 3.  主成分分析・因子 分析 4.  クラスタリング 5.  決定木 / 回帰木 6.  サポートベクターマ シン(SVM) 7.  ロジスティック回帰 8.  ランダムフォレスト 9.  アソシエーション分 析 10.  計量時系列分析 自主規制
  18. 18. Webデータ分析&データサイエンスで役立つ統計 学・機械学習系の分析手法10選 銀座で働くデータサイエンティストのブログより 株式会社リクルートコミュニケーションズ データサイエンティスト 尾崎 隆⽒ 1.  回帰分析 2.  独立性の検定 3.  主成分分析・因子 分析 4.  クラスタリング 5.  決定木 / 回帰木 6.  サポートベクターマ シン(SVM) 7.  ロジスティック回帰 8.  ランダムフォレスト 9.  アソシエーション分 析 10.  計量時系列分析 Excel単体では困難 ( 2. 独立性の検定 を除く) 自主規制
  19. 19. •  ヒストグラムや箱ひげ図の大量生産も難しい
  20. 20. それでもExcelで頑張りたい •  以下の書籍を購入すると分析アドインがダウンロード できる
  21. 21. でも コマンドライン なんでしょう?
  22. 22. •  逆に考えるんだ。GUIなんてなくてもいいさ と 考えるんだ。 –  再現性 •  100回 分析して 100回 同じ結果になりますか? –  自動化 •  100回 同じことをできますか?
  23. 23. そう、すべてを叶えるパッケージがそろってるんです。 にはね
  24. 24. アジェンダ 1.  データを確認・加工する - 前処理 2.  エネルギー(kcal)を推定する - 重回帰分析 3.  カテゴリを判別する - 決定木
  25. 25. 1. データを確認・加工する - 前処理 -
  26. 26. 今回使用するデータ beer.csv •  大手4社の成分一覧表から作成
  27. 27. 前処理の流れ データの 読み込み データの 確認 欠損値の 処理
  28. 28. データの読み込み # CSVファイルを読込む beer <- read.csv("beer.csv", header = TRUE, encoding = "UTF-8") # 変数の確認 str(beer)
  29. 29. データの読み込み 'data.frame': 86 obs. of 52 variables: $ 商品名 : Factor w/ 86 levels “アサヒ オリオンサザンスター $ 販売元 : Factor w/ 4 levels "アサヒ","キリン",..: 1 1 1 1 $ カテゴリ : Factor w/ 4 levels "Beer","Beer-Taste”,..: 1 1 1 $ アルコール分 : num 5 5.5 6 5.5 5 5.5 8 5.5 5 6.5 ... $ エネルギー : int 42 45 48 46 47 45 74 48 42 50 ... $ たんぱく質 : num 0.3 0.3 0.4 0.5 0.3 0.4 0.6 0.5 0.         (中略) $ 硫酸Ca : int 0 0 0 0 0 0 0 0 0 0 ... $ 硫酸Mg : int 0 0 0 0 0 0 0 0 0 0 ...
  30. 30. データの確認(1/2) # データの概要を把握する summary(beer)
  31. 31. データの確認(1/2) 脂質 糖質 食物繊維 ナトリウム Min. :0 Min. :0.00 Min. :0.00 Min. : 0.00 1st Qu.:0 1st Qu.:2.80 1st Qu.:0.05 1st Qu.: 0.00 Median :0 Median :3.10 Median :0.05 Median : 3.50 Mean :0 Mean :3.01 Mean :0.22 Mean : 2.68 3rd Qu.:0 3rd Qu.:3.60 3rd Qu.:0.10 3rd Qu.: 4.00 Max. :0 Max. :7.50 Max. :2.10 Max. :10.00 NA's :2 NA's :2 欠損値がある
  32. 32. データの確認(2/2) # “糖質”が欠損している行の1〜3列目 beer[is.na(beer$糖質), 1:3] 商品名 販売元 カテゴリ 42 ドラフトギネス(R) キリン Beer 43 ギネス(R)エクストラスタウト キリン Beer まさかのギネス・・・
  33. 33. データの確認(2/2) 確かに 欠損している h"p://www.kirin.co.jp/products/list/nutri4on/
  34. 34. 欠損値の処理(1/3) # 今回はカテゴリ=“Beer”の糖質の平均値で欠損値を置換する # カテゴリごとの平均値 sugar.means <- by(beer$糖質, beer$カテゴリ, mean, na.rm=TRUE) sugar.means
  35. 35. 欠損値の処理(1/3) beer$カテゴリ: Beer [1] 3.569388 ------------------------------------------------------------------- beer$カテゴリ: Beer-Taste [1] 0 ------------------------------------------------------------------- beer$カテゴリ: Happoshu [1] 2.45 ------------------------------------------------------------------- beer$カテゴリ: New-Category [1] 2.233333
  36. 36. 欠損値の処理(2/3) # 元のデータをコピーする beer.imputation <- beer # “糖質”列が欠損している行番号を取得する rows <- which(is.na(beer.imputation$糖質)) # 上️で取得した行の”糖質”列に平均値を代入する beer.imputation$糖質[rows] <- sugar.means[1]
  37. 37. 欠損値の処理(3/3) # 欠損していた行の”商品名”と”糖質”を表示する beer.imputation[rows, c("商品名","糖質")] 商品名 糖質 42 ドラフトギネス(R) 3.569388 43 ギネス(R)エクストラスタウト 3.569388 欠損値が置換された
  38. 38. 前処理の流れ データの 読み込み データの 確認 欠損値の 処理 read.csv() summary() is.na() mean() by ()
  39. 39. 2. エネルギー(KCAL)を推定する - 重回帰分析 -
  40. 40. 重回帰分析とは •  「ある数値」から別の「ある数値」を予測すること •  独立変数∼従属変数間の数式を統計学的に推測すること 例) 中古マンションの価格(万) = 2787.542 + 11.91817 土地面積 (m2) ‒ 32.955 築後年数(年) ‒ 303.147 駅からの徒歩時間(分) + 6.831651 駅からの距離(m)
  41. 41. 重回帰の流れ •  エネルギー(kcal)を他の変数から予測するモデルを作成 モデルの 作成 変数選択
  42. 42. モデルの作成 # ”エネルギー”を全変数から“商品名”と”販売元”を除いて予測するモデル energy.lm <- lm(エネルギー~.-商品名-販売元, data=beer.imputation) # モデルの確認 summary(energy.lm)
  43. 43. モデルの作成 Call: lm(formula = エネルギー ~ . - 商品名 - 販売元, data = beer.imputation) Residuals: Min 1Q Median 3Q Max -2.4964 -0.4975 0.0000 0.3936 2.7876
  44. 44. モデルの作成 Coefficients: (17 not defined because of singularities) Estimate Std. Error t value Pr(>|t|) (Intercept) 0.37844 1.18291 0.320 0.75033 カテゴリBeer-Taste -3.94847 3.86952 -1.020 0.31235 カテゴリHapposhu 3.09803 1.13089 2.739 0.00846 ** カテゴリNew-Category 4.46682 1.52417 2.931 0.00505 ** アルコール分 5.27635 0.32887 16.044 < 2e-16 *** たんぱく質 3.72833 1.47881 2.521 0.01486 * 脂質 NA NA NA NA ・・・ 変数の係数 係数の信頼度
  45. 45. モデルの作成 Residual standard error: 0.984 on 49 degrees of freedom (2 observations deleted due to missingness) Multiple R-squared: 0.9934, Adjusted R-squared: 0.9889 F-statistic: 279.4 on 34 and 49 DF, p-value: < 2.2e-16 自由度調整済み決定係数
  46. 46. 変数選択 # Stepwise法で不要な変数を削減する energy.lm.step <- step(energy.lm) # モデルの確認 summary(energy.lm.step)
  47. 47. 変数選択 Call: lm(formula = エネルギー ~ カテゴリ + アルコール分 + たんぱく質 + 糖質 + 食物繊維 + プリン体 + エンドウタンパク + スターチ + レモン果汁 + 小麦 + 大豆タンパク + 大麦 + 炭酸ガス含有 + 米, data = beer.imputation) Residuals: Min 1Q Median 3Q Max -2.40742 -0.48150 -0.06881 0.38521 2.78099
  48. 48. 変数選択 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.20784 0.91442 0.227 0.820872 カテゴリBeer-Taste -0.34622 1.36302 -0.254 0.800244 カテゴリHapposhu 2.57485 0.69915 3.683 0.000454 *** カテゴリNew-Category 2.92786 0.57528 5.089 2.97e-06 *** アルコール分 5.40862 0.19336 27.972 < 2e-16 *** たんぱく質 3.19413 0.93105 3.431 0.001021 ** 糖質 4.02530 0.15808 25.464 < 2e-16 *** ・・・ 変数の係数 係数の信頼度
  49. 49. 変数選択 Residual standard error: 0.9126 on 63 degrees of freedom (2 observations deleted due to missingness) Multiple R-squared: 0.9924, Adjusted R-squared: 0.9906 F-statistic: 552 on 20 and 63 DF, p-value: < 2.2e-16 自由度調整済み決定係数 (全変数使用するよりも 0.0017向上)
  50. 50. 変数選択 エネルギー(kcal)= 0.20783716 - 0.34621957 × カテゴリBeer-Taste + 2.57484995 × カテゴリHapposhu + 2.92786458 × カテゴリNew-Category + 5.40861848 × アルコール分 + 4.02530013 × 糖質 + 3.19412749 × たんぱく質 - 2.28897132 × 大麦 + 1.80778313 × 小麦 + 2.57260239 × 食物繊維 + 0.09752287 × プリン体 + 1.26001973 × スターチ - 1.93356948 × エンドウタンパク - 1.25420551 × 米 - 1.2644242 × 大豆タンパク- 1.96882626 × レモン果汁 - 2.52586262 ×炭酸ガス含有
  51. 51. •  エネルギー(kcal)を他の変数から予測するモデルを作成 重回帰の流れ モデルの 作成 変数選択 lm() step()
  52. 52. 3. カテゴリを判別する - 決定木 -
  53. 53. 決定木とは •  木構造を利用して, 入力パターンに対応するクラス分類 を決定するアルゴリズムを表現したもの
  54. 54. 決定木の流れ 決定木の 作成 剪定 •  カテゴリー(ビール・発泡酒・新ジャンル・ビールテイ スト飲料)を他の変数から分類するモデルを作成
  55. 55. 決定木の作成 # C5.0による決定木を作成するためパッケージをインストールする install.packages(“C50”) # パッケージを読込む library(C50) # “商品名”(1列目)と”販売元”(2列目)の列を削除する beer.sub <- beer.imputation[, 3:52] # “カテゴリ”を分類する木構造モデルを作成する category.tree <- C5.0(カテゴリ~., data=beer.sub)
  56. 56. # 決定木の概要を確認する summary(category.tree) Call: C5.0.formula(formula = カテゴリ ~ ., data = beer.sub) C5.0 [Release 2.07 GPL Edition] Wed Jun 25 13:03:14 2014 ------------------------------- Class specified by attribute `outcome’ Read 86 cases (50 attributes) from undefined.data 決定木の作成
  57. 57. Decision tree: スピリッツ > 0: New-Category (20) スピリッツ <= 0: :...麦芽 <= 0: New-Category (4) 麦芽 > 0: :...プリン体 <= 4.4: Happoshu (11/1) プリン体 > 4.4: Beer (51) 決定木の作成
  58. 58. Evaluation on training data (86 cases): Decision Tree ---------------- Size Errors 4 1( 1.2%) << 決定木の作成
  59. 59. (a) (b) (c) (d) <-classified as ---- ---- ---- ---- 51 (a): class Beer 1 (b): class Beer-Taste 10 (c): class Happoshu 24 (d): class New-Category 決定木の作成
  60. 60. Attribute usage: 100.00% スピリッツ 76.74% 麦芽 72.09% プリン体 決定木の作成
  61. 61. 剪定 •  木構造が複雑な場合、過学習の可能性がある。複雑度を 元に適切なサイズの木となるよう枝切りを行う。
  62. 62. 剪定 •  木構造が複雑な場合、過学習の可能性がある。複雑度を 元に適切なサイズの木となるよう枝切りを行う。 ➡ 今回は木のサイズが小さいため割愛 てへぺろ(・ω<)
  63. 63. 決定木の流れ 決定木の 作成 剪定 •  カテゴリー(ビール・発泡酒・新ジャンル・ビールテイ スト飲料)を他の変数から分類するモデルを作成 C5.0()
  64. 64. まとめ
  65. 65. まとめ •  前処理 –  read.csv() CSVファイルの読込み –  summary() 概要を確認 –  is.na() 欠損を確認 •  重回帰 –  lm() 線形回帰モデルの作成 •  決定木 –  C5.0() 決定木モデルの作成
  66. 66. APPENDIX
  67. 67. R入門資料 •  第三回Japan.R入門セッション 『はじめての「R」』補足 –  http://m884.hateblo.jp/entry/2012/12/03/232431 •  ドットインストール –  http://dotinstall.com/lessons/basic_r

×