高考考试网
当前位置: 首页 高考资讯

python数据分析知识图(Python中ArcPy读取Excel时序数据)

时间:2023-08-21 作者: 小编 阅读量: 4 栏目名: 高考资讯

本文介绍基于Python中ArcPy模块,实现Excel数据读取并导入图层,同时进行IDW插值与批量掩膜的方法。在这里,包含北京市各PM2.5浓度监测站点的矢量点要素图层是基于Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表这篇文章得到的,如下图所示。而记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时等23个逐小时PM2.5浓度数据的Excel表格文件则如下所示,其中包括各站点在23个整点时所监测到的PM2.5浓度。

本文介绍基于Python中ArcPy模块,实现Excel数据读取并导入图层,同时进行IDW插值与批量掩膜的方法。

1 任务需求

首先,我们来明确一下本文所需实现的需求。

现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据的Excel表格文件,我们需要将其中的数据依次读入一个包含北京市各PM2.5浓度监测站点的矢量点要素图层中;随后,基于这些站点导入的23个逐小时PM2.5浓度数据,逐小时对北京市PM2.5浓度加以反距离加权(IDW)方法的插值,即共绘制23幅插值图;最后,基于已有的北京市边界矢量数据,分别对这23幅插值图加以掩膜。

在这里,包含北京市各PM2.5浓度监测站点的矢量点要素图层是基于Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表这篇文章得到的,如下图所示。

其中,该矢量图层还包括属性表,属性表内容包括每一个站点的编号、地理位置与中文名称,如下图所示。

而记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据的Excel表格文件则如下所示,其中包括各站点在23个整点时所监测到的PM2.5浓度。

2 代码实现

了解了需求后,我们就基于Python中的ArcPy模块,进行详细代码的撰写与介绍。

这里需要说明的是:在编写代码的时候,为了方便执行,所以希望代码后期可以在ArcMap中直接通过工具箱运行,即用到Python程序脚本新建工具箱与自定义工具的方法;因此,代码中对于一些需要初始定义的变量,都用到了arcpy.GetParameterAsText()函数。大家如果只是希望在IDLE中运行代码,那么直接对这些变量进行具体赋值即可。关于Python程序脚本新建工具箱与自定义工具,大家可以查看ArcMap基于Python程序脚本新建工具箱与自定义工具的方法这篇文章详细了解。

上面提到需要初始定义的变量一共有十个,其中arcpy.env.workspace参数表示当前工作空间,csv_path参数表示存储有北京市2019年05月18日00时至23时(其中不含19时)逐小时PM2.5浓度数据的.csv文件,shape_file_path参数表示站点信息矢量数据文件,boundary_file_path参数表示投影后北京市边界矢量数据文件,spatial_resolution参数表示IDW插值结果栅格图的像元大小,power参数表示IDW插值时所用距离的幂指数,look_point参数表示IDW插值时所用最邻近输入采样点数量的整数值,max_distance参数表示IDW插值时对最邻近输入采样点的限制距离,单位依据地图坐标系确定;idw_result_dir参数表示IDW插值结果图层保存路径,mask_result_dir参数表示IDW插值结果图层经掩膜后保存路径。

代码的整体思路为:首先利用pd.read_csv函数读取记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据的Excel表格文件数据,随后在北京市各PM2.5浓度监测站点的矢量点要素图层的属性表中新建23个列,每一个列表示该监测站点在某一时刻的浓度数据(共有23个时刻,因此共有23个列);其次,由于矢量要素图层中的部分站点在Excel文件中并没有数据,因此需要将这些站点从矢量要素图层中删除;最后,分别利用Idw函数与ExtractByMask函数进行IDW插值与掩膜。

具体代码如下。

