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)一個(gè)服務(wù)器監(jiān)聽多個(gè)客戶端請(qǐng)求
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)一個(gè)服務(wù)器監(jiān)聽多個(gè)客戶端請(qǐng)求,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04django項(xiàng)目簡單調(diào)取百度翻譯接口的方法
這篇文章主要介紹了django項(xiàng)目簡單調(diào)取百度翻譯接口的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08python中類的輸出或類的實(shí)例輸出為<__main__類名 object at xxxx>這種形式的原因
在本篇文章里小編給大家分享了關(guān)于python中類的輸出或類的實(shí)例輸出為何是<__main__類名 object at xxxx>這種形式,需要的朋友們可以參考下。2019-08-08python抓取京東價(jià)格分析京東商品價(jià)格走勢
本文介紹使用python抓取京東價(jià)格的代碼,用于分析京東商品價(jià)格走勢或者用于其它,大家參考使用吧2014-01-01python實(shí)現(xiàn)xml轉(zhuǎn)json文件的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)xml轉(zhuǎn)json文件的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12python opencv實(shí)現(xiàn)切變換 不裁減圖片
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)切變換,不裁減圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Python實(shí)現(xiàn)屬性可修改的裝飾器方式
這篇文章主要介紹了Python實(shí)現(xiàn)屬性可修改的裝飾器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python tkinter庫實(shí)現(xiàn)登錄注冊(cè)基本功能
Python自帶了tkinter模塊,實(shí)質(zhì)上是一種流行的面向?qū)ο蟮腉UI工具包 TK 的Python編程接口,提供了快速便利地創(chuàng)建GUI應(yīng)用程序的方法,下面這篇文章主要給大家介紹了關(guān)于tkinter庫制作一個(gè)簡單的登錄注冊(cè)小程序,需要的朋友可以參考下2022-12-12