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实现示例
Aug 26 Python
用Python写冒泡排序代码
Apr 12 Python
Python 12306抢火车票脚本
Feb 07 Python
Python常见数据结构之栈与队列用法示例
Jan 14 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
python如何获取apk的packagename和activity
Jan 10 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
Python多分支if语句的使用
Sep 03 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 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 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
简单实现php上传文件功能
2017/09/21 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
jQuery实现定时隐藏对话框的方法分析
2018/02/12 jQuery
JS数组实现分类统计实例代码
2018/09/30 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python 文件操作api(文件操作函数)
2016/08/28 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python创建n行m列数组示例
2019/12/02 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
司机辞职报告范文
2014/01/20 职场文书
高中地理教学反思
2014/01/29 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
企业口号大全
2014/06/12 职场文书
校长个人总结
2015/03/03 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
vue ref如何获取子组件属性值
2022/03/31 Vue.js