地図上に、
東京都の
取り
作成した
folium_example/per_capita_park_area_in_tokyo at master · kemsakurai/folium_example
前提
以下環境で
OS
% sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29
pythonの
verion % python -V Python 2.7.10
使用した
folium の version 何が% pip list | grep folium folium (0.5.0)
あったのかは わかりませんが、 前回似たような ことを 実施してから、 1,2週間たらずで、 version up していました。。
folium インストール方法
pip で
pandas も
pip install pandas pip install folium
地図表示に ついての 前提
23区のみの
* 地域コード付きの
作るのは、、
実施作業の 流れ
以下の
時系列順に
GeoJSON
ファイルの準備 データセットの
加工 地図を
描画(コロプレス図)
4 地図を
GeoJSON
ファイルの 準備
前回実施時は、
おそらく
JapanCityGeoJson/geojson/13 at master · niiyz/JapanCityGeoJson
以下、tokyo23.json
を
plot_map.py
# -*- coding: utf-8 - import folium def main(): # 東京都港区芝公園を設定 tokyo23_location = [35.658593, 139.745441] m = folium.Map(location=tokyo23_location, tiles='https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}.png', attr='OpenStreetMap', zoom_start=11) geojson = r'tokyo23.json' # geojson読み込み m.choropleth(geo_data=geojson) # 地図をhtml形式で出力 m.save(outfile="map.html") if __name__ == "__main__": main()
スクリプトの 補足説明
地図の
中心点に ついて
東京都23区の中心部なので、 港区あたりかなと いう ことで、 港区芝公園を 設定しました。
経度、緯度などを 計算しての 結果ではないですが、 表示させた ところいい 感じには なったので、 こちらを 採用しています。 tokyo23_location = [35.658593, 139.745441]
zoom_start 初期表示時の
地図の 拡大倍率に なります。
これも、値を 切り替えて 地図出力、 表示確認を 行って、 ちょうど 良い 大きさsに なったのが、 11
でそちらを 採用しました。 zoom_start=11
使用している
tilesに ついて
folium にバンドルされている もの 以外でだと、 以下の tile が 使用できるようです。
Leaflet Provider Demo
今回使用しているtilesも 上記から 探して 設定しました。
map.html
以下、
データセットの 加工
東京都都市公園等区市町村別面積・人口割比率表 - データセット - 東京オープンデータカタログサイト から
地図上に
csvには、
地域名と、
Google スプレッドシートで、
上記作業を
folium_example/koen.csv at master · kemsakurai/folium_example
CSV出力の
地図を 描画(コロプレス図)
データ上、
一人<wbr>当たり<wbr>面積(ホ/B)(平米)
を
作成した スクリプト
長いので、
folium_example/plot_choropleth_map.py at master · kemsakurai/folium_example
スクリプトの 補足説明
Pandasでの
データ付与に ついて
csv のヘッダーカラムが 日本語で、 取得の 際に エラーとなるため、 以下で ヘッダ名の 変更を 行っています。
取得方法があるのかもしれません。 # カラムを再設定 df.columns = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ"]
geojonとの
マッピングの ための 加工 geojsonには、 id が String型で 定義されています。
A列に行政区分コードが 含まれますが、 値に NaNが 存在する ため、 float64
になり、 このままでは マッピングが できませんでした。
まず、NaNを 0に 置き換え、 その 後 int型に 変換し、 23区の 行政区分コードを 含む行のみを 抽出。
抽出結果のA列を、 String型に 変換しています。 # 列Aをint型に変換 df['A'] = df['A'].fillna(0).astype(int) # 23区の地域コードに合致する列のみを抽出 df = df[df['A'].isin([13101, 13102, 13103, 13104, 13105, 13106, 13107, 13108, 13109, 13110, 13111, 13112, 13113, 13114, 13115, 13116, 13117, 13118, 13119, 13120, 13121, 13122, 13123])] # 列、A を文字列に変換 (これをやらないと、数値側と文字列の突き合わせになり、マッピングができない。) df['A'] = df['A'].astype('str')
fill_colorの
設定に ついて
default はblue
です。
公園なので緑かなと いう ことで、 'YlGn'
を指定するようにしました。
どんな色が 設定できるかですが、 folium — Folium 0.5.0+15.gecd5052 documentation に 以下のように 記載されています。
こちらは、別途まとめようかと 思います。 - fill_color (string, default ‘blue’) – Area fill color. Can pass a hex code, color name, or if you are binding data, one of the following color brewer palettes: ‘BuGn’, ‘BuPu’, ‘GnBu’, ‘OrRd’, ‘PuBu’, ‘PuBuGn’, ‘PuRd’, ‘RdPu’, ‘YlGn’, ‘YlGnBu’, ‘YlOrBr’, and ‘YlOrRd’.
choropleth_map.html
以下のような
千代田区が、
江戸川区が
地図を 描画(ポップアップ付きの コロプレス図)
一人<wbr>当たり<wbr>面積(ホ/B)(平米)
と、総合計((ホ<wbr>)八+二)数
を
マーカを
作成した スクリプト
長いので、
folium_example/plot_choropleth_map_with_popup.py at master · kemsakurai/folium_example
スクリプトの 補足説明
ピンを
設定している 経度、 緯度に ついて
ピンを立てる 位置は、 区の 中心が よいかと 思い、 区の 中心の 経度、 緯度の 情報を 探したのですが、 見つける ことができず、 geojsonの 値から 経度、 緯度の 平均値を 導出しました。
以下のメソッド内で 計算しています。 # 区の中央部の経度緯度をgeojsonから計算 city_center = __calulate_city_center(data)
popup内に
表示する textに ついて
こちらは、html形式で 設定を 行う 必要が あります。
各項目ごとに改行させたかったのですが、 \n
記述では設定できず、 以下のように <br ></br>
で記載しました。 city_name = df.loc[(df['A'] == k), 'B'].values[0] poput_text = u"区の名前:" + city_name.decode('utf-8') + "<br/>" square_meter = df.loc[(df['A'] == k), 'AH'].values[0] poput_text = poput_text + u"区の人口一人当たりの公園面積:" + \ str(square_meter) + " " + "m2" + "<br/>" park_count = df.loc[(df['A'] == k), 'AF'].values[0] poput_text = poput_text + u"区の総公園数:" + str(park_count)
choropleth_map_with_popup.html
以下のような
公園数を
奥さんに
まとめ
python folium を
データ取得後、
それも
まだ、
も
以上です。
コメント