今治市オープンデータ一の市民所得から愛媛県内市町別総生産・市町民所得をコロプレス図化

import pandas as pd

ehime_names = {
    38201: "松山市",
    38202: "今治市",
    38203: "宇和島市",
    38204: "八幡浜市",
    38205: "新居浜市",
    38206: "西条市",
    38207: "大洲市",
    38210: "伊予市",
    38213: "四国中央市",
    38214: "西予市",
    38215: "東温市",
    38356: "上島町",
    38386: "久万高原町",
    38401: "松前町",
    38402: "砥部町",
    38422: "内子町",
    38442: "伊方町",
    38484: "松野町",
    38488: "鬼北町",
    38506: "愛南町",
}

ehime_codes = {v.rstrip("県市町"): k for k, v in ehime_names.items()}


def ehime_get_code(s):
    return ehime_codes.get(s.rstrip("県市町"), 0)

# Excelデータを取得
df1 = pd.read_excel(
    "https://www.city.imabari.ehime.jp/opendata/toukei/r0110_07.xlsx",
    sheet_name="第7-1表",
    header=None,
)

# テキスト絞り込み
df2 = df1.loc[df1.notnull().sum(axis=1) > 5, df1.notnull().sum() > 3].copy()

# 列名
df2.columns = ["県市町", "総生産金額", "構成比", "所得金額", "所得実額", "水準"]

# コロプレスの地図用に都市コードに変換
df2["コード"] = df2["県市町"].apply(lambda x: str(ehime_get_code(x)))

# 愛媛県を除く
df3 = df2[df2["コード"] != "0"]

# 愛媛県との差
df3["差"] = df3["水準"] - 100

# ソート
df3.sort_values("差", ascending=False, inplace=True)

# インデックスをリセット
df3.reset_index(drop=True, inplace=True)
df3.index += 1

# 表示
df3
県市町 総生産金額 構成比 所得金額 所得実額 水準 コード
1 四国中央市 484855 9.6 292027 3369 126.8 38213 26.8
2 今治市 760221 15 490024 3120 117.5 38202 17.5
3 新居浜市 536816 10.6 364576 3061 115.2 38205 15.2
4 松前 120927 2.4 86410 2879 108.4 38401 8.4
5 西条市 365947 7.2 303236 2816 106 38206 6
6 東温市 144091 2.8 93446 2715 102.2 38215 2.2
7 上島町 33462 0.7 18396 2618 98.6 38356 -1.4
8 伊予市 106718 2.1 92461 2536 95.5 38210 -4.5
9 伊方町 48837 1 23257 2485 93.6 38442 -6.4
10 大洲市 135130 2.7 107287 2475 93.2 38207 -6.8
11 砥部町 57646 1.1 52413 2469 93 38402 -7
12 八幡浜市 123717 2.4 83884 2451 92.3 38204 -7.7
13 松山市 1644920 32.4 1257101 2447 92.1 38201 -7.9
14 内子町 43798 0.9 37979 2317 87.2 38422 -12.8
15 宇和島市 243976 4.8 171389 2257 85 38203 -15
16 西予市 103584 2 84764 2215 83.4 38214 -16.6
17 鬼北町 23858 0.5 22909 2182 82.2 38488 -17.8
18 久万高原町 30324 0.6 17866 2173 81.8 38386 -18.2
19 松野町 8562 0.2 8562 2151 81 38484 -19
20 愛南町 56789 1.1 43952 2059 77.5 38506 -22.5

f:id:imabari_ehime:20200201090917p:plain

コロプレス図

!pip install folium
!wget "https://github.com/niiyz/JapanCityGeoJson/raw/master/geojson/prefectures/38.json"
import pandas as pd
import folium
import json

m = folium.Map(
    location=[33.841672, 132.765339],
    tiles="https://cyberjapandata.gsi.go.jp/xyz/blank/{z}/{x}/{y}.png",
    attr="国土地理院 白地図",
    zoom_start=9,
)

geojson = "38.json"

folium.Choropleth(
    geo_data=geojson,
    data=df3,
    columns=["コード", "差"],
    threshold_scale=[-30, -20, -10, 0, 10, 20, 30],
    key_on="id",
    fill_color="OrRd",
).add_to(m)

m.save(outfile="map.html")

f:id:imabari_ehime:20200201090941p:plain