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中文编码那些事
Jun 25 Python
python自动化测试之setUp与tearDown实例
Sep 28 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
python操作excel让工作自动化
Aug 09 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
Python通过Pillow实现图片对比
Apr 29 Python
如何在python中实现线性回归
Aug 10 Python
python实现视频压缩功能
Dec 18 Python
python 通过使用Yolact训练数据集
Apr 06 Python
Flask response响应的具体使用
Jul 15 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下载远程图片函数 可伪造来路
2013/06/25 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
jQuery的attr与prop使用介绍
2013/10/10 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
十一个高级MySql面试题
2014/10/06 面试题
领导干部廉政自律承诺书
2014/05/26 职场文书
党员违纪检讨书
2015/05/05 职场文书
个人求职意向书
2015/05/11 职场文书
终止合同协议书范本
2016/03/22 职场文书
社区结对共建协议书
2016/03/23 职场文书