使用 Python 可视化全球人口数据集

2025年3月17日 | 阅读11分钟

许多公共机构,如政府,面临着国家层面的问题,例如人口不断增长。因此,可视化全球人口以帮助政府解决这些问题将是有益的。为此,需要借助人工智能和机器学习模型等技术,将人口分布数据绘制成地图。

为完成整个过程,需要考虑以下几个指标:

  • 衡量对灾难和气候变化的脆弱性;
  • 获取医疗等基本服务的可及性差距;
  • 生态和土地利用限制都取决于捕捉人口地理分布及其基本特征的能力。
  • 为了做出更循证的决策,无论是对于规划、预算还是监管目的,都需要足够精细和及时的人口统计数据。

尤其是在发展中国家,新一轮高分辨率(HR)人口估计普查层有潜力对公共部门的决策产生重大影响。用于绘制这些图层的数据是通过非常规方法收集的,例如卫星图像。

因此,它们可以为全球每个网格单元提供人口估计,分辨率为 30 米。API(应用程序编程接口)允许用户在线访问其最新更改,这使其成为高度依赖数据的决策者的潜在重要资源。

这些高分辨率人口地图解决了传统行政或统计人口普查数据的一些重要不足。

对于各种描述性和规范性分析,可以使用像 Facebook Research HD Settlement Layer 和 World Pop 这样的数据集,它们使用新一代技术进行高分辨率人口估计。

WorldPop 项目成立于 2013 年,旨在使人口和人口统计数据能够为任何人所用,以支持发展、灾难救援和健康领域的应用。它结合了数字地图、卫星图像和在国家层面的地方区域进行的微普查调查,覆盖到社区规模。简而言之,WorldPop 使用机器学习建模(随机森林)来获得高质量的国家人口数据。

本教程将展示 Facebook 的人口计数和高质量人口密度图,以可视化越南在各个行政单位的人口计数,目的是使用 Python 可视化全球人口数据集。

为了能够提取各个行政单位的预计人口计数,我们还需要描述越南数字边界的形状文件信息。

因此,本次分析需要三个数据集:来自 GADM、Facebook 和 WorldPop 的行政边界数据。

数据分析分为 4 个步骤:

  1. 打开 GADM 并探索行政边界数据。
  2. 下载 WorldPop 的人口统计数据,然后进行调查,最后可视化。
  3. 下载 Facebook 的人口统计数据,然后进行调查,最后可视化。
  4. 评估并总结发现。

数据探索与分析

加载并探索 GADM 的行政边界数据。

数据集来源:GADM(全球行政区划数据库)。

这是一个高质量的数据库,在其最新版本中定义了全球 386,775 个行政区域。下载越南国家级数据后,出现的文件夹具有以下组织结构。

Visualising Global Population Datasets with Python

文件的索引(0,1,2,3)表示边界可用的行政级别。

在 ADM 1 级下共有 63 个多边形,越南被划分为 58 个省和 5 个中央直辖市。越南省的第二级行政区划然后被划分为区、地区市和乡镇。市被划分为分区,然后进一步划分为城市区、农村区和县级城镇。因此,GADM 数据包括越南的 686 个 2 级和 7658 个 3 级行政实体。

源代码片段

输出

Visualising Global Population Datasets with Python

图:越南的 1、2 和 3 级行政单位。

加载并探索 WorldPop 的人口数据。

我们从 WorldPop 获得了越南每像素人口(PPP)数据,其栅格格式分辨率为 100 米,已根据联合国国家估计进行了调整。为了读取作为 tif 文件获取的栅格数据,我们使用了 rasterio,这是一个基于 GDAL 和 numpy 的 Python 包。

vietnam__worldpop__raster = rasterio.open( 'vnm__ppp__2020__UNadj.tif' )

