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

Rでのデータ分析(仮)
2014-06-25
> summary(kitano)
Name:
Takashi Kitano
Twitter:
@kashitan
R History:
2年6ヶ月
夏ですね
夏といえば
20140625 rでのデータ分析(仮) for_tokyor
ご存知ですか?
統計学とビールの深い関係
おむつとビール
•  データマイニングで最も有名な例
「おむつを買った人はビールを買う傾向がある」という米国における
マーケットバスケット分析の事例。1990年代半ばから2000年代初めに
かけてメディアや講演などでよく語られ、データマイニングという言葉
と概念を一躍有名にした。
情報マネジメント用語辞典:おむつとビール(おむつとびーる)より
スチューデントのt分布
•  仮説検定などで使用されるt分布はギネスビール社の醸
造技術者ウィリアム・ゴセットが発見
ギネスビール社では企業秘密の問題で社員が論文を
出すことを禁止していたので、ゴセットは
Student(「スチューデント」)というペンネームで
論文を発表した。この彼の最も有名な業績はス
チューデントのt分布と呼ばれる。
ウィリアム・ゴセット - Wikipediaより
	
ウィリアム・ゴセット
ビールなしでは
分析は語れない
Rでのデータ分析(仮)
  でのビール分析
2014-06-25
アジェンダ
1.  データの準備・確認・加工 - 前処理
2.  エネルギー(kcal)を推定する - 重回帰分析
3.  カテゴリを判別する - 決定木
※ 今回Rによるデータ操作などについてはあまり触れません
Appendixを参照ください
20140625 rでのデータ分析(仮) for_tokyor
  ?
なにそれ?
おいしいの?
自主規制
R is a free software environment for
statistical computing and graphics.
http://www.r-project.orgより
Rは統計処理とグラフ描画のための無償
のソフトウェア環境です。
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
  ?
なにそれ?
おいしいの?
Excelじゃ
ダメなんでしょうか?
自主規制
•  検定はExcelで十分
(と思う)
•  回帰分析はキツい
–  変数の上限が16個
–  因子型の変数をサポートし
ない
–  変数選択が手動
Webデータ分析&データサイエンスで役立つ統計
学・機械学習系の分析手法10選
銀座で働くデータサイエンティストのブログより
株式会社リクルートコミュニケーションズ
データサイエンティスト
尾崎 隆⽒
1.  回帰分析
2.  独立性の検定
3.  主成分分析・因子
分析
4.  クラスタリング
5.  決定木 / 回帰木
6.  サポートベクターマ
シン(SVM)
7.  ロジスティック回帰
8.  ランダムフォレスト
9.  アソシエーション分
析
10.  計量時系列分析
自主規制
Webデータ分析&データサイエンスで役立つ統計
学・機械学習系の分析手法10選
銀座で働くデータサイエンティストのブログより
株式会社リクルートコミュニケーションズ
データサイエンティスト
尾崎 隆⽒
1.  回帰分析
2.  独立性の検定
3.  主成分分析・因子
分析
4.  クラスタリング
5.  決定木 / 回帰木
6.  サポートベクターマ
シン(SVM)
7.  ロジスティック回帰
8.  ランダムフォレスト
9.  アソシエーション分
析
10.  計量時系列分析
Excel単体では困難
( 2. 独立性の検定 を除く)
自主規制
•  ヒストグラムや箱ひげ図の大量生産も難しい
それでもExcelで頑張りたい
•  以下の書籍を購入すると分析アドインがダウンロード
できる
でも
コマンドライン
なんでしょう?
•  逆に考えるんだ。GUIなんてなくてもいいさ と
考えるんだ。
–  再現性
•  100回 分析して 100回 同じ結果になりますか?
–  自動化
•  100回 同じことをできますか?
そう、すべてを叶えるパッケージがそろってるんです。
にはね
20140625 rでのデータ分析(仮) for_tokyor
アジェンダ
1.  データを確認・加工する - 前処理
2.  エネルギー(kcal)を推定する - 重回帰分析
3.  カテゴリを判別する - 決定木
1. データを確認・加工する	
- 前処理 -
今回使用するデータ
beer.csv
•  大手4社の成分一覧表から作成
前処理の流れ
データの
読み込み
データの
確認
欠損値の
処理
データの読み込み
# CSVファイルを読込む	
beer <- read.csv("beer.csv", header = TRUE, encoding =
"UTF-8")	
	
