データサイエンティスト育成講座(2)
前回の続きです。
今回は第3章「記述統計と単回帰分析」を読んで、以下を行いました。
まずは準備として分析するデータをダウンロードし、PandasのDataFrameで読み込んでおきます。
「記述統計」というのは、
集めたデータを整理して見やすくし、特徴をつかむ方法のことだそうです。
Pandasのdescribeメソッドを使うと、平均・中央値・分散などが一気に計算されて表になるのでとても便利です。
(要約統計量というらしい)
age | Medu | Fedu | traveltime | studytime | failures | famrel | freetime | goout | Dalc | Walc | health | absences | G1 | G2 | G3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 | 395.000000 |
mean | 16.696203 | 2.749367 | 2.521519 | 1.448101 | 2.035443 | 0.334177 | 3.944304 | 3.235443 | 3.108861 | 1.481013 | 2.291139 | 3.554430 | 5.708861 | 10.908861 | 10.713924 | 10.415190 |
std | 1.276043 | 1.094735 | 1.088201 | 0.697505 | 0.839240 | 0.743651 | 0.896659 | 0.998862 | 1.113278 | 0.890741 | 1.287897 | 1.390303 | 8.003096 | 3.319195 | 3.761505 | 4.581443 |
min | 15.000000 | 0.000000 | 0.000000 | 1.000000 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 0.000000 | 3.000000 | 0.000000 | 0.000000 |
25% | 16.000000 | 2.000000 | 2.000000 | 1.000000 | 1.000000 | 0.000000 | 4.000000 | 3.000000 | 2.000000 | 1.000000 | 1.000000 | 3.000000 | 0.000000 | 8.000000 | 9.000000 | 8.000000 |
50% | 17.000000 | 3.000000 | 2.000000 | 1.000000 | 2.000000 | 0.000000 | 4.000000 | 3.000000 | 3.000000 | 1.000000 | 2.000000 | 4.000000 | 4.000000 | 11.000000 | 11.000000 | 11.000000 |
75% | 18.000000 | 4.000000 | 3.000000 | 2.000000 | 2.000000 | 0.000000 | 5.000000 | 4.000000 | 4.000000 | 2.000000 | 3.000000 | 5.000000 | 8.000000 | 13.000000 | 13.000000 | 14.000000 |
max | 22.000000 | 4.000000 | 4.000000 | 4.000000 | 4.000000 | 3.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 75.000000 | 19.000000 | 19.000000 | 20.000000 |
こんな感じで見れます。
ところで私は今、jupyterからはてブロにそのまま表をコピペしてきれいに表示されることにモーレツに感動しています。
…あとは変動係数とか散布図・相関係数、単回帰分析などの計算の仕方。
このへんはモノ自体はよく知ってるので、コマンドが勝手に打てるようになるくらいまで練習したいですね。
箱ひげ図は初めて知りました。
勝手に異常値を識別してくれるんですね。(多分)
そのために後日章末の総合問題を繰り返し解いてみることにします。
(やったら追記で書きます)
では。
5/9追記
総合問題やってみました。
3-1 統計の基礎と可視化
ワインの質を表すデータをダウンロードし、要約統計量と各データの相関を可視化する問題です。
pandas.read.csvで読み込み、describeメソッドで要約統計量を、searborn.pairplotで相関図を出力させます。
データの項目は上から(左から)順に
酒石酸濃度、酢酸濃度、クエン酸濃度、残留糖濃度、塩化物濃度、有利亜硫酸濃度、亜硫酸濃度、密度、pH、硫酸塩濃度、アルコール度数、quality(総合的な品質)
…度数とquality以外はそのデータの持つ意味がわからん
酸たちの濃度は酸っぱさ・苦さ・渋さとかに関わって残留糖濃度は甘さに関わるのかな?
グラフからは、例えば
・酒石酸濃度と密度が正の相関にあること(なぜか?)
・酒石酸濃度とpHが負の相関にあること(酸性が強くなるほどpHは0に近づく)
が読み取れます。
酢酸はどうしてpHとの相関が見えないのかしら。
あと、一番重要なqualityと相関を持ってそうな因子があまりはっきりとは出てきません。
scipy.stats.pearsonrで一つずつ調べたところ(一気にできるのかな)一番相関が強いのは、
アルコール度数 (相関係数: 0.476、p値: 2.83e-91)
一番負に強いのが、
酢酸係数 (相関係数: -0.391、p値: 2.05e-59)
となりました。
http://advanced-brewing.com/U-ken/memo_01_acid_fruit.html
によると、酢酸は発酵中に酵母が作ったり、酢酸菌がアルコールを酢酸に変化させたりしてできるらしい。
あの酸っぱい味や香りも強くなってしまうからqualityが下がるのでしょう。
本文中で用いていた数学の成績データを用いて、不平等さを測るジニ係数を男女それぞれで計算する問題。
(東大の入学式の上野千鶴子さんの式辞で話題になった問題を想起させますが)
ローレンツ曲線がこんな感じ。
ほとんど重なってて男女の差は見えないですが。
45度線(E)とローレンツ曲線に囲まれる部分の面積の2倍がジニ係数です。
面積といっても、計算は与えられたデータから簡単にできます。
(解答例のコードを見ると和を取った後2倍していて、一見計算式とズレているように見えますが、これはforでiとjが動く範囲が計算式のそれのちょうど半分になっているからです)
それで求めたジニ係数がこちら。
男性のジニ係数: 0.1719735
女性のジニ係数: 0.1723783
というわけで、演習問題でした~