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代码检查工具pylint 让你的python更规范
Sep 05 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
python数据类型_字符串常用操作(详解)
May 30 Python
python实现两个文件合并功能
Apr 01 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
python tornado使用流生成图片的例子
Nov 18 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 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执行linux命令6个函数代码实例
2020/11/24 PHP
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
python pandas 时间日期的处理实现
2019/07/30 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
纽约海:Sea New York
2018/11/04 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
搞笑获奖感言
2014/01/30 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
专题组织生活会方案
2014/06/15 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
走群众路线学习笔记
2014/11/06 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server