(二)Arcpy 从Excel(县区常住人口数据)获取属性值并附加到质心点数据上


前言:

本系列Arcpy实验包含以下内容:

  1. 提取江苏省县区级行政区域的质心,形成一个点类型shape文件,至少含有县区名称属性;
  2. 将2021年各区数据整理为excel数据,两列,一列为县区名称,一列为2021年县区常住人口;
  3. 编写一个脚本工具,将县区常住人口数据作为属性值附加到县区质心点数据上;
  4. 编写脚本工具,对江苏2021年常住人口数据进行插值,插值方法任选;
  5. 制作一个绘图模版,绘制江苏各地级市2021年人口分布图(注意是地级市,需要用地级数据分别裁剪人口分布数据)。

通过之前的文章 Arcpy 提取面要素文件的质心,已经从面状要素获得了江苏省县区级行政区域的质心,形成了一个点类型shape文件,含有县区名称属性。现在需要将县区常住人口数据作为属性值附加到县区质心点数据上。

县区常住人口数据参考网页中的数据(https://www.maigoo.com/news/624245.html

将网页的感兴趣数据提取出来做成Excel,方便后续编写脚本工具,将人口数据作为属性值附加到县区质心点数据上。

02-网页数据的Excel汇总整理

  • 对于网页中的表格类型的数据如下图所示,手动输入数据显然太过繁琐,可以试试利用Excel的【数据】选项卡-【获取和转换数据】-【自网站】功能进行数据的初步录用添加。
    在这里插入图片描述

【目的要求】:

将2021年各区数据整理为Excel数据,一列为县区名称,一列为2021年县区常住人口。

【主要思路】:

利用Excel自动导入网页数据,并手动复制粘贴进行后续汇总整理。

【实现步骤】

  • 从提供的网站(https://m.maigoo.com/news/624245.html)上面,提取2021年的江苏省各城市的县级人口数据。发现网页中的数据一个一个复制,过于繁琐。
  • 利用Excel的【数据】选项卡-【获取和转换数据】-【自网站】功能进行数据的初步录用添加。

在这里插入图片描述

  • 输入网页链接,接着在导航器中找到目标表格(Table 0),点击加载或者加载到,即可将数据添加到Excel中。重复该步骤,将江苏不同的城市2021常住人口数据都添加到Excel中。
  • 接下来,就是复制粘贴,整理需要的数据,将2021年各区人口数据整理成一列为县区名称,一列为常住人口(单位:万人)。整理的最终效果如下所示:
    在这里插入图片描述

03-添加人口数量属性值

【目的要求】:

编写一个脚本工具,将县区常住人口数据作为属性值附加到县区质心点数据上。

【主要思路】:

读取Excel中的两列数据,将其存为字典,后续添加人口数量数据时,使用县名作为键直接匹配对应的人口数据值。

【实现步骤】

  • 首先设置路径,使用xlrd.open_workbook()函数读取Excel文件,并通过索引顺序读取表内容。
    在这里插入图片描述
  • 按列读取表中的数据,表中第一列为县区名称,第二列为人口数量数据;接着转换为字典。
    在这里插入图片描述
  • 获取前面生成的质心点文件的点名称属性,将其存储在变量Name列表中。
    在这里插入图片描述
  • 给质心点文件添加字段,名称为“Num”,人口数量有小数,因此数据类型为“Double”类型。
    在这里插入图片描述
  • 这里是在已有的数据中添加字段,因此游标应该使用arcpy.UpdateCursor()函数。
    在这里插入图片描述
  • 使用字典的好处是可以通过键直接匹配值,为质心数据其添加人口数据。
    在这里插入图片描述
  • 将上述代码稍作改进,将路径设置等变量用arcpy.GetParameterAsText()函数来替换,添加自定义脚本工具,从Excel中添加人口数量属性的工具界面如下所示:
    在这里插入图片描述

【实验结果】

【脚本使用说明】:添加属性从Excel表脚本工具,需要输入前面从江苏省区县级矢量数据提取出的质心点要素文件,以及对应的Excel表数据。填写相关参数,在Arcmap中运行脚本,质心点数据属性表前后结果如下:
在这里插入图片描述

源代码(仅供参考):

# -*- coding: GB2312 -*-
import xlrd
import arcpy

arcpy.env.overwriteOutput = True
# 00-路径设置
pointFile = arcpy.GetParameterAsText(0)
# Excel文件路径
xlsPath = arcpy.GetParameterAsText(1)
data = xlrd.open_workbook(xlsPath)
table = data.sheets()[0]  # 通过索引顺序获取
sheetName = table.name  # 获取表名
print(sheetName)
rows = table.nrows  # 获取行数
print(rows)  # 106
countyName = table.col_values(0)  # 获取表中第一列
popNumber = table.col_values(1)  # 获取表中第二列
# 转换为字典
table_dict = dict(zip(countyName, popNumber))

# 获取点文件中的Name属性
Name = []
for row in arcpy.da.SearchCursor(pointFile, ["NAME"]):
    Name.append(row[0])
# print(len(Name))

# 给点文件添加人口数据字段
arcpy.AddField_management(pointFile, "Num", "DOUBLE")

rows = arcpy.UpdateCursor(pointFile)
i = 0
for row in rows:
    print(Name[i])
    print("添加人口数据中……")
    # 添加字段属性值
    try:
        row.Num = float(table_dict[Name[i]])
    except:
        print ("有问题!")

    rows.updateRow(row)
    print(table_dict[Name[i]])
    i = i + 1
    print "正在处理{0}条记录\n".format(i)
del rows
print("处理完成!")

# 添加生成的点要素到当前图层
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
addLayer = arcpy.mapping.Layer(pointFile)
arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
# 图层刷新
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
arcpy.AddWarning("生成文件已添加至当前图层!")

结语

总结

本文主要介绍了如何利用Excel获取网页上的表格数据,以及如何利用Arcpy 对点矢量数据从Excel中获取并添加人口数量属性的方法。

下文预告:

通过前文从面矢量文件中提取出了质心点数据,通过本文为点数据添加了人口数量的属性。
接下来的文章会介绍如何利用Arcpy 进行空间插值,以期得到江苏省2021年人口分布图。

如果对你有所帮助,还请顺手点个赞,感谢你看到这,祝你生活愉快!

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucky_云佳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值