# -*- coding: utf-8 -*-# @author: ChuTianjiaimport copyimport arcpyimport pandas as pdfrom arcpy.sa import *arcpy.env.workspace=arcpy.GetParameterAsText(0)csv_path=arcpy.GetParameterAsText(1)shape_file_path=arcpy.GetParameterAsText(2)idw_result_dir=arcpy.GetParameterAsText(8)boundary_file_path=arcpy.GetParameterAsText(3)mask_result_dir=arcpy.GetParameterAsText(9)spatial_resolution=arcpy.GetParameterAsText(4)power=arcpy.GetParameterAsText(5)look_point=arcpy.GetParameterAsText(6)max_distance=arcpy.GetParameterAsText(7)csv_data=pd.read_csv(csv_path,header=0,encoding="gbk")column_name_list=list(csv_data)hour_column=csv_data["hour"]pm_25_list=[[0]*len(csv_data) for i in range(csv_data.shape[1]-3)]for i in range(3,csv_data.shape[1]):for index,data in csv_data.iterrows():pm_25_list[i-3][index]=data[i]field_list=["hour_00","hour_01","hour_02","hour_03","hour_04","hour_05",\"hour_06","hour_07","hour_08","hour_09","hour_10",\"hour_11","hour_12","hour_13","hour_14","hour_15",\"hour_16","hour_17","hour_18","hour_20",\"hour_21","hour_22","hour_23"]field_list_use=copy.deepcopy(field_list)field_list_use.insert(0,"Name")# Update the columns in the attribute tablefor i in range(len(field_list)):arcpy.AddField_management(shape_file_path,field_list[i],"SHORT")delete_num=0delete_name=[]with arcpy.da.UpdateCursor(shape_file_path,field_list_use) as cursor:for row in cursor:for column_name in column_name_list:if column_name==row[0]:for i in range(len(csv_data[column_name])):row[i 1]=csv_data[column_name][i]cursor.updateRow(row)# Find stations that without any dataif row[0] not in column_name_list:cursor.deleteRow()delete_num =1delete_name.append(row[0])arcpy.AddWarning("Delete {0} site(s) that do not contain any data, and the site(s) name is(are):".format(delete_num))for i in delete_name:arcpy.AddMessage(i)arcpy.AddMessage("\n")# Perform IDW interpolationarcpy.env.extent=boundary_file_pathfor i in range(len(field_list)):idw_result=Idw(shape_file_path,field_list[i],spatial_resolution,power,RadiusVariable(look_point,max_distance))idw_result_path=idw_result_dir "\\" "BJ_" field_list[i] ".tif"idw_result.save(idw_result_path)arcpy.AddMessage("{0} has completed IDW interpolation.".format(field_list[i]))# Perform masktif_file_list=arcpy.ListRasters("BJ_hour_*","TIF")for raster in tif_file_list:mask_result=ExtractByMask(raster,boundary_file_path)mask_result_path=mask_result_dir "\\" raster.strip(".tif") "_Mask.tif"mask_result.save(mask_result_path)arcpy.AddMessage("{0} has been masked.".format(raster.strip(".tif")))

3 运行结果

执行上述代码,如果是在ArcMap中直接通过工具箱运行,则可以看到代码运行过程中出现的提示。

例如,下图所示提示可以知道有哪几个站点是没有数据、从而被剔除的。

下图则可以显示出目前代码的运行情况。

同时,在我们设定的结果文件夹中可以看到,23小时的插值图与掩膜图都将自动生成并保存在指定文件夹。

再来看看具体的图片长什么样子。

首先查看IDW插值结果图;我们以当日10时的插值结果图为例进行查看。可以看到其已对北京市边界矢量数据所包含的矩形范围完成了插值。

