在時序數據處理過程中,我們經常會遇到由于現實中的種種原因導致獲取的數據缺失的情況,這里的數據缺失不單單是指為‘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)
本文標題:Python基于滑動平均思想實現缺失數據填充的方法-創新互聯
鏈接地址:http://www.yijiale78.com/article38/cspipp.html
成都網站建設公司_創新互聯,為您提供電子商務、全網營銷推廣、自適應網站、手機網站建設、企業網站制作、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