23 Dec 2017, 10:12

データサイエンティスト養成講座を受けた感想(後半)

はじめに

データサイエンティスト協会が主催するデータサイエンテスィト養成講座を受けた。

前半の感想は以下です。今回は、後半の感想を書く。

各回の内容

第5回

中間発表会。銀行問題の成果発表。私の成績は、17位でした。各班の発表のあとは、先生のコメント。この銀行問題は、それほどデータ前処理をしなくても、random forestや xgboostのちからを借りると、そこそこのスコアがでてしまうとのこと。

ただし、それはコンペという特殊な世界で通用することであり、ビジネス的観点が抜けていることはよくない。業務でつかう多くのモデルは説明が求められる。

そして、後半のお題、Jリーグの観客動員数を予測せよ! が出される。

こちらは、単純にxgboostやrandom forest を 適用したたけでは、いい成果はでない。しっかり特徴量エンジニアリングをする必要がある。

第6、7回

後半は、目新しい知識の講義はなく、グループワーク中心で進む。チームでアイデアを出しながら特徴量を作成していく。

モデルの改善方法として、残差を見ながら分析する方法が紹介される。どの場合に、モデルの予測が結果を外しているかを並べて、傾向を見て、それをモデルに反映するというサイクルが紹介される。

チームでサッカーに詳しい人が一人いて、(ほかはそれほど詳しくなくて)、アイデアをもらいながら特徴量を作っていった。また、自分では、コーディング力がなくて作れない特徴量も他のメンバの手を借りて、作った。一人で考えているよりも、みんなで考えた方がよいアイデアが浮かぶ。協力が必要。

私ともう一人はpythonでデータ分析をして、他のメンバはRでデータ分析を進めた。あるメンバがRの分析力をメキメキつけて、驚いた。

という本を読んで力をつけたそうだ(これはウェブで無料公開されている)。python と Rで、どちらがよいかという議論をよく見かけるが、dplyr という強力な前処理ツールがあるので、モデルの前処理は R でやるほうがよいと感じた。前処理や視覚化は、pythonよりもRに軍配が上がる。

第8回

最終発表会。

私の成績は、なんと1位だ!

ネタバレになるので、作った特徴量は秘密だが、思いついた特徴量はすべて試した。

そして、最終秘密兵器、catboostを使った。

これは、ロシアのGoogleと言われているYandexが開発したOSS。これをつかったら、スコアがグーンと下がった。私は、データの視覚化をあまりしなかったのだけれども、同じ班のさきほどR力をグーンと伸ばした人がいろいろとデータを視覚化してくれた。

感想

データサイエンティスト養成講座にかけた勉強時間は100時間くらい。

当初の目的だったCSV形式のデータに対する解析技術がついた(Python力も)。

反省点としては、精度を求めるあまり、データの意味を考えることを怠った。データをプロットして、観察して、加工するというプロセスが踏めていなかった。なので、今後はデータを観察し表現する力、人に説明する力を身に着けたい。

これから

これからどうするかということも考えておこう。自分は他のひとと違って、業務ではデータ分析をしていない。なので、ここで学んだことを忘れないようにするためには、継続してデータ分析コンペに参加しようと思う。

DeepAnalyticsや Kaggleのコンペに参加して、腕を磨いていきたい。コンペでいい成績を取ることによって、力をつけていきたい。

今は、データサイエンスに興味があるが、転職をするかどうかは、まだもう少し見極めが必要。もう少し勉強してみて、この分野が本当に面白いと感じたら、転職を考えよう。

19 Nov 2017, 08:04

データサイエンティスト養成講座を受けた感想(前半)

はじめに

データサイエンティスト協会が主催するデータサイエンティスト養成講座を受けている。

受講の動機

受講の動機は、データサイエンスに興味があり、勉強したかったから。

今まで、機械学習の勉強をしようとして、流行りのDeepLearningにばかり取り組んできた。

しかし、DeepLearningを学んでも現実の問題に適用するのは難しい。

急にAIが流行りだしたから、みんなDeepLearningを勉強し始めたが、

なんか違うというか、ズレている気がしている。

今はお祭り騒ぎのような気がしてならない。

なので、きちんとデータに向き合う力、

そしてそれを現実に応用できる力をつけるためにこの講座に申し込んだ。

裏の理由は、kaggleや DeepAnalyticsで、データがcsv形式で与えられた時、

分類問題や予測問題に取り組む力が欲しかったから。

