見出し画像

都道府県の塗り分けhands on

お疲れさまです。
Pythonで実装されたjapanmapを使ってみました。
Google Colaboratoryで動かしています。
各種県別データで都道府県ごとに色分けする方法も解説します。

開発者の方のjapanmap解説記事とソースコードはこちらです。

上記のGitHub上のソースを読んで解釈した内容を中心に紹介します。

ハンズオン:県別データの可視化

今回の可視化する題材は医療関係のデータを用意してみました。
「2036年時点の不足医師数」を県別に予測したものになります。

都道府県,A,B
北海道,-188,-1751
青森,-439,-1225
岩手,-474,-1361
宮城,1142,-604
秋田,-204,-645
山形,32,-653
福島,-804,-3500
茨城,202,-2376
栃木,98,-1700
群馬,-51,-1837
埼玉,-1044,-5040
千葉,636,-2302
東京,26645,13295
神奈川,5009,-260
新潟,-1534,-1969
富山,222,-432
石川,911,217
福井,503,-164
山梨,325,-250
長野,-87,-550
岐阜,542,-587
静岡,-402,-2187
愛知,1357,-727
三重,391,-553
滋賀,541,-149
京都,4006,1291
大阪,7703,4393
兵庫,3642,77
奈良,1236,-403
和歌山,1093,193
鳥取,216,-237
島根,168,-411
岡山,2232,815
広島,849,-356
山口,-88,-965
徳島,649,268
香川,476,183
愛媛,317,-659
高知,452,-120
福岡,5111,2684
佐賀,820,176
長崎,716,49
熊本,1671,-229
大分,573,-234
宮崎,-8,-472
鹿児島,762,-182
沖縄,1021,99

------
出典:秀和システム 病院業界の動向とカラクリがよ~くわかる本 p3より
A列:医師確保が進んだ場合 不足合計(12道県) 5323人
B列:医師確保が進まなかった場合 不足合計(34道県) 34911人

今回はGoogle Colabの使用を想定し、ファイルを格納します。
※カレントディレクトリにdoctor.csvとして保存→dfとして読み込みます。

import pandas as pd
df = pd.read_csv("doctor.csv", encoding="shift-jis")

次にjapanmapをpipでインストールします。
※エラーが出ますが動作します。とりあえず保留。。

# -U オプションで最新版のインストール
!pip install -U japanmap

ここまでで、可視化の準備はOKです。
まずは関東地方を出力してみます。

from japanmap import get_data, pref_points, pref_map, groups, picture
import matplotlib.pyplot as plt
qpqo = get_data()
# groupsの部分は「北海道・東北・中部・・・なども指定可能」
svg = pref_map(groups['関東'], cols='gray', qpqo=qpqo, width=2.5)
with open('japan.svg', 'w') as fp:
    fp.write(svg.data)
関東地方 グレースケール

次に用意したデータを可視化してみます。カラースケールの対象はB列:医師の確保が進まなかった場合
を対象にしています。

cmap = plt.get_cmap('rainbow') # bwr調整可能
norm = plt.Normalize(vmin=df.B.min(), vmax=df.B.max())
fcol = lambda x: '#' + bytes(cmap(norm(x), bytes=True)[:3]).hex()
plt.rcParams['figure.figsize'] = 10, 10 # 図の形
plt.colorbar(plt.cm.ScalarMappable(norm, cmap)) # カラーバー
plt.imshow(picture(df.B.apply(fcol)));
2036年時点の不足医師数

東京都だけ真っ赤ですね。医師が集中していることがわかります。
※東京都だけ外れ値的に高くなってしまってるので、他の県の細かい違いがわかりません。見せ方はまだ工夫する必要がありそうです。

次に地方ごとに出力してみます。

%config InlineBackend.figure_format = 'svg'
pref_map(groups["関東"], cols = df.B.apply(fcol).values[7:16])
# valuesのあとにスライスで該当する範囲を取得する
# 他の地方はgithubのコードを見れば確認可能です
2036年時点の不足医師数 関東地方を抽出

割愛
面積や地球上の2地点間の距離なども実装されており、勉強になりました。

まとめ

今回は日本地図の出力を簡単に行いました。
私もまだmatplotlibでの出力など不明点も多いです。
今後自由自在な出力ができるように、知識を身につけたらまた更新しようと思います。


この記事が気に入ったらサポートをしてみませんか?