第4章は統計を扱います。


今回も「シロート統計学」のハルさんとコラボレーションすることとなりました。


シロート統計学はEZRを使った統計分析をわかりやすく解説されています。


 


第4章はシロート統計学で使われていたEZRをRで行うとどうなるのか?といった視点で進めていきます。


今回使うデータもハルさんのサイトと同じものを使わせでいただく事になりました。それぞれ見比べることで参考にしてみてください!


今回は相関係数(ピアソン・スピアマン)を紹介します



まず相関係数についてはハルさんのサイトをご参照ください。



また1.準備〜4.データの読み込みまでは【4-1】Rでt検定を行う方法と全く同じ流れになります。
もし1〜4まででわからない部分があれば確認してみてください。

 

1.準備

第4章は毎回ExcelデータをダウンロードしてRを使うのでプロジェクトで管理して行うことを勧めています。

 

ここではR練習というプロジェクトを作り、Excelファイルを入れるためのdataフォルダを作っています。
これを前提に次から進めていきます。
スクリーンショット 2019-10-20 7.54.14


2.スクリプトファイルの作成

次にRのコードを書くためのスクリプトファイルを作ります。
ここでは【4-15】相関係数.Rとしておきます。

スクリーンショット 2020-07-14 23.41.44


3.データのダウンロード


今回もハルさんのサイトのデータを使わせていただきます。

デモデータ(pearsonの相関係数)

この章ではRを使ってダウンロードしています。


download.file(url = “ファイルのURL”,
        destfile = “保存したい場所/ファイル名”)
urlはデモデータで右クリック → リンクのアドレスをコピー
destfileは保存場所と保存のファイル名を指定します。


実際のコードは以下になります。
前回のコードのURL(" "の中)とdestfileのdata/以降を変更するだけでOKです。
#データのダウンロード
url <- "https://haru-reha.com/wp-content/uploads/2018/06/demo-pearson.xlsx"
destfile = "data/demo-pearson.xlsx"
download.file(url, destfile)
スクリーンショット 2019-11-23 22.14.17


dataフォルダにダウンロードできたことを確認します。


4.データの読み込み

データを読み込みます。
今回は【4-0】第4章を進めていく上での準備で行った方法で進めます。

View Fileでデータを確認します。

スクリーンショット 2019-12-08 20.31.39


データが入っているセルを確認します。
B2からC32までデータが入っています(B2:C32と表記)
スクリーンショット 2020-07-14 23.51.28




次にImport Datasetでデータを取り込みます。
スクリーンショット 2019-12-08 20.31.39



Import画面ではName, Sheet,Rangeを指定します。

Name:ハルさんのサイトと同じでborgとします(大文字・小文字は別物とされます)
Sheet:このExcelは1つしかデータがないのでDefaultのままでOK
Range:先ほど確認したB2:D32(実は今回のように表以外に余計なものがなければ空欄でもOK)

スクリーンショット 2020-07-14 23.53.34



Importボタンを押す前に右にあるコードをコピーしスクリプトファイルに貼り付けることも忘れずに行います。
library(readxl)
borg <- read_excel("data/demo-pearson.xlsx", 
    range = "B2:C32")
View(borg)

データが正しく入っていることを確認します。
スクリーンショット 2020-07-14 23.54.38



これでデータの取り込みは完成です。

5.散布図で確認

相関係数を見るときはいきなり相関係数を求めるのではなく、先に散布図を書くほうが事故が減ります。
【3-3】Rのggplot2で散布図を作るgeom_point関数で散布図を書く方法を紹介しています。
散布図を書くのはgeom_point関数、回帰直線を書くのはgeom_smooth関数です。
geom_smooth関数では(method="lm")を必ず付ける必要があります。
これは直線ですよという意味です。直線以外にも色々あるんです。
ちなみに色を付けるときはcolor=を、se=FALSEは今回はあってもなくても構いません。

library(tidyverse)
ggplot(data=borg,aes(x=`6MWD`,y=VC))+
  geom_point()+
  geom_smooth(method = "lm", color="red", se=FALSE)
注意!
列名や変数名の最初の文字が数字の時(今回でいうと6MWD)の場合、x=6MWDのようにするとエラーが出ます。こういった場合は` `(shiftキーを押しながら@マークを押す)でエラーを回避できます。でもなるべくなら最初の文字は数字じゃない方が後々便利です。


