更新していなかった言い訳
更新が遅くなりました。
理由(というか言い訳)はたくさんありますが、主にはあまりコードを書いていなかったのがあると思います。
年が明け授業と課題の量が少し落ち着いたと同時に、卒業制作や卒業後の進路を色々考えて、自分の中で迷走中だったためあまり手を動かしていませんでした。
という事で自分のブログは毎日更新してたけど、Qiitaに書くほどの内容がなかったというのが正直な感想。
今もまだやや迷子ですが、とりあえず卒業制作が決まり今はそれをがんばって作っています。
授業で少しpythonを学んだ
授業中はクラウド上で少しデータをいじりました。またKaggleという驚くべきサイトの事もしりました。
授業後に自分でKaggleからデータ取ってきてちめちめ調べながら、初めてやってみたのがこちら。
kaggleからデータget
https://www.kaggle.com/unsdsn/world-happiness#2019.csv
色々相関とか見れそうだなと思ったのでこれにしました。
googleドライブからマウント
from google.colab import drive
drive.mount('/content/drive')
必要なCSVは予めgoogle drivemへアップロード
必要そうなライブラリーのimportとデータ取得
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("/content/drive/My Drive/2019.csv")
これ以外にもライブラリーがめちゃくちゃたくさんある事に感動!
データの数と欠損値の有無確認
df.count()
Overall rank | 156 |
---|---|
Country or region | 156 |
Score | 156 |
GDP per capita | 156 |
Social support | 156 |
Healthy life expectancy | 156 |
Freedom to make life choices | 156 |
Generosity | 156 |
Perceptions of corruption | 156 |
Healthy life expectancy | 156 |
データの数156,欠損値なし
これをしないと全データ表示させるのか先頭の何個かだけ表示させるのかわからないからやってみた。
あと欠損値の多いデータはややこしそうなイメージがあったので避けたかった。
(今後はチャレンジする必要があると思うがとりあえずこれ初回やからね)
先頭20個だけ表示してみる
df.head(20)
Overall rank | Country or region | Score | GDP per capita | Social support | Healthy life expectancy | Freedom to make life choices | Generosity | Perceptions of corruption |
---|---|---|---|---|---|---|---|---|
1 | Finland | 7.769 | 1.340 | 1.587 | 0.986 | 0.596 | 0.153 | 0.393 |
2 | Denmark | 7.600 | 1.383 | 1.573 | 0.996 | 0.592 | 0.252 | 0.410 |
3 | Norway | 7.554 | 1.488 | 1.582 | 1.028 | 0.603 | 0.271 | 0.341 |
4 | Iceland | 7.494 | 1.380 | 1.624 | 1.026 | 0.591 | 0.354 | 0.118 |
5 | Netherlands | 7.488 | 1.396 | 1.522 | 0.999 | 0.557 | 0.322 | 0.298 |
6 | Switzerland | 7.480 | 1.452 | 1.526 | 1.052 | 0.572 | 0.263 | 0.343 |
7 | Sweden | 7.343 | 1.387 | 1.487 | 1.009 | 0.574 | 0.267 | 0.373 |
8 | New Zealand | 7.307 | 1.303 | 1.557 | 1.026 | 0.585 | 0.330 | 0.380 |
9 | Canada | 7.278 | 1.365 | 1.505 | 1.039 | 0.584 | 0.285 | 0.308 |
10 | Austria | 7.246 | 1.376 | 1.475 | 1.016 | 0.532 | 0.244 | 0.226 |
11 | Australia | 7.228 | 1.372 | 1.548 | 1.036 | 0.557 | 0.332 | 0.290 |
12 | Costa Rica | 7.167 | 1.034 | 1.441 | 0.963 | 0.558 | 0.144 | |
13 | Israel | 7.139 | 1.276 | 1.455 | 1.029 | 0.371 | 0.261 | 0.082 |
14 | Luxembourg | 7.090 | 1.609 | 1.479 | 1.012 | 0.526 | 0.194 | 0.316 |
15 | United Kingdom | 7.054 | 1.333 | 1.538 | 0.996 | 0.450 | 0.348 | 0.278 |
16 | Ireland | 7.021 | 1.499 | 1.553 | 0.999 | 0.516 | 0.298 | 0.310 |
17 | Germany | 6.985 | 1.373 | 1.454 | 0.987 | 0.473 | 0.160 | 0.210 |
19 | United | States | 6.892 | 1.433 | 1.457 | 0.874 | 0.454 | 0.280 |
20 | Czech Republic | 6.852 | 1.269 | 1.487 | 0.920 | 0.457 | 0.046 | 0.036 |
日本は入っていない
必要そうなのをざっと表示させてみる
df.describe()
Overall rank | Score | GDP per capita | Social support | Healthy life expectancy | Freedom to make life choices | Generosity | Perceptions of corruption |
---|---|---|---|---|---|---|---|
count | 156.000000 | 156.000000 | 156.000000 | 156.000000 | 156.000000 | 156.000000 | 156.000000 |
mean | 78.500000 | 5.407096 | 0.905147 | 1.208814 | 0.725244 | 0.392571 | 0.184846 |
std | 45.177428 | 1.113120 | 0.398389 | 0.299191 | 0.242124 | 0.143289 | 0.095254 |
min | 1.000000 | 2.853000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
25% | 39.750000 | 4.544500 | 0.602750 | 1.055750 | 0.547750 | 0.308000 | 0.108750 |
50% | 78.500000 | 5.379500 | 0.960000 | 1.271500 | 0.789000 | 0.417000 | 0.177500 |
75% | 117.250000 | 6.184500 | 1.232500 | 1.452500 | 0.881750 | 0.507250 | 0.248250 |
max | 156.000000 | 7.769000 | 1.684000 | 1.624000 | 1.141000 | 0.631000 | 0.566000 |
これだけでデータの性格?がなんとなーくわかります。
score(幸福度)とsocial support(社会福祉)の相関係数を出してみる
# ライブラリ準備
import numpy as np
import pandas as pd
# データセット準備
## 幸福度を配列へ
happy = df["Score"]
## 社会福祉を配列へ
social = df["Social support"]
# 相関係数出て!
correlation = np.corrcoef(social, happy)
print(correlation)
[[1. 0.77705779]
[0.77705779 1. ]]
出た〜〜
相関係数が0.7なので、社会福祉は幸福と強い相関がある!!
ヒートマップ出してみる
# ライブラリ準備
import pandas as pd
import numpy as np
# 列間の相関係数が出せるはず!
corr_df =df.corr()
print(corr_df)
Overall rank ... Perceptions of corruption
Overall rank 1.000000 ... -0.351959
Score -0.989096 ... 0.385613
GDP per capita -0.801947 ... 0.298920
Social support -0.767465 ... 0.181899
Healthy life expectancy -0.787411 ... 0.295283
Freedom to make life choices -0.546606 ... 0.438843
Generosity -0.047993 ... 0.326538
Perceptions of corruption -0.351959 ... 1.000000
[8 rows x 8 columns]
見にくくてすいません、とりあえず出てます!
# ライブラリ準備
import seaborn as sns
sns.heatmap(corr_df, cmap= sns.color_palette('cool', 5), annot=True,fmt='.2f', vmin = -1, vmax = 1)

