从Excel表中获取数据,显示在中国地图上

2024-09-10 13:03:53 浏览数 (1)

建立Excel文件user.xlsx

代码语言:javascript复制
省  用户数  占比
广东省  1083   21.66%
北京市  879   17.58%
上海市  637   12.74%
江苏省  350   7.00%
浙江省  332   6.64%
陕西省  285   5.70%
四川省  199   3.98%
湖北省  178   3.56%
福建省  125   2.50%
河南省  113   2.26%
山东省  108   2.16%
湖南省  97   1.94%
辽宁省  86   1.72%
河北省  83   1.66%
天津市  82   1.64%
重庆市  61   1.22%
安徽省  58   1.16%
山西省  46   0.92%
江西省  33   0.66%
广西壮族自治区  32   0.64%
云南省  20   0.40%
吉林省  17   0.34%
甘肃省  15   0.30%
自治区  14   0.28%
新疆维吾尔自治区  14   0.28%
黑龙江省  13   0.26%
贵州省  13   0.26%
台湾省  8   0.16%
宁夏回族自治区  7   0.14%
海南省  5   0.10%
青海省  4   0.08%
香港  2   0.04%

将用户数显示在中国地图上。

第一步:获取excel数据

代码语言:javascript复制
import pandas as pd
# 读取Excel文件
df= pd.read_excel('user.xlsx')

第二步:获取china-shapefiles-master数据,将其读取出来,然后FCNAME为china中省列,去除重复。

代码语言:javascript复制
import geopandas as gpd
# 读取中国地图数据
china = gpd.read_file('china-shapefiles-master/china.shp',encoding='utf-8')
#FCNAME为china中省列,去除重复的
china=china.drop_duplicates(subset='FCNAME')

如何知道china-shapefiles-master/china.shp的FCNAME字段与excel中省字段已知。

代码语言:javascript复制
print(china.columns)

获得

代码语言:javascript复制
Index(['AREA', 'BOUND_A_', 'BOUND_A_ID', 'FCNAME', 'FENAME', 'NAME', 'OWNER',
       'PERIMETER', 'SOC', 'geometry'],
      dtype='object')

然后用下面语句遍历所有列

代码语言:javascript复制
for c in china.columns:
    print(china[c].head(10))

代码语言:javascript复制
...
0        黑龙江省
1      内蒙古自治区
2    新疆维吾尔自治区
3         吉林省
4         辽宁省
5         甘肃省
6         河北省
7         北京市
8         辽宁省
9         辽宁省
Name: FCNAME, dtype: object
...

得知FCNAME为省,与excel中省字段相同(注意:如果Excel中省,为河北或者北京),必须与字典数据总保持一致。 由于地图信息内还有许多省级市,FCNAME字段仍旧为省名,所以通过 drop_duplicates()方法去重。

第三步:合并Excel数据和地图信息,地图信息中的,FCNAME列与Excel数据中的省列相同,作为关键字,将NaN变为0

代码语言:javascript复制
#合并excel文件与地图文件,将NaN变为0
merged = china.set_index('FCNAME').join(df.set_index('省')).fillna(0)

第四步:画图,将将用户数显示在中国地图上。

代码语言:javascript复制
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
merged.plot(column=merged.columns[-2], cmap='OrRd', linewidth=0.8, ax=ax, edgecolor='0.8', legend=True)
plt.show()

最后代码

代码语言:javascript复制
#-*- coding: utf-8 -*-
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt

# 读取Excel文件
df= pd.read_excel('user.xlsx')
# 读取中国地图数据
china = gpd.read_file('china-shapefiles-master/china.shp',encoding='utf-8')
#FCNAME为china中省列,去除重复的
china=china.drop_duplicates(subset='FCNAME')
#合并excel文件与地图文件,将NaN变为0
merged = china.set_index('FCNAME').join(df.set_index('省')).fillna(0)
#开始画图
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
merged.plot(column=merged.columns[-2], cmap='OrRd', linewidth=0.8, ax=ax, edgecolor='0.8', legend=True)
plt.show()

运行后如图

0 人点赞