スクリーンショット 2020-07-15 0.06.04


他にも「もっとかんたんに散布図だけみたい」というときはplot関数があります。

plot(borg$`6MWD`, borg$VC)
ここでも`6MWD`と` `を忘れないようにします。
スクリーンショット 2020-07-15 0.05.51

こうみると6MWDとVCは直線上の関係にあるのが見て取れます。
こういった場合はピアソンの相関係数が使えます。
逆に外れ値が多いデータや直線でないデータでは相関係数は使えなくなります。

外れ値がない場合
スクリーンショット 2020-07-15 0.34.07

外れ値が5個あった場合
スクリーンショット 2020-07-15 0.33.58


そして二次関数のようなデータはうまく行きません。他にも「10代〜30代は良好、40〜50代は不良、60代以降は良好」みたいなデータもうまくいきません。
(相関係数は「一方が上がる」するともう一方が「上がるor下がる」ということだけで、2時間数のように途中で傾向が変わるデータには対処できない)
スクリーンショット 2020-07-15 0.36.06
上記のような例は相関係数を出すだけではわかりません。散布図で確認して初めて分かることなので、相関係数は「まずは散布図!」とイメージしておいてください。


6.相関係数の検定の実施

相関係数の検定は1行で終わりますが主に2種類あることを知る必要があります。

パラメトリック:ピアソンの相関係数
ノンパラメトリック、外れ値が多い:スピアマンの相関係数



どちらも相関係数の検定はcor.test(1つ目の列, 2つ目の列)です。

cor.test(borg$`6MWD`,borg$VC)
スクリーンショット 2020-07-15 1.02.00

もしスピアマンの相関係数を求めるときはmethod = "spearman"を追記します。
cor.test(borg$`6MWD`,borg$VC, method = "spearman")
スクリーンショット 2020-07-15 4.00.34


【4-2】RでMann-Whitney U 検定を行う方法でも紹介しましたが、ノンパラメトリックの手法では列の中に同じ数値があると警告がでます。

スクリーンショット 2020-07-15 4.07.07
このままでも大丈夫ではありますが(EZRも同じ字問題が起こっているが警告が出ないようにしている)、もし「警告をどうにかしたい!」とあれば、coinパッケージのspearman_test関数を使うという方法もあります(そこまでしている人はいるのでしょうか?)

spearman_test(1つ目の列 ~ 2つ目の列, data=データ)という書き方になります。

library(coin)
coin::spearman_test(`6MWD`~VC, data=borg)

cor(borg$`6MWD`,borg$VC, method = "spearman")
スクリーンショット 2020-07-15 4.17.43


ただspearman_test関数は検定はしてくれますが、相関係数自体を出してくれません。
そのためcor関数で相関係数を求める必要があります。


7.まとめ

今回は相関係数の求め方を紹介しました。

今回紹介していませんが、ハルさんのサイトにもあるように相関関係と因果関係は別物という考えはとても大切です。

そして、相関係数を出す前に散布図を作るという習慣をつけることが大切です。

散布図を出した上で直線的な関係性がありそうであれば相関係数を求めてください。

【1-3】Rのソフトはどれを使えばいいか?目的別チャートを作りましたではRを使うためのソフトを紹介しました。


その中で統計を勉強してみたいという方はRstudio + EZR(Rコマンダー)の組み合わせをおすすめしました。

Rを使っている方は「EZR(Rコマンダー)しか使っていない」や「Rstudioしか使っていない」という方が多いのですが、実はRstudioからRコマンダーやEZRを簡単に呼び出すことができます。

今回はRstudioからEZRを呼び出す方法を紹介します。


1.EZRのインストールをRstudioだけで行う。

EZRのダウンロード、インストールは自治医科大学附属さいたま医療センターのページで紹介されていますが、Rstudioからでも行えます。

①RstudioのInstallボタンを押す
Rstudioの真ん中あたりにInstallボタンがあります。これはRの様々なパッケージをプログラムを書かずにダウンロード、インストールすることができます。
スクリーンショット 2020-04-24 19.34.48

②RコマンダーとEZRをインストール
次にRコマンダーとEZRをダウンロードします。