完全にoverrall rank(順位)を抜くの忘れていましたが、なんとか出ました!
今後は自分で勉強する
授業の感想
以前から興味があったpython。全4回という限られた授業回数でしたがpythonだけに限らず「データ」について色々学べて面白かったです。
あとは純粋に楽しかった。大学院生の時にSPSSで少しだけ統計をやったのを思い出しました。
私は修士論文で統計を使わなかったので、本当に少し触れただけでしたが、あの頃も純粋に面白かったんですよね。
若かったあの時を少し思い出しました笑
やってみたい事はたくさんある
とりあえず今回は初めてだったので、深い事は考えずざっくりやってみました。
厳密な統計の事は考えずに単純に数値出してみたり可視化してみたり。
専門の方見ると突っ込みどころは満載だと思います笑
昔SPSSでやった因子分析や主成分分析、ロジスティク解析などなど、pythonでやってみたい事もたくさんあります。
授業期間は時間及び知識不足でまったく出来ませんでした・・・
こつこつやってみる
授業自体は終わってしまいましたが、機械学習にとても可能性を感じたと同時にこの業界にいるからには薄々と感じていた「今後必須言語やん!」を身にしみて実感しました。
きっと勉強していく内に楽しかったり面白い事だけではないと思いますが、今後は自分でできる範囲で勉強していきたいなと思っています。
今作っているプロダクトに機械学習は入れるつもりないので、完全卒業制作とは別枠でどこまで出来るか・・・
有限無実行になりそうで、既に不安ですが自分を戒めるためにもQiita書いたので、少しずつやってみたいと思います。
そんな内容も今後少しずつ記載出来ればと思っています。