# 変数の確認	
str(beer)
データの読み込み
'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	...
データの確認(1/2)
# データの概要を把握する	
summary(beer)
データの確認(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	
欠損値がある
データの確認(2/2)
# “糖質”が欠損している行の1〜3列目	
beer[is.na(beer$糖質), 1:3]	
																									商品名	販売元	カテゴリ	
42											ドラフトギネス(R)	キリン					Beer	
43	ギネス(R)エクストラスタウト	キリン					Beer		
まさかのギネス・・・
データの確認(2/2)
確かに
欠損している
h"p://www.kirin.co.jp/products/list/nutri4on/
欠損値の処理(1/3)
# 今回はカテゴリ=“Beer”の糖質の平均値で欠損値を置換する	
# カテゴリごとの平均値	
sugar.means <- by(beer$糖質, beer$カテゴリ, mean,
na.rm=TRUE)	
	
sugar.means
欠損値の処理(1/3)
beer$カテゴリ:	Beer	
[1]	3.569388	
-------------------------------------------------------------------
beer$カテゴリ:	Beer-Taste	
[1]	0	
-------------------------------------------------------------------
beer$カテゴリ:	Happoshu	
[1]	2.45	
-------------------------------------------------------------------
beer$カテゴリ:	New-Category	
[1]	2.233333
欠損値の処理(2/3)
# 元のデータをコピーする	
beer.imputation <- beer	
	
# “糖質”列が欠損している行番号を取得する	
rows <- which(is.na(beer.imputation$糖質))	
	
# 上️で取得した行の”糖質”列に平均値を代入する	
beer.imputation$糖質[rows] <- sugar.means[1]
欠損値の処理(3/3)
# 欠損していた行の”商品名”と”糖質”を表示する	
beer.imputation[rows, c("商品名","糖質")]	
				商品名																							糖質	
42											ドラフトギネス(R)	3.569388	
43	ギネス(R)エクストラスタウト	3.569388	 欠損値が置換された
前処理の流れ
データの
読み込み
データの
確認
欠損値の
処理
read.csv()	 summary()	
is.na()	
mean()	
by	()
2. エネルギー(KCAL)を推定する	
- 重回帰分析 -
重回帰分析とは
•  「ある数値」から別の「ある数値」を予測すること
•  独立変数∼従属変数間の数式を統計学的に推測すること
例)
中古マンションの価格(万) = 2787.542
+ 11.91817 土地面積 (m2)
‒ 32.955 築後年数(年)
‒ 303.147 駅からの徒歩時間(分)
+ 6.831651 駅からの距離(m)
重回帰の流れ
•  エネルギー(kcal)を他の変数から予測するモデルを作成
モデルの
作成
変数選択
モデルの作成
# ”エネルギー”を全変数から“商品名”と”販売元”を除いて予測するモデル	
energy.lm <- lm(エネルギー~.-商品名-販売元,
data=beer.imputation)	
	
# モデルの確認	
summary(energy.lm)
モデルの作成
Call:	
lm(formula	=	エネルギー	~	.	-	商品名	-	販売元,	data	=	
beer.imputation)	
	
Residuals:	
				Min						1Q		Median						3Q					Max		
-2.4964	-0.4975		0.0000		0.3936		2.7876
モデルの作成
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	・・・	
変数の係数 係数の信頼度
モデルの作成
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	
自由度調整済み決定係数
変数選択
# Stepwise法で不要な変数を削減する	
energy.lm.step <- step(energy.lm)	
	
