赞
踩
使用GeoPandas进行地理空间数据可视化的入门教程。
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩
使用gencraft生成的图像
在当今数据驱动的世界中,将信息可视化到地图上可以提供有价值的见解,帮助有效地传达复杂的模式。GeoPandas是一个建立在pandas
和shapely
之上的Python库,使用户能够通过将地理空间数据与各种变量合并来创建令人惊叹的地图。在本文中,我们将使用在印度卡纳塔克邦绘制变量地图的示例来探索GeoPandas的功能。最终,你将具备使用丰富数据叠加创建自己令人印象深刻的地图的知识。
GeoPandas:GeoPandas是一个强大的库,通过添加地理空间数据类型和操作扩展了pandas
的功能。它允许我们处理空间数据,如shapefiles
,并执行合并、连接和绘图等空间操作。
【GeoPandas】:https://pypi.org/project/geopandas/
接下来跟随本文开始了解吧!
在开始之前,请确保你已经在Python环境中安装了GeoPandas及其依赖项。你可以使用pip
或conda
安装GeoPandas,包括pandas
和matplotlib
在内的依赖项将会自动安装。
pip install geopandas
在演示中,我使用了从KGIS网站获取的卡纳塔克邦州的shapefile
。
【KGIS网站】:https://kgis.ksrsac.in/kgis/downloads.aspx
想知道什么是shapefile
吗?shapefile
包含空间要素的几何和属性数据。你可以从各种来源获取shapefile
,例如政府存储库或开放数据门户。一旦你获得了卡纳塔克邦的shapefile
,请将其放在你的工作目录中。
使用GeoPandas,我们可以将卡纳塔克邦的shapefile
加载到一个GeoDataFrame
中,这实际上是一个带有几何列的pandas DataFrame
。几何列存储了shapefile
中每个要素的空间信息。
- # 导入GeoPandas库
- import geopandas as gpd
-
- # 加载shapefile
- gdf_districts = gpd.read_file('District.shp')
这是数据帧的样子
使用GeoPandas,创建基本地图就像在GeoDataFrame上调用plot()
函数一样简单。这将生成卡纳塔克邦边界的可视化表示。
- # 绘制地图
- gdf_districts.plot()
要将数据变量添加到我们的地图中,我们需要将GeoDataFrame与包含我们要可视化的变量的另一个DataFrame合并。这个合并过程通常使用一个共同的标识符,比如独特的地理代码或名称来完成。
- # 数据将在地图中被可视化
- import pandas as pd
- df = pd.read_excel("dist_population.xlsx")
人口数据
我们可以看到我们需要两个数据帧gdf_districts
和df
,其中有一个共同的列,即区名,但在两个数据帧中,区名的命名方式不同,因此我们将在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 Name
和Population
。
这是合并后的数据帧的样子
一旦数据合并,就可以利用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
中被分为“班加罗尔(城市)”和“班加罗尔(乡村)”。但当合并区域时,合并函数有点混乱,在另一个数据帧中找不到完美匹配。这就是一个矩阵中的故障!所以记住这个合并失误的警示故事:始终小心处理数据,否则你可能会在地图上错放一个繁华的大都市!
GeoPandas提供了各种自定义选项,使你的地图在视觉上更加吸引人。你可以调整颜色、应用主题样式、添加标签和包含其他元素,以提高地图的美学效果和清晰度。
GeoPandas是一个多功能的库,使用户能够通过将地理空间数据与各种变量合并创建令人惊叹的地图。在本文中,我们探讨了使用GeoPandas在印度卡纳塔克邦地图上绘制变量的过程。通过遵循这里概述的步骤,你可以释放地理空间数据可视化的力量,并轻松创建自己引人入胜的地图。所以,继续探索各种可能性,让你的地图通过数据讲述引人入胜的故事。
请记住,GeoPandas的潜力远远超过这个例子。它可以用于分析和可视化来自不同领域的空间数据,使你能够发现隐藏的模式、了解各种关系并根据基于位置的洞见做出明智的决策。
《Pandas1.x实例精解》详细阐述了与Pandas相关的基本解决方案,主要包括Pandas基础,DataFrame基本操作,创建和保留DataFrame,开始数据分析,探索性数据分析,选择数据子集,过滤行,对齐索引,分组以进行聚合、过滤和转换,将数据重组为规整形式,组合Pandas对象,时间序列分析,使用Matplotlib、Pandas和Seaborn进行可视化,调试和测试等内容。此外,该书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。《Pandas1.x实例精解》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。
Pandas1.x实例精解https://item.jd.com/13255935.html
精彩回顾
微信搜索关注《Python学研大本营》,加入读者群
访问【IT今日热榜】,发现每日技术热点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。