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 json encode datetime类型
Dec 28 Python
python 随机数生成的代码的详细分析
May 15 Python
Python打印斐波拉契数列实例
Jul 07 Python
python脚本设置系统时间的两种方法
Feb 21 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
浅析Python函数式编程
Oct 06 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
Python JSON编解码方式原理详解
Jan 20 Python
python 使用openpyxl读取excel数据
Feb 18 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
Mar 02 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技术开发技巧分享
2010/03/23 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
js闭包用法实例详解
2016/12/13 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
深入理解Python中装饰器的用法
2016/06/28 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
what is the difference between ext2 and ext3
2013/11/03 面试题
迎接领导欢迎词
2014/01/11 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
超市国庆节促销方案
2014/02/20 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS