Python 数据分析技术对大气监测数据简易化研究
2022-03-07王帅奇庞小兵陈浪韩张亮吴振涛
王帅奇 庞小兵 陈浪 韩张亮 吴振涛
(浙江工业大学环境学院 浙江杭州 310014)
0 引言
随着人类工业化的不断发展,大气中各种气体的排放量不断增加[1]。在中国政府的努力下,近年来我国大气中某些气体的浓度虽然呈持续下降趋势,但是由PM2.5和O3等气体导致的空气污染问题仍然存在[2]。对这些气体浓度的有效监测是开展环境空气治理的先行条件。目前,常规仪器只能对近地面的气体浓度进行检测,无法解析污染过程、污染特征,以及污染来源和变化趋势[3]。垂直观测可确定大气中不同气体的物理、化学成分及其变化,可解析污染的来源、演变与输送过程[4]。运用无人飞机进行垂直观测具有效率高、机动灵活、使用方便、续航时间长、受环境影响小和精度高等优点,可以承担高风险的飞行任务,也不受地理条件限制。随着无人飞机技术在军事和民用领域的普及,如何利用无人飞机进行更高效的高空大气检测给研究人员提供了一种新的思路[5]。
近年来,无人飞机搭载大气分析仪器的技术正在成为大气污染物垂直观测的一种新手段。Elena 等[6]利用无人飞机搭载定制的温室气体分析仪实现了对挪威斯瓦尔巴特群岛的低海拔偏远和危险地点的CO2、CH4和水蒸气浓度的高精度测量。Watai 等[7]为了研究行星边界层及以上的大气CO2浓度变化,研制了一种小型无人飞机观测系统,该系统可用于测量从地面到最高海拔约3 000 m 的CO2浓度。Illingworth 等[8]利用无人飞机搭载O3检测仪,协助相关部门对城市范围内O3浓度的变化实现直观观测。然而,目前市面上的大气检测仪器价格昂贵、可检测大气物质种类较少。针对该问题,本课题组研制了微型多组分大气检测装置,将其搭载在无人飞机上,可实现距离地面500 m 内的20 多种大气成分和气象参数进行测量。Pang 等[9]利用微型多组分大气检测装置与商用便携式检测装置进行比较,通过多种污染物浓度的测量分析后证实微型多组分大气检测装置测定的可靠性;Chen 等[10]利用多组分大气检测装置在新冠疫情封锁期间测得宁波市NO2和O3等污染物浓度,并分析新冠疫情前后污染物浓度变化情况。
本课题组搭载在无人飞机上的微型多组分大气检测装置采用DAQ 采集数据,经软件处理后在大气检测仪的屏幕上会显示气体浓度,实现数据可视化。但从大气检测仪中导出的数据为DAQ 采集的原始数据(电信号),输出格式为txt 文件。将电信号转化成浓度数据的传统方法是将txt 对应的气体浓度信号复制到Excel 文件中,气体的瞬时浓度、某时段的平均浓度需要输入相应的计算公式经转换获得。传统数据处理方法的过程较为繁琐、数据处理效率较低,特别是当需要计算多个某区间的平均浓度,如连续100 个2 min 内的平均浓度。
Python 语言作为一种功能齐全可、操作性强、上手简单的编程工具,在数据分析领域受到了广泛认可,在大气污染物数据分析中也有着广泛的应用。Kadiyala 等[11]在对公共汽车内CO2浓度数据采集后,利用Python 语言中的Scikit learn 模块完成数据导入,建立统计回归模型和决策树(Decision Tree)模型等一系列操作来完成汽车内CO2分析;Sebbah 等[12]利用Python语言开发并设计出了Q-LIP 程序,该程序可以安装在QGIS 中并从陆地卫星中下载原始数据,将原始数据根据预先设置的数学公式自动处理并生成需要的图像,为了解环境状况和环境成分时空变化提供重要参考依据;O'Meara 等[13]在论文中介绍了Python 语言在气溶胶实验设计和分析中的应用,该编程语言可以将实验结果自动生成数学模型,并根据模型分析气溶胶运动过程与相关参数的相关性,同时与实际观测结果比较差异性从而对实验进行改进;Matytsyna 等[14]利用ldquoCalpuffrdquo 模块在对城市空气质量建模的过程中用Python 语言开发了一个程序,该程序主要用于计算街道上机动车尾气每小时排放污染数据并实时储存在计算机中。
本研究使用Python 语言作为编程工具,调用Openpyxl 和Numpy 等多个模块,对DAQ 导出的原始大气检测数据进行预处理,可实现导出数据自动写入Excel 文档,并同步生成瞬时浓度数据。浓度数据会自动保存在新建表格中以满足后续数据可视化的需要。此外,根据用户需要可对程序进行优化,实现同步生成连续的某时段内多种物质的平均浓度值。本研究开发的程序应用在大气检测仪DAQ 采集数据的后续数据处理,可大幅缩短人工数据处理的时间从而提高数据处理效率。
1 Python 模块及DAQ 介绍
1.1 Python 模块介绍
Python 语言编程过程中用到的6 个模块,分别为文档读取的Openpyxl Excel 模块;数据计算的Numpy 模块;处理时间日期的Datetime 模块;解决程序与操作系统间交互问题的Sys模块;使程序可以在不同操作系统中正常运行OS 模块;解决模块封装过度的Pywin32 模块。模块的具体介绍如表1 所示。
表1 模块介绍
1.2 DAQ 介绍
DAQ 是一套成熟、完整的组态软件,它由美国AzeoTech公司开发,在世界范围内得到广泛应用。该软件具有灵活的数据采集、输出控制、高级数据分析工具的功能,在环境检测领域有着非常广泛的应用。
(1)DAQ 的作用。传感器中的电解液与监测组分发生电化学反应产生电信号,经数据采集设备采集后通过DAQ 处理,可将电信号转变成气体浓度值并生成浓度值变化的图表在仪器上显示。
(2)DAQ 数据主要参数。本课题组通过DAQ 收集到的数据参数包括COWE、COAE、PID-1 等11 个。具体参数介绍详见表2。
表2 数据参数
2 Python 脚本数据处理分析
2.1 传统数据处理方法
根据需求,创建一个空白的Excel 文档作为数据处理的工作表,修改单元格格式后在第一行写入表头。利用大气污染物NO 等物质的电极1 与电极2 的电势数值,根据数学公式计算出NO 等物质的浓度。若需要提取某个时间区间内物质的平均浓度值,则需要找到工作表A 列对应时间信息,找到某物质对应列求浓度平均值,并将浓度平均值写入新Sheet 表格中。如此反复操作,直到所有数据全部写入新Sheet 表格中。
2.2 Python 脚本数据处理方法
(1)数据处理框架。整个数据处理程序包括三个部分,设置参数部分,函数导入部分,主程序部分,具体框架如图1 所示。
图1 数据处理框架
参数部分提供程序运行中需要改变的参数,为了在程序运行前能更加直观地找到需要改变的参数而单独设立此模块。函数模块包括通过时间查找对应物质浓度值,计算平均值并将数据写入新Sheet 表格等相关代码。函数模块主要对已经得到的数据进行更加复杂的运算,也是程序的基本组成部分之一。主程序起到了连接参数模块和函数模块,对数据预处理,调整表格格式并将得到的结果输出保存的作用,是整个程序最核心的部分。
(2)数据处理流程。针对DAQ 导出的原始数据处理流程如图2 所示。整个程序运行步骤如下:①在setting 中输入需要计算平均浓度的时间区间“N”(如2 min)、需要读取txt 的路径、保存Excel 文档的路径等信息;②程序运行过程中会自动创建Excel 文档,将txt 中的原始数据(电信号)写入到Excel 文档中;③程序自动调整单元格格式,并使用预先设置的数学公式自动计算每个时间点的各物质浓度;④自动创建新Sheet 表格,按照预先在setting 中输入的时间(N min)依次判断,是否满足某时间点后的N min:若满足要求,则取该时间点后N min 内物质浓度的平均值并写入新Sheet 表格中;若不满足(时间段<N min),则取剩余时间内物质浓度的平均值并写入新Sheet 表格中。
图2 数据处理流程图
(3)关键步骤源代码。
①导入的setting 和Average_data 模块用于设置参数和定义函数,其他导入模块(如Openpyxl 和Numpy 等)用于执行扩展模块工具。
②setting 中设置的参数包括读取txt 路径,保存Excel 文档路径等。具体参数如下:
③主程序读取setting 中设置的参数。
④主程序读取数据到新创建的Excel 文档,利用While 循环确定文档中是否存在数据,若存在数据则利用for 循环遍历文档中的每一个数据,以逗号作为分隔符将数据依次写入Excel 文档中。
⑤修改Excel 文档单元格格式,利用数学公式求得各物质浓度并写入Excel 文档中,举例如下:/0.000989)"
⑥根据提前在setting 中设置的时间信息,利用Average_Data 中设置的函数求得该时间点后N min 物质浓度平均值(本文以2 min 的物质浓度平均值为例),并写入新Sheet 表格中。
⑦利用for 循环遍历文档中的每一个由数学公式求得的浓度并写入另一个Sheet 表格中。
3 实验结果分析
2020 年12 月2 日,本课题组在绍兴市上虞区杭州湾精细化工园区采用无人飞机搭载自主研发的微型多组分大气检测装置对CO、NO 等气体进行垂直立体观测(距离地面0 m~500 m)。以当天从DAQ 中导出的实验数据为例,直接从DAQ 中导出的实验数据如图3(a)所示,导出的文件格式为txt,文件中呈现的数据为气体在不同时段浓度对应的电信号。经本文采用Python 语言利用Openpyxl 和Numpy 等6 个模块设计的程序处理后的实验数据,自动写入到Excle 中,如图3(b)所示。本程序实现了气体在不同时段的电信号转化成相应的浓度值,并自动写入到新建Sheet 表格中,结果如图3(c)所示。此外,为了解化工园区在不同高度气体的浓度变化规律,本文设计的程序可自动计算距离地面0 m、50 m、100 m、200 m、300 m、400 m、500 m(每个高度停留2 min)的气体浓度,并自动写入到新建Sheet 表格中,结果如图3(d)所示。经过反复测试,使用本程序处理数据效率显著高于人工处理数据效率,由此表明本文设计的程序可有效提高数据处理效率。
图3 DAQ 导出数据及处理结果
4 结论
本文采用python 语言作为编程工具,调用Openpyxl 和Numpy 等6 个模块设计了程序,可实现从微型大气检测仪DAQ 导出的原始大气检测数据,自动写入Excel 文档,并同步生成瞬时浓度数据,或连续的某时段内大气污染物的平均浓度值。使用该程序可显著减少数据处理所需的时间,优化处理流程,极大地提高了数据处理效率。目前该程序的局限性在于只能把处理后的数据以数字的形式展示在Sheet 表格中,无法自动生成图表以图形界面的形式供他人使用。在未来的程序优化中这些问题将获得解决,研究成果将广泛应用在大气监测数据分析领域。