前提・実現したいこと
PythonのFoliumライブラリを使用して、GeoJSONファイルと紐づけたいデータ(pandas DataFrame形式)をもとに、オリジナルのカラーマップでコロプレス図を描きたいと思っています。
下記のサイトを参考にスクリプトを作成しましたが、エラーが発生しました。
https://medium.com/analytics-vidhya/create-and-visualize-choropleth-map-with-folium-269d3fd12fa0
pandas DataFrameで、indexはgeoJSONファイルのfeatures.properties.idに対応したコード番号、列データとしてカラーマップで表現したい値を格納しました。
使用したGeoJSONファイル(japan.geojson(https://github.com/dataofjapan/land))の冒頭部分を以下に示します。
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "nam": "Kyoto Fu", "nam_ja": "京都府", "id": 26 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 135.036697387695, 35.537334442138686 ],
発生している問題・エラーメッセージ
以下のよなエラーが発生し、コロプレス図が作成されません。
Traceback (most recent call last): File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexes\base.py", line 2898, in get_loc return self._engine.get_loc(casted_key) File "pandas\_libs\index.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\index.pyx", line 101, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\hashtable_class_helper.pxi", line 1675, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas\_libs\hashtable_class_helper.pxi", line 1683, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 26 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users(ユーザー名)\python_proj\quake_map_japan\folium_choropleth\for_teratail.py", line 39, in <module> folium.GeoJson( File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python39\lib\site-packages\folium\features.py", line 458, in __init__ self._validate_function(style_function, 'style_function') File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python39\lib\site-packages\folium\features.py", line 523, in _validate_function if not callable(func) or not isinstance(func(test_feature), dict): File "C:\Users(ユーザー名)\python_proj\map\folium_choropleth\test.py", line 42, in <lambda> 'fillColor': step(df[feature['properties']['id']]), File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\frame.py", line 2906, in __getitem__ indexer = self.columns.get_loc(key) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexes\base.py", line 2900, in get_loc raise KeyError(key) from err KeyError: 26
該当のソースコード
python
1import folium 2import json 3import pandas as pd 4import branca.colormap as cmp 5 6# DataFrame作成 7data = { 8 'value' : [1, 2, 3, 4, 5, 6, 7, 8] 9} 10idx = [22, 14, 19, 11, 12, 13, 20, 23] 11df = pd.DataFrame(data, index=idx) 12 13# 地図の設定 14japan_location = [37, 137] 15m = folium.Map( 16 location=japan_location, 17 tiles='https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png', 18 attr='Geospatial Information Authority of Japan', 19 zoom_start=5, 20 width=670, 21 height=690, 22 zoom_control=False 23) 24 25# geojsonファイルを開く 26geojson_file = 'japan.geojson' 27with open(geojson_file, encoding="utf-8_sig") as f: 28 japan_geojson = json.load(f) 29 30# カラーマップ作成 31step = cmp.StepColormap( 32 ['yellow', 'green', 'purple'], 33 vmin=1, vmax=10, 34 index=[3, 6, 8, 10], 35 caption='Color Scale for Map' 36) 37 38# コロプレス図を作画 39folium.GeoJson( 40 japan_geojson, 41 style_function=lambda feature: { 42 'fillColor': step(df[feature['properties']['id']]), 43 'color': 'black', 44 'weight': 1, 45 'dashArray': '5, 3' 46 } 47).add_to(m) 48step.add_to(m) 49 50# ファイル保存 51m.save('test.html')
試したこと
indexに26がないのが問題かと思い、geoJSONファイルの冒頭のfeatureのproperties.idを22に書き換えましたが、同様のエラーが発生しました。
geoJSONファイルのidがstr型になっているのかもしれないと思い、
'fillColor': step(df[feature['properties']['id']]),
の部分を下記のように書き換えましたが、同様のエラーが発生しました。
'fillColor': step(df[int(feature['properties']['id'])]),
補足情報
Pythonのバージョン
3.9.0
ライブラリのバージョン
Folium: 0.11.0
pandas: 1.1.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/26 10:40