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中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
Python脚本实现集群检测和管理功能
Mar 06 Python
Python日志模块logging简介
Apr 13 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
Python笔记之代理模式
Nov 20 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
python中的对数log函数表示及用法
Dec 09 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
Python字节单位转换(将字节转换为K M G T)
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的栏目导航程序
2006/10/09 PHP
php数据库连接
2006/10/09 PHP
简单的PHP图片上传程序
2008/03/27 PHP
php实现中文转数字
2016/02/18 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
Numpy掩码式数组详解
2018/04/17 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
使用python求解二次规划的问题
2020/02/29 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
俄语专业毕业生求职信
2014/07/12 职场文书
法人身份证明书
2014/10/08 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书