当前位置:脚本大全 > > 正文

python快速数据分类(Python基于滑动平均思想实现缺失数据填充的方法)

时间:2022-01-23 02:28:17类别:脚本大全

python快速数据分类

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

在时序数据处理过程中,我们经常会遇到由于现实中的种种原因导致获取的数据缺失的情况,这里的数据缺失不单单是指为‘NaN'的数据,比如在AQI数据中,0是不可能出现的,这时候如果数据中出现了0也就是数据缺失了,最近正好在拿一个污染物的数据在做模型分析,中间就遇到了数据缺失值的问题,数据量本身不大,如果直接对缺失值进行丢弃处理的话会进一步减小数据量,所以这里考虑采用数据填充的方法来实现缺失数据的填充。我做了两个版本其中,第一个版本很简单可以不看,主要是简单实现以下效果。具体实现如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • #!usr/bin/env python
  • #encoding:utf-8
  • from __future__ import liision
  • '''
  • __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

    上一篇下一篇

    猜您喜欢

    热门推荐