任何已分配了明确地理位置的像素化数据都称为栅格数据。像素的值可以是分类的(如土地利用)或连续的(如高程)。地理栅格与数字图像的区别仅在于是否包含空间信息以将数据链接到特定位置。这包括栅格的范围、单元格大小、行数和列数以及坐标参考系统(CRS)。栅格数据集由一个或多个称为波段的层组成。多光谱图像可能包含多个波段,而彩色图像有三个单独的波段(红色、绿色和蓝色),高程模型有一个波段(存储高程值),彩色图像有三个波段(绿色、蓝色和红色)。

源代码片段

输出

Visualising Global Population Datasets with Python

越南 WorldPop 栅格图层。

源代码片段

根据栅格图层,越南的总人口为 9754 万。为了确定越南 63 个省+市(3 级行政实体)中每个省的人口计数,我们然后使用从 GADM 数据集中检索到的多边形来掩盖此栅格图层。以下方法返回多边形内的栅格图层人口计数。

源代码片段

通过添加一个名为 population__count__wp 的列,该列包含基于 WorldPop 栅格数据的 ADM 一级人口估计,代码生成了结果。

以下代码片段随后用于使用 Plotly 的分级统计地图可视化总体人口估计。

源代码片段

输出

Visualising Global Population Datasets with Python

图:越南各区人口(百万)。

加载并探索 Facebook 的人口数据。

您可以在 HDX 上下载越南的 Facebook 人口地图,格式为 tif 文件或 CSV 文件。它估计了 30 米网格瓦片内的人口。我们在此提供 CSV 文件,其格式与我们在准备 tif 格式的 WorldPop 数据时使用的格式相同。

源代码片段

输出

135

输出

95

输入

输出

array( [ 'Gabon' , 'Mongolia' , 'Belgium' , 'R�union' , 'The Bahamas' , 'Uganda' ,
       'Cape Verde' , 'Antigua and Barbuda' , 'Benin' , 'Belize' , 'Niger' ,
       'Rwanda' , 'Togo' , 'Denmark' , 'Angola' , 'Israel' , 'Kuwait' ,
       'Greece' , 'Burkina Faso' , 'Kyrgyzstan' , 'United Arab Emirates' ,
       'Australia' , 'Haiti' , 'Slovakia' , 'Pakistan' , 'Lebanon' ,
       'Botswana' , 'Barbados' , 'South Africa' , 'Austria' , 'Bolivia' ,
       'Mauritius' , 'Zimbabwe' , 'Lithuania' , 'Cameroon' , 'Libya' ,
       'Mozambique' , 'Namibia' , 'Oman' , 'Norway' , 'Jordan' ,
       "C�te d'Ivoire", 'Netherlands' , 'Senegal' , 'Canada' ,
       'Saudi Arabia' , 'France' , 'El Salvador' , 'Jamaica' , 'Czechia' ,
       'Estonia' , 'Chile' , 'Malaysia' , 'Poland' , 'Nicaragua' ,
       'New Zealand' , 'Germany' , 'Philippines' , 'Paraguay' , 'Honduras' ,
       'Finland' , 'Uruguay' , 'Spain' , 'Italy' , 'Hungary' , 'Portugal' ,
       'Sweden' , 'Croatia' , 'Guatemala' , 'Ecuador' , 'Argentina' ,
       'Tanzania' , 'Cambodia' , 'Ireland' , 'Peru' , 'Switzerland' , 'Brazil' ,
       'Egypt' , 'Bulgaria' , 'Dominican Republic' , 'Colombia' , 'Mexico' ,
       'Indonesia' , 'India' , 'Nigeria' , 'Kenya' , 'Romania' , 'Japan' ,
       'United States' , 'Latvia' , 'Slovenia' , 'Vietnam' , 'Puerto Rico' ,
       'Turkey' , 'United Kingdom' ], dtype = object )

输入

输出

42

输入

输出

