がん罹患数・率都道府県一覧基本集計表をjapanmapでコロプレス図作成

oku.edu.mie-u.ac.jp

速報じゃなく報告になっていたので作成

平成28年報告 [8MB] https://www.mhlw.go.jp/content/10900000/000553552.pdf

e-statで公開

www.e-stat.go.jp

都道府県一覧-罹患数・率-全部位 C00-C96

https://www.e-stat.go.jp/stat-search/file-download?statInfId=000031868737&fileKind=0

参考

oku.edu.mie-u.ac.jp

qiita.com

qiita.com

プログラム

  • japanmapで都道府県名を都道府県コードに変換
  • rgb2hexで色変換
import pandas as pd

from japanmap import pref_code

df = pd.read_excel(
    "https://www.e-stat.go.jp/stat-search/file-download?statInfId=000031868737&fileKind=0",
    index_col=0,
)

df["都道府県"] = df["都道府県"].str.replace("\s", "")

df["コード"] = df["都道府県"].apply(lambda x: pref_code(x))

df1 = (
    df.loc[(df["コード"] > 0) & (df["コード"] < 48), ["コード", "都道府県", "年齢調整罹患率:日本人口(総数)"]]
    .set_index("コード")
    .sort_index()
)

df1

MAP

import matplotlib.pyplot as plt
from japanmap import picture, get_data, pref_map
from matplotlib.colors import rgb2hex

norm = plt.Normalize(
    vmin=df1["年齢調整罹患率:日本人口(総数)"].min(), vmax=df1["年齢調整罹患率:日本人口(総数)"].max()
)
cmap = plt.get_cmap("bwr")

c = df1["年齢調整罹患率:日本人口(総数)"].apply(lambda x: cmap(norm(x)))

SVG

cols = [rgb2hex(i) for i in c]

svg = pref_map(df1.index, cols=cols, width=3)

svg

with open("japan.svg", "w") as fp:
    fp.write(svg.data)

f:id:imabari_ehime:20200126010932p:plain

PNG

plt.figure(figsize=(4, 4), dpi=200)
plt.imshow(picture(c, 255))

# plt.colorbar(plt.cm.ScalarMappable(norm, cmap))
plt.tick_params(
    bottom=False,
    top=False,
    left=False,
    right=False,
    labelbottom=False,
    labeltop=False,
    labelleft=False,
    labelright=False,
)
plt.savefig("japan.png")

SVGファイルはブラウザで表示はできるがPNGに変換できない