使用GeoPandas进行地理空间数据可视化

使用GeoPandas进行地理空间数据可视化的入门教程。

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

图片

使用gencraft生成的图像

在当今数据驱动的世界中,将信息可视化到地图上可以提供有价值的见解,帮助有效地传达复杂的模式。GeoPandas是一个建立在pandasshapely之上的Python库,使用户能够通过将地理空间数据与各种变量合并来创建令人惊叹的地图。在本文中,我们将使用在印度卡纳塔克邦绘制变量地图的示例来探索GeoPandas的功能。最终,你将具备使用丰富数据叠加创建自己令人印象深刻的地图的知识。

关于GeoPandas

GeoPandas:GeoPandas是一个强大的库,通过添加地理空间数据类型和操作扩展了pandas的功能。它允许我们处理空间数据,如shapefiles,并执行合并、连接和绘图等空间操作。

【GeoPandas】:https://pypi.org/project/geopandas/

接下来跟随本文开始了解吧!

1.设置环境:

在开始之前,请确保你已经在Python环境中安装了GeoPandas及其依赖项。你可以使用pipconda安装GeoPandas,包括pandasmatplotlib在内的依赖项将会自动安装。

pip install geopandas

2.获取Shapefile:

在演示中,我使用了从KGIS网站获取的卡纳塔克邦州的shapefile

【KGIS网站】:https://kgis.ksrsac.in/kgis/downloads.aspx

想知道什么是shapefile吗?shapefile包含空间要素的几何和属性数据。你可以从各种来源获取shapefile,例如政府存储库或开放数据门户。一旦你获得了卡纳塔克邦的shapefile,请将其放在你的工作目录中。

3.加载和探索Shapefile:

使用GeoPandas,我们可以将卡纳塔克邦的shapefile加载到一个GeoDataFrame中,这实际上是一个带有几何列的pandas DataFrame。几何列存储了shapefile中每个要素的空间信息。

# 导入GeoPandas库
import geopandas as gpd

# 加载shapefile
gdf_districts = gpd.read_file('District.shp')

图片

这是数据帧的样子

4.绘制地图:

使用GeoPandas,创建基本地图就像在GeoDataFrame上调用plot()函数一样简单。这将生成卡纳塔克邦边界的可视化表示。

# 绘制地图
gdf_districts.plot()

图片

5.将数据与地图合并:

要将数据变量添加到我们的地图中,我们需要将GeoDataFrame与包含我们要可视化的变量的另一个DataFrame合并。这个合并过程通常使用一个共同的标识符,比如独特的地理代码或名称来完成。

# 数据将在地图中被可视化
import pandas as pd
df = pd.read_excel("dist_population.xlsx")

图片

人口数据

我们可以看到我们需要两个数据帧gdf_districtsdf,其中有一个共同的列,即区名,但在两个数据帧中,区名的命名方式不同,因此我们将在merge()函数中传递left_on='KGISDist_1'right_on='District Name'参数并执行left join

# 将shapefile与districts相关的varibale进行合并
# KGISDist_1是我们在gdf_districts数据框架中的地区名称
# District是我们在df数据框架中的地区名称
gdf_merged = gdf_districts.merge(df, left_on='KGISDist_1', right_on='District Name', how='left')

合并后,我们可以看到两个新列出现在末尾District NamePopulation

图片

这是合并后的数据帧的样子

6.在地图上绘制变量数据:

一旦数据合并,就可以利用GeoPandas的功能在地图上绘制变量。通过选择适当的颜色调色板、图例和标签,可以增强视觉表现效果,将地图变得更加易于阅读和理解,有效地传达有意义的信息。

import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np

# 定义颜色比例尺
cmap = plt.cm.get_cmap('YlOrRd')  # Red to green colormap (reversed)
cmap.set_bad('white')  # Set NaN values to white
normalize = colors.Normalize(vmin=gdf_merged['Population'].min(), vmax=gdf_merged['Population'].max())

# 绘制地图
fig, ax = plt.subplots(figsize=(10, 10))
gdf_districts.plot(ax=ax, facecolor='none', edgecolor='black', linewidth=0.8)  # Plot the district outlines

# 根据人口数量填充颜色
infes_values = gdf_merged['Population'].fillna(np.nanmin(gdf_merged['Population']) - 1)  # Replace NaN values with a value lower than min
gdf_districts.plot(ax=ax, column=infes_values, cmap=cmap, linewidth=0, legend=False)

# 添加区域标签
for x, y, label in zip(gdf_merged.geometry.centroid.x, gdf_merged.geometry.centroid.y, gdf_merged['KGISDist_1']):
    ax.text(x, y, label, fontsize=8, ha='center', va='center')

# 设置图表标题和轴标签
ax.set_title('Population in Karnataka Districts')
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')

# 创建并添加颜色条
sm = plt.cm.ScalarMappable(cmap=cmap, norm=normalize)
sm.set_array([])
cbar = fig.colorbar(sm)
cbar.set_label('Population')

# 显示图表
plt.show()

图片

由GeoPandas制作的美丽地图

如图所示人口众多的班加罗尔在地图上看起来像消失了。因为班加罗尔在gdf_districts中被分为“班加罗尔(城市)”和“班加罗尔(乡村)”。但当合并区域时,合并函数有点混乱,在另一个数据帧中找不到完美匹配。这就是一个矩阵中的故障!所以记住这个合并失误的警示故事:始终小心处理数据,否则你可能会在地图上错放一个繁华的大都市!

7.自定义地图:

GeoPandas提供了各种自定义选项,使你的地图在视觉上更加吸引人。你可以调整颜色、应用主题样式、添加标签和包含其他元素,以提高地图的美学效果和清晰度。

总结

GeoPandas是一个多功能的库,使用户能够通过将地理空间数据与各种变量合并创建令人惊叹的地图。在本文中,我们探讨了使用GeoPandas在印度卡纳塔克邦地图上绘制变量的过程。通过遵循这里概述的步骤,你可以释放地理空间数据可视化的力量,并轻松创建自己引人入胜的地图。所以,继续探索各种可能性,让你的地图通过数据讲述引人入胜的故事。

请记住,GeoPandas的潜力远远超过这个例子。它可以用于分析和可视化来自不同领域的空间数据,使你能够发现隐藏的模式、了解各种关系并根据基于位置的洞见做出明智的决策。

推荐书单

秋日阅读企划icon-default.png?t=N7T8https://pro.m.jd.com/mall/active/3yzSCnrymNQEzLmwtZ868xFeytT7/index.html

《Pandas1.x实例精解》

《Pandas1.x实例精解》详细阐述了与Pandas相关的基本解决方案,主要包括Pandas基础,DataFrame基本操作,创建和保留DataFrame,开始数据分析,探索性数据分析,选择数据子集,过滤行,对齐索引,分组以进行聚合、过滤和转换,将数据重组为规整形式,组合Pandas对象,时间序列分析,使用Matplotlib、Pandas和Seaborn进行可视化,调试和测试等内容。此外,该书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。《Pandas1.x实例精解》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。

Pandas1.x实例精解icon-default.png?t=N7T8https://item.jd.com/13255935.html

精彩回顾

《活学活用Pandas,简化数据探索性分析》

《迭代vs向量化,如何提升Pandas性能?》

《使用Scikit-Learn,快速掌握机器学习预测方法》

《使用Langchain免费运行ChatGPT插件》

《快来体验PandasAI数据分析,将Pandas和ChatGPT结合起来》

《4步掌握“指令工程”,使用ChatGPT进行高效AI创作》

微信搜索关注《Python学研大本营》,加入读者群

访问【IT今日热榜】,发现每日技术热点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值