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 两个列表的差集、并集和交集实现代码
Sep 21 Python
Python安装模块的常见问题及解决方法
Feb 05 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
详解pandas的外部数据导入与常用方法
May 01 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
使用 Python 处理 JSON 格式的数据
Jul 22 Python
Python读取实时数据流示例
Dec 02 Python
Python time库基本使用方法分析
Dec 13 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
python的json包位置及用法总结
Jun 21 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Python制作词云的方法
2018/01/03 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
大学生军训自我评价分享
2013/11/09 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
项目申请汇报材料
2014/08/16 职场文书
英文演讲稿开场白
2014/08/25 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
冰峪沟导游词
2015/02/09 职场文书
MySQL一些常用高级SQL语句
2021/07/03 MySQL