文系データサイエンティストの備忘録

英語できないのに外資系で働くデータ分析屋。

決定木から分岐条件を取得する

Rのrpartなどで決定木分析をした際、決定木の分岐条件を表にしてまとめたい時があるかと思います。 決定木を普通に実行するとこんな感じ

> # mtcarsを読込
> tmp <- data.frame(mtcars)
> 
> # シリンダー数,V/S,オートマ・マニュアル,ギア数,キャブ数をファクター化
> df <- tmp %>% 
+   mutate_each_(funs(as.factor), list("cyl","vs","am","gear","carb"))
> 
> # 燃費を目的変数にして回帰木生成
> ct <- rpart(mpg ~ ., data = df, method = "anova")
> (ct.party <- as.party(ct))

Model formula:
mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb

Fitted party:
[1] root
|   [2] cyl in 6, 8
|   |   [3] hp >= 192.5: 13.414 (n = 7, err = 28.8)
|   |   [4] hp < 192.5: 18.264 (n = 14, err = 59.9)
|   [5] cyl in 4: 26.664 (n = 11, err = 203.4)

Number of inner nodes:    2
Number of terminal nodes: 3

ただこの分岐条件を使ってさらに分析を進めたい場合、この決定木から分岐条件を抜き出したい。 そのような場合、ベクトルとして分岐条件をテキストで抽出することが可能。

> # 条件をベクトルで抜き出し
> (cond <- partykit:::.list.rules.party(ct.party, i = nodeids(ct.party)))
                                       1 
                                      "" 
                                       2 
              "cyl %in% c(\"6\", \"8\")" 
                                       3 
"cyl %in% c(\"6\", \"8\") & hp >= 192.5" 
                                       4 
 "cyl %in% c(\"6\", \"8\") & hp < 192.5" 
                                       5 
                     "cyl %in% c(\"4\")" 

このままだとまだ扱いにくいので、分岐条件の変数と数値がそれぞれ列を持っている表を目指して整形する。

> # 決定木分岐条件一覧表に整形
> cond.df <- data.frame(INDEX=1:length(cond), CONDITIONS=cond)
> cond.df.split <- cond.df %>%
+   tidyr::separate(col=CONDITIONS, 
+                   into=paste("CONDITIONS",as.character(c(1:(1+max(str_count(.$CONDITIONS,(" & ")))))),sep=""), 
+                   sep=(" & "), remove=TRUE, extra='merge', fill='right')%>% 
+   tidyr::gather(key.con, CONDITIONS, -INDEX) %>% 
+   dplyr::filter(CONDITIONS != "NA") %>% 
+   dplyr::arrange(INDEX) %>% 
+   tidyr::separate(col=CONDITIONS, 
+                   into=c("CONDITIONS", "SIGN", "VALUE"),
+                   sep=(" "), remove=TRUE, extra='merge', fill='right') %>% 
+   dplyr::mutate(rVALUE= ifelse(test= SIGN=="<" | SIGN=="<=",
+                                yes= VALUE,
+                                no= Inf)) %>% 
+   dplyr::mutate(lVALUE= ifelse(test= SIGN==">" | SIGN==">=" | SIGN=="%in%",
+                                yes= VALUE,
+                                no= -Inf)) %>% 
+   dplyr::mutate(inVALUE= ifelse(test= SIGN=="%in%",
+                                yes= VALUE,
+                                no= NA)) %>% 
+   dplyr::mutate(rVALUE=as.numeric(rVALUE), lVALUE=as.numeric(lVALUE)) %>% 
+   dplyr::group_by(INDEX, CONDITIONS) %>% 
+   dplyr::summarise(rVALUE_min=min(rVALUE), lVALUE_max=max(lVALUE)) %>% 
+   dplyr::ungroup(.) %>% 
+   dplyr::mutate(VALUE= str_c(lVALUE_max, rVALUE_min, sep="~")) %>% 
+   dplyr::mutate(VALUE= str_replace_all(VALUE, c("-Inf"="","Inf"="","c[(]"="","[)]~"="","\""=""))) %>% 
+   dplyr::select(INDEX, CONDITIONS, VALUE)
> (cond.df.split)
# A tibble: 7 x 3
  INDEX CONDITIONS  VALUE
  <int>      <chr>  <chr>
1     1                 ~
2     2        cyl   6, 8
3     3        cyl   6, 8
4     3         hp 192.5~
5     4        cyl   6, 8
6     4         hp ~192.5
7     5        cyl      4

こんな感じ。 (9/15バグ修正)

RmdファイルからR実行部分を抽出

KaggleなどでKernelからRmdファイルをダウンロードしてきて、手元で再現したいときがよくあるかと思います。 そんなときはpurl{knitr}を使用して、R実行スクリプトチャンクを抜き出します。

script.RmdからR実行部分を抜き出してみましょう。

hoge
 ```{r, cache=TRUE}
# dotR script
cat("We are hogehoge.")
 ```
hogehoge

inputにRmdファイルを指定、outputに出力先と出力ファイル名を指定します。

# install.packages("knitr")
library(knitr)

# purl Rmd
## documentation=0
purl(input="input/script.Rmd", output="output/script0.R", documentation=0)
## documentation=1(default)
purl(input="input/script.Rmd", output="output/script1.R", documentation=1)
## documentation=2
purl(input="input/script.Rmd", output="output/script2.R", documentation=2)