接下来,查看IDW插值结果图经过掩膜后的图像;我们同样以当日10时的插值、掩膜结果图为例进行查看。可以看到,经过掩膜操作后的图像已经完全符合北京市边界矢量数据的范围。

    推荐阅读
  • 从你的世界里路过青春爱情片(从你的全世界路过)

    《从你的全世界路过》,电影可能并不是很成功,因为在国内十几亿人口中,文艺青年的占比并不是很大,在加上对于原著有所改编,让很多人无法适应,虽然电影可能并不是很成功,但是电影内部很多场景,都是老一辈重庆人的回忆,当时还没有拆迁的十八梯,鹅岭二厂的天台等。《从你的全世界路过》,已经成为了重庆的旅游宣传片,让我们看到了“火辣”的重庆,也有唯美,文艺的一面,就像我们不了解的另一半一样。

  • 东方不败和杨莲亭的关系(杨莲亭有何魅力)

    东方不败修习葵花宝典已臻化境,要知道,引起《笑傲》明争暗抢、林平之全家百余口人为此丧命的《辟邪剑谱》,其实就是《葵花宝典》的残本。东方不败不仅不生气,还赔着笑道歉,担忧他腿上的伤。后来东方不败在日月神教事业上升期间,有一回被人围攻,身受重伤命在旦夕,多亏了童百熊舍命相救,这才有了他后来的辉煌。如若不为救下杨莲亭,东方不败不会死于任我行与令狐冲的剑下,他的武功已然江湖第一,却败于“情”之一字。

  • 磐安陈情令旅游攻略超详细(来咯来咯陈情令来了)

    追剧时全程姨母笑,被肖战和王一博两位小哥哥的神仙颜值震撼了。肖战在剧中饰演魏先羡,活泼可爱豪气万丈;王一博在剧中饰演蓝忘机,高冷帅气又沉稳。在百杖潭,景区内山光水色,高山丛林、流水瀑布,意境深远,恍若人间仙境,位于浙江金华市磐安县。剧中的莲花坞除了景美,多了一份家的温情。另外,剧中所呈现的街道、客栈、小楼、酒家等生活市井,也有很多是在浙江的横店影视城拍摄。

  • 如何把鸡蛋做出螃蟹味(把鸡蛋做出螃蟹味)

    如何把鸡蛋做出螃蟹味全国人民都知道一个“笑话”,那就是川菜中有这样一道菜,有些名不副实,它就是“鱼香肉丝”!除了鱼香肉丝没有肉丝,老婆饼和老婆也没关系,买饼也不会送老婆。赛螃蟹里面依然是没有螃蟹的,但通过独特的调味,加上滑蛋模拟出了蟹肉的口感。一盘普通的鸡蛋就摇身一变,成了可与螃蟹媲美的佳肴。又漂亮又好吃的赛螃蟹就好了此菜色、香、味、型具佳,食之鲜香滑嫩、回味蟹香味足。

  • 一年四季的法国梧桐(梧桐比梅兰竹菊还)

    梧桐树后世文学作品沿用了梧桐这一特点。梧桐木制的古琴龙门之桐,高百尺而无枝,中郁结之轮菌,根扶疏以分离。古人认为,梧桐生长在人迹罕至的险境,能够得到天地灵气。再加上井桐与人们的生活密切相关,所以古人才会将梧桐叶落作为秋天到来的标志。贺铸与妻子赵氏感情很好,二人相濡以沫。焦仲卿与刘兰芝殉情后,两家将其合葬,在两边种上梧桐,梧桐枝叶相交,象征着缠绵、坚贞的爱情。

  • 体脂秤有用吗(几十元的体脂秤有用吗)

    无论后期的哪次测试,在测试之前,一定要保证一个小时内喝相同量的水。当你运动是出汗,身体会流失大量的水分,这样会影响你的水分含量,从而影响结果。精度几乎会随着价格的升高而升高。

  • 蜂蜜的保质期(呈水状的蜂蜜最好不要再喝)

    蜂蜜的保质期目前国家规定瓶装蜂蜜保质期为18个月。但封盖成熟浓度高的蜂也能保质多年。但吃蜂蜜新鲜为好,因新鲜蜜一般色、香、味口感较好。保存很久的蜂蜜,只要未发生变质,是可以食用的,不会对身体有害。只是久置的蜂蜜与新鲜蜂蜜相比,营养价值略差些。蜂蜜密封不严,又没有低温保存,呈水状,放置了至少三年,可以确定已经开始变质。最好不要再喝了,喝了或许不会对身体造成什么危害,但是已经没有太大的营养价值了。

  • 集芙蓉以为裳(集芙蓉以为裳什么意思)

    集芙蓉以为裳集芙蓉以为裳出自先秦屈原的《离骚》,意思是我并用荷花把下裳织就。《离骚》是一首充满激情的政治抒情诗,是一首现实主义与浪漫主义相结合的艺术杰作。但表现上完全采用了浪漫主义的方法:不仅运用了神话、传说材料,也大量运用了比兴手法,以花草、禽鸟寄托情意,“以情为里,以物为表,抑郁沉怨”。而诗人采用的比喻象征中对喻体的调遣,又基于传统文化的底蕴,因而总给人以言有尽而意无穷之感。

  • 2022安徽艺术类第二批本科投档最低分排名(A段)

    2022年安徽艺术类第二批本科投档最低分排名(A段)

  • 霸王别姬在电影史上地位(霸王别姬的野心很大)

    霸王别姬在电影史上地位《霸王别姬》的野心很大,一部电影讲了7个时代的故事,这每一个时代在中国都是有成千上万部的著作来研究的,清末、北洋政府、民国政府、侵华日据时期、兔子登台,全剧高潮文化大革命,改开之后。《断背山》作为同性主题讨论的深刻,但是它几乎没有其他方面的主题,它是一个伦理片。所以说《霸王别姬》作为中国电影的巅峰之一是当之无愧的。在几次大时代的变化中,葛优对程蝶衣的艺术欣赏和对其个人的仰慕。