array( [ 'Belgium' , 'Uganda' , 'Rwanda' , 'Denmark' , 'Israel' , 'Australia' ,
       'Slovakia' , 'Lebanon' , 'Austria' , 'Bolivia' , 'Zimbabwe' ,
       'Lithuania' , 'Cameroon' , 'Mozambique' , 'Norway' , 'Netherlands' ,
       'Canada' , 'France' , 'Czechia' , 'Chile' , 'Poland' , 'Honduras' ,
       'Finland' , 'Spain' , 'Italy' , 'Portugal' , 'Sweden' , 'Guatemala' ,
       'Ecuador' , 'Argentina' , 'Tanzania' , 'Peru' , 'Brazil' , 'Bulgaria' ,
       'Colombia' , 'India' , 'Nigeria' , 'Romania' , 'United States' ,
       'Slovenia' , 'Turkey' , 'United Kingdom' ], dtype = object )

输入

输出

array( [ nan, 'An Giang Province' , 'Ba Ria - Vung Tau' , 'Bac Giang' ,
       'Bắc K?n Province' , 'Bac Lieu' , 'Bac Ninh Province' , 'Ben Tre' ,
       'Binh Dinh Province' , 'Binh Duong' , 'Binh Phuoc' ,
       'Bình Thuận Province' , 'Ca Mau' , 'Cần Th?' , 'Cao Bang' , 'Da Nang' ,
       'Đắk Lắk Province' , 'Dak Nong' , 'Dien Bien' , 'Dong Nai' ,
       'Đồng Tháp Province' , 'Gia Lai' , 'Ha Giang' , 'Hà Nam' , 'Ha Tinh' ,
       'Hai Duong' , 'Haiphong' , 'Hanoi' , 'Hau Giang' , 'Ho Chi Minh City' ,
       'Hoa Binh' , 'Hung Yen' , 'Khanh Hoa Province' , 'Kien Giang' ,
       'Kon Tum Province' , 'Lai Chau' , 'Lâm Đồng' , 'L?ng S?n' , 'Lao Cai' ,
       'Long An Province' , 'Nam Dinh' , 'Nghe An' , 'Ninh Bình Province' ,
       'Ninh Thuan Province' , 'Phu Tho Province' , 'Phú Yên Province' ,
       'Quang Binh Province' , 'Quang Nam Province' , 'Quang Ngai' ,
       'Quảng Ninh' , 'Quảng Tr? Province' , 'Soc Trang' , 'Son La' ,
       'Tây Ninh Province' , 'Thai Binh' , 'Thai Nguyen' , 'Thanh Hoa' ,
       'Thua Thien Hue' , 'Tien Giang' , 'Tra Vinh' , 'Tuyên Quang' ,
       'Vinh Long' , 'Vinh Phuc Province' , 'Yên Bái' ], dtype = object )

CSV 文件包含截至 2015 年和 2020 年的地点经纬度和人口估计。根据 Facebook 数据,越南总人口为 9816 万。

为了应用与 WorldPop 数据相同的地理空间工具和方法,我们需要将该数据框转换为具有几何字段的地理数据框。

源代码片段

然后,我们使用多边形向量图层的掩蔽算法,获取每个行政边界集的人口计数。

源代码片段

使用以下代码,我们接下来使用 Plotly 创建分级统计地图。

源代码片段

输出

Visualising Global Population Datasets with Python

结论

现在,当两个地图层都显示在 JPNE 中时,我们可以通过对大多数决策者来说更熟悉的行政定义来比较结果。通过下面的散点图,我们可以可视化 Worldpop 与 Facebook 结果的比较比例。45 度线将表示结果在任何地点都是相同的。

省级/市级 Facebook 和 Worldpop 的人口数量表现出很强的相关性。

将 Facebook 的人口估计与 WorldPop 的第二级组织结构进行比较,尤其是在平阳和胡志明市等一些城市,前者提供的估计值远低于后者。最终的问题决定了这是否是一个问题。JPNE 能够快速评估选择特定信息源而非另一信息源对当前问题有多大影响。

数字技术中的平台和数据进步提供了一个组合来解决各种政策问题。然而,这需要领域专家、数据科学家、工程师和程序员之间的积极合作。