python气象数据分析_气象数据分析--数据预处理
气象数据处理流程通常的数据分析流程相似,但是气象数据有本身的一些特殊性存在,比如风向和风速,降水等数据,其中风向由0-360之间的值表示,而风速的变化通常是很小的,除非碰到一些极端情况。
数据分析通常包括以下几部分:明确分析目标
数据准备和数据预处理
数据分析和可视化
数据分析报告
以上是简单的数据分析任务涉及到的分析流程,对于一些比较复杂的数据分析任务可能需要花费大量的时间进行探索性数据分析(即数据挖掘中常说的EDA)以及数学建模,并且不断的对建模效果进行评估。
下面以气象风向和风速数据为例,讲一下气象数据分析流程。此次的数据分析的任务是对多个数据源进行数据准确度评估,因此不会涉及到太复杂的分析。在进行分析评估之前需要对数据进行预处理,而数据预处理对于后续的数据分析和建模来说是至关重要的,因为大部分原始数据是不完整的,而且通常会包含很多噪声,比如:重复数据,缺失值,离散值(异常值)等问题。
本文以观测的风场数据为例,重点说一下数据预处理部分:
数据介绍
150个站点的逐小时风场数据,其中包括日期,站点名称,经度,纬度,风速和风向六个要素。这些数据是原始数据处理后保留的部分,原始数据包含更多要素,而且原始数据是按照每小时一个文件保存的,文件名按照时间命名,这部分涉及到数据批量处理,后面会说。
数据预处理
相信很多人拿到原始数据的时候,面对逐小时的大量数据文件会感到非常头疼。当进行时间序列数据的批处理时,有两种方式可以处理这种问题:
1)逐文件读取,并存储每个文件名对应的时间
这种方式应该是比较好理解的,就是有多少文件就逐个读,只是需要记录每个文件的文件名来确定时间
2)确定起始时间和结束时间以及时间间隔,然后按照文件命名方式名称循环读取
这种方式不需要额外的处理时间,因为当你读取文件的时候就已经确定时间了
上述两种方式都需要注意一个问题:数据缺失。比如,对于逐小时存储的数据,如果某一个小时的数据缺失了,那很可能没有这个时刻的文件,如果不注意的话在进行时间序列分析的时候就会出现问题。
在程序中进行循环读取时,要注意处理数据缺失的情况,尤其是按照第二种方式读取时,因为一旦遇到数据缺失,而又没有进行处理,那么数据读取就会因为文件缺失而中断。
本文以python为例,给出以上两种方式的处理代码:
方式一:
import os
import glob
from datetime import datetime
import pandas as pd
files = glob.glob(os.path.join('../Desktop/201802/', '*.xlsx'))
datas = pd.DataFrame()
dates = []
for f in sorted(files):
data = pd.read_excel(f, index_col=0)
date = datetime.strptime(os.path.splitext(os.path.split(f)[1])[0], '%Y%m%d%H')
dates.append([date]*data.shape[0])
datas = datas.append(data)
datas.index = np.ravel(np.array(dates))
方式二:
dates = pd.date_range(datetime(2018, 2, 1, 0), datetime(2018, 2, 28, 23), freq='1h')
fpfas = [os.path.join(fp, '%d%02d%02d%02d.xlsx'%(date.year, date.month, date.day, date.hour)) for date in dates] alldata = pd.DataFrame()
for fpf in fpfas:
try:
data = pd.read_excel(fpf, index_col=0)
alldata = alldata.append(data)
except:
print('%s 缺失.'%fpf)
数据批量处理部分有很多的细节需要注意,关于选择什么策略进行批处理,有时候需要考虑到数据的存储方式以及数据文件的一些特点。方式二的处理没有太多需要说的,主要注意一下方式一中的一些函数用法,后文不再贴入代码,所有程序会上传到github,后面会给出链接。
至此数据准备完成,下面开始进行数据预处理。由于数据是以站点为单位观测,而且存在经纬度信息,首先看一下站点的分布。注意:
1)在查看站点分布之前首先要确定已有的站点的大概在什么范围,这样便于判断是否有站点经纬度信息出现明显错误
2)对于有需要确定站点是否迁移的情况时,要额外判断单个站点名称经纬度坐标的唯一性
图中可以看出大部分站点是非常集中的,而且由于事先已经确定原始数据的站点非常集中,因此可以确定有些站点的经纬度坐标出现问题,这部分就需要进行确定是什么问题(本例中经纬度坐标出错的站点原因是经纬度坐标颠倒了)。
修复了上述站点经纬度错误的问题之后,接着分析原始数据中的各个变量值的分布以及数据缺失情况:
比如上图中显示风速值的分布情况,可以看出大部分值分布在10 m/s以下,这说明大部分数据是正常的,而少量数据超过了 20 m/s,这部分数据是否异常需要做进一步的判断。在进一步判断之前先确定数据缺失的情况。
大部分站点的数据仅缺少5个时刻的数据,但是仍有10个站点的数据缺失比较严重。仅确定数据缺失多少还无法确定数据缺失是连续的还是某些单个时刻缺失,这需要画出缺失较多的站点的数据缺失情况时间序列图来确定(由于本例不需要关注这些,所以这部分没有做。当进行数据挖掘,构建算法时需要记进行更为繁琐的数据预处理)。
下一步就是进行异常值检测,对于陆面监测站来说,大多数情况下风速低于20 m/s,当出现雷雨大风等极端天气的时候风速值会更大,但是风速的变化是渐变的,因此除了判断风速是否出现异常大的值外,还需要判断相邻时刻风速差值是否出现比较大的变化;而风向的变化是比较难确定的,因此本例中仅检查风向是否出现小于0和大于360的情况。异常值检测的部分在代码中给出了。
下图是对数据缺失的站点进行了分级,分为缺失超过50个时刻的站点,缺失在5到50个时刻之间以及缺失少于5个时刻的站点的分布,填充等值线是地形分布。这部分仅在需要对站点地形分布进行分析的时候才做,一般情况下可以不做。
说明:由于种种原因,此次的数据无法公开,所以仅提供部分代码,在代码文件中给出了一部分的解释以及分析思路。
本例使用的工具有excel和python,使用excel进行简单的时间序列分析,大部分的数据预处理使用python进行处理。excel处理部分文中没有提及。希望下次的数据分析能够提供原始数据和完整代码。
代码链接:https://github.com/bugsuse/DataAnalysis/blob/master/%E6%B0%94%E8%B1%A1%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90--%E6%95%B0%E6%8D%AE%E9%A2%84%E5%A4%84%E7%90%86.ipynb
python气象数据分析_气象数据分析--数据预处理相关推荐
- Python数据分析入门笔记4——数据预处理之重复值
系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...
- Python数据分析入门笔记5——数据预处理之异常值
系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...
- Python数据分析入门笔记9——数据预处理案例综合练习(男篮女篮运动员)
系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...
- NGS数据分析实践:06. 数据预处理 - 序列比对+PCR重复标记+Indel区域重比对+碱基质量重校正
NGS数据分析实践:06. 数据预处理 - 序列比对+PCR重复标记+Indel区域重比对+碱基质量重校正 1. 序列比对 1.1 参考基因组建索引 1.2 序列比对 2. 排序 3. PCR重复标记 ...
- 数据分析(二)数据预处理
数据分析(二)数据预处理 缺失值处理 删除法 填补法 异常值检测 基于统计 基于距离 错误发现与修复 变量离散化 无监督离散化:根据数据本身的分布特征 有监督离散化:根据真实的数据类别信息 变量标准化 ...
- 《对比Excel,轻松学习Python数据分析》读书笔记------数据预处理
数据预处理 5 数据预处理 5.1 缺失值处理 5.1.1 查看缺失值 Excel Python info() isnull() 5.1.2 删除缺失值所在行 Excel Python 5.1.3 替 ...
- python足球数据可视化_NBA数据分析_python可视化数据分析_可视化数据分析工具_可视化分析工具-帆软...
夺冠没含金量!python和BI可视化分析,湖人赢在这点上. 在经历了很多很多之后,湖人队终于获得了总冠军,众望所归. 如果科比还在的话,一定也很自豪吧,毕竟上一次夺冠还是10年前. 那问题来了,为什 ...
- 初创公司怎么做销售数据分析_我在数据科学初创公司实习的第一周
初创公司怎么做销售数据分析 There is no better teacher than experience. No matter how many stories a person hears ...
- python数据预处理的代码_【Python基础系列】常见的数据预处理方法(附代码)
↑↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜 本文简单介绍python中一些常见的数据预处理,包括数据加载.缺失值处理.异常值处理.描述性变量转换为数值型.训练集测试集划分.数据规范化. 1. ...
- 数据分析与挖掘理论-数据预处理
数据预处理 一般而言,数据分析和数据挖掘领域的处理的数据都是海量的数据,这样的数据难免会出现问题. 数据预处理占到数据挖掘工作的60%,这是最重要也是最核心的领域, 分为数据清洗.数据集成.数据变换和 ...
最新文章
- NetworkInfo 方法过时的处理方法
- 微软自拍:让黑科技拯救不会拍照的你
- java中debug使用
- linux内存分配堆栈数据段代码段,linux – LD_PRELOAD堆栈和数据段内存分配
- [转载]GIF、JPEG 和 PNG的区别在哪里?
- cache控制器取值从TCM/CACHE/FLASH
- SSD固态硬盘4K对齐一键分区
- 12 | 腾讯云代码分析快速部署
- 如何删除PDF文件中其中一页?
- 电脑技巧:Win10自带的6个实用功能,你都会用吗
- 一个人的武林:渗透测试常规思路分析(一)
- 工程机械车辆环保数据监控平台
- 图像处理算法之图像暗角特效
- ffmpeg yasm not found, use --disable-yasm for a crippled build
- 华硕灵焕3装鸿蒙系统,神操作:学生拿iPhone换3部手机后竟然
- 8个好玩又实用的神奇网站,帮你打开新世界大门!
- 实用新型专利属于发明专利吗
- The Zen of Python / Python之禅
- 【Nginx+Tomcat的7层代理和四层代理】
- 股票交易中的因子汇总