こういう機械学習コンペの攻略法的な書籍やwebページが探しても見つからないのだ。

この講座では、DeepAnalyticsの練習問題に実際に取り組んでいくことで、

機械学習のモデル構築の手法を学ぶという実践的な講座。

受講生の人たちは、会社から派遣されてきたデータサイエンス部所属の人たちがほとんどだ。

自分は、趣味で自費(8万円!)で、しかも会社には受講していることを秘密にして受講している。

おそらくそんな人はほとんどいない。

概要

DeepAnalyticsのコンペにチームで取り組んでいく。

講座では、まずは講義がありそのあとに演習課題がだされてそれに取り組む。

演習課題はチーム内で相談しながら進めていくので、わからなくても教えあえる。

演習課題は、時間内に終わらないので、それが宿題になる。

チーム内や講義内容の情報共有は、グループウェアのサイボウズLiveが使われる。

各チームごとにグループが作成されて、情報共有できる。

各回の内容

第1回

初回の講座では、Rの基礎とモデルの評価方法が紹介される。

私は今までPythonを使ってきたので、Rのことがわからなかったので、

なれるまでは一苦労だった。

データの処理方法として、dplyrというライブラリが紹介される。

ちょうど、Javaでstreamについて勉強していたので、

dplyrはそれと比較すれば理解はしやすかった。でも、使いこなせる気がしない。。。

モデルの評価方法としてRMSEとAUCが紹介される。これらの指標は、

これからDeepAnalyticsで評価で使われるからだ。

RMSEは理解が容易だが、AUCはちょっと難しい。講座でも、AUCは時間をかけて説明された。

そのあとは、実際にDeepAnalyticsの銀行問題のデータをダウンロードして解析するという

課題が出された。そこまで難しくはない。後日、模範解答が配られ、dplyrをバリバリに

使ったかっこいい解法が紹介されていてちょっとびっくりした。

課題は、はじめは個人で考えるのだが、わからないときはチーム内で相談することができる。

なので、仲良くなる意味でも相談し合った。

第2回

機械学習アルゴリズムとして決定木が紹介される。

Rで決定木をつかうには、rpartというライブラリを使う。

決定木は、ライブラリをつかうとぱっと計算できてしまう。楽だ。

また、前回紹介されたAUCもrRocというライブラリを使うとすぐに計算できる。

そして、決定木でDeepAnalyticsの銀行問題をとりあえず解いて、

適当にパラメータチューニングしてコンテストに提出することをやった。

手元で計算したAUCよりも低い値がでる。なぜでしょう?という流れから、

過学習の説明が始まる。

過学習を防ぐために、ホールドアウト法とクロスバリデーション法が紹介される。

そのあと、パラメータチューニングの方法としてグリッドサーチが紹介される。

このあたりになると自力でのコーディングはちょっとむずかしい。

あたえられたサンプルコードを弄り回してグリッドサーチをする。

家に帰って、課題をPythonで解いてみた。scikit-learnの勉強にもなる。

しかし、どうもpythonで書いた決定木とRで書いた決定木の結果が一致しない。

なので、Rで書いていくことにした。

caretというライブラリを使うと、グリッドサーチが簡単にできるので試してみた。

しかし、caretは rpartモデルではcp, rpart2モデルでは maxdepthしかできない。

やりたいことは複数のパラメータを同時に探索することだ。

いろいろ調べたらmlrというパッケージでそれが実現できることがわかった。

mlr で グリッドサーチをして、目標だった AUC 0.9 以上を達成!

第3回

今回は、リニア系の手法ということで、ロジスティック回帰が紹介される。

kaggleのアンケート調査では、データサイエンティストが一番利用しているのは、

このロジスティック回帰だそうだ。二番目は、決定木。

その理由は、どちらも結果がわかりやすく、説明もしやすいからだそうだ。

そのままでもそこそこの精度はでるのだけれども、より精度を出すために、

データの加工方法が紹介される。

たとえば、絶対値をとったり、logをかましてデータを直線に近くなるようにする。

また、外れ値を削除した。決定木は条件を分岐していくので、外れ値はそれほど影響はないが、

このロジスティック回帰には影響がかなりある。

データをプロットして性質をつかみ、データを加工して、精度を見ていく。

だんだんデータサイエンティストっぽくなってきた。

最後におまけとして、Lasso回帰やRigde回帰も紹介される。

宿題は、ロジスティック回帰を利用して再度投稿してみること。

