Python基于滑動(dòng)平均思想實(shí)現(xiàn)缺失數(shù)據(jù)填充的方法
在時(shí)序數(shù)據(jù)處理過程中,我們經(jīng)常會(huì)遇到由于現(xiàn)實(shí)中的種種原因?qū)е芦@取的數(shù)據(jù)缺失的情況,這里的數(shù)據(jù)缺失不單單是指為‘NaN'的數(shù)據(jù),比如在AQI數(shù)據(jù)中,0是不可能出現(xiàn)的,這時(shí)候如果數(shù)據(jù)中出現(xiàn)了0也就是數(shù)據(jù)缺失了,最近正好在拿一個(gè)污染物的數(shù)據(jù)在做模型分析,中間就遇到了數(shù)據(jù)缺失值的問題,數(shù)據(jù)量本身不大,如果直接對(duì)缺失值進(jìn)行丟棄處理的話會(huì)進(jìn)一步減小數(shù)據(jù)量,所以這里考慮采用數(shù)據(jù)填充的方法來實(shí)現(xiàn)缺失數(shù)據(jù)的填充。我做了兩個(gè)版本其中,第一個(gè)版本很簡單可以不看,主要是簡單實(shí)現(xiàn)以下效果。具體實(shí)現(xiàn)如下:
#!usr/bin/env python
#encoding:utf-8
from __future__ import division
'''
__Author__:沂水寒城
功能: python 基于滑動(dòng)平均思想實(shí)現(xiàn)簡易的缺失數(shù)據(jù)填充
'''
def zeroDataFill(one_all_list):
'''
對(duì)于0數(shù)據(jù)處理,簡單實(shí)現(xiàn)版本,可忽略
'''
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):
'''
對(duì)于時(shí)間序列數(shù)據(jù)中的 0 進(jìn)行處理,采用滑動(dòng)平均的方法來填充(默認(rèn)時(shí)間為一周)
'''
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)
結(jié)果如下:
[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]
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表詳解
這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,詳細(xì)分析了鏈表的概念、定義及Python實(shí)現(xiàn)與使用鏈表的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
Python設(shè)計(jì)模式中單例模式的實(shí)現(xiàn)及在Tornado中的應(yīng)用
這篇文章主要介紹了Python設(shè)計(jì)模式中單例模式的實(shí)現(xiàn)及在Tornado中的應(yīng)用,講解了單例模式用于設(shè)計(jì)Tornado框架中的線程控制方面的相關(guān)問題,需要的朋友可以參考下2016-03-03
python 判斷矩陣中每行非零個(gè)數(shù)的方法
今天小編就為大家分享一篇python 判斷矩陣中每行非零個(gè)數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Pytorch訓(xùn)練模型得到輸出后計(jì)算F1-Score 和AUC的操作
這篇文章主要介紹了Pytorch訓(xùn)練模型得到輸出后計(jì)算F1-Score 和AUC的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
10個(gè)Python Itertools方法助你事半功倍
itertools模塊就是一個(gè)很好的例子,它為開發(fā)者提供了許多強(qiáng)大的工具,可以用更短的代碼來操作Python的可迭代對(duì)象,本文主要介紹了Python中itertools高效迭代工具,感興趣的可以了解一下2024-04-04
解決springboot yml配置 logging.level 報(bào)錯(cuò)問題
今天小編就為大家分享一篇解決springboot yml配置 logging.level 報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python結(jié)合shell自動(dòng)創(chuàng)建kafka的連接器實(shí)戰(zhàn)教程
這篇文章主要介紹了python結(jié)合shell自動(dòng)創(chuàng)建kafka的連接器,需要安裝連接oracle的python包,獲取oracle表信息,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04

