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的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
在Python中操作字典之update()方法的使用
May 22 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
Python时间获取及转换知识汇总
Jan 11 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
Python帮你微信头像任意添加装饰别再@微信官方了
Sep 25 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
Python实现对adb命令封装
Mar 06 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
Aug 03 Python
python 如何设置守护进程
Oct 29 Python
django中ImageField的使用详解
Dec 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
js编写选项卡效果
2017/05/23 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
python实现梯度下降法
2020/03/24 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
百度JavaScript笔试题
2015/01/15 面试题
专业求职信撰写要诀
2014/02/18 职场文书
入党自我鉴定
2014/03/25 职场文书
运动会演讲稿
2014/05/07 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python