Rで基本統計量と決定木分析

内部勉強会の第2回目の内容です。
以下の内容とほぼ一緒ですが、勉強会のまとめとして管理しやすくなるように別記事として投稿しました。
2h0.hatenablog.jp

目標

  • 基本統計量の解説とRの環境構築
  • 分析手法の基礎的な知識を知る

プログラミング言語 R とは

R言語(あーるげんご)はオープンソースフリーソフトウェアの統計解析向けのプログラミング言語及びその開発実行環境である。ファイル名拡張子は.r, .R, .RData, .rds, .rda。

R言語ニュージーランドオークランド大学のRoss IhakaとRobert Clifford Gentlemanにより作られた。現在ではR Development Core Team[注 1] によりメンテナンスと拡張がなされている。

R言語ソースコードは主にC言語FORTRAN、そしてRによって開発された。

引用ソース: R言語 - Wikipedia


要するに統計に強い言語とのこと。

演習での実行環境は "R Studio" を利用していました。

 

以下、環境構築に参考したサイト。
qiita.com

基本統計量の復習

どちらかというと手を動かすことを目的としていたため、
割とすっ飛ばしてもいいとお聞きしました。

以下に、参考すると良い(?)記事を挙げます。
qiita.com

演習1  Rを用いて基本統計量を求める

まず、コンソールとは以下の画像のようにコマンドを実行、結果を確認する画面と捉えるといいです。

f:id:s2h0:20190414023912p:plain
RStudioのコンソール画面
RStudioのコンソールを利用して演習時間では以下の 1)~3) を求めました。

x = c(90,58,60,71,23,40)

y = c(100,28,50,32,41,76)


1)xとyの平均

2)xとyの最大値、最小値

3)xとyの最頻値

4)xとyの分散

5)xとyの標準偏差

以下、自分の解答です。
注意点として"#"が書かれている行はコメント・補足事項です。

準備段階として以下のコマンドを実行。
"x"は変数、"<-"は"="に近い変数に代入する演算子
"c()"は配列ベクトルを扱う際に用いるもの(語彙)*1

変数とは数字や文字列などの値を一つだけ保管する箱のような物で、配列とは値をいくつも保管することができます。値を保管すると何が幸せかと言うと、扱う値の変更や使い回し、更には管理が生の値そのままを使用するよりしやすくなります。("生の値"だとポインタとかと語弊が生まれそう)
また、変数も配列も言語特有の縛りを除けば、自分が好きな名前をつけることが可能です。

#x、yに対し配列としてそれぞれの値を格納。
x<-c(90,58,58,71,23,40)
y<-c(100,28,50,32,41,76)

1)xとyの平均

xave<-mean(x)
yave<-mean(y)

解答

# >は実際には入力せず、>の後から入力しています。コンソール内容のままの引用です。
> xave
[1] 56.66667
> yave
[1] 54.5

2)xとyの最大値、最小値

xmax<-max(x)
ymax<-max(y)
xmin<-min(x)
ymin<-min(y)

解答

> xmax
[1] 90
> ymax
[1] 100
> xmin
[1] 23
> ymin
[1] 28

3)xとyの最頻値

xmode<-table(x)
ymode<-table(y)

解答

> xmode
x
23 40 58 71 90 
 1  1  2  1  1 
> ymode
y
 28  32  41  50  76 100 
  1   1   1   1   1   1 

4)xとyの分散、5)xとyの標準偏差
の2問については演習内で行わなかったのですが、こちらの記事後半にほぼ回答なるものがありましたので、参考まで…初学者の方だと関数の概念の理解が難しいのかな?
qiita.com
rstudio-pubs-static.s3.amazonaws.com

データ分析手法

・回帰分析
→変数間の関係を、結果(目的変数)と要因(説明変数)とし、回帰式でモデル化すること
・決定木分析
→樹木状のモデルを使って構造の理解、その分析結果から新規データの分類の予測を行うもの
クラスター分析
→データ同士の類似度からデータをクラスター(集団)にまとめる分析方法

決定木分析の活用対象例

配布された資料に表にまとまっていたのですが、ざっくり説明すると
様々な業種・業態(金融、流通、小売、通信のサービス等々)で
データによる情報の把握や精度向上に役立てられているそうです。