私は毎度のことながら、Pythonに課題を移植して取り組んだ。

データ加工は外れ値の除去をしてみたら精度が上がった。

が、他のアイデアはでなかった。しかし、そこはチームで取り組んでいるので、

他のメンバがアイデアを提案してくれた。

私は、事前に Pythonではじめる機械学習を読んでいたので、

そこにかかれていたLassoやRidge, Polynomial Featureを使って、精度を上げたがそれは注意された。

ツールを使えば簡単にいい精度がでるけれども、

それだとブラックボックスの機械を使っているだけになってしまいます。

この講座では、データの様子を良くみて、どう工夫するのかという基礎を講習しているつもりです。

なので、結果としてのスコアも大切ですが、何をしているのかを理解することはもっと重要です。

先生がたの熱意や優しさを感じたのだった。

第4回

集団学習(アンサンブル学習)について学ぶ。バギング、スタッキングが紹介される。

まずは、出力結果の平均をとる平均法が紹介される。

単純に今までの決定木系とリニア系の手法を足すだけで、精度が上がった。これは不思議。

次にバギングが紹介される。これも数式はないものの、

わかりやすい図とサンプルコードとともに紹介されるので、理解できた。

次にスタッキング。これは、理解が難しかった。

しかし、このスタッキングを紹介している書籍やウェブページはあまりないため、

この講座の資料はとても貴重なものだと言われる。たしかに、調べても検索で引っかからない。

こちらもわかりやすい図とサンプルコードが与えられるのだが、

会場にいる人のほとんどが理解できずポカーンとしてしまった。

私は、それから家に帰って4時間くらいうんうんうなってようやく理解できた。

課題は、アンサンブル学習を利用してさらなる精度向上を目指すこと。

最後にxgboostとランダムフォレストという究極秘密兵器が紹介され、頑張ってと言われる。

家に帰り、バギングとスタッキングをPythonで実装しなおした。

スタッキングがどうもバグって時間がかかったものの、

どちらもスクラッチでコーディングすることができた。

しかし、そうやって頑張って理解したものよりも、

xgboostとランダムフォレストをつかったほうが簡単にいい精度がでてしったのだった。

これはすごい。さすがはコンペで大活躍している手法のことだけある。

xgboostはパラメータチューニングが難しい。解説サイトがあったので、それを元にチューニング。

xgboostは GPUで走らせることができるので、Amazonの AWSの EC2インスタンスを借りて、

走らせた。自分のNotePCで走らせるのと比べて爆速でびっくり仰天。

最終的には、以下の結果となった。

