結局どこに住むのがコスパがいいのか調べてみた。

# 環境
- 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に落とし込みます。

```Python:Nensyu1
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)
```

```Python:Nensyu2
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)
```
続いて、年収と物価に関するパラメーターに関して、偏差値を計算します。


```Python:Nensyu3
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)
```

```Python:Nensyu4
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)
```
その結果を出力します。

```Python:Nensyu5
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)
![result1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407666/4e6bfcf1-8c2b-4f3c-7bf1-bf340ad2ad63.png)
続いて、各県のスコアを棒グラフにしました。
![result2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407666/1910275b-7fd7-877b-ddfe-a620f24869d3.png)

最高スコアは沖縄県でした。が、物価でスコアを稼いているものの、年収はかなり低いですね。。
両方のパラメーターで***そこそこ***の結果だったのは、大都市圏周辺でした。
やっぱりこの辺りがいいのかもしれまんね。
ちなみに東京は、年収はぶっちぎちの一位でしたが、物価が高すぎて最下位でした。