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支持断点续传的多线程下载示例
Jan 16 Python
python使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
Python中的Classes和Metaclasses详解
Apr 02 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
详细解析Python中__init__()方法的高级应用
May 11 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python基于mysql实现学生管理系统
Feb 21 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
Python数据类型之Set集合实例详解
May 07 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
Python3+Django get/post请求实现教程详解
Feb 16 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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
一个程序下载的管理程序(二)
2006/10/09 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
js调用flash的效果代码
2008/04/26 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
jQuery操作cookie
2016/08/08 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
vue实现购物车的监听
2020/04/20 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
简单谈谈Python流程控制语句
2016/12/04 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
个人收入证明范本
2014/09/18 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS