LoginSignup
4
7

More than 3 years have passed since last update.

プログラミング初心者が初めてプログラミングで簡単なデータ分析をやってみたこと

Last updated at Posted at 2020-02-06

更新していなかった言い訳

更新が遅くなりました。
理由(というか言い訳)はたくさんありますが、主にはあまりコードを書いていなかったのがあると思います。
年が明け授業と課題の量が少し落ち着いたと同時に、卒業制作や卒業後の進路を色々考えて、自分の中で迷走中だったためあまり手を動かしていませんでした。
という事で自分のブログは毎日更新してたけど、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)

スクリーンショット 2020-02-07 0.46.40.jpeg

完全にoverrall rank(順位)を抜くの忘れていましたが、なんとか出ました!

今後は自分で勉強する

授業の感想

以前から興味があったpython。全4回という限られた授業回数でしたがpythonだけに限らず「データ」について色々学べて面白かったです。
あとは純粋に楽しかった。大学院生の時にSPSSで少しだけ統計をやったのを思い出しました。
私は修士論文で統計を使わなかったので、本当に少し触れただけでしたが、あの頃も純粋に面白かったんですよね。
若かったあの時を少し思い出しました笑

やってみたい事はたくさんある

とりあえず今回は初めてだったので、深い事は考えずざっくりやってみました。
厳密な統計の事は考えずに単純に数値出してみたり可視化してみたり。
専門の方見ると突っ込みどころは満載だと思います笑
昔SPSSでやった因子分析や主成分分析、ロジスティク解析などなど、pythonでやってみたい事もたくさんあります。
授業期間は時間及び知識不足でまったく出来ませんでした・・・

こつこつやってみる

授業自体は終わってしまいましたが、機械学習にとても可能性を感じたと同時にこの業界にいるからには薄々と感じていた「今後必須言語やん!」を身にしみて実感しました。
きっと勉強していく内に楽しかったり面白い事だけではないと思いますが、今後は自分でできる範囲で勉強していきたいなと思っています。
今作っているプロダクトに機械学習は入れるつもりないので、完全卒業制作とは別枠でどこまで出来るか・・・
有限無実行になりそうで、既に不安ですが自分を戒めるためにもQiita書いたので、少しずつやってみたいと思います。
そんな内容も今後少しずつ記載出来ればと思っています。

4
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7