Python GeoPandas 1.0 实战中国草地资源空间分析与可视化当我们需要从海量地理数据中提取有价值的信息时传统GIS软件往往显得笨重而低效。这正是Python生态中GeoPandas大显身手的场景——它让地理空间数据分析变得像处理普通表格数据一样简单。本文将带您用最新GeoPandas 1.0版本完成从省级行政区划数据处理到草地资源专题地图生成的全流程实战。1. 环境配置与数据准备在开始分析前我们需要搭建适合地理空间分析的Python环境。推荐使用conda创建独立环境能有效解决地理空间库的依赖问题conda create -n geo python3.9 conda activate geo conda install -c conda-forge geopandas matplotlib contextily中国省级行政区划矢量数据可以从国家基础地理信息中心获取这里我们使用简化版的GeoJSON数据示例import geopandas as gpd # 加载省级行政区划数据 china gpd.read_file(https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json) print(china.head(3))典型输出应包含几何列和各省级属性nameadcodegeometry山东省370000MULTIPOLYGON (((120.475 36.279...江苏省320000MULTIPOLYGON (((118.767 34.693...浙江省330000MULTIPOLYGON (((120.143 30.236...提示实际分析时应确保数据采用正确的坐标参考系统(CRS)中国地区常用EPSG:4326(WGS84)或EPSG:4610(CGCS2000)2. 草地资源数据整合与处理由于公开的精细草地分布数据较难获取我们可以通过以下方法构建模拟数据集import numpy as np # 为各省生成模拟草地覆盖率(0-1之间) np.random.seed(42) china[grass_ratio] np.random.uniform(0.1, 0.8, len(china)) # 重点省份手动设置较高值 high_grass [西藏自治区, 内蒙古自治区, 新疆维吾尔自治区, 青海省, 四川省] china.loc[china[name].isin(high_grass), grass_ratio] np.random.uniform(0.6, 0.9, 5)创建草地面积计算字段假设单位为万平方公里# 计算各省面积(转换为平方公里) china[area] china.geometry.area * 10000 / (1000*1000) # 计算草地面积 china[grass_area] china[area] * china[grass_ratio]关键统计指标计算total_grass china[grass_area].sum() total_area china[area].sum() print(f全国草地覆盖率{total_grass/total_area:.1%})3. 空间分析与统计可视化GeoPandas的强大之处在于将地理运算与pandas操作无缝结合。以下代码计算草地资源分布的空间自相关from libpysal.weights import Queen from esda.moran import Moran # 创建空间权重矩阵 w Queen.from_dataframe(china) # 计算Morans I moran Moran(china[grass_ratio], w) print(fMorans I: {moran.I:.3f}, p-value: {moran.p_sim:.4f})制作各省草地覆盖率分级统计图import matplotlib.pyplot as plt fig, ax plt.subplots(figsize(12, 10)) china.plot(columngrass_ratio, axax, legendTrue, schemequantiles, cmapYlGn, edgecolorwhite, linewidth0.3) ax.set_title(中国各省草地覆盖率分布, fontsize16) plt.tight_layout() plt.savefig(china_grass_coverage.png, dpi300)4. 高级可视化技巧基础地图往往不能满足专业报告需求下面展示如何制作出版级专题地图import contextily as ctx # 创建带底图的专业地图 fig, ax plt.subplots(figsize(14, 12)) # 绘制分级色彩 china.plot(columngrass_ratio, axax, cmapYlGn, schemenatural_breaks, legendTrue, legend_kwds{title: 草地覆盖率, loc: lower left}, alpha0.8) # 添加省界和标注 china.boundary.plot(axax, linewidth0.5, colorgray) for idx, row in china.iterrows(): ax.annotate(textrow[name][:2], xyrow.geometry.centroid.coords[0], hacenter, fontsize8) # 添加在线底图 ctx.add_basemap(ax, crschina.crs.to_string(), sourcectx.providers.Stamen.TerrainBackground) # 设置地图元素 ax.set_axis_off() ax.set_title(中国省级草地资源分布专题图\n数据来源模拟数据, fontsize18, pad20) plt.tight_layout()关键可视化元素优化技巧使用natural_breaks分类法更符合自然分布特征通过alpha参数控制填充透明度添加简洁的省名标注提升可读性结合地形底图增强空间参考5. 区域对比分析与热点探测聚焦主要草原分布区我们进行更精细的区域分析# 选取重点省份 grass_provinces china[china[name].isin(high_grass)].copy() # 计算各项统计指标 stats grass_provinces.agg({ area: [sum, mean], grass_area: [sum, mean], grass_ratio: mean }) print(stats)输出示例指标面积总和平均面积草地面积总和平均草地面积平均覆盖率值(万km²)482.396.5342.868.671.2%空间热点分析可揭示资源聚集区域from esda.getisord import G_Local # 计算Getis-Ord Gi*统计量 ga china[grass_area].values g G_Local(ga, w, transformB) china[hotspot] g.Zs # 可视化热点区域 fig, ax plt.subplots(1, 2, figsize(16, 8)) china.plot(columnhotspot, cmapcoolwarm, schemestd_mean, axax[0], legendTrue) ax[0].set_title(草地资源热点分析) # 标记显著热点(p0.05) sig china[(g.p_sim 0.05) (g.Zs 0)] sig.plot(colorred, axax[1]) china.boundary.plot(axax[1], linewidth0.5) ax[1].set_title(显著热点区域(p0.05))通过这样的分析我们可以直观看到内蒙古和青藏高原东部存在显著的草地资源聚集区。在实际项目中这些技术可应用于生态保护规划、牧业资源评估等多种场景。
Python GeoPandas 1.0 分析中国草地资源:40%国土面积的空间统计与制图
发布时间:2026/7/10 5:40:26
Python GeoPandas 1.0 实战中国草地资源空间分析与可视化当我们需要从海量地理数据中提取有价值的信息时传统GIS软件往往显得笨重而低效。这正是Python生态中GeoPandas大显身手的场景——它让地理空间数据分析变得像处理普通表格数据一样简单。本文将带您用最新GeoPandas 1.0版本完成从省级行政区划数据处理到草地资源专题地图生成的全流程实战。1. 环境配置与数据准备在开始分析前我们需要搭建适合地理空间分析的Python环境。推荐使用conda创建独立环境能有效解决地理空间库的依赖问题conda create -n geo python3.9 conda activate geo conda install -c conda-forge geopandas matplotlib contextily中国省级行政区划矢量数据可以从国家基础地理信息中心获取这里我们使用简化版的GeoJSON数据示例import geopandas as gpd # 加载省级行政区划数据 china gpd.read_file(https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json) print(china.head(3))典型输出应包含几何列和各省级属性nameadcodegeometry山东省370000MULTIPOLYGON (((120.475 36.279...江苏省320000MULTIPOLYGON (((118.767 34.693...浙江省330000MULTIPOLYGON (((120.143 30.236...提示实际分析时应确保数据采用正确的坐标参考系统(CRS)中国地区常用EPSG:4326(WGS84)或EPSG:4610(CGCS2000)2. 草地资源数据整合与处理由于公开的精细草地分布数据较难获取我们可以通过以下方法构建模拟数据集import numpy as np # 为各省生成模拟草地覆盖率(0-1之间) np.random.seed(42) china[grass_ratio] np.random.uniform(0.1, 0.8, len(china)) # 重点省份手动设置较高值 high_grass [西藏自治区, 内蒙古自治区, 新疆维吾尔自治区, 青海省, 四川省] china.loc[china[name].isin(high_grass), grass_ratio] np.random.uniform(0.6, 0.9, 5)创建草地面积计算字段假设单位为万平方公里# 计算各省面积(转换为平方公里) china[area] china.geometry.area * 10000 / (1000*1000) # 计算草地面积 china[grass_area] china[area] * china[grass_ratio]关键统计指标计算total_grass china[grass_area].sum() total_area china[area].sum() print(f全国草地覆盖率{total_grass/total_area:.1%})3. 空间分析与统计可视化GeoPandas的强大之处在于将地理运算与pandas操作无缝结合。以下代码计算草地资源分布的空间自相关from libpysal.weights import Queen from esda.moran import Moran # 创建空间权重矩阵 w Queen.from_dataframe(china) # 计算Morans I moran Moran(china[grass_ratio], w) print(fMorans I: {moran.I:.3f}, p-value: {moran.p_sim:.4f})制作各省草地覆盖率分级统计图import matplotlib.pyplot as plt fig, ax plt.subplots(figsize(12, 10)) china.plot(columngrass_ratio, axax, legendTrue, schemequantiles, cmapYlGn, edgecolorwhite, linewidth0.3) ax.set_title(中国各省草地覆盖率分布, fontsize16) plt.tight_layout() plt.savefig(china_grass_coverage.png, dpi300)4. 高级可视化技巧基础地图往往不能满足专业报告需求下面展示如何制作出版级专题地图import contextily as ctx # 创建带底图的专业地图 fig, ax plt.subplots(figsize(14, 12)) # 绘制分级色彩 china.plot(columngrass_ratio, axax, cmapYlGn, schemenatural_breaks, legendTrue, legend_kwds{title: 草地覆盖率, loc: lower left}, alpha0.8) # 添加省界和标注 china.boundary.plot(axax, linewidth0.5, colorgray) for idx, row in china.iterrows(): ax.annotate(textrow[name][:2], xyrow.geometry.centroid.coords[0], hacenter, fontsize8) # 添加在线底图 ctx.add_basemap(ax, crschina.crs.to_string(), sourcectx.providers.Stamen.TerrainBackground) # 设置地图元素 ax.set_axis_off() ax.set_title(中国省级草地资源分布专题图\n数据来源模拟数据, fontsize18, pad20) plt.tight_layout()关键可视化元素优化技巧使用natural_breaks分类法更符合自然分布特征通过alpha参数控制填充透明度添加简洁的省名标注提升可读性结合地形底图增强空间参考5. 区域对比分析与热点探测聚焦主要草原分布区我们进行更精细的区域分析# 选取重点省份 grass_provinces china[china[name].isin(high_grass)].copy() # 计算各项统计指标 stats grass_provinces.agg({ area: [sum, mean], grass_area: [sum, mean], grass_ratio: mean }) print(stats)输出示例指标面积总和平均面积草地面积总和平均草地面积平均覆盖率值(万km²)482.396.5342.868.671.2%空间热点分析可揭示资源聚集区域from esda.getisord import G_Local # 计算Getis-Ord Gi*统计量 ga china[grass_area].values g G_Local(ga, w, transformB) china[hotspot] g.Zs # 可视化热点区域 fig, ax plt.subplots(1, 2, figsize(16, 8)) china.plot(columnhotspot, cmapcoolwarm, schemestd_mean, axax[0], legendTrue) ax[0].set_title(草地资源热点分析) # 标记显著热点(p0.05) sig china[(g.p_sim 0.05) (g.Zs 0)] sig.plot(colorred, axax[1]) china.boundary.plot(axax[1], linewidth0.5) ax[1].set_title(显著热点区域(p0.05))通过这样的分析我们可以直观看到内蒙古和青藏高原东部存在显著的草地资源聚集区。在实际项目中这些技术可应用于生态保护规划、牧业资源评估等多种场景。