GeoPandas绘图与分析的5个实用示例

文摘   2024-11-08 16:38   江苏  

1. 引言:GeoPandas简介与安装

想象一下,你手握一副神奇的地图,不仅能清晰展示全球地形地貌,还能轻松叠加各类社会经济数据,甚至进行复杂的地理分析。这就是GeoPandas带给我们的魔力!作为基于Pandas扩展的地理空间数据分析库,它将Pandas的数据处理能力与Geoplotlib、Shapely等库的地理功能完美结合,让地理空间数据处理变得轻松愉快。

要开始这场地球探索之旅,你需要先安装GeoPandas及相关依赖。在命令行输入:

pip install geopandas matplotlib descartes

一切准备就绪,让我们踏上GeoPandas的奇幻旅程!

2. 示例一:加载与可视化世界地图

首先,我们将通过GeoPandas加载世界地图数据。这里使用的是内置的naturalearth_lowres数据集:

import geopandas as gpd

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.head()

瞧,一个包含国家边界、名称及面积等信息的GeoDataFrame已经呈现在眼前。接下来,用matplotlib绘制这幅世界地图:

world.plot(column='pop_est', cmap='Blues', legend=True)
plt.title('World Population Distribution')
plt.show()

这段代码以人口数量('pop_est')为颜色映射,用不同深浅的蓝色展示了全球人口分布情况。一幅生动的世界人口地图就此诞生!

3. 示例二:叠加多层地理信息

地理空间数据的魅力在于能将多种信息在同一张地图上叠加显示。比如,我们想看看各国首都与海岸线的关系:

# 加载世界首都数据
capitals = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))

# 叠加首都到世界地图
merged = world.set_geometry('geometry').merge(capitals, on='name')
merged.plot(column='capital', color='red', markersize=10, alpha=0.8, legend=False)

# 加载并绘制海岸线数据
coastlines = gpd.read_file(gpd.datasets.get_path('naturalearth_coastline'))
ax = coastlines.plot(color='black', linewidth=0.5)

merged.plot(ax=ax, column='pop_est', cmap='Blues', legend=True)
plt.title('Capitals, Coastlines & Population')
plt.show()

瞧,各国首都以红色点标记,与海岸线、人口分布图层巧妙融合,一幅富含信息的地球画卷展现在眼前!

4. 示例三:计算地理区域内属性统计

GeoPandas还支持对特定区域进行属性统计。假设我们要计算各大洲的人口总量:

# 加载世界大陆数据
continents = gpd.read_file(gpd.datasets.get_path('naturalearth_continents'))

# 计算各大陆人口总量
merged = continents.merge(world, how='inner', left_on='name', right_on='continent')
pop_by_continent = merged.groupby('continent')['pop_est'].sum().reset_index()

print(pop_by_continent)

这段代码将世界地图与大陆数据合并,然后按大陆分组计算人口总和。结果清晰展示了各大洲人口分布概况。

5. 示例四:空间关系查询与邻近分析

GeoPandas强大的空间查询功能使我们能轻松找出满足特定条件的区域。例如,找出距离某城市一定范围内的所有其他城市:

# 选择目标城市
target_city = capitals[capitals['name'] == 'Beijing']

# 计算其他城市与目标城市的距离
distances = capitals.distance(target_city)

# 找出距离小于1000km的城市
nearby_cities = capitals[distances < 1000000]
nearby_cities[['name''distance']]

这段代码利用distance()函数计算了所有城市与北京之间的距离,筛选出距离小于1000公里的城市及其具体距离。地理邻近分析就是如此简单!

6. 示例五:地理数据聚合与热力图绘制

最后,我们利用GeoPandas进行地理数据聚合并绘制热力图。例如,统计各经纬度格网的人口密度:

# 将世界地图划分为经纬度网格
grid = world.sjoin(world.geometry.buffer(1).centroid, how='left')
grid['lon'] = grid.geometry.x
grid['lat'] = grid.geometry.y

# 聚合计算每个网格的人口总量
pop_density = grid.groupby(['lon''lat'])['pop_est'].sum().reset_index()

# 绘制人口密度热力图
plt.scatter(pop_density['lon'], pop_density['lat'], c=pop_density['pop_est'], s=1, cmap='hot', alpha=0.9)
plt.title('Global Population Density Heatmap')
plt.colorbar(label='Population Density')
plt.show()

这张热力图直观展示了全球人口密度分布,颜色越深表示人口越密集。

结语:进一步学习与应用建议

恭喜你完成这场GeoPandas引领的地球探索之旅!从加载与可视化地图,到叠加多层信息、进行空间统计与分析,再到绘制热力图,你已掌握了GeoPandas的核心功能。未来,无论是城市规划、环境监测,还是商业选址、疫情追踪,GeoPandas都将是你手中不可或缺的地理数据分析利器。

好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!

文末福利

公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。

精品系统

微信公众号批量上传发布系统

关注我👇,精彩不再错过

手把手PythonAI编程
分享与人工智能和python编程语言相关的笔记和项目经历。
 最新文章