実現したいこと
2024年に行われた衆院選における投票率を都道府県別にまとめたデータを視覚化したい。
発生している問題・分からないこと
Pythonのjapanmapライブラリと総務省のデータを加工したCSVファイルを用いて、都道府県別の投票率を表現した日本地図を描画したのですが、これが実際のデータと合っていません。
データと実際に描画した日本地図の画像を添付します。


例えば山形県の投票率は60%を超えているので、本来であれば濃い赤色で表現されるべき所ですが、なぜか薄い赤色になっています。このように、描画された地図が実際のデータとリンクしていないという状況です。
エラーメッセージ
error
1エラーメッセージは出ていませんが、地図が正しく出力されていません。
該当のソースコード
Python
1!pip install japanmap 2!pip install japanize_matplotlib 3import matplotlib.pyplot as plt 4import pandas as pd 5 6data_df = pd.read_csv('/content/todouhuken_touhyouritsu.csv') 7 8from japanmap import picture 9import japanize_matplotlib 10cmap = plt.get_cmap("Reds") 11norm = plt.Normalize(vmin=data_df['計'].min(), vmax=data_df['計'].max()) 12fcol = lambda x: "#" + bytes(cmap(norm(x), bytes=True)[:3]).hex() 13pic = picture(data_df['計'].apply(fcol)) 14plt.title('第50回衆院選(2024)都道府県別投票率(比例代表)') 15plt.colorbar(plt.imshow(pic, cmap, norm)) 16plt.savefig(f"第50回衆院選(2024)投票率(比例代表).png") 17plt.show()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Googleでjapanmapを使っている方の記事を調べましたが、私の事例のように地図とデータの整合性が取れていない例を見つけることができず、解決には至りませんでした。
補足
特になし
解決済みになっていますが、本当に正しくプロットできていますか?
元データが画像の通りだとすると、都道府県コードの順に並んでいないので、神奈川〜福井あたりのデータが違う場所にプロットされているんじゃないでしょうか。
picture(data_df.set_index('都道府県')['計'].apply(fcol))
と、都道府県名をインデックスにするのがいいと思います。
ありがとうございます。
確かに神奈川は実際の投票率よりも色が濃いように見えますね。
都道府県名をインデックスにしてみたのですが、そうすると地図が真っ白になってしまいました。
データを都道府県コードの順に並べ直した所、正しく表示されました。
回答のほうでやりとりが続いているようなのでコメント追加します。
japanmap.picture() は dict like (items() がイテレータを返すもの)を受け取るので pandas の Series でも大丈夫です。そのときのキー(Seriesの場合はインデックス)は整数(都道府県コード)もしくは文字列(都道府県名)です。
なので、「都道府県」列をインデックスにするとちゃんと描画できると思うのですが、白地図になるということは、「都道府県」列がちゃんと都道府県名になっていないんだろうと思います。空白が入ってたり、不可視コードがまぎれてたりという可能性があります。このあたりは実際のデータでしか確認できないので、質問者さんが気になるのなら調べられたらいいと思います。
都道府県コード順に並べてちゃんとできたのなら、それでいいと思います。
bsdfanさん
> 白地図になるということは、「都道府県」列がちゃんと都道府県名になっていないんだろうと思います。空白が入ってたり、不可視コードがまぎれてたりという可能性があります。
総務省のデータを見ますと、たしかに都道府県名(データ上は「区 分」列)の先頭に空白(スペース)が入っています。
令和6年10月27日執行 衆議院議員総選挙・最高裁判所裁判官国民審査 速報結果
(2)-2 都道府県別投票率(比例代表)
https://www.soumu.go.jp/main_content/000979121.xls
質問に貼られている Excel の表でもスペースが入っている様に見えます。私の場合、このデータからCSVに変換する際に先頭と末尾にあるスペースを取り除いたので問題が発生しなかったのだと思います。
> travel_everyさん
なので、Pandas の read_csv() に skipinitialspace=True を指定して実行してみてください。(文字列の先頭にあるスペースを除去した状態で読み込みます)
data_df = pd.read_csv('todouhuken_touhyouritsu.csv', index_col='都道府県', skipinitialspace=True)
bsdfanさん、melianさん
ありがとうございます。
read_csv() に skipinitialspace=Trueを指定して実行してみた所、色の付いた地図が出力されました。
回答2件
あなたの回答
tips
プレビュー
