Python基于滑动平均思想实现缺失数据填充的方法

作者:Together_CZ 时间:2021-10-20 12:36:02 

在时序数据处理过程中,我们经常会遇到由于现实中的种种原因导致获取的数据缺失的情况,这里的数据缺失不单单是指为‘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]

来源:https://blog.csdn.net/Together_CZ/article/details/85000866

标签:python,滑动平稳思想,缺失数据填充
0
投稿

猜你喜欢

  • Python机器学习库scikit-learn安装与基本使用教程

    2022-01-17 14:19:03
  • python线程安全及多进程多线程实现方法详解

    2023-08-27 02:01:54
  • python使用cookie库操保存cookie详解

    2022-09-24 09:33:58
  • 详解Python中的__new__()方法的使用

    2022-09-26 09:03:56
  • python Pygame的具体使用讲解

    2021-01-15 21:41:26
  • python使用xlsx和pandas处理Excel表格的操作步骤

    2021-05-19 02:30:20
  • Python实现信息轰炸工具(再也不怕说不过别人了)

    2021-10-05 17:01:08
  • OL IE Bug

    2009-09-09 16:25:00
  • MySQL数据同步Elasticsearch的4种方案

    2024-01-28 18:10:49
  • python实现获取Ip归属地等信息

    2022-10-24 00:13:31
  • Python中使用kitti数据集实现自动驾驶(绘制出所有物体的行驶轨迹)

    2023-06-27 17:02:54
  • MySQL鲜为人知的几个特殊技巧

    2009-03-09 13:22:00
  • PyCharm第一次安装及使用教程

    2022-06-21 23:18:00
  • 用javascript实现select的美化

    2007-05-11 16:50:00
  • python随机生成大小写字母数字混合密码(仅20行代码)

    2021-04-03 23:28:47
  • python中通过selenium简单操作及元素定位知识点总结

    2021-07-18 15:34:37
  • 闲谈CSS3动画

    2010-05-07 12:34:00
  • Python打印不合法的文件名

    2021-06-29 03:40:19
  • MySQL查询语句过程和EXPLAIN语句基本概念及其优化

    2024-01-18 07:44:36
  • 详解Golang中字符串的使用

    2024-04-28 09:16:35
  • asp之家 网络编程 m.aspxhome.com