演習2 決定木分析

今回の演習ではタイタニックのデータセットを使用して
タイタニック号で生き残るのは誰か」という予測を
決定木を用いて予測します。

ということで、用意されていたデータセットで決定木を構築し、描画された木より予測を立てました。

手順を挙げます。

決定木の構築(1)

  1. rpartおよびrpart.plotパッケージの導入
  2. データセットの読み込みとデータフレームへの変換→タイタニック号の乗船者のデータセットを読み込んで、rpartで扱える形に変換する。
  3. データセットの確認
# rpartおよびrpart.plotパッケージの導入
install.packages("rpart")
install.packages("rpart.plot")

# パッケージの適用
library(rpart)
library(rpart.plot)

# データセットの読み込みとデータフレームへの変換
TitanicData<-data.frame(Titanic)
# データセットの確認
> Titanic
, , Age = Child, Survived = No

      Sex
Class  Male Female
  1st     0      0
  2nd     0      0
  3rd    35     17
  Crew    0      0

, , Age = Adult, Survived = No

      Sex
Class  Male Female
  1st   118      4
  2nd   154     13
  3rd   387     89
  Crew  670      3

, , Age = Child, Survived = Yes

      Sex
Class  Male Female
  1st     5      1
  2nd    11     13
  3rd    13     14
  Crew    0      0

, , Age = Adult, Survived = Yes

      Sex
Class  Male Female
  1st    57    140
  2nd    14     80
  3rd    75     76
  Crew  192     20
# Freq は同じ属性を持つ人の数
> TitanicData
   Class    Sex   Age Survived Freq
1    1st   Male Child       No    0
2    2nd   Male Child       No    0
3    3rd   Male Child       No   35
4   Crew   Male Child       No    0
5    1st Female Child       No    0
6    2nd Female Child       No    0
7    3rd Female Child       No   17
8   Crew Female Child       No    0
9    1st   Male Adult       No  118
10   2nd   Male Adult       No  154
11   3rd   Male Adult       No  387
12  Crew   Male Adult       No  670
13   1st Female Adult       No    4
14   2nd Female Adult       No   13
15   3rd Female Adult       No   89
16  Crew Female Adult       No    3
17   1st   Male Child      Yes    5
18   2nd   Male Child      Yes   11
19   3rd   Male Child      Yes   13
20  Crew   Male Child      Yes    0
21   1st Female Child      Yes    1
22   2nd Female Child      Yes   13
23   3rd Female Child      Yes   14
24  Crew Female Child      Yes    0
25   1st   Male Adult      Yes   57
26   2nd   Male Adult      Yes   14
27   3rd   Male Adult      Yes   75
28  Crew   Male Adult      Yes  192
29   1st Female Adult      Yes  140
30   2nd Female Adult      Yes   80
31   3rd Female Adult      Yes   76
32  Crew Female Adult      Yes   20

決定木の構築(2)

4.決定木分析の実施
5.分析結果の確認
6.樹形図の描画

# 決定木の目的変数と説明変数を指定
# 目的変数「Survived」、説明変数「Class+Sex+Age」
titanic.rp<-rpart(Survived~Class+Sex+Age,weights=Freq,data=TitanicData,control=rpart.control(minsplit = 1))

# 樹形図のプロット
prp(titanic.rp,type=4,extra=1)

データセットの見方とかrpart、prpのパラメータの指定の仕方とか確認しないとだ。

以下の画像のような樹形図がRStudioの"Plots"タブに表示されます。

f:id:s2h0:20190414011418p:plain
titanic.plot

決定木分析の結果より予測できること(すごい大事)

ということで、決定木分析の結果より樹形図が完成されました。

この決定木は結果(目的変数)に対する要因(説明変数)の中でもより結果に結びつくものは上にプロットされるそうです。

また、ノード(図中の丸)内に示された左側の数字は非生存者、右側は生存者を表しています。子同士のノードの生存者、非生存者それぞれの合計は親ノードの生存者、非生存者に対応しています。
"Yes"、"No"は結果(この木の場合Survived)に対する値で、つまり非生存者に対し生存者は多いかどうかを表しています。