Packagesという欄にrcmdrと入力します。
そうすると候補にRcmdrとRcmdrPlugin.EZRという2つが見つかります。
スクリーンショット 2020-04-24 19.34.58

まずはRcmdrをインストールし、次にRcmdrPlugin.EZRをインストールします。

この作業は今回やってしまえば次回以降は行う必要はありません。


2.EZRを呼び出す

EZRを呼び出すには2つ手順が必要ですが慣れるとすぐにできるようになります。

①Rコマンダーを呼び出す(2種類の方法があるので好きな方でいいです)
②RコマンダーからEZRを呼び出す


①Rコマンダーを呼び出す

1つめの方法はPackagesからRcmdrをクリックして呼び出す方法です。
スクリーンショット 2020-04-24 19.35.03
2つめの方法は下のコードを入力する方法です
library(Rcmdr)

慣れるとコードを書いた方が早いですが、最初はクリックする方法の方が早いかもしれません。
(自分がそうでした)


②RコマンダーからEZRを呼び出す

EZRはRコマンダーから呼び出します。

ツール→Rcmdrのプラグインをロード…を選択
スクリーンショット 2020-04-24 19.35.13


RcmdrPlguin.EZRが選択されていることを確認してOK
スクリーンショット 2020-04-24 19.35.21

OKを押して再起動
スクリーンショット 2020-04-24 19.35.28

これで完了です。
見た目は似ていますが「標準メニュー」となっていればEZRになっています。
スクリーンショット 2020-04-24 19.35.36



3.注意点
・RstudioのPackageにRcmdrPlugin.EZRがあるのですが、クリックしても何も反応しません。上記の手順が必要です。

・EZRを使うと結果はRstudioのコンソール画面に出てきます

・1度開いたEZRを×で閉じてしまうと、同じ方法を行っても開かないことがあります。一旦Rstudioを再起動するかプロジェクトを開き直すとまたできるようになります。

・グラフはRstudioのPlotではなく別ウィンドウで開くことがあります。

この辺りはパソコンのOSでも挙動が違うかもしれません。私はmacを使っていますが、もしWindowsで違う挙動があればこの記事でも紹介しますので連絡いただけると嬉しいです。


4.まとめ
今回はRstudioとEZRを同時使いするための方法を紹介しました。

Rstudioだとどう使えばいいかわからない。でもいずれ使えるようになってみたい。という方は同時使いをがおすすめです。EZRの手軽さ、それがどのようなコードで書かれているのかを同時に体験することができると思います。

またEZRの使い方はハルさんのシロート統計学講座がおすすめです!
無料ですが、これだけでEZRの使い方はほとんど理解できると思います。






最近は大きなお金を出さなくてもプログラミングを学べるサービスやサイトが増えてきました。

データ分析を行うRやpythonに関しても同様で、その気になれば無料で学ぶこともできます。

私は2018年夏〜2019年春にかけてRのオンラインのコースを受講しました。

そして今回はpythonを使ったデータサイエンスを学ぶために2019年12月〜2020年3月に開催された東京大学グローバル消費インテリジェンス寄附講座(GCI 2019 Winter)を受講しました。



スクリーンショット 2020-03-25 17.09.59
おかげさまで無事に終了することができました。

今回はGCIについて紹介します。


1.参加者

GCI 2019 Winterでは東京大学の学生だけでなく、社会人、他の大学生、高校生と幅広い層が参加しました。

