python-地図可視化コンポーネントfoliumの操作
foliumはpythonの地図を描いて、地図の上で点を打って、円をかいて、色の標識のツール種類をします。簡単で学びやすく、パンダスとうまく融合することができます。
基本機能のデモ
熱力図は、現実のデータの大きさが制御できないので、ときどきfoliumで描いた熱力図では、効果があまりよくないです。
ここにはいくつかの公式の例があります。興味があればご覧ください。
https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/
追加:Pythonリモートセンシング可視化――foliumモジュールは熱力図を示す。
本節では、foliumモジュールにより全国PM 2.5熱力分布図を描画し、対応するhtmlファイルを作成します。
今日のリモートセンセーションの美しさ――「オーロラ」のアラスカ。アラスカ州は北アメリカ大陸の西北端に位置し、東はカナダと境を接しています。衛星は神秘的な北極圏を見下ろして、アラスカの山頂、誰の顔は岬の天辺が現れますか?
コロンビアの氷河は米国のアラスカ州に位置し、海抜3,050メートルの氷原から降下し、楚加奇山脈の側翼に沿って降下し、狭い入り口に入り、アラスカ東南部のウィリアム王子湾に到達し、世界で最も変化の早い氷河の一つである。科学者はLandast 4,5,7と8を使ってコロンビアの氷河の変化を追跡して30年を超えました。コロンビアの氷河は大きな潮流氷河で、最終的には海に流れ込みます。
Landastシリーズの衛星で捕獲された偽のカラー画像は1986年以来の氷河とその周辺の景観の変化を示しています。画像は以下のセンサーによって収集されます。特定のテーマの製図器(TM)、拡張型の特定のテーマの製図器(ETM+)と陸地イメージャ(OSI)――四つの異なるLandart衛星(4,5,7,8)から来ます。
Landsca像は電磁波スペクトルの短波赤外,近赤外,緑帯を結合した。この波長の組み合わせによって、雪と氷は明るい青を示し、植生は緑で、雲は白またはオレンジ色で、水体は深い青である。露出した岩は茶色で、氷河の表面の岩の破片は灰色です。
過去30年間で、終点駅は北に20キロ縮んだ。いくつかの年に、終点駅は1キロ以上後退しましたが、速度が不均一です。例えば、終点駅の運動は2000年から2006年の間に停滞しています。大努納塔克峰と卡丁峰(直接西に向かって)氷河の動きを制限して氷を固定しています。20世紀80年代以来、氷河は全体の厚さと体積の半分ぐらいを失っています。
foliumはPythonの中で地図を描くモジュールで、地図(下図)に点をつけたり、円を描いたりして、色の表示をするツール類です。簡単で学びやすく、パンダスとの融合が良く、地図の可視化の一種の神器です。
コマンドラインに直接オンラインでインストールすればいいです。快速、簡潔、便利、効率的です。
pip install folium
このオープンソースライブラリの多くはOpenStreetMap、MapQuest Open、MapQuestOpen Aerial、Mapbox、Staminからの内部地図コンポーネントであり、MapboxまたはCloudmadeのAPIキーを使用してカスタマイズされた個別の地図コンポーネントをサポートしています。FoliumはGeoJSONとTopoJSONの2種類のファイルフォーマットの重畳をサポートしています。これらの2種類のファイルフォーマットの重畳層にデータを接続してもいいです。最後にcolor-brewer配色スキームを使って分布図を作成することができます。
このセクションではまず、その簡単なアプリケーションを示します。主に2018年1月に全国のPM 2.5余りの地上観測サイトを例に挙げて、これらのデータを熱力図(heat map)の形で皆に見せて、それに応じたファイルを作成します。
コードの実装:
結果図の局部拡大:
結果図の局部拡大:
縮小後のパノラマ図:
以上は個人の経験ですので、参考にしていただければと思います。間違いがあったり、完全に考えていないところがあれば、教えてください。
基本機能のデモ
import folium
import webbrowser
m=folium.Map(location=[40.009867,116.485994],zoom_start=10) # ,
folium.Marker([40.2,116.7],popup='<b> </b>').add_to(m) # , m
folium.Marker([40.22,116.72],popup='<b> </b>',icon=folium.Icon(color='red')).add_to(m)
#
folium.Marker([40.24,116.74],popup='<b> </b>',icon=folium.Icon(color='green',icon='info-sign')).add_to(m)
#
#
folium.Circle(
location=[40.2,117.7],
radius=10000,
color='crimson',
popup='popup',
fill=False
).add_to(m)
#
folium.CircleMarker(
location=[39.2,117.7],
radius=100,
popup='popup',
color='#DC143C',#
fill=True,
fill_color='#6495ED' #
).add_to(m)
m.save('f1.html')
webbrowser.open('f1.html')
また、foliumはマウスをクリックしたところに経緯度を表示したり、クリックしたところにそのままアイコンを付けたりするインタラクティブもサポートしています。
import folium
import webbrowser as wb
#
m = folium.Map(
location=[36.68159, 117.103565],
zoom_start=10
)
m.add_child(folium.LatLngPopup())
#
m.add_child(
folium.ClickForMarker(popup='Waypoint')
)
m.save('f2.html')
wb.open('f2.html')
二foliumを使って散点図、熱力図を描きます。熱力図は、現実のデータの大きさが制御できないので、ときどきfoliumで描いた熱力図では、効果があまりよくないです。
import numpy as np
import pandas as pd
import seaborn as sns
import folium
import webbrowser
from folium.plugins import HeatMap
# :
posi = pd.read_excel("D:/Python/File/Cities2015.xlsx")
posi = posi.dropna()
# :
lat = np.array(posi["lat"][0:len(posi)])
lon = np.array(posi["lon"][0:len(posi)])
pop = np.array(posi["pop"][0:len(posi)],dtype=float)
gdp = np.array(posi["GDP"][0:len(posi)],dtype=float)
data1 = [[lat[i],lon[i],pop[i]] for i in range(len(posi))]
# :
map_osm = folium.Map(
location=[35,110],
zoom_start=5,
tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
attr="© <a href="http://ditu.amap.com/" rel="external nofollow" > </a>"
)
# :
map_osm = folium.Map(
location=[35,110],
zoom_start=5,
tiles='http://rt{s}.map.gtimg.com/realtimerender?z={z}&x={x}&y={y}&type=vector&style=0',
attr="© <a href="http://map.qq.com/" rel="external nofollow" > </a>"
)
# :
HeatMap(data1).add_to(map_osm)
file_path = r"D:/Python/Image/People.html"
map_osm.save(file_path)
webbrowser.open(file_path)
foliumの散点図は展示に適しています。ロードの円滑性を考慮して、あまり大きいデータを読み取ることを勧めません。また、そのコンポーネントは外部のネットのjsを読むかもしれません。もしあるネットワークがgoogleにアクセスできないなら、効果は見せられないかもしれません。解決策は中のjs住所を国内の鏡像に置き換えることです。
import pandas as pd
import numpy as np
import os
import folium
from folium import plugins
import webbrowser
import geopandas as gp
# :
full = pd.read_excel("D:/Python/File/Cities2015.xlsx")
full = full.dropna()
# :
schools_map = folium.Map(location=[full['lat'].mean(), full['lon'].mean()], zoom_start=10)
marker_cluster = plugins.MarkerCluster().add_to(schools_map)
# :
for name,row in full.iterrows():
folium.Marker([row["lat"], row["lon"]], popup="{0}:{1}".format(row["cities"], row["GDP"])).add_to(marker_cluster)
# , ,
#folium.RegularPolygonMarker([row["lat"], row["lon"]], popup="{0}:{1}".format(row["cities"], row["GDP"]),number_of_sides=10,radius=5).add_to(marker_cluster)
schools_map.save('schools_map.html') #
webbrowser.open('schools_map.html') #
この他にもfoliumは塗りつぶし図を描くことができます。ここにはいくつかの公式の例があります。興味があればご覧ください。
https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/
追加:Pythonリモートセンシング可視化――foliumモジュールは熱力図を示す。
本節では、foliumモジュールにより全国PM 2.5熱力分布図を描画し、対応するhtmlファイルを作成します。
今日のリモートセンセーションの美しさ――「オーロラ」のアラスカ。アラスカ州は北アメリカ大陸の西北端に位置し、東はカナダと境を接しています。衛星は神秘的な北極圏を見下ろして、アラスカの山頂、誰の顔は岬の天辺が現れますか?
コロンビアの氷河は米国のアラスカ州に位置し、海抜3,050メートルの氷原から降下し、楚加奇山脈の側翼に沿って降下し、狭い入り口に入り、アラスカ東南部のウィリアム王子湾に到達し、世界で最も変化の早い氷河の一つである。科学者はLandast 4,5,7と8を使ってコロンビアの氷河の変化を追跡して30年を超えました。コロンビアの氷河は大きな潮流氷河で、最終的には海に流れ込みます。
Landastシリーズの衛星で捕獲された偽のカラー画像は1986年以来の氷河とその周辺の景観の変化を示しています。画像は以下のセンサーによって収集されます。特定のテーマの製図器(TM)、拡張型の特定のテーマの製図器(ETM+)と陸地イメージャ(OSI)――四つの異なるLandart衛星(4,5,7,8)から来ます。
Landsca像は電磁波スペクトルの短波赤外,近赤外,緑帯を結合した。この波長の組み合わせによって、雪と氷は明るい青を示し、植生は緑で、雲は白またはオレンジ色で、水体は深い青である。露出した岩は茶色で、氷河の表面の岩の破片は灰色です。
過去30年間で、終点駅は北に20キロ縮んだ。いくつかの年に、終点駅は1キロ以上後退しましたが、速度が不均一です。例えば、終点駅の運動は2000年から2006年の間に停滞しています。大努納塔克峰と卡丁峰(直接西に向かって)氷河の動きを制限して氷を固定しています。20世紀80年代以来、氷河は全体の厚さと体積の半分ぐらいを失っています。
foliumはPythonの中で地図を描くモジュールで、地図(下図)に点をつけたり、円を描いたりして、色の表示をするツール類です。簡単で学びやすく、パンダスとの融合が良く、地図の可視化の一種の神器です。
コマンドラインに直接オンラインでインストールすればいいです。快速、簡潔、便利、効率的です。
pip install folium
このオープンソースライブラリの多くはOpenStreetMap、MapQuest Open、MapQuestOpen Aerial、Mapbox、Staminからの内部地図コンポーネントであり、MapboxまたはCloudmadeのAPIキーを使用してカスタマイズされた個別の地図コンポーネントをサポートしています。FoliumはGeoJSONとTopoJSONの2種類のファイルフォーマットの重畳をサポートしています。これらの2種類のファイルフォーマットの重畳層にデータを接続してもいいです。最後にcolor-brewer配色スキームを使って分布図を作成することができます。
このセクションではまず、その簡単なアプリケーションを示します。主に2018年1月に全国のPM 2.5余りの地上観測サイトを例に挙げて、これらのデータを熱力図(heat map)の形で皆に見せて、それに応じたファイルを作成します。
コードの実装:
# _*_ coding: utf-8 _*_
__author__ = 'xbr'
__date__ = '2019/1/9 15:47'
import numpy as np
import pandas as pd
import folium
import webbrowser
from folium.plugins import HeatMap
# csv , Dataframe
df = pd.read_csv(r"D:\data\PM25-20180101.csv")
#
num = df.shape[0]
#
lat = np.array(df["lat"][0:num])
#
lon = np.array(df["lon"][0:num])
# PM2.5, numpy
pm25 = np.array(df["PM25"][0:num], dtype=float)
# [lats, lons, weights]
data1 = [[lat[i], lon[i], pm25[i]] for i in range(num)]
# Map, [32, 120], 5
map_osm = folium.Map(location=[32, 120], zoom_start=5)
# map
HeatMap(data1).add_to(map_osm)
file_path = r"D:\AirQualityMap.html"
# html
map_osm.save(file_path)
#
webbrowser.open(file_path)
結果図:結果図の局部拡大:
結果図の局部拡大:
縮小後のパノラマ図:
以上は個人の経験ですので、参考にしていただければと思います。間違いがあったり、完全に考えていないところがあれば、教えてください。