実行結果は、option引数ごとにそれぞれ以下のようになります。

# dotR script
cat("We are hogehoge.")
## ---- cache=TRUE---------------------------------------------------------
# dotR script
cat("We are hogehoge.")
#' hoge
## ---- cache=TRUE---------------------------------------------------------
# dotR script
cat("We are hogehoge.")

#' hogehoge

これでKernel再現が捗ります。

お久しぶりです

こんな冬眠ブログでもアクセスがちょろちょろいるもんですね。

 

さて、Rで飯食えそうと思って入社した人工知能()押し売り会社でしたが、2年目にしてやっとRでお仕事できるようになりました。ずっとGUI強いられてました。クリックつれぇ。

 

最近統計まわりの熱が再燃してきたので、定期的に書けたらと思います。GitHubとかも立ち上げる予定です。

R、Pythonを使ったデータサイエンス関連が多めになるかと思います。kaggleとかも出てるのでそちらも触れるかも。

 

今後もご贔屓に。

バイクに優しい街,渋谷

ファミリーマートのタバコ企画でtマネーが当たり,いつの間にか10,000円チャージされていたため,蔦谷書店に本を買いだめしに行きました.

 

そのついでに,近くの渋谷でJTBの旅行券ナイストリップを換金.

大黒屋の予定でしたが,近くに見つけたヨコハマチケットサービスのほうがレートが

 

よかったためそちらで換金.95%でした.

f:id:shu87:20160218165042j:plain

 

 

 

その際,渋谷ヒカリエにバイクを停めていたんですが,無料でした.

matome.naver.jp

 

渋谷はバイク駐車場が結構あって,バイクに優しい街です.

f:id:shu87:20160218165137j:plain

↑ヒカリエの駐車場.一時間無料.

 

その後,代官山の蔦谷書店へ.

f:id:shu87:20160218165313j:plain

 

この優しさ.沁みるよね.

f:id:shu87:20160218165423j:plain

 

 

2000円以上の買い物のレシートをレジに見せると一時間無料券がもらえます.

店内もライダー心に響くレイアウト.通おう.

ニューヨーク WEST SIDE YMCA でWiFiを使う方法

マンハッタンの中で格安で宿泊できるWEST SIDE YMCA
YMCA: Guest Rooms at West Side | New York City's YMCA

フリーWiFiも使えます。日本語の情報ではロビー内のみとのことでしたが部屋の中でも使うことが出来ました。

  1. YMCAMemberNetworkを選択
  2. YMCA Member Wireless Network Access Pageにアクセス。(Googleなどこの他のページは表示されませんが、このYMCAのページにだけはアクセスができます)
  3. ロビーの人が教えてくれたパスワードを入れて、氏名・メールアドレスを入力。
  4. 設定完了

G-SHOCKを海外の時間に合わせる

てっきり自動で海外時刻に変更してくれるものだと思い込んでいましたが、自分で設定が必要みたい。
以下のページを参考にするとできるようです。

時計取扱説明書 / 操作説明ダウンロード - 時計 - お客様サポート - CASIO


僕のG-SHOCKは7年前に買ったMTG-1500。文字盤ウラ面に記載された4桁数字は5055でした。

  1. 時刻モードのとき、左上ADJUSTを5秒長押し。(3秒位でピッとなり、5秒でピピッと鳴る)
  2. 都市名を右下FORWARDで選択。
  3. MODE→FORWARDと押し、サマータイムを自動設定にする。
  4. ADJUSTを2回押し、設定完了。


時刻合わせるとき、針が動いて面白いです。

アメリカでの書籍価格

今度旅行に行くので洋書(主に学術書)を買い込む所存です.

それに当たり,買いたい本の邦訳版を含めた価格比較を行っておきたい.
以下,Amazonでの比較です.Amazon価格は変動する可能性がありますが,執筆時点での価格です.

.com .jp(原) .jp(訳)
Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集 $31.06 \3,198 \3,672
Doing Bayesian Data Analysis: A Tutorial with R, JAGS, and Stan $85.45 \10187 NONE
Bayesian Cognitive Modeling: A Practical Course $43.74 \12,898 NONE
Rとトレード ――確率と統計のガイドブック (ウイザードブックシリーズVol.231) $70.00 \8,058 \8,424
R言語徹底解説 $56.95 \7,174 \5,832
みんなのR -データ分析と統計解析の新しい教科書- $23.91 \4,646 \4,104
おおきな木 $10.39 \1,571 \1,296


NYCのBarnes & Nobleでどのくらいの価格で売られているのか次第ですが,できるかぎり安く原著は入手しておきたい.たぶん読み切れないけど,
働き始めても土日は空いてるわけだし,買いだめしてしまおうかと思います.


再販制度が我が国日本にはあるので,本はどこで買っても定価です.
よくわかる!再販売価格維持制度(再販制度)のメリットと仕組み | コトビー[KOTB]

が,アメリカはどうやら違うらしくバンバン割引してるそうです.
大学入ってからKindleで八割以上の書籍を購入するようになり,しかもその半数以上がセール中に買うため書籍を定価で購入することに大変損した感があります.価格破壊ってこういうことなんですかね.