`○投稿結果: 0.94031

○手法の工夫

○アンサンブルの工夫

  • ランダムフォレストとxgboostの結果を59:41の割合で足した。

次回は、中間発表と、後半の課題Jリーグ問題だ。後半へ続く。

08 Oct 2017, 03:25

mlrを使って決定木(rpart)の複数パラメータのグリッドサーチをする

はじめに

Rでグリッドサーチをするためのパッケージとしては、caretが有名なのだが、

決定木でグリッドサーチをしようとすると、一つのパラメータについてしかできなかった。

  • rpartモデルではcpのみ
  • rpart2モデルではmaxdepthのみ

やりたいことは、cp, maxdepth, minbucketパラメータを同時にグリッドサーチをしたい。

自力でやろうとすると、for文が3つの入れ子構造になって大変だ。

いろいろ調査したら、mlr(Machine Larning for R)というパッケージで

複数パラメータに対して、グリッドサーチがかけられるとわかったので、そのメモを残す。

今回のJupyter Notebookは gistにあげています。以下抜粋。

mlrでグリッドサーチ

今回の題材は、毎度おなじみの kaggleタイタニック問題を利用する。

前処理を自分でやるのがだるかったので、以下の記事の内容を利用することにした。

以下の記事を参考にして、タイタニック問題のためのコードを書いた。

以下の範囲を指定してグリッドサーチ。

gs <- makeParamSet(
    makeDiscreteParam("cp", values = c(1e-4, 1e-5)),
    makeDiscreteParam("maxdepth", values = seq(5,10,1)),
    makeDiscreteParam("minbucket", values = seq(10,100,10))
)

すると、指定した範囲の組み合わせを総当りに計算していく。

最終的に、best scoreとなった値が出力されて終了。

それを提出したら、titanicのランキングでスコアが上がった。やった。

27 Mar 2015, 12:27

鮮やかにデータを可視化する! coursera で Exploratory Data Analysis を受けた

はじめに

R を利用してグラフを書く方法を学ぶために, coursera で Exploratory Data Analysis を受けた.

[toc]

R を利用してグラフを書く方を学べる内容

この講座は, 探索的データ解析を学ぶ講座. 探索的データ解析とは, 未知の関係性を データの可視化 によって探る方法.

といっても, 前半は グラフの書き方を学ぶ.

3 つの代表的なライブラリが紹介される.

  • Base: “artist’s palette” model
  • Lattice: Entire plot specified by one function; conditioning
  • ggplot2: Mixes elements of Base and Lattice

後半は, クラスタ分析を扱う. これもデータを可視化することで, データの関係性を調べる方法.

Exploratory Data Analysis:

未知の関係性を見つけることが目的.

可視化することで関係性を見つける.

  • To understand data properties
  • To find patterns in data
  • To suggest modeling strategies
  • To “debug” analyses

基本的な手法

  • Five-number summary
  • Histograms
  • Density plot (Scatter Plot)
  • Boxplots (for Numerical Data, ヒゲ)
  • Barplot (for categorical Data)

感想

部内意識調査アンケート

この講座をとったのは, 職場でアンケート調査をする機会があったから. これは, 学んだ統計的手法を生かす絶好の機会だと思った.

集計したデータをまとめて可視化するスキルの取得か急務だったので, 取り組んだ. こういう, 目的があるときは知識の吸収がはかどる ( \^ω\^ )

今まで, R に標準搭載されていた base package で グラフの描写を していたのだが, ggplot2 の qplot をつかうことで良さげなグラフがかける ことに喜んだ. 参考書には, 以下を利用した.

しかし, Excel に嫉妬…

R でグラフを書くには, スクリプトで設定を指定する必要があるので, 使いこなすまでに時間がかかる. なにを指定すれば, どんな図が生成され るのか, いまいちわからない. 試行錯誤しながらも, なんども試しつつ, ようやく一つのグラフをプロットできる. そんな繰り返しだ.

アンケート結果をなんとか R をつかって棒グラフで可視化してみた. しかし, すでに同僚が Excel をつかって帯グラフと折れ線グラフを ちゃちゃっと作成していた…

これには, ショックを受けた. 自分は, 結構苦労して R でグラフ をかけるようになるまでにけっこう時間がかかった. しかし, Excel つかえば, だれでも簡単に, それなりのグラフが作成できてしまうのだ.

Excel すごいと思うとともに, 嫉妬…

もしかしたら, 本格的なデータ解析をする場合以外は, R は必要ないのかも しれない.普通の一般人は, R をつかうよりも Excel を利用するほうが, 学習対効果においてよいのではないかと思う.

CLI と GUI

しかし, 自分はすでに中途半端に R を学んでしまった. こうなったら, い くところまでいこう. Excel にはもう戻れない, 戻らない!!

R と Excel の関係は, CLI と GUI の関係と同じ.

CLI は身につけるまでは苦労するが, 一旦身につければ GUi よりも高い 生産性が出せると信じている.

17 Mar 2015, 23:11

リッカート法によるアンケートの相関分析を R でする方法のメモ

はじめに

5 段階アンケートで欲利用されるリッカート法と, アンケート結果の相関関係をを調べる方法を紹介します.

アンケート結果はカテゴリカルデータなため, そのままでは相関係数が求められないので, 一工夫必要.

[toc]

背景

職場でアンケートを実施したのだけれども, 分析の仕方が分からなかったので, カテゴリカルデータの相関分析方法を調べてみた.

リッカート法の紹介

リーカート法は, 5 段階評価, 7 段階評価のアンケート.

リッカードの視覚化には帯グラフが適している.

R で 相関を調べる

cor 関数を使う.

二変数の相関

cor (bull$YearsPro, bull$BuckOuts)

多変数の相関. 配列で渡す.

myvars <- c ('YearsPro', 'Events', 'BuckOuts')
cor (bull[,myvars])

カテゴリカルデータの相関

numeric データに変換

ここからが本題. カテゴリカルなデータの相関を出すには, カテゴリを数値に変換する必要がある. as.factor, as.numeric を利用する.

val <- as.numeric (as.factor (var))

plot で描写

相関関係の散布図を一度に生成することは, plot 関数で可能だ. しかし, カテゴリカルデータに対しては, あまりみても情報が得られない.

ここにシャレたグラフの R スニペットがある.

ポリクコック相関係数

相関係数はでピアソンを利用するよりも, ボリクコック相関係数を利用するのがよいらしい.

これはまだ試していない.

以下のようなデータから相関関係を読み取る.

向上心 好奇心 危機感 責任感 勤続 所属


3 3 4 4 21- 長野 3 3 5 5 11-20 川崎 2 3 5 4 11-20 川崎 4 5 4 4 21- 長野 4 3 5 4 -10 川崎 1 1 5 3 21- 川崎 1 1 4 2 -10 川崎 1 1 4 4 21- 川崎 4 2 5 5 11-20 長野 1 1 4 1 -10 川崎 2 1 5 3 21- 長野 4 5 3 4 21- 川崎 4 4 4 4 21- 長野

データ処理

カテゴリカルデータを変換.

answerNum <- answer
answerNum$勤続 <- as.numeric (as.factor (answer$勤続))
answerNum$所属 <- as.numeric (as.factor (answer$所属))
print (answerNum)

向上心 好奇心 危機感 責任感 勤続 所属


3 3 4 4 3 2 3 3 5 5 2 1 2 3 5 4 2 1 4 5 4 4 3 2 4 3 5 4 1 1 1 1 5 3 3 1 1 1 4 2 1 1 1 1 4 4 3 1 4 2 5 5 2 2 1 1 4 1 1 1 2 1 5 3 3 2 4 5 3 4 3 1 4 4 4 4 3 2

相関をもとめる

factors <- names (answerNum)
result <- cor (answerNum[,factors])
result <- round (result, 4)
       向上心    好奇心    危機感    責任感   勤続      所属

向上心 1 0.822 -0.1041 0.6775 0.1867 0.4872 好奇心 0.822 1 -0.3991 0.5277 0.3136 0.2521 危機感 -0.1041 -0.3991 1 0.2198 -0.2306 0.0195 責任感 0.6775 0.5277 0.2198 1 0.3947 0.2823 勤続 0.1867 0.3136 -0.2306 0.3947 1 0.4739 所属 0.4872 0.2521 0.0195 0.2823 0.4739 1

散布図

plot (answerNum)

15 Mar 2015, 02:38

R で Excel のデータを読み込む方法のメモ (Windows)

はじめに

Windows 環境に R をインストールします. また, Excel データを R から読み込んでみます.

[toc]

Environment

<div class="outline-text-3" id="text-1-1">
  <ul class="org-ul">
    <li>
      windows 8.1
    </li>
    <li>
      R version 3.1.3
    </li>
  </ul>
</div>

R のインストール

以下から最新版をインストール.

インストール後, パスを通す.

[sourcecode language=”text” title=””]
C:\Program Files\R\R-3.1.3\bin\x64
[/sourcecode]

コマンドプロンプトをを開いて R と打ち込んで R プログラムが立ち上がれば OK.

文字化けする場合はコンソールで chcp 65001 と入力で UTF-8 になる.

Excel 用のパッケージ取得

xlsx パッケージを利用することで, Excel ファイルを R から読みこむことができる.

CRAN からインストール.R コンソール上で,

[sourcecode language=”bash” title=””]
install.packages ("xlsx", dependencies = TRUE)
[/sourcecode]

使い方マニュアル.

読み込みテスト

<div class="outline-text-3" id="text-3-1">
  <p>
    以下のサイトからサンプルデータ習得して読み込んでみる.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.lanlan.co.jp/mtuinfo/exceldata.html">Excel データサンプル</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> require (xlsx)
  </p>

  <p>
    # read excelsample.xls sheet1<br /> data <- read.xlsx ("C:\\Users\\tsu-nera\\Downloads\\excelsample.xls", 2)<br /> head (data)<br /> [/sourcecode]
  </p>
</div>

<div id="outline-container-sec-3-1-1" class="outline-4">
  <h4 id="sec-3-1-1">
    result
  </h4>

  <div class="outline-text-4" id="text-3-1-1">
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> 仮設工事 1 1 401350 320888 401350 79.953 100 401350 320888 401350 33.83 0<br /> 基礎工事及び土工事 1 1 7861394 6296746 7854794 80.098 99.917 7861394 6296746 7854794 0 0<br /> 屋外付帯工事 1 1 435800 348640 435800 80 100 435800 348640 435800 0 0<br /> 木工事 1 1 515720 412576 515720 80 100 515720 412576 515720 0 0<br /> 外壁工事 1 1 3239500 2575650 3207600 79.508 99.016 3239500 2575650 3207600 0 0<br /> 屋根及び板金工事 1 1 402400 321920 402400 80 100 402400 321920 402400 0 0<br /> [/sourcecode]
  </div>
</div>

その他

RExcel を利用すると R へ Excel データを読み込まずとも, Excel 上から R を呼び出すことも可能.

01 Mar 2015, 15:58

org-table の表で記録した睡眠時間を R で折れ線グラフにして表示する方法

はじめに

最近, 寝坊がひどいので, 睡眠時間管理をちゃんと使用と思います.

記録は org-mode で実施しようと思うので, org-mode で作成した表を R をつかって折れ線グラフをかく方法を調べました.

やりかた

org-table を R 言語の中で利用するには以下が必要.

  1. table に tblname をつける
  2. begin_src のオプションで :var オプションをつける.

実例: 睡眠時間の可視化

org-table

以下のようなテーブルを用意します.

#+tblname: sleeptime
 | Date            |  Bed | Wake | Total | fisical |
 |-----------------+------+------+-------+---------|
 | <2014-09-01 月> |   25 |  7.5 |   6.5 |      0. |
 | <2014-09-02 火> |   23 |  5.5 |   6.5 |      0. |
 | <2014-09-03 木> |   23 |  7.0 |    8. |     1.5 |
 | <2014-09-04 木> |   23 |  7.0 |    8. |     1.5 |
 | <2014-09-05 金> |   23 |  7.5 |   8.5 |      2. |
 | <2014-09-06 土> |   25 |  8.0 |    7. |     0.5 |
 | <2014-09-07 日> | 28.5 | 11.0 |   6.5 |      0. |
 | <2014-09-08 月> |   24 |  7.5 |   7.5 |      1. |
 | <2014-09-09 火> | 22.5 |  5.5 |    7. |     0.5 |
 | <2014-09-10 水> | 23.5 |  7.5 |    8. |     1.5 |
 | <2014-09-11 木> |   22 |  7.5 |   9.5 |      3. |
 | <2014-09-12 金> |   21 |  7.5 |  10.5 |      4. |
 | <2014-09-13 土> |   20 |  8.0 |   12. |     5.5 |
 | <2014-09-14 日> | 28.5 |  9.5 |    5. |    -1.5 |
 | <2014-09-15 月> | 23.5 |  7.5 |    8. |     1.5 |
 | <2014-09-16 水> | 22.0 |  7.5 |   9.5 |      3. |
 | <2014-09-17 水> | 23.0 |  5.5 |   6.5 |      0. |
 | <2014-09-18 木> | 24.0 |  7.5 |   7.5 |      1. |
 | <2014-09-19 金> | 24.0 |  7.5 |   7.5 |      1. |
 | <2014-09-20 土> | 24.5 |  8.0 |   7.5 |      1. |
 | <2014-09-21 日> | 26.0 |  8.0 |    6. |    -0.5 |
 | <2014-09-22 月> | 23.0 |  7.5 |   8.5 |      2. |
 | <2014-09-23 火> | 28.5 |  8.5 |    4. |    -6.5 |

表の先頭に, tblname:をつけるのがポイント

#+tblname: sleeptime

R

次に 表を R のデータフレームとして取り込んで処理します.

  #+begin_src R :file sleeptime.png :width 500 :height 500 :results graphics :var sleeptime=sleeptime
  date <- strptime (sleeptime$Date, "<%Y-%m-%d")
  plot (date, sleeptime$Total, xlab='date', ylab='Sleeptime', main='Plot of Sleeptime (2014/09)', type='l')
# #+end_src

:var オプションがポイント.

:var sleeptime=sleeptime

評価すると,以下のような折れ線グラフができました.

28 Feb 2015, 11:12

Coursera で Reproducible Research をうけた

はじめに

以前, org-mode と R を組み合わせたらとても気持ちがよかった.

そこで, もうすこし R と org-mode の可能性を知りたくて, Coursera で Reproducible Research をうけた.

内容

全部で 4 週間. 動画リストが以下にある.

初めの週で, Reproducible Research についての概要について語られる.

Reproducible Research という考え方の情報が少ないので, ネットで情報を検索するよりも, 講義資料が一番役に立つ.

2,3 週目では, 実際に Reproducible Research を実践するためのツール が紹介される. この講義では, knitr をつかう.

紹介された内容にしたがって, 課題が 2 つ出される. github, rpubs に課題を投稿してペアレビューをする.

以下, 自分の提出した課題.

最後の週は, Reproducible Research の実施例が紹介される. 動画は Youtube でも見れる.

感想

Emacs で頑張る

講義では RStudio を利用することが求められるのだが, もともとの動機が Emacs org-mode で Reproducible Research をしたかったので, RStudio を頑なに拒否して, Emacs をつかった.

文芸的プログラミングと R はとても相性がいい

文芸的プログラミングと R はとても相性がいい. この件について再認識した.

そしてなにより, 生成されるドキュメントがとてもかっこいいところが 一番気に入った. こういう感動を忘れずにいたい.

Reproducible blog を目指して

再現可能性という考え方もおもしろいと思った.

Reproducible Research が注目を集める背景には, 以下のようなことがある.

自分は研究者ではないので, いまいちピンとこないのだけれども, 身近な問題に置き換えると, ネット上でみつけたコード辺を動かしてみよう としても動かないことがままある.

もしかしたら, 動かないコードやコンパイルできないコードを, 何食わぬ顔で自分も公開しているかもしれない.

最近では, Web 上でコードを実行できるサービスも出てきた.

このようなサービスを利用することで,

Reproducible Blog 再現可能なブログ

を目指そうと思った.

学習メモ

以下, 自分の勉強メモを

Reproducible Research とは

再現可能な研究. 再現可能なデータ分析.

The ultimate product of academic research is the paper along with the full computational environment used to produce the results in the paper such as the code, data, etc.

Computational X の X の部分にすべて適用できる考え方

  • コンピュータ心理学
  • コンピュータ生理学
  • コンピュータ生物学 … etc.

クラシックの交響曲は様々な楽器かそれぞれのメロディーを奏でて, 一つの音楽をつくる.

テンポや曲調がまったく同じ音楽を再現することは不可能だ. (Replication:複製は不可能)

しかし, 楽譜にしたがって演奏することで, 演奏者が違っても, 世界中のどこでも, 作曲家の示した音楽を再現させることは可能だ. (Reproducible: 再現)

音楽における楽譜がデータ解析におけるスクリプトとなる.

以下のメリットがある.

  • Transparency
  • Data Availability
  • Software / Methods Availability
  • Improved Transfer of Knowledge

統計解析は異常値の除去の方法によって, 得られる結果が異なることがある. 得られた結果の論拠を強くするために, 論拠となったデータを誰もが分析で きるかたちで共有することが重要となる.また, だれもがデータを分析でき ることで, より議論をタイムリーに生み出しやすくできる.

登場の背景

技術の向上が, Reproducible Research の台頭を支えている.

  • コンピュータの計算能力が極めて向上し, 洗練された解析が可能になった.
  • 既存のデータベースが “megadatabeses”にマージ可能となった.
  • データ収集のスループットが新しい技術によって向上した.

Literate (Statistical) Programming

記事は text , code (chunks) からなる

  • A documantation Language (human redable)
  • P programming language (machine readable)

文芸プログラムは

  • 人間が読みやすいドキュメントに waved される.
  • コンピュータが実行可能なドキュメントに tangled される.

Research Pipeline

  1. Mesured Data
    • Processing code
  2. Analytic Data
    • Analytics code
  3. Computational Resuluts -> Presentation code
  4. Presentation Results
    1. Fugures
    2. Tables
    3. Numerical Summaries
  5. Articles

管理するファイルの分類

  • Data
    • Raw data: 生データ
    • Processed data: 前処理がおわったデータ
  • Figures
    • Exploratory figures 分析の途中でできる図.
    • Final Figures: 最終結果の図.
  • R Code
    • Raw scripts
    • Final scripts
  • Text
    • README.md
    • R markdown

R markdown

R Studio のための マークアップ言語.

RStudio と R markdown を利用することで 簡単に Reproducible な report が作成可能.

knitr

HTML や markdown, pdf への export. R と Markdown を利用して文芸的プログラミングをするためのツール.

CRAN から取得可能.

install.packages ('knitr', dependencies = TRUE)

evidence-based data analysis

13 Feb 2015, 15:08

RPubs に Emacs から投稿してみた (R Markdown, org-mode)

はじめに

RPubs は R Studio に依存する R markdown 共有サービスなのですが, R Studio を利用せずに, Emacs から 投稿できるか調べてみました.

rpubsUpload をつかう

結論としては, rpubsUpload という関数を利用すると, コードを評価することで RPubs に投稿できる.

# Upload をする
result <- rpubsUpload ("My document title", "Document.html")

# Upload 結果をブラウザで開く
if (!is.null (result$continueUrl))
   browseURL (result$continueUrl)
else
   stop (result$error)

ブラウザを開くと, ログイン画面が現れるのでログインして OK を押せばよい.

Emacs から投稿

R markdown を Emacs から投稿

Emacs で R Markdown を作成して, 投稿することができる.

以下の記事を参考にして Rmd を html に変換して, コードを評価する.

# Upload Test

see: [rpubsUpload - R Graphical Manual] (http://rgm3.lab.nig.ac.jp/RGM/R_rdfile?f=markdown/man/rpubsUpload.Rd&d=R_CC)

# upload a document

this is my first upload from function

```{r sample, echo=TRUE, results='hide'}
require (markdown)
result <- rpubsUpload ("rpubsUpload usage", "RpubsUploadSample.html")
if (!is.null (result$continueUrl)) {
    browseURL (result$continueUrl)
}else {
    stop (result$error)
}
```

org-mode から投稿

markdown よりも org-mode のほうがなれているということもあり, org-mode からも投稿してみました.

M-x org-html-export-to-html で org-mode を html に変換して, コードを評価.

#   * Upload Test
#   this is my first upload from Emacs org-mode
#  
# ** convert to html
#    M-x org-html-export-to-html
#  
# ** run script
#  
# #+begin_src R :eval query
# require (markdown)
# result <- rpubsUpload ("Emacs org-mode upload", "UploadFromOrgMode.html")
# if (!is.null (result$continueUrl)) {
#     browseURL (result$continueUrl)
# }else {
#     stop (result$error)
# }
# #+end_src
#  

12 Feb 2015, 15:12

Emacs で knitr と R markdown を使う方法 (Rmd)

はじめに

coursera で, Reproducible Research の講座をとっています.

knitr の演習が出てきて, R Studio を使うように強いられます.

Emacs が捨てがたいので, knitr を Emacs で利用する方法について調べました.

knitr

knitr R と Markdown を利用して文芸的プログラミングをするためのツール.

CRAN から取得可能.

install.packages ('knitr', dependencies = TRUE)

polymode

polymode を利用すると, 複数のモードを共存させる. これを利用して R-mode (ESS) と markdown-mode を共存.

;; MARKDOWN
(require  'poly-markdown)
(add-to-list 'auto-mode-alist '("\\.md" . poly-markdown-mode))

;; R modes
(require  'poly-R)
(add-to-list 'auto-mode-alist '("\\.Snw" . poly-noweb+r-mode)
(add-to-list 'auto-mode-alist '("\\.Rnw" . poly-noweb+r-mode))
(add-to-list 'auto-mode-alist '("\\.Rmd" . poly-markdown+r-mode))

markdown への変換

ess-swv-knit で Rmd を md に変換できる.

HTLM への変換

html に変換するには, 以下の方法がある.

(defun rmarkdown-to-html ()
  (interactive)
  "Run knitr::knit2html on the current file"
  "https://gist.github.com/kohske/9128031"
  (shell-command
   (format "Rscript -e \"knitr::knit2html ('%s')\""
       (shell-quote-argument (buffer-file-name)))))

;; do this in R process
;; library (rmarkdown); render ("file_name.Rmd")

(defun ess-rmarkdown ()
  (interactive)
  "Compile R markdown (.Rmd). Should work for any output type."
  "http://roughtheory.com/posts/ess-rmarkdown.html"
  ; Check if attached R-session
  (condition-case nil
      (ess-get-process)
    (error 
     (ess-switch-process)))
  (let* ((rmd-buf (current-buffer)))
    (save-excursion
      (let* ((sprocess (ess-get-process ess-current-process-name))
         (sbuffer (process-buffer sprocess))
         (buf-coding (symbol-name buffer-file-coding-system))
         (R-cmd
          (format "library (rmarkdown); rmarkdown::render (\"%s\")"
              buffer-file-name)))
    (message "Running rmarkdown on %s" buffer-file-name)
    (ess-execute R-cmd 'buffer nil nil)
    (switch-to-buffer rmd-buf)
    (ess-show-buffer (buffer-name sbuffer) nil)))))

(define-key polymode-mode-map "\M-ns" 'ess-rmarkdown)