この樹形図により新たにわかるようになった情報として

  • 性別(Sex)が生存率に一番要因として関係し、女性は生存率高めで男性は低め
  • 男性の生存率は 年齢(Age) > フロア(Class)の順番、女性の生存率はフロアが樹形図に現れている通りにより関係がある
  • 男性の中でも大人(Adult)より子供(Child)、フロアは3階より1・2階が生存率が高い
  • 女性はフロアが3階より1・2階と添乗員(Crew)の方が生存率が高い

が挙げられます。

*1:配列とベクトルについて誤解していたため訂正※http://cse.naro.affrc.go.jp/takezawa/r-tips/r/22.htmlを参考

Rの基本的な使い方(可視化、ライブラリの紹介)

とある学生団体内部勉強会の第3回目の内容となります。

1回目はというと自分は2回目からの参加で、
実はやってないので近い内に演習やって載せます。

本日の目標

  • 今回は主にデータ型やベクトル演算の紹介
  • csvファイルとExcelファイルからデータを読み込む方法を習得
  • データ分布の可視化手法を学ぶ

データ型

Rが保有するデータ型の一例

  • numeric : 数値(整数と小数、正数と負数、0を含む)

→現状、ザックリとcharacter・logical以外の"数"って考えると良さそう。

  • integer : 整数値
  • double : 浮動小数
  • character : 文字列
  • logical : 論理値…TRUE, FALSE

データ型を確かめる

今回は以下の関数を使用しました。

  1. class()
  2. is.numeric()
  3. is.integer()
  4. is.double()
  5. is.logical()

変数が保持するデータ型を確認する時はclass関数

> x <- 7
> class(x)
[1]numeric

変数がnumericかどうかをテストするにはis.numeric関数を使う

# numericであるときはTRUE(真)、
# そうでないときはFALSE(偽)と返ってくる
> x <- 7
> is.numeric(x)
[1]  TRUE

変数がintegerかどうかをテストするにはis.integer関数を使う。
同様に、他のデータ型かどうか確認する場合もis.(データ型名)関数

> x <- 5L     # 数字の後ろにLをつけると整数に指定できる
> is.integer(x)
[1]  TRUE
> is.logical(x)
[1]  FALSE

手元で検証した内容

# xはintegerの5、yはdoubleの2.0
> x <- 5L
> y <- 2.0
> is.double(y)
[1] TRUE
> is.double(x + y)
[1] TRUE

以上より、
2ではなく、2.0だとdouble扱いで代入してくれる
演算integer + double = doubleらしい

ベクトル演算

ベクトルは同じ型の要素を集めたもの

> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
> x
[1] 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
> y <- c(“R”, “Excel”, “Python”, “SAS”)
> y
[1] “R”, “Excel”, “Python”, “SAS”
> is.character(y)
[1]  TRUE
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
> x * 3 # xの要素それぞれに3をかける
[1]  3  6  9  12  15  18  21  24  27  30
> x / 4 # xの要素それぞれに4を割る
[1] 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.25 2.50
> x^2 # xの要素それぞれを二乗する
[1]   1   4   9  16  25  36  49  64  81 100
> sqrt(x) # xの平方根
[1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751
[8] 2.828427 3.000000 3.162278
> x <- 1:10    # 1から10までの数字からなるベクトルを生成
[1]  1  2  3  4  5  6  7  8  9 10
> length(x)    # ベクトルxの長さを確認
[1] 10
> x > 4    # ベクトルxの各要素に対して比較演算子を使う
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
> x[1]     # ベクトルxの1番目の要素を取り出す
[1] 1
> x[3:7]    # ベクトルxの3番目から7番目の要素を取り出す
[1] 3 4 5 6 7

Rのベクトル演算便利やん。

CSVファイルとExcelファイルを読み込んでみる

RではCSVファイルからデータを読み込む際、read.table関数を使う。
read.table関数はread.table(ファイル, ヘッダー有無, 区切り文字)のように指定してあげるとテーブルとしてデータを成形してくれる。

url <- "https://hoge/fuge.csv" # 変数urlにURLを代入
piyo <- read.table(file = url, header  = T, sep =",") 

Excelデータ(.xls・.xlsx)をreadxlパッケージを使って読み込む。

# readxlパッケージをインポート&ロード
install.packages("readxl")
library(readxl)

今回の演習では, 以下のJared P. Lander氏のデータセットを使う。
https://www.jaredlander.com/data/
これを参考にワークスペースの指定(移動)をした。
qiita.com

# ExcelExample.xlsxファイルのシートを確認
# シングルクォーテーション'と
# ダブルクォーテーション"を間違わないように
> excel_sheets('ExcelExample.xlsx')
[1] "Tomato" "Wine"   "ACS" 
# TomatoシートとWineシート、ACSシートがあることがわかる。

ExcelExample.xlsxからトマトのデータを読み込む

> tomatoXL <- read_excel(‘ExcelExample.xlsx’)
#どこのシートか指定しない場合は、
# read_excelは1枚目のシートを読み込む。
# 読み込むシートを選択したい場合は、
# シートの位置を数値で指定するか、
> wineXL <- read_excel('ExcelExample.xlsx', sheet = 2)
# シート名を文字として指定する
> wineXL <- read_excel('ExcelExample.xlsx', sheet = "Wine")

基本グラフィックス

今回の演習では、ダイヤモンドのデータを使用。
図やグラフをプロットするパッケージはggplot2を使用。
diamondsデータはggplot2パッケージに含まれる

ggplot2

ggplot2とは, グラフィックスをより簡単にするために作られたもの

RSstudio公式サイトにチートシートがあった。
現状見ても象形文字の如く、解読できないからからゴリゴリに使い倒せるようになりたい。
https://www.rstudio.com/wp-content/uploads/2016/10/ggplot2-cheatsheet-2.0-ja.pdf

ggplot2を使ったグラフィックでは, グラフを構成する要素をパズルのように組み合わせて, 1枚の絵を描くようにグラフを描く

> g <- ggplot()    # 新しいキャンパスを用意
> print(g)

上のコードを実行すると、何も描かれていないキャンパスが表示される

このキャンバスにグラフのレイヤを重ねていく

geomオブジェクト(geometric object)

データを特定のgeomに渡すことで,
データがそれぞれのグラフとして表現される

f:id:s2h0:20190421231856p:plain
geomの例

ヒストグラム

ヒストグラムは1変数データの最も基本的なグラフであり,
ある変数の分布を示す。
diamondsデータのcarat列に対するヒストグラム

> hist(diamonds$carat, main = "Carat Histgram", xlab = "Carat")


f:id:s2h0:20190421193438p:plain
diamonds(carats)ヒストグラム

散布図

散布図は2つの変数を比べてみる際によく使われる。
描画されている全ての点が2つの変数に関するデータを表す。
x軸がある変数を、y軸がもう一方の変数を表す。

> plot(price~carat, data = diamonds)

f:id:s2h0:20190421193909p:plain
ダイアモンドの価格とカラット数の散布図

箱ひげ図

箱ひげ図はデータのばらつき具合をわかりやすく表現するためのグラフ

f:id:s2h0:20190421194117p:plain
ダイアモンドカラットの箱ひげ図

演習1

演習用のExcelファイル「0420ex.xlsx」ファイルを読み込み,
1番目のシートにある50人の数学と国語のテストの結果について
それぞれヒストグラムと箱ひげ図を作ってみよう

前回でも申し上げましたが、
「>」は打ち込む必要がなく、「+」も同様です

> hist(score$数学, 
+      main = "The Score of Math Histgram", 
+      xlab = "Score")

f:id:s2h0:20190421230221j:plain
数学成績のヒストグラム

> hist(score$国語, 
+      main = "The Score of  Histgram", 
+      xlab = "Score")

f:id:s2h0:20190421230556j:plain
国語成績のヒストグラム

> boxplot(score$数学)

f:id:s2h0:20190421230847j:plain
数学成績の箱ひげ図

> boxplot(score$国語)

f:id:s2h0:20190421231017j:plain
国語成績の箱ひげ図

演習2

ggplotとデータセットmpgを使っていろいろなグラフを描いてみよう

以下のコードを実際に実行してみて, 結果がどのようになるのかを確認する

車の燃費に関するデータセットmpg

車の燃費に関するデータセットmpgはggplot2に含まれる

f:id:s2h0:20190421233104p:plain
車の燃費のデータセット

ggplot2の使用例①(エンジンの大きさのデータ分布)

ヒストグラム

> ggplot() + geom_histogram(data = mpg, mapping = aes(x = displ))

※このままだとビン幅(棒グラフの幅)を指定した方が良きとエラーの如く言われるので、以下参考に直してみましょう。(筆者は就活が...読者に丸投げ)
ggplot2でビン幅を自動的に決めたヒストグラム - Qiita

f:id:s2h0:20190421235122j:plain
displのヒストグラム

> ggplot() + geom_density(data = mpg, mapping = aes(x = displ))

f:id:s2h0:20190421235221j:plain
displの密度表示
エンジンの大きさのデータ自体は小さいものが多くて、大きいものが少ないことがわかりますね

補足:
geom_histogram()とgeom_density()では, X軸に変数をマッピングすると, 自動的に対応するY軸の値が計算されて描画されるため, Y軸の変数を指定する必要がない

ggplot2の使用例②(エンジンの大きさと燃費の関係)

エンジンの大きさdisplと燃費ctyの関係を散布図で確かめてみよう

> ggplot() + geom_point(data = mpg, mapping = aes(x = displ, y = cty))

f:id:s2h0:20190422001305j:plain
エンジンの大きさと燃費の分布図
この図より、
x軸がエンジンの大きさ、y軸が燃費とされているので、
エンジンが大きくなるに連れて、燃費が低くなる
という相関関係があることがわかりますね。

とある学生団体の説明会・体験会に参加しました

念の為、情報リテラシーの観点から団体名を伏せて書きます。

この記事が初投稿になるわけですが、現在就職活動を行なっていて時間を捻出しているため書き殴りで書きます。(終わったらちゃんとインデックス付けたり綺麗にまとめていきたい)
記事を書いた目的はブログまともに書いたことが3回くらいで面倒な記法とか学んで後々楽していきたいことと学んだことの内容を忘れないための備忘録としての投稿がメインです。団体のメンバーとして活動してきた訳ではないですし、自分もほぼ知識ゼロで挑んでいるので、その目線から参加してなかった人や復習したい人に役立ってくれたらなって思って書きます。

「Rで基本統計量と決定木分析」

今回は内部勉強会の第2回ということで、こちらのタイトルが挙げられていました。学生団体の説明は割愛いたします。

特に新入生に対しての内部勉強会の体験会ということで、基本統計量の解説とRの環境構築を取り上げていて、

そのあとに分析手法の基礎的な概念と演習を下に丁寧な解説を受けました。

以下にスライドや勉強会で配布資料と解説された内容を含めた自分なりの解釈をサクッと挙げます。(※参考記事は自分が見返す目的で出してます。丸投げ感満載で申し訳なさ)

プログラミング言語 R とは

R言語(あーるげんご)はオープンソースフリーソフトウェアの統計解析向けのプログラミング言語及びその開発実行環境である。ファイル名拡張子は.r, .R, .RData, .rds, .rda。

R言語ニュージーランドオークランド大学のRoss IhakaとRobert Clifford Gentlemanにより作られた。現在ではR Development Core Team[注 1] によりメンテナンスと拡張がなされている。

R言語ソースコードは主にC言語FORTRAN、そしてRによって開発された。

引用ソース: R言語 - Wikipedia


要するに統計に強い言語とのこと。

演習での実行環境は "R Studio" を利用していました。

 

以下、環境構築に参考したサイト。
qiita.com

基本統計量の復習

どちらかというと手を動かすことを目的としていたため、
割とすっ飛ばしてもいいとお聞きしました。

以下に、参考すると良い(?)記事を挙げます。
qiita.com

演習1  Rを用いて基本統計量を求める

まず、コンソールとは以下の画像のようにコマンドを実行、結果を確認する画面と捉えるといいです。

f:id:s2h0:20190414023912p:plain
RStudioのコンソール画面
RStudioのコンソールを利用して演習時間では以下の 1)~3) を求めました。

x = (90,58,60,71,23,40)

y = (100,28,50,32,41,76)


1)xとyの平均

2)xとyの最大値、最小値

3)xとyの最頻値

4)xとyの分散

5)xとyの標準偏差

以下、自分の解答です。
注意点として"#"が書かれている行はコメント・補足事項です。

準備段階として以下のコマンドを実行。
"x"は変数、"<-"は"="に近い変数に代入する演算子
"c()"は配列を扱う際に用いるもの(語彙)

変数とは数字や文字列などの値を一つだけ保管する箱のような物で、配列とは値をいくつも保管することができます。値を保管すると何が幸せかと言うと、扱う値の変更や使い回し、更には管理が生の値そのままを使用するよりしやすくなります。("生の値"だとポインタとかと語弊が生まれそう)
また、変数も配列も言語特有の縛りを除けば、自分が好きな名前をつけることが可能です。

#x、yに対し配列としてそれぞれの値を格納。
x<-c(90,58,58,71,23,40)
y<-c(100,28,50,32,41,76)

1)xとyの平均

xave<-mean(x)
yave<-mean(y)

解答

# >は実際には入力せず、>の後から入力しています。コンソール内容のままの引用です。
> xave
[1] 56.66667
> yave
[1] 54.5

2)xとyの最大値、最小値

