Python基于滑动平均思想实现缺失数据填充的方法


Posted in Python onFebruary 21, 2019

在时序数据处理过程中,我们经常会遇到由于现实中的种种原因导致获取的数据缺失的情况,这里的数据缺失不单单是指为‘NaN'的数据,比如在AQI数据中,0是不可能出现的,这时候如果数据中出现了0也就是数据缺失了,最近正好在拿一个污染物的数据在做模型分析,中间就遇到了数据缺失值的问题,数据量本身不大,如果直接对缺失值进行丢弃处理的话会进一步减小数据量,所以这里考虑采用数据填充的方法来实现缺失数据的填充。我做了两个版本其中,第一个版本很简单可以不看,主要是简单实现以下效果。具体实现如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division
'''
__Author__:沂水寒城
功能: python 基于滑动平均思想实现简易的缺失数据填充
'''
def zeroDataFill(one_all_list):
  '''
  对于0数据处理,简单实现版本,可忽略
  '''
  res_list=[]
  for i in range(len(one_all_list)):
    if one_all_list[i]!=0:
      res_list.append(one_all_list[i])
    else:
      if i==0:
        for j in range(1,len(one_all_list)):
          if one_all_list[j]!=0:
            res_list.append(one_all_list[j])
            break
      elif i==len(one_all_list)-1:
        res_list.append(int(sum(res_list[-3:-1])/2))
      else:
        tmp=0
        for j in range(i,len(one_all_list)):
          if one_all_list[j]!=0:
            tmp=one_all_list[j]
            break
        now=(res_list[i-1]+tmp)/2
        res_list.append(int(now))
  print res_list
  return res_list
def dataProcessing(one_all_list,num=7):
  '''
  对于时间序列数据中的 0 进行处理,采用滑动平均的方法来填充(默认时间为一周)
  '''
  nozero_list=[one for one in one_all_list if one!=0]
  before_avg,last_avg=sum(nozero_list[:num])/num,sum(nozero_list[-1*num:])/num
  res_list=[]
  for i in range(len(one_all_list)):
    if one_all_list[i]!=0:
      res_list.append(one_all_list[i])
    else:
      tmp=int(num/2)+1
      if i<=tmp:
        res_list.append(int(before_avg))
      elif i>=len(one_all_list)-tmp:
        res_list.append(int(last_avg))
        slice_list=one_all_list[i-tmp:i+tmp+1]
        res_list.append(int(sum(slice_list)/(num-1)))
  print res_list
  return res_list
if __name__=='__main__':
  one_all_list=[0,12,3,5,1,5,7,8,4,0,12,14,0,0,45,34,67,43,0,9,1,0]
  zeroDataFill(one_all_list)
  dataProcessing(one_all_list,num=7)

结果如下:

[12, 12, 3, 5, 1, 5, 7, 8, 4, 8, 12, 14, 29, 37, 45, 34, 67, 43, 26, 9, 1, 17]
[5, 12, 3, 5, 1, 5, 7, 8, 4, 12, 14, 45, 34, 67, 43, 30, 33, 9, 1, 30, 8]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python实现3行代码解简单的一元一次方程
Aug 18 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
解决pycharm安装后代码区不能编辑的问题
Oct 28 Python
python实现批量修改服务器密码的方法
Aug 13 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
Python识别验证码的实现示例
Sep 30 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
Python利用FlashText算法实现替换字符串
Mar 31 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
Feb 21 #Python
python+mysql实现学生信息查询系统
Feb 21 #Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 #Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 #Python
Python 微信之获取好友昵称并制作wordcloud的实例
Feb 21 #Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 #Python
python-itchat 获取微信群用户信息的实例
Feb 21 #Python
You might like
用PHP来写记数器(详细介绍)
2006/10/09 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
php中设置多级目录session的问题
2011/08/08 PHP
PHP中数组合并的两种方法及区别介绍
2012/09/14 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
jQuery知识点整理
2015/01/30 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Python 基础知识之字符串处理
2017/01/06 Python
Python中的函数作用域
2018/05/07 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
python 两种方法删除空文件夹
2020/09/29 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
C语言面试题
2013/05/19 面试题
生产部岗位职责范文
2014/02/07 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
个人担保书范文
2014/05/20 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
Nginx动静分离配置实现与说明
2022/04/07 Servers
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers