美文网首页气象程序员
第一章附赠小节:利用聚类分析简单的气象数据缺省值处理模块

第一章附赠小节:利用聚类分析简单的气象数据缺省值处理模块

作者: 粗衣大布裹天涯 | 来源:发表于2018-05-21 12:44 被阅读114次

好久没有更新点东西了,就把工作中灵感突发得到得小模块分享给大家吧。

需求分析

首先,气象观测数据因为有很多很多所以时不时的会有缺省值,就是说通常的数据非常的不干净,几乎每个时次同一区域不同站点总有几个或一堆缺测值,简单的求平均或者NAN=0,会破坏观测数据的分布结构,这样代表性就变小了,但是直接扔掉又会造成数据量骤减。
所以,资料的预处理很重要,这里分享一个实际使用中的简单小模块。

方法简述

核心思路是将不同的站点按照“粗一些”的网格区域分类,每类分别求取自己的平均值,然后替代掉自己类里面含有的缺省值,达到data clean的功能。
然后重复迭代更粗一丢丢的网格直到消灭所有缺省值。

代码

def lon_lat_web_cleanup(df,rect=1):
    """
    按照经纬度以及给定的网格分配距离分组求平均值,以求填补缺省值
    #design by wenqiushi 2018/5/21
    """
    
    lonW = df['longitude'].min() - rect
    lonE = df['longitude'].max() + rect
    latS = df['latitude'].min() - rect
    latN = df['latitude'].max() + rect
    lon_web = np.arange(lonW,lonE,rect)
    lat_web = np.arange(latS,latN,rect)
    
    lon_grib,lat_grib=np.meshgrid(lon_web,lat_web)
    
    kind_dict = {}
    kind_num = 0
    for key in list(zip(lon_grib.reshape(-1),lat_grib.reshape(-1))):
        kind_dict[key] = kind_num
        kind_num+=1
    
    kind_list = []
    for idx in list(df.index):
        idx_lon = df.loc[idx,'longitude']
        idx_lat = df.loc[idx,'latitude']
        
        lon_flag = lon_web[np.where(np.abs(lon_web - idx_lon)==np.abs(lon_web - idx_lon).min())][0]
        lat_flag = lat_web[np.where(np.abs(lat_web - idx_lat)==np.abs(lat_web - idx_lat).min())][0]
        kind_list.append(kind_dict[(lon_flag,lat_flag)])
    res = df.copy()
    var_df=df.iloc[:,3:]
    res.insert(0,'kind',kind_list)
    res_mean=res.groupby('kind').mean()

    rc_num=np.where(var_df.isna())
    
    for row,col in list(zip(var_df.index[rc_num[0]],var_df.columns[rc_num[1]])):
        df.loc[row,col] = res_mean.loc[res.loc[row,'kind'],col]

主要实现过程

这个小模块很简单,只有两个输入:
一个是dataframe 可以是各种观测资料的时间,站点序列,以风速为例可以长成这样:


image.png

这个数据帧里面(行:966*列:1105)缺省值总共有:


image.png

8624个!基本随机的分布于整个数据帧,那么枪打出头鸟,我们提取单列缺省最多的一列来看看分布情况吧


image.png
image.png

这一列是缺值最多的一列,一共只有828个有效的数据点!

下面简单介绍模块的执行:
先从数据帧里获取经纬度的最大最小值,根据设定的网格分辨率(度)建立网格,然后建立一个以经纬度元组位key的字典kind_dict,存放分类ID,大概长这样,这里需要注意python的字典是没有顺序可言的。

image.png

然后根据kind_dict使用groupby方法对数据帧进行分类,之后就能求取各个分类的平均值了。之后的工作就是获取数据帧缺省值对应的站号(行)及其时间(列)标记,进而得到分类号,然后索引出对应的平均值赋值给对应的缺省值。

image.png

进过一次处理后得到的结果数据帧内缺省值减少近9成!


image.png

再回头对比以下缺省值最多了那个时次处理以后的分布情况:


image.png
两者几乎没有变化说明我们的数据清理工作还是比较成功的。
之后的事情就只需要迭代用更粗一点点的分辨率去填补仍然缺省的1217个点了,针对这次的数据迭代到第五步,5度格距的时候缺省值就全部处理完毕了。

相关文章

  • 第一章附赠小节:利用聚类分析简单的气象数据缺省值处理模块

    好久没有更新点东西了,就把工作中灵感突发得到得小模块分享给大家吧。 需求分析 首先,气象观测数据因为有很多很多所以...

  • [R]混合型数据聚类

    利用聚类分析,我们可以很容易地看清数据集中样本的分布情况。以往介绍聚类分析的文章中通常只介绍如何处理连续型变量,这...

  • 《Python与机器学习实战》——第一章

    第一章主要是个导论,在里面介绍了个简单的利用机器学习预测房价的栗子: 数据预处理 导入相关的模块和包,主要是num...

  • python 小技巧

    处理数据篇:1.合理的利用多线程,不用multiprocess模块,用concurrent futures的模块,...

  • 空间转录组第七讲:多样本合并、marker基因分析

    前面介绍了利用Seurat对10x空间转录组数据单个样本进行数据预处理、降维、聚类分析。今天来继续分享怎么整合多个...

  • 05 特征工程 - 缺省值填充

    04 特征工程 - 特征转换 - 文本特征属性转换 缺省值是数据中最常见的一个问题,处理缺省值有很多方式,主要包括...

  • 数据挖掘算法(一)

    数据挖掘,根据我的学习,包括数据预处理、数据模式分析、数据分类、数据聚类分析、离群值分析等。 前言 其实我们在中学...

  • 第五章-挖掘建模

    经过数据探索和数据预处理,得到了可以直接建模的数据。数据挖掘目标和数据形式可以建立分类与预测、聚类分析、关联规则、...

  • Node核心模块(1):Buffer

    Buffer是node的核心模块,开发者可以利用它来处理二进制数据,比如文件流的读写、网络请求数据的处理等。 Bu...

  • scikit-learn_data preprocessing

    主要简单介绍sklearn中的数据预处理preprocessing模块可以对数据进行标准化,而preprocess...

网友评论

    本文标题:第一章附赠小节:利用聚类分析简单的气象数据缺省值处理模块

    本文链接:https://www.haomeiwen.com/subject/ahjfjftx.html