如何解决从Folium中的结果创建新列
我一直在使用西雅图的事故数据库,其中包含大约200,000起事故的坐标。 例如,我要做的是将这些事故按地区进行地理分组。为此,我使用folium在地图上可视化了分组,但是现在我不知道如何将这些相同的组提取到数据库中的新列中(甚至可能的话)。 我已经解决了这个问题很多时间了,但是我不知道如何解决它……请帮助!
这是我对folium所做的事情和结果:
from folium import plugins
#Using Seattle's latitude and longitude
latitude = 47.608013
longitude = -122.335167
seattle_map = folium.Map(location = [latitude,longitude],zoom_start = 12)
incidents = plugins.MarkerCluster().add_to(seattle_map)
for lat,lng,label,in zip(database.Y,database.X,database.SEVERITYCODE):
folium.Marker(
location=[lat,lng],icon=None,popup=folium.Popup(label),).add_to(incidents)
seattle_map
解决方法
如果要添加西雅图的地区,则可以将此Github存储库与有关西雅图的各种地理数据结合使用:https://github.com/seattleio/seattle-boundaries-data
例如,如果要在地图上添加邮政编码区域,则可以使用如下的geojson文件:
latitude = 47.608013
longitude = -122.335167
url = "https://raw.githubusercontent.com/seattleio/seattle-boundaries-data/master/data/zip-codes.geojson"
seattle_map = folium.Map(location = [latitude,longitude],zoom_start = 12)
folium.GeoJson(
url,name='zip_code'
).add_to(seattle_map)
seattle_map
如果要将邮政编码区域添加到碰撞数据中,最好是使用Folium中的Choropleth贴图。您需要对数据进行一些处理才能知道碰撞属于哪个邮政编码区域。我使用匀称的库来这样做。您可以创建这样的代码:
import json
import requests
import folium
import pandas as pd
from shapely.geometry import shape,Point
# Url of the geojson with zipcode of Seattle
url = "https://raw.githubusercontent.com/seattleio/seattle-boundaries-data/master/data/zip-codes.geojson"
# Import data of the collisions in Seattle
df = pd.read_csv("Collisions.csv")
# Keep only lat and long
df_clean = df.loc[:,["X","Y"]]
df_clean = df_clean.dropna()
r = requests.get(url)
for index,row in df_clean.iterrows():
for feature in r.json()["features"]:
polygon = shape(feature['geometry'])
point = Point(row[0],row[1])
if polygon.contains(point):
df_clean.loc[index,'ZCTA5CE10'] = feature["properties"]['ZCTA5CE10']
break
df_clean = df_clean.dropna()
result = df_clean.groupby(["ZCTA5CE10"])["X"].count()
result = pd.DataFrame(result)
result.reset_index(level=0,inplace=True)
#Using Seattle's latitude and longitude
latitude = 47.608013
longitude = -122.335167
seattle_map = folium.Map(location = [latitude,zoom_start = 12)
folium.Choropleth(
geo_data=url,name='choropleth',data=result,columns=["ZCTA5CE10",'X'],key_on='feature.properties.ZCTA5CE10',fill_color='YlOrRd',).add_to(seattle_map)
seattle_map
就性能而言,您可以提高我的代码很多(使用for循环创建数据框的新列显然不是最佳选择)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。