色々なデータに触れると、相関関係があるのか確かめたくなります。
最も簡単な分析が線形回帰でよく使われています。
今回は、こちらのデータを使い都道府県と平均年収の関係を使って簡単なテストをしてみます。
- import pandas as pd
- data1 = "prefecture1.csv"
- data2 = "income_pref.csv"
- df1 = pd.read_csv(data1)
- df2 = pd.read_csv(data2)
- print(df1.head())
- print(df2.head())
都道府県 県庁所在地 人口 面積 人口密度
0 北海道 札幌市 5,181,776 83,424.41 66.08
1 青森県 青森市 1,221,288 9,645.62 126.62
2 岩手県 盛岡市 1,196,277 15,275.01 78.32
3 宮城県 仙台市 2,290,036 7,282.29 314.47
4 秋田県 秋田市 944,902 11,637.52 81.19
順位 都道府県 平均年収
0 1位 東京都 584万9300円
1 2位 神奈川県 541万5500円
2 3位 愛知県 524万400円
3 4位 大阪府 511万8600円
4 5位 兵庫県 495万2100円
データフレームをマージし、数値で処理出来るようにコンマなど取り払います。
説明変数xは人口、目的変数yは平均年収の関係を調べましょう。
- # データのマージ
- df3 = pd.merge(df1, df2)
- #日本円表示を数値に
- def currencyToNumber(val):
- # 万と千以下に分ける
- man, sen = val.split("万")
- #円を取り除き,千以下を0埋め
- sen = sen.replace("円", "")
- sen = sen.zfill(4)
- man += sen
- return int(man)
- # 数値のカンマを取り除く
- def dropComma(val):
- val = val.replace(",", "")
- return float(val)
- # 関数を適用して数値にする
- df3['平均年収'] = df3['平均年収'].apply(currencyToNumber)
- df3['人口'] = df3['人口'].apply(dropComma)
- # プロットする場合はSeriesで小文字のx
- x = df3['人口']
- # 線形回帰する場合はDataFrameで大文字のX
- X = df3[['人口']]
- # 目的変数y
- y = df3['平均年収']
- import matplotlib.pyplot as plt
- import japanize_matplotlib
- # 県名が見やすいように大きめのグラフに
- plt.figure(figsize=(16, 10))
- plt.title("人口と平均年収のグラフ", fontsize=24)
- #散布図
- plt.scatter(x, y)
- plt.grid()
- plt.xlabel("人口(人)", fontsize=18)
- plt.ylabel("平均年収(円)", fontsize=18)
- # 点それぞれに中訳を入れる annotate
- pref_name = df3['都道府県']
- for i, pref in enumerate(pref_name):
- plt.annotate(pref, (x[i], y[i]))
- # 数値が大きいと指数表示になるので、分かりやすく整数表示にする
- nums = plt.gca().get_yticks()
- plt.gca().set_yticklabels(['{:,.0f}'.format(i) for i in nums])
- nums = plt.gca().get_xticks()
- plt.gca().set_xticklabels(['{:,.0f}'.format(i) for i in nums])
- plt.show()
0 件のコメント:
コメントを投稿