# モデルの確認	
summary(energy.lm.step)
変数選択
Call:	
lm(formula	=	エネルギー	~	カテゴリ	+	アルコール分	+		
				たんぱく質	+	糖質	+	食物繊維	+	プリン体	+		
				エンドウタンパク	+	スターチ	+	レモン果汁	+		
				小麦	+	大豆タンパク	+	大麦	+	炭酸ガス含有	+		
				米,	data	=	beer.imputation)	
	
Residuals:	
					Min							1Q			Median							3Q						Max		
-2.40742	-0.48150	-0.06881		0.38521		2.78099
変数選択
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	***	
・・・	
変数の係数 係数の信頼度
変数選択
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向上)
変数選択
エネルギー(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	×炭酸ガス含有
•  エネルギー(kcal)を他の変数から予測するモデルを作成
重回帰の流れ
モデルの
作成
変数選択
lm()	 step()
3. カテゴリを判別する	
- 決定木 -
決定木とは
•  木構造を利用して, 入力パターンに対応するクラス分類
を決定するアルゴリズムを表現したもの
決定木の流れ
決定木の
作成
剪定
•  カテゴリー(ビール・発泡酒・新ジャンル・ビールテイ
スト飲料)を他の変数から分類するモデルを作成
決定木の作成
# C5.0による決定木を作成するためパッケージをインストールする	
install.packages(“C50”)	
	
# パッケージを読込む	
library(C50)	
	
# “商品名”(1列目)と”販売元”(2列目)の列を削除する	
beer.sub <- beer.imputation[, 3:52]	
	
# “カテゴリ”を分類する木構造モデルを作成する	
category.tree <- C5.0(カテゴリ~., data=beer.sub)
# 決定木の概要を確認する	
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	
決定木の作成
Decision	tree:	
	
スピリッツ	>	0:	New-Category	(20)	
スピリッツ	<=	0:	
:...麦芽	<=	0:	New-Category	(4)	
				麦芽	>	0:	
				:...プリン体	<=	4.4:	Happoshu	(11/1)	
								プリン体	>	4.4:	Beer	(51)	
決定木の作成
Evaluation	on	training	data	(86	cases):	
	
					Decision	Tree				
			----------------			
			Size						Errors			
	
						4				1(	1.2%)			<<	
決定木の作成
(a)			(b)			(c)			(d)				<-classified	as	
			----		----		----		----	
					51																						(a):	class	Beer	
																		1										(b):	class	Beer-Taste	
																	10										(c):	class	Happoshu	
																							24				(d):	class	New-Category	
決定木の作成
Attribute	usage:	
	
	100.00%	スピリッツ	
		76.74%	麦芽	
		72.09%	プリン体	
決定木の作成
剪定
•  木構造が複雑な場合、過学習の可能性がある。複雑度を
元に適切なサイズの木となるよう枝切りを行う。
剪定
•  木構造が複雑な場合、過学習の可能性がある。複雑度を
元に適切なサイズの木となるよう枝切りを行う。
➡
今回は木のサイズが小さいため割愛
てへぺろ(・ω<)
決定木の流れ
決定木の
作成
剪定
•  カテゴリー(ビール・発泡酒・新ジャンル・ビールテイ
スト飲料)を他の変数から分類するモデルを作成
C5.0()
まとめ
まとめ
•  前処理
–  read.csv() CSVファイルの読込み
–  summary() 概要を確認
–  is.na() 欠損を確認
•  重回帰
–  lm() 線形回帰モデルの作成
•  決定木
–  C5.0() 決定木モデルの作成
20140625 rでのデータ分析(仮) for_tokyor
APPENDIX
R入門資料
•  第三回Japan.R入門セッション
『はじめての「R」』補足
–  http://m884.hateblo.jp/entry/2012/12/03/232431
•  ドットインストール
–  http://dotinstall.com/lessons/basic_r
1 von 71

Más contenido relacionado

Destacado(17)

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