LoginSignup
1
1

More than 3 years have passed since last update.

【初心者向け】10行以内のスクリプト(1.folium)

Posted at

【初心者向け】10行以内のスクリプト(1.foliumで地図のプロット)

pythonで色々なライブラリを使えば、「少ないコードでもちょっとした事が出来て、少なければ5行程でもちょっとしたスクリプトが作れ、便利だな。」と思ったので、pythonやその他、コマンドを羅列しただけのものも出てくるかも知れませんが、10行程のスクリプトを不定期で投稿してみようと思います。

第1回として、「folium (pythonからleafletを利用して地図をプロットするpythonのライブラリ)を使用して、銀座周辺の地図をマーカー付きで3ヶ所プロットするスクリプトを投稿したいと思います。
このスクリプトでは、以下3ヶ所をプロットしました。

  • 有楽町駅: 位置情報【35.6749187,139.7606366】
  • 銀座コリドー街: 位置情報【35.6703699,139.7573871】
  • Ginza-SIX: 位置情報【35.6695908,139.7618857】

【環境】
LinuxMint19.3
python: 3.6.9
pip3: 9.0.1
pandas: 1.0.3
jupyter-lab: 2.1.0
folium: 0.10.1


1.位置情報を準備
・プロットする場所の位置情報はgoogleのマップで呼び出し、urlの文字列をマウスでコピーしました。
地理的にプロットするそれぞれの場所が近いので、googleマップの「この場所について」で確認するよりも簡単でした。
・因みに緯度は、「latitude」、経度は「longtude」で、検索するとこの順番で表示されると思います。
例として、コリドー街の場合「緯度: 35.6749187・経度: 139.7573871」となっていました。
各場所のこの値を、データフレームに格納していきます。

foliumの最低限の構文は、以下の様なものです。
map = folium.Map(location=[基準地点の緯度,経度], zoom_start = 初期の倍率)
map

2.コーディング
コードはjupyterで実行、地図はjupyterにプロットされます。

jupyter

# 銀座周辺をプロットするコードの例
# 1.ライブラリのインポート

import folium
import pandas as pd

# 2.データフレームへの位置情報の格納とマーカー表示の処理
plot_location = pd.DataFrame({
    'ginza':['Yurakucho_station','GinzaCorridorSteet','GinzaSix'],
    'latitude':[35.6749187 ,35.6703699 ,35.66695908],
    'longtude':[139.7606366 ,139.7573871 ,139.7618857],})

map = folium.Map(location=[35.6749187,139.7606366], zoom_start = 15)
for i, r in plot_location.iterrows():
    folium.Marker(location=[r['latitude'], r['longtude']], popup=r["ginza"]).add_to(map)

# 3.地図のプロット
map

これで、銀座界隈の地図がプロットされました。
下の画像は、画面キャプチャーですが、jupyterのノートブックにプロットされます。
コリドー街をクリックした状態です。
環境によるのだと思いますが、日本語では表示出来ませんでした。

このポップアップの文字はマーカーを設置する場所ですが、「2.データフレームへの位置情報の格納とマーカー表示の処理」で、各地点を記述する部分が該当します。
'ginza':['Yurakucho_station','GinzaCorridorSteet','GinzaSix'],

位置情報は「データフレーム」に格納していますが、foliumに直接渡すと3行のスクリプトにする事も出来るかと思います。
しかし、「データフレーム」を使うと、データ・セットを準備して拠点を増やす等の発展が出来ると思います。
参考にした先人達は、「csv」等に格納している例もある様です。

ginza_map.png

プロットしたマップを保存する場合は、以下の様に追加で「save」を実行すれば、「html」に出力が出来ます。

save
# プロットした地図をhtmlで書き込み
map.save("map_giza.html")

3.【補足】環境

この「folium」ですが、かなり便利なライブラリだと思うのですが、環境によって想定通りに動作しなかった事もありました。
参考までに、以下はこのスクリプトを実行した環境の情報です。
開発環境の情報だけですが、webブラウザを使う関係上、ブラウザの環境にもよりそうです。
実際、他ではプロットされない端末もありました。
恐らく、ブラウザの問題かと考えています。

・出力の一部は、削除してます。

環境
less /etc/lsb-release

DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=19.3
DISTRIB_DESCRIPTION="Linux Mint 19.3 Tricia"

(py3_env) $ pip3 --version
pip 9.0.1 from /home/xxx/py3_env/lib/python3.6/site-packages (python 3.6)
(py3_env)$ python -V
Python 3.6.9

$ pip3 show pandas
Name: pandas
Version: 1.0.3
Home-page: https://pandas.pydata.org
Requires: python-dateutil, pytz, numpy

(py3_env)$ pip3 show jupyterlab
Name: jupyterlab
Version: 2.1.0
Home-page: http://jupyter.org
Requires: notebook, tornado, jinja2, jupyterlab-server

(py3_env)$ pip3 show folium
Name: folium
Version: 0.10.1
Home-page: https://github.com/python-visualization/folium
Requires: numpy, jinja2, requests, branca

以上、foliumを利用した地図のプロットでした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1