xmax<-max(x)
ymax<-max(y)
xmin<-min(x)
ymin<-min(y)

解答

> xmax
[1] 90
> ymax
[1] 100
> xmin
[1] 23
> ymin
[1] 28

3)xとyの最頻値

xmode<-table(x)
ymode<-table(y)

解答

> xmode
x
23 40 58 71 90 
 1  1  2  1  1 
> ymode
y
 28  32  41  50  76 100 
  1   1   1   1   1   1 

4)xとyの分散、5)xとyの標準偏差
の2問については演習内で行わなかったのですが、こちらの記事後半にほぼ回答なるものがありましたので、参考まで…初学者の方だと関数の概念の理解が難しいのかな?
qiita.com
rstudio-pubs-static.s3.amazonaws.com

データ分析手法

・回帰分析
→変数間の関係を、結果(目的変数)と要因(説明変数)とし、回帰式でモデル化すること
・決定木分析
→樹木状のモデルを使って構造の理解、その分析結果から新規データの分類の予測を行うもの
クラスター分析
→データ同士の類似度からデータをクラスター(集団)にまとめる分析方法

決定木分析の活用対象例

配布された資料に表にまとまっていたのですが、ざっくり説明すると
様々な業種・業態(金融、流通、小売、通信のサービス等々)で
データによる情報の把握や精度向上に役立てられているそうです。

演習2 決定木分析

今回の演習ではタイタニックのデータセットを使用して
タイタニック号で生き残るのは誰か」という予測を
決定木を用いて予測します。

ということで、用意されていたデータセットで決定木を構築し、描画された木より予測を立てました。

手順を挙げます。

決定木の構築(1)

  1. rpartおよびrpart.plotパッケージの導入
  2. データセットの読み込みとデータフレームへの変換→タイタニック号の乗船者のデータセットを読み込んで、rpartで扱える形に変換する。
  3. データセットの確認
# rpartおよびrpart.plotパッケージの導入
install.packages("rpart")
install.packages("rpart.plot")

# パッケージの適用
library(rpart)
library(rpart.plot)

# データセットの読み込みとデータフレームへの変換
TitanicData<-data.frame(Titanic)
# データセットの確認
> Titanic
, , Age = Child, Survived = No

      Sex
Class  Male Female
  1st     0      0
  2nd     0      0
  3rd    35     17
  Crew    0      0

, , Age = Adult, Survived = No

      Sex
Class  Male Female
  1st   118      4
  2nd   154     13
  3rd   387     89
  Crew  670      3

, , Age = Child, Survived = Yes

      Sex
Class  Male Female
  1st     5      1
  2nd    11     13
  3rd    13     14
  Crew    0      0

, , Age = Adult, Survived = Yes

      Sex
Class  Male Female
  1st    57    140
  2nd    14     80
  3rd    75     76
  Crew  192     20