受講には事前テストがあります。
受講前に、スキルを確認のための簡易のテストを実施する可能性があります。内容は主にPythonのプログラミングに関するもので、一部Numpyや行列処理に関する問題を出題する予定です。レベルとしては基礎的なものを出題します( https://github.com/jakevdp/WhirlwindTourOfPython のようなレベルです)。申込者が多数の場合は、テストの結果および当フォームの記載内容も加味して一定数に申込者を絞った後、最終的には抽選で受講者を決定する予定です。
上記リンクを完全に理解できていなくても十分大丈夫です。出題されるのは基礎的な範囲です。
ただ講義が始まると何度も資料を見直しながら試行錯誤することになるので、事前に予習としてテキストを見てコードを書く練習になります。


2.講義内容

主に毎週配られる講義資料での自主学習、宿題、コンペ、最終課題があります。

講義内容
スクリーンショット 2020-03-28 15.11.43

上記はGCI 2019 Winterのスケジュールです。講義毎にiLectというものをつかい、オンライン上で資料を読みコードを実行しながら学ぶ形でした。資料はダウンロードすることも可能です。

今回webスクレイピングやpythonを使ったアプリ開発などは講座の対象範囲外でした。


宿題
1回 / 1〜2週のペースで宿題があります。
宿題は提出すると0時に採点され、締切までに正解することが求められれました。
締切日に宿題を行うと1回勝負の提出になるので早めに行うことがポイントです。
またslackを通じて学生同士で情報共有ができる、締め切り数日前から受講生同士でヒントを出し合ったりしていました。


コンペ
kaggleというデータのコンペティションのサイトがあるのですが、それに準じたコンペが3回ありました。コンペではあるデータから機械学習の予測モデルを作り、未知のデータでどの程度精度が出るかを競いました。受講生同士でスコアを競い合うのでかなり修行になりました。

またslackで情報共有したり成績優秀者の解法を共有したりとテキストでは学べないことを多く学びました。

個人的にはこのコンペでかなり鍛えられた感覚があります。上位に入るにはテキストにあること以上に調べることが増えるからです。

自分は3回のコンペで38/799位、116/465位、101/628位でした。

もっと上位を目指したかったのですが、そうは甘くなかったです。


slackによる情報共有
前述にありましたがslackによる情報共有が多く行われていました。

宿題やコンペの質問や講義以外のその他の有用な情報、諦めそうな時の励ましの言葉などオンラインであっても1人ではないという感覚は強かったです。

Edxでもそうでしたが、独学だとどうしても息が切れそうな中、一緒に勉強している人がいるという感覚はとても大切な要素だと思います。

何度か心折れそうになりましたが、最終的には約400人が合格しました。
共有する力は大きいと思います。


修了者イベント

修了証の発行、修了者へのクローズなコミュニティなど修了後のメリットもあります。
修了者向けのイベントがある予定ですが、COVID-19の影響で延期になりました。


3.実は講義資料は今でも確認できる
事前のテスト、宿題、コンペ、最終課題など非公開のものもありますが、実は前年度の講義資料は書籍化されています。

東京大学のデータサイエンティスト育成講座
大澤 文孝
マイナビ出版
2019-03-14



またその気があれば講義データも無料公開されています。



内容は一緒ですが書籍は以下のメリットがあります。

・自分のパソコンで始めるためのインストール、設定方法が紹介されている
・(確実に)見やすい
・辞書のように使える

なので私は「この講義を受ける」と思った日に書籍を購入して何度も見返しました。


4.自分が経験できたこと
この3ヶ月、pythonほぼ未経験者でも講義資料やslackを通じた情報共有で以下のことが体験できました。

・pythonの基本的な使い方
・numpyやmatplotlib、pandasなどの使い方
・探索的データ分析(EDA)
・scikit-learnを使った機械学習
・(コンペを通じて)lightGBMなどの勾配ブースティングの使用経験
・クロスバリデーションやGridSearchCV、optunaを使ったパラメータ調整
・成績優秀者の解法に触れる
・「データ集めてとりあえず機械学習・AIを使えば何かいい結果が出るんだ」なんて甘い話はないこと


本だけでは学べない経験ができたと思います。


5.次回の予定

4月以降に次回GCIが開催される予定ですが、次回は学生限定だそうです(東京大学以外でもOK)。
社会人向けは過去4年間は冬に開催されていましたが、2020年も開催されるかどうかは決まっていません。もともと2019年度も一時開催しない予定と連絡があったので、あったらラッキーという認識です。

学生の方はチャンスだと思いますし、もし今後社会人の講義が開催されることがあれば検討の価値はあるかなと思います。


6.まとめ

今回は東京大学グローバル消費インテリジェンス寄附講座(GCI)について紹介しました。
もし興味があればtwitterで #GCI で受講生のツイートが確認してみてはいかがでしょうか。
(2019年12月〜2020年3月の期間で検索)

amazon
東京大学のデータサイエンティスト育成講座
大澤 文孝
マイナビ出版
2019-03-14



楽天
東京大学のデータサイエンティスト育成講座 [ 塚本邦尊 ]
東京大学のデータサイエンティスト育成講座 [ 塚本邦尊 ]


↑このページのトップヘ