環境
- python==3.7.9
- bs4==0.0.1
- pandas==1.1.4
- matplotlib==3.3.3
#前書き
就職活動期や転職を考える時期で気になるのは、年収。
それゆえ、東京や大阪等の大都市圏に出るパターンは数多くあります。
しかし、それが本当に最適解なのでしょうか?
確かに、大都市圏では平均年収が高いのは異論はありませんが、物価も高いわけです。
逆に、地方では平均年収が都市に比べて低いかもしれませんが、その分物価を安く済むわけです。
では、物価と年収の塩梅がベストな県は結局どこなのしょうか。
調べてみました。
#参考資料
年収に関して
https://www.nenshuu.net/prefecture/pre/index_prefecture.php
物価に関して
https://todo-ran.com/t/kiji/23029
ファイル構成
- prg
- Nensyu1.py
- Nensyu2.py
- Nensyu3.py
- Nensyu4.py
- Nensyu5.py
- data
- data.csv
- data2.csv
- data3.csv
- Graph
- result1.png
- result2.png
#解析
とりあえず、スクレイピングしてデータを集め、csvに落とし込みます。
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = requests.get("https://www.nenshuu.net/prefecture/pre/index_prefecture.php")
soup = BeautifulSoup(url.content, "html.parser")
tag1 = soup.find_all("td",class_="top_td")
tag2 = soup.find_all("td")
pref = [];numb = [];money = []
for name in range(len(tag1)):
pref.append(tag1[name].string)
numb.append(tag2[4 * name + 2].string)
money.append(tag2[4 * name + 5].string)
df = pd.DataFrame({0:numb,1:pref,2:money})
df.to_csv('../data/data.csv',index=None,header=None)
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = requests.get('http://grading.jpn.org/SRC5201.html')
soup = BeautifulSoup(url.content,'html.parser')
tag1 = soup.find_all("td" ,class_="nowrap")
pref = [];score = []
i=0
while True:
if i <= 59:
if i%3 == 0 or i == 0:
pref.append(tag1[i].get_text())
if i%3 == 1:
score.append(tag1[i].get_text())
elif i == 60:
i+=1
continue
else:
if i%3 == 1:
pref.append(tag1[i].get_text())
if i%3 == 2:
score.append(tag1[i].get_text())
i += 1
if len(tag1) <= i:
break
df = pd.DataFrame({0:pref,1:score})
df[1] = df[1].str.replace('-','')
df.to_csv('../data/data2.csv',header=None,index=None)
続いて、年収と物価に関するパラメーターに関して、偏差値を計算します。
import pandas as pd
import japanmap as jp
import matplotlib.pyplot as plt
from pylab import rcParams
import numpy as np
import math
import matplotlib as mpl
def coloring(c):
return (255-int(c)*255/47,0,0+int(c)*255/47)
def cal_Dev_value(row):
data = list(row)
mean = sum(data)/len(data)
dev_data = []
for dev in data:
dev_data.append((dev-mean)**2)
dispersion_data = sum(dev_data)/len(dev_data)
result_sd = math.sqrt(dispersion_data)
dispersion_value = []
for t in data:
dispersion_value.append(int(10*((t-mean)/result_sd)+50))
return dispersion_value
df = pd.read_csv('../data/data.csv',header=None)
for k in range(len(df)):
df.loc[k,'pref_code'] = jp.pref_code(df.loc[k,1])
df[2] = np.float64(df[2])
df[3] = cal_Dev_value(df[2])
print(df)
df.to_csv('../data/data.csv',header=False,index=False)
import pandas as pd
import math
def cal_Dev_value(row):
data = list(row)
mean = sum(data)/len(data)
dev_data = []
for dev in data:
dev_data.append((dev-mean)**2)
dispersion_data = sum(dev_data)/len(dev_data)
result_sd = math.sqrt(dispersion_data)
dispersion_value = []
for t in data:
dispersion_value.append(int(10*((t-mean)/result_sd)+50))
return dispersion_value
df = pd.read_csv('../data/data2.csv',header=None)
dx = pd.read_csv('../data/data.csv',header=None)
df[1] = 200-df[1]
df[2] = cal_Dev_value(df[1])
i = 0
while True:
k = 0
while True:
if df.loc[i,0] == dx.loc[k,1]:
df.loc[i,3] = dx.loc[k,2];df.loc[i,4]=dx.loc[k,4]
k += 1
if len(dx) <= k:
break
i += 1
if len(df) <= i:
break
df[5] = df[2]+df[4]
print(df)
df.to_csv('../data/data3.csv',header=False,index=False)
その結果を出力します。
import pandas as pd
import japanmap as jp
import matplotlib.pyplot as plt
import os
os.makedirs('../Grapic',exist_ok=True)
def coloring(c):
return (255-int(c)*12,0,0+int(c)*8)
df = pd.read_csv('../data/data3.csv',header=None)
df = df.sort_values([5],ascending=False)
df = df.reset_index(drop=True)
df[0] = df[0].str.replace('県','')
numb = list(df.index)
col = []
for k in range(len(numb)):
cl = coloring(numb[k])
col.append(cl)
pref = list(df[0])
data = {}
for name,color in zip(pref,col):
data[name] = color
plt.rcParams['figure.figsize'] = 9,7
plt.tick_params(labelleft=False,labelbottom=False,left=False,bottom=False)
plt.imshow(jp.picture(data))
plt.savefig('../Grapic/result1.png')
plt.close()
plt.rcParams['figure.figsize'] = 25,5
plt.rcParams["font.family"] = "IPAexGothic"
p1 = plt.bar(df.index,df[2],width=0.6)
p2 = plt.bar(df.index,df[4],width=0.6,bottom = df[2])
plt.xticks(df.index,df[0])
plt.ylabel('Score')
plt.legend((p1[0],p2[4]),('物価','年収'),loc='upper left')
plt.tight_layout()
plt.savefig('../Grapic/result2.png')
plt.show()
#結論
年収と物価に関して偏差値を計算し、その合計を各県のスコアとして使用しました。
はじめに、Japanmapを使用して、各県のスコアをプロットしました。
###赤(High Score)<------------------------>青(Low Score)
続いて、各県のスコアを棒グラフにしました。
最高スコアは沖縄県でした。が、物価でスコアを稼いているものの、年収はかなり低いですね。。
両方のパラメーターでそこそこの結果だったのは、大都市圏周辺でした。
やっぱりこの辺りがいいのかもしれまんね。
ちなみに東京は、年収はぶっちぎちの一位でしたが、物価が高すぎて最下位でした。