# Freq は同じ属性を持つ人の数
> TitanicData
   Class    Sex   Age Survived Freq
1    1st   Male Child       No    0
2    2nd   Male Child       No    0
3    3rd   Male Child       No   35
4   Crew   Male Child       No    0
5    1st Female Child       No    0
6    2nd Female Child       No    0
7    3rd Female Child       No   17
8   Crew Female Child       No    0
9    1st   Male Adult       No  118
10   2nd   Male Adult       No  154
11   3rd   Male Adult       No  387
12  Crew   Male Adult       No  670
13   1st Female Adult       No    4
14   2nd Female Adult       No   13
15   3rd Female Adult       No   89
16  Crew Female Adult       No    3
17   1st   Male Child      Yes    5
18   2nd   Male Child      Yes   11
19   3rd   Male Child      Yes   13
20  Crew   Male Child      Yes    0
21   1st Female Child      Yes    1
22   2nd Female Child      Yes   13
23   3rd Female Child      Yes   14
24  Crew Female Child      Yes    0
25   1st   Male Adult      Yes   57
26   2nd   Male Adult      Yes   14
27   3rd   Male Adult      Yes   75
28  Crew   Male Adult      Yes  192
29   1st Female Adult      Yes  140
30   2nd Female Adult      Yes   80
31   3rd Female Adult      Yes   76
32  Crew Female Adult      Yes   20

決定木の構築(2)

4.決定木分析の実施
5.分析結果の確認
6.樹形図の描画

# 決定木の目的変数と説明変数を指定
# 目的変数「Survived」、説明変数「Class+Sex+Age」
titanic.rp<-rpart(Survived~Class+Sex+Age,weights=Freq,data=TitanicData,control=rpart.control(minsplit = 1))

# 樹形図のプロット
prp(titanic.rp,type=4,extra=1)

データセットの見方とかrpart、prpのパラメータの指定の仕方とか確認しないとだ。

以下の画像のような樹形図がRStudioの"Plots"タブに表示されます。

f:id:s2h0:20190414011418p:plain
titanic.plot

決定木分析の結果より予測できること(すごい大事)

ということで、決定木分析の結果より樹形図が完成されました。

この決定木は結果(目的変数)に対する要因(説明変数)の中でもより結果に結びつくものは上にプロットされるそうです。

また、ノード(図中の丸)内に示された左側の数字は非生存者、右側は生存者を表しています。子同士のノードの生存者、非生存者それぞれの合計は親ノードの生存者、非生存者に対応しています。
"Yes"、"No"は結果(この木の場合Survived)に対する値で、つまり非生存者に対し生存者は多いかどうかを表しています。

この樹形図により新たにわかるようになった情報として

  • 性別(Sex)が生存率に一番要因として関係し、女性は生存率高めで男性は低め
  • 男性の生存率は 年齢(Age) > フロア(Class)の順番、女性の生存率はフロアが樹形図に現れている通りにより関係がある
  • 男性の中でも大人(Adult)より子供(Child)、フロアは3階より1・2階が生存率が高い
  • 女性はフロアが3階より1・2階と添乗員(Crew)の方が生存率が高い

が挙げられます。

所感

Rって聞いたことあったけど、統計というビッグトピックでブルって触れられてなかったので、チューターの方達のわかりやすい説明と解説によりデータマイニング含め掻い摘むことができました。

しかも、興味めちゃめちゃ湧いた。
適当にするつもり全くないけど、早く就活終えて高めていきたい。

新入生の皆さんに一つ言いたいこと。「これから親の顔より、QiitaやHatena Blogと言うサービスを見る」ことになる人も少なくないと思います。ググる力というものを身につけるとグッと周りに差を付けられます。自分のブログがその導入というかきっかけになれば幸いです。

ここまでお前誰やねんって感じの奴の自己顕示欲〜って感じの記事を読んでくれた方ありがとうございます。
あと、全然この記事ほとんど見直してないので間違った内容とかあれば教えていただきたいです。


最後に、説明会・体験会の準備や開催を手がけた団体のメンバーのみなさんを始め、今日お世話になった方本当にありがとうございました。
これからもよろしくしていただけると嬉しいです。