用 Folium 绘制起点和终点集群
Plotting Origin and Destination clusters with Folium
我有一个起点和终点坐标数据集,基本上如下所示:
import pandas as pd
import numpy as np
index = [1, 2, 3, 4, 5]
o_lt = pd.Series([19.285423, 19.285423, 19.639463, 19.631464, 19.631464], index = index)
o_lg = pd.Series([-99.126699, -99.126699, -99.094227, -99.123784, -99.123784], index = index)
d_lt = pd.Series([19.359331, 19.368288, 19.443874, 19.443874, 19.443874], index = index)
d_lg = pd.Series([-99.270102, -99.259745, -99.153412, -99.153412, -99.153412], index = index)
cluster = pd.Series([33, 33, 33, 33, 33], index = index)
cdmx_df = pd.DataFrame(np.c_[o_lt, o_lg, d_lt, d_lg, cluster], columns = ["origin_latitude", 'origin_longitude', 'destination_latitude', 'destination_longitude', 'cluster'])
print(cdmx_df)
我的数据集包含 1,600,000 个观察值。所以我所做的是一个 k-means 聚类,这就是我如何得到列 cluster
.
现在我接下来要做的是在 folium
的地图上绘制我的观察结果。
我想同时观察始发地和目的地,看看哪些路线需求量最大。
我正在用 folium 做这个:
cdmx_map = folium.map.FeatureGroup()
for lat1, lng1, lat2, lng2, cluster in zip(cdmx_df['origin_latitude'],
cdmx_df['origin_longitude'],
cdmx_df['destination_latitude'],
cdmx_df['destination_longitude'],
cdmx_df['cluster'],):
cdmx_map.add_child(
folium.vector_layers.CircleMarker(
[lat1, lng1, lat2, lng2],
color = 'green',
fill = True,
fill_color = 'blue',
fill_opacity = 0.6,
tooltip = str(lng1) + ',' + str(lat1) + ',' + str(lat2) + ',' + str(lng2)
)
)
此代码的问题在于它只允许我使用一个坐标进行绘图:´( 所以它不是 运行。
有没有办法在一张 folium 地图上绘制我的目的地坐标和原点坐标?
你的目的有点不明确。我的理解是如何在一张地图上画出起点和终点。因此,创建一个组并将起点的圆圈标记和终点的圆圈标记添加到组中。最后,将组与地图相关联。这段代码对应一个cluster,但是如果需要多个cluster,在当前循环过程之外增加一个cluster creation loop过程。
在你的代码中,圆圈标记用于设置定位起点的经纬度和定位的目的地点的经纬度,但圆圈标记设置为单个纬度和经度,如果需要标记折线,则将它们设置为 two-dimensional 列表。
import folium
from folium import FeatureGroup, LayerControl
cdmx_map = folium.map.FeatureGroup(name='Origin to destination')
m = folium.Map(location=[cdmx_df['origin_latitude'].mean(), cdmx_df['origin_longitude'].mean()], zoom_start=10)
for lat1, lng1, lat2, lng2, cluster in zip(cdmx_df['origin_latitude'],
cdmx_df['origin_longitude'],
cdmx_df['destination_latitude'],
cdmx_df['destination_longitude'],
cdmx_df['cluster'],):
origin = folium.vector_layers.CircleMarker(
[lat1, lng1],
radius=10,
color = 'green',
fill = True,
fill_color = 'green',
fill_opacity = 0.6,
tooltip = str(lng1) + ',' + str(lat1)
).add_to(cdmx_map)
destination = folium.vector_layers.CircleMarker(
[lat2, lng2],
radius=10,
color = 'red',
fill = True,
fill_color = 'red',
fill_opacity = 0.6,
tooltip = str(lat2) + ',' + str(lng2)
).add_to(cdmx_map)
cdmx_map.add_to(m)
LayerControl().add_to(m)
m
我有一个起点和终点坐标数据集,基本上如下所示:
import pandas as pd
import numpy as np
index = [1, 2, 3, 4, 5]
o_lt = pd.Series([19.285423, 19.285423, 19.639463, 19.631464, 19.631464], index = index)
o_lg = pd.Series([-99.126699, -99.126699, -99.094227, -99.123784, -99.123784], index = index)
d_lt = pd.Series([19.359331, 19.368288, 19.443874, 19.443874, 19.443874], index = index)
d_lg = pd.Series([-99.270102, -99.259745, -99.153412, -99.153412, -99.153412], index = index)
cluster = pd.Series([33, 33, 33, 33, 33], index = index)
cdmx_df = pd.DataFrame(np.c_[o_lt, o_lg, d_lt, d_lg, cluster], columns = ["origin_latitude", 'origin_longitude', 'destination_latitude', 'destination_longitude', 'cluster'])
print(cdmx_df)
我的数据集包含 1,600,000 个观察值。所以我所做的是一个 k-means 聚类,这就是我如何得到列 cluster
.
现在我接下来要做的是在 folium
的地图上绘制我的观察结果。
我想同时观察始发地和目的地,看看哪些路线需求量最大。
我正在用 folium 做这个:
cdmx_map = folium.map.FeatureGroup()
for lat1, lng1, lat2, lng2, cluster in zip(cdmx_df['origin_latitude'],
cdmx_df['origin_longitude'],
cdmx_df['destination_latitude'],
cdmx_df['destination_longitude'],
cdmx_df['cluster'],):
cdmx_map.add_child(
folium.vector_layers.CircleMarker(
[lat1, lng1, lat2, lng2],
color = 'green',
fill = True,
fill_color = 'blue',
fill_opacity = 0.6,
tooltip = str(lng1) + ',' + str(lat1) + ',' + str(lat2) + ',' + str(lng2)
)
)
此代码的问题在于它只允许我使用一个坐标进行绘图:´( 所以它不是 运行。
有没有办法在一张 folium 地图上绘制我的目的地坐标和原点坐标?
你的目的有点不明确。我的理解是如何在一张地图上画出起点和终点。因此,创建一个组并将起点的圆圈标记和终点的圆圈标记添加到组中。最后,将组与地图相关联。这段代码对应一个cluster,但是如果需要多个cluster,在当前循环过程之外增加一个cluster creation loop过程。
在你的代码中,圆圈标记用于设置定位起点的经纬度和定位的目的地点的经纬度,但圆圈标记设置为单个纬度和经度,如果需要标记折线,则将它们设置为 two-dimensional 列表。
import folium
from folium import FeatureGroup, LayerControl
cdmx_map = folium.map.FeatureGroup(name='Origin to destination')
m = folium.Map(location=[cdmx_df['origin_latitude'].mean(), cdmx_df['origin_longitude'].mean()], zoom_start=10)
for lat1, lng1, lat2, lng2, cluster in zip(cdmx_df['origin_latitude'],
cdmx_df['origin_longitude'],
cdmx_df['destination_latitude'],
cdmx_df['destination_longitude'],
cdmx_df['cluster'],):
origin = folium.vector_layers.CircleMarker(
[lat1, lng1],
radius=10,
color = 'green',
fill = True,
fill_color = 'green',
fill_opacity = 0.6,
tooltip = str(lng1) + ',' + str(lat1)
).add_to(cdmx_map)
destination = folium.vector_layers.CircleMarker(
[lat2, lng2],
radius=10,
color = 'red',
fill = True,
fill_color = 'red',
fill_opacity = 0.6,
tooltip = str(lat2) + ',' + str(lng2)
).add_to(cdmx_map)
cdmx_map.add_to(m)
LayerControl().add_to(m)
m