python 提取邮箱中气象预报数据
- 格式:docx
- 大小:27.24 KB
- 文档页数:2
python 提取邮箱中气象预报数据
摘要
利用python,对存在邮箱服务器中的气象数据进行提取,存为文本文档格式,并转为dataframe格式,使用多层感知器进行拟合,促进日后项目实现自然语言
处理。
关键词:python、多层感知器
一、背景
在以深度学习为代表的人工智能高速发展的今天,气象学科的发展越来越离
不开人工智能。为了高效快速获取气象数据,自动化处理相关数据,本文实现了
自动从已收邮件中获取数据,并对其进行处理。
二、开发工具
考虑到项目最终目标是自动获取数据并生成文本,由于python在人工智能方
面相较于其他语言有较大优势,我们采用python作为开发工具。我们主要使用python中poplib库来获取邮件,使用email.parser来解析电子邮件信息,pandas
库来处理气象数据,。
三、需求分析
由于需要每天收发邮件,人工耗费时间较长。且为方便后续在服务器上脚本
化运行,需要自动下载邮件中的数据。南海海上平台在海上作业时,风浪过高会
对作业人员造成危险,因此需要提供风速、浪高预报。所得数据为四个平台,我
们只能对一组数据进行处理,需要综合考量四个平台数据。原始数据为离散值,
不易分析单调区间和极值,需要对数据进行拟合。
海上平台距离陆地遥远,信号传输不便,需要尽可能降低数据包大小。气象
预报应能反映未来十天风速、浪高变化趋势。因此需要描述预报数据的增减区间
及关键转折点值。气象预报需要在天气对海上作业不利(如遇到台风、风速达到
七级)时,发出预警。
四、技术路线
1.自动下载邮件数据
原始气象数据如图所示,为邮件正文。使用poplib登陆邮箱服务器,获取邮
件内容,并用email.parser解析内容,将邮件数据存为txt文档。
2.文本文档转化为dataframe格式
使用pandas.read_table读取txt文件,使用spilt函数切片去除空格。并将字
符串转为数字格式。
3.求四个平台权重
使用熵值法求出四个平台的无序程度,进而得到权重,将四个平台数据综合
为一组数据进行处理。
4.使用多层感知器进行拟合
对数据进行标准化处理,使用sklearn库中多层感知器进行拟合,得到光滑曲线,随后使用逆标准化。相关参数为
solver='lbfgs',hidden_layer_sizes=(100,100),activation='logistic'。
5.标记风速大于七级时间
用拟合后的数据进行筛选,标记出风速大于七级的时间。
6.画图
使用matplotlib画出折线图,横坐标用pandas.periodindex标签。
五、核心代码
def get_alldata(server, number):
mails = server.list()[1] # 拿到所有邮件
index = len(mails) # 邮件个数, 方便倒序遍历取到最新邮件
lines = server.retr(index-number)[1]
msg_content = b'\r\n'.join(lines).decode('utf-8') # 返回line1\r\nline2\r\n 连接lines 列表中的所有行。
msg = Parser().parsestr(msg_content)
data = get_content(msg) #解析邮件内容,去除信头
if data[0:4] == 'DLMU':
with open('./data.txt', 'a') as f:
f.write(data)
else:
get_alldata(server, number=number+1)
get_alldata(server, 2)
rawdata = pd.read_table('data.txt') #读取文本数据
data = rawdata['DLMU model output'].str.split(pat=None, n=-1, expand=True)#去除txt 空格,转为Dataframe格式
for i in range(len(data.columns)):
data[i] = data[i].apply(pd.to_numeric,errors='ignore')#软选择,只将数字的数据类型转为整数
mlp=MLPRegressor(solver='lbfgs',hidden_layer_sizes=(100,100),activation='logistic') #设置多层感知器参数
predict_y = mlp.fit(X, wind).predict(X) #得到拟合数据predict_y
mlp_score=mlp.score(X,wind)
print(mlp_score)
完成数据处理后,用python绘出有时间标签的数据图。
六、认识与讨论
从邮件中自动获取气象数据,随后通过拟合等操作得到处理好的数据。整套流程只需要3秒,相较于之前人工获取、分析数据快了200倍。
项目最终目标是能自动加载、分析数据,并自动生成预报文本。目前工作对下一步自动生成预报文本有重大意义。进行自然语言生成,需要对庞大的原始数据进行统计分析,如果使用人工来统计,至少需要两个月才能完成;而运用python加载并处理,显著加快工程进度,解放生产力。
本文代码在python3.7环境运行。需要完整代码,请联系作者。
参考文献
[1]何案华,赵刚.用C++结合MATLAB读取NOAA气象数据[J].华北地震科
学,2019,37(02):9-13.