概要
地域ごとのデータを比較・分析する際には、地図を使った可視化が重要な役割を果たします。今回は2025年の最低賃金データを例に、Pythonの japanmap ライブラリを用いた都道府県別データの可視化について簡単にまとめておきます。地図上に色を使って数値を反映させることで、地域間の傾向や特徴が視覚的に理解できるようになるはず
利用する主要ライブラリ
japanmap: 都道府県別のデータを地図上に簡単に可視化できるライブラリ
【注意】
演習ファイルでは、matplotlibで日本語を利用する際にjapanize-matplotlibを利用しています。Pythonのバージョンによっては動作しない(python 3.12以降)ことがあります。
- japanize-matlibplot-modern を利用する
- pip install setuptoolsによって、distutilsライブラリをインストールする
などの方法で対応できるかな
演習用のファイル
- データ:minimum_wage_2025.csv 2025年の最低賃金データ
- コード:visualization_wage_japanmap.ipynb
出典:最低賃金のデータは厚生労働省ホームページ(令和7年度地域別最低賃金の全国一覧)から取得・加工したものを利用しています。
1. 利用するデータ
都道府県別の数値データであれば問題なく地図上に表示できそうですが、今回は最低賃金を利用したいと思います。2025年は全国の最低賃金が1000円を超えたこともあり注目されていますし
import pandas as pd
df = pd.read_csv("data/minimum_wage_2025.csv")
データの冒頭5行は表のような形です。
都道府県名 | 2025 | |
---|---|---|
0 | 北海道 | 1075 |
1 | 青森県 | 1029 |
2 | 岩手県 | 1031 |
3 | 宮城県 | 1038 |
4 | 秋田県 | 1031 |
2. japanmapの最低限の使い方
japanmap は都道府県名と色の対応関係を japanmap.picture の引数に指定するだけで地図上に着色できるという手軽さが特徴です。地理情報(GIS)の境界データであるシェイプファイルを意識する必要がないのも嬉しい限り
import japanmap
import matplotlib.pyplot as plt
plt.figure(figsize=(5,5))
plt.imshow(japanmap.picture({"北海道": "blue", "東京":"red", "千葉":"yellow"}))
plt.show()
実質的に、1行です。
plt.imshow(japanmap.picture({"北海道": "blue", "東京":"red", "千葉":"yellow"}))
これで次のような図形になります。
- pictureの引数に都道府県と色の辞書を与えて色付け
- 色:RGB、hexカラーコード(#112233)も利用可能
pictureの引数の色には、RGBやhexカラーコードも利用できるので、好みの方法で色を指定することができます。
RBGでの彩色
plt.imshow(japanmap.picture({"北海道": (0,0,255), "東京都":(255,0,0), "千葉県":(255,255,0)}))
RBGですが、透明度Aは指定できないようです。
hexカラーコードでの彩色
plt.imshow(japanmap.picture({"北海道": "#0000ff", "東京都":"#ff0000", "千葉県":"#ffff00"}))
都道府県名と対応する色を決めるだけでOKです。
2. 都道府県で塗り分け
最低賃金のデータを利用して地図上に数値を塗り分けていきます。
# 1. ライブラリの読み込み
import japanmap
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
# 2. データの読み込み
df = pd.read_csv("data/minimum_wage_2025.csv")
# 3. 色の決定の準備
# 3.1 vminからvmaxの範囲を0〜1区間に変換
data = df["2025"].values
min_data = min(data)
max_data = max(data)
cmap = plt.cm.Blues
norm = plt.Normalize(vmin=min_data, vmax=max_data)
# 3.2 RBGへ変換(透明度Aを削除)関数
def color_scale(x):
return cmap(norm(x), bytes=True)[:3]
# 4. 色の決定 都道府県ごとに辞書化
pref_color_dict = {
pref: color_scale(val) for pref, val in zip(df["都道府県名"], df["2025"])
}
# 5. グラフ表示
plt.figure(figsize=(7,7))
ax = plt.gca() # 現在の軸を取得
plt.imshow(japanmap.picture(pref_color_dict))
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
plt.colorbar(sm, ax=ax) # カラーバー表示
plt.title("2025年度 最低賃金")
ax.set_xticks([])
ax.set_yticks([])
plt.show()
コードのポイント
- 3番:cmapがmatplotlibのカラーマップとなります。SequentialのBluesにしてみました。
- 3番:plt.Normalizeはデータをvminからvmaxまでの範囲のデータを、cmap(カラーマップ)が認識できる0から1の範囲に変換するものです。この正規化された値がcmapに渡され、それぞれの値に対応する色を決定します。
- 3.2番:color_scale関数で、正規化した値(norm(x))をカラーマップに変換(cmap(norm(x)))します。このとき
bytes=True
を指定すると、値が0〜255の整数値として表現されます。4番目の透明度Aを明示的に削除するために[:3]をつけました。 - 4番:3番の準備を利用して、都道府県名と対応する色の辞書を作成します。{都道府県名:RBG値}の形になります。
- 5番:作成した都道府県名と色の対応辞書をjapanmap.picture()で表示します。
- 5番:plt....やax....はカラーバー表示やメモリ削除などの見た目変更部分となります。
最終的な表示結果は次のような形になります。
たぶん、color_scale関数の部分、lambdaで記述するんだろうな〜
3. 上位5都道府県の色を変更
japanmapでの着色は都道府県名と色の辞書で決まります。グラーデーションしてある部分を上書きすれば、上位5都道府県だけ異なる色にすることも簡単です。
# 1. トップ5 変更したい県のリスト
top5 = df.sort_values("2025", ascending=False).head(5)
# 2. ループで更新
for pref in top5["都道府県名"]:
pref_color_dict[pref] = "Yellow"
# 3. 地図だけ表示
plt.figure(figsize=(7,7))
plt.imshow(japanmap.picture(pref_color_dict))
plt.title("2025年度 最低賃金 トップ5は黄色")
plt.show()
コードのポイント
- 1番:データフレームdfを最低賃金の列で並び替え。上位5をtop5とする。
- 2番:pref_color_dict(都道府県名データ可視化のコードで定義した)辞書について、top5の都道府県の値をYellowに変更する。
- 3番:
imshow(japanmap.picture(pref_color_dict))
で地図表示する。
表示される画像は次のようになります。
参考サイト
-
網羅的な解説は、県別データの可視化を参考にしてください。様々な角度から丁寧にまとめられいて非常に役立ちます。