愛媛県のオープンデータから交通事故発生状況〔市町別〕のグラフとfoliumでコロプレス図作成

www.pref.ehime.jp

python-visualization.github.io

github.com

データ抽出

import pandas as pd

df1 = pd.read_excel("https://www.pref.ehime.jp/opendata-catalog/dataset/dataland-275/resource/6743/237.xlsx", header=None, index_col=None)

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

df2.to_csv("data.csv", index=False, header=False)

グラフ作成

!pip install japanize-matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib

df3 = pd.read_csv("data.csv", header=0, na_values="-").fillna(0)

df3.drop(0, inplace=True)

df3.plot.bar(x="地域名", subplots=True, layout=(2,3), figsize=(15,8), sharex=False)
plt.subplots_adjust(wspace=0.2, hspace=0.6)
plt.show()

f:id:imabari_ehime:20200120230908p:plain

コロプレス図作成

import io

data = '''\
"標準地域コード","都道府県","市区町村"
"38201","愛媛県","松山市"
"38202","愛媛県","今治市"
"38203","愛媛県","宇和島市"
"38204","愛媛県","八幡浜市"
"38205","愛媛県","新居浜市"
"38206","愛媛県","西条市"
"38207","愛媛県","大洲市"
"38210","愛媛県","伊予市"
"38213","愛媛県","四国中央市"
"38214","愛媛県","西予市"
"38215","愛媛県","東温市"
"38356","愛媛県","上島町"
"38386","愛媛県","久万高原町"
"38401","愛媛県","松前町"
"38402","愛媛県","砥部町"
"38422","愛媛県","内子町"
"38442","愛媛県","伊方町"
"38484","愛媛県","松野町"
"38488","愛媛県","鬼北町"
"38506","愛媛県","愛南町"'''

df_city = pd.read_csv(io.StringIO(data), header=0)

df_city

df4 = pd.merge(df3, df_city, left_on="地域名", right_on='市区町村')

df4.drop(["地域名", "都道府県"], axis=1)
!pip install folium

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

df4["標準地域コード"] = df4["標準地域コード"].astype(str)

m = folium.Map(location=[33.841672, 132.765339], tiles="cartodbpositron", zoom_start=9)

geojson = "38.json"

folium.Choropleth(
    geo_data=geojson,
    data=df4,
    columns=["標準地域コード", "発生件数"],
    key_on="id",
    fill_color="BuPu",
).add_to(m)

m

f:id:imabari_ehime:20200120230636p:plain