foliumのコロプレス図のキーとは?
今までにpythonのライブラリfoliumを扱ってきましたが、コロプレス図を描画するfolium.Choropleth関数の設定、特にキーという概念をいつも忘れてしまいます。ここで備忘録としてまとめておきます。
▼foliumを取り扱った記事です。
統計データとGISデータの持ち方で2つに分類
GISを扱う上で、統計データの結合方法は悩ましいところではあります。Excel2007より前であればDBFファイルを直接編集していた方も多かったのではないでしょうか。Excel2007普及以降、QGISを使用しているかたはソフトウェア上で結合するのが当たり前になりました。
foliumのChoropleth関数も動きは同じで、統計データとGISデータが別にあることを想定しているようです。なので、最初から統計データがついているGISデータ、例えば国勢調査のシェープファイルで人口や世帯数のみを図化したい場合において、どういった設定をすればよいか迷ってしまった経験を踏まえ、GISデータと統計データの持ち方により、ここでは2つのパターンについてまとめました。(例として国勢調査の富山県舟橋村のデータを使用しました)
地図情報と統計データが同じファイルの場合
引数の「geo_data」と「data」に指定するデータフレーム(ジオデータフレーム)が同じになります。キーはデータフレームのKEY_KODE列になります。
地図情報と統計データが違うファイルの場合
仮にCSVにコードと人口のデータがあるとします。
引数の「geo_data」にはジオデータフレーム、と「data」にはデータフレームを指定します。(ジオデータフレーム)が同じになります。2つのデータフレームを結合するキーは「KEY_CODE」と「コード」になります。
結果
どちらのパターンでも同じ結果になります。
▽foliumの基礎的な使い方が調べられます。
メッシュ図はやりやすいかも
国勢調査のメッシュ図の場合、地図情報と統計データが完全に分離しているので、こういったものは扱いやすいかも知れません。
foliumのコロプレス図では欠損値のカラーをあらかじめ指定できるので、pandasのデータ読み取り時に欠損値を指定しておけば処理が楽になります。
例として神奈川県北部の500mメッシュ図(人口)を作成してみました。
# 神奈川県のみ抽出すためのメッシュコードのタプル(総務省統計局 市区町村別メッシュ・コード一覧)
pref = pd.read_csv('14.csv',
dtype={'基準メッシュ・コード': str},
encoding='shift-jis',
)
pref_list = tuple(pref['基準メッシュ・コード'].unique())
# メッシュデータ読み込み
mesh = gpd.read_file('MESH05339.shp')
mesh = mesh[mesh['KEY_CODE'].str.startswith(pref_list)] # 神奈川県のみ抽出
# 統計データ読み込み
stat = pd.read_csv('tblT001108H5339.txt',
encoding='shift-jis',
header=0,
skiprows=[1],
dtype={'KEY_CODE': str, 'HTKSAKI': str, 'GASSAN': str},
na_values='*' # 欠損を表す*はエラーとする
)
# ベースマップ定義
basemap = folium.Map(location=[35.6, 139.7], zoom_start=15)
# コロプレス図
folium.Choropleth(
geo_data=mesh,
data=stat,
columns=['KEY_CODE', 'T001108001'],
key_on='feature.properties.KEY_CODE',
fill_color='OrRd',
fill_opacity=0.7,
line_opacity=0.2,
nan_fill_color='#888888' # 欠損値の色
).add_to(basemap)
# htmlファイルとして保存
basemap.save('map.html')
▼下の画像をクリックすると大きな地図で閲覧できます。
まとめ
今回はpythonのライブラリfoliumのコロプレス図についてまとめました。とはいえ、GISの可視化もjSTAT MAPなどを使えばこれくらいのことはできてしまうのですが…。
foliumを利用したサービスをココナラで展開しています。興味のある方は以下よりどうぞ。
全国の人流データ(国土交通省)の可視化をします 人流データをインタラクティブなマップで確認