中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

用Python玩轉(zhuǎn)時序數(shù)據(jù)

2019-01-10    來源:raincent

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

 

時間序列是日常生活中最常見的數(shù)據(jù)類型之一。股票價格、銷售信息、氣候數(shù)據(jù)、能源使用,甚至個人身高體重都是可以用來定期收集的數(shù)據(jù)樣本。幾乎每個數(shù)據(jù)科學(xué)家在工作中都會遇到時間序列,能夠有效地處理這些數(shù)據(jù)是數(shù)據(jù)科學(xué)領(lǐng)域之中的一項(xiàng)非常重要的技能。

本文簡要介紹了如何從零開始使用Python中的時間序列。這包括對時間序列的簡單定義,以及對利用pandas訪問倫敦市居民智能電表所獲取數(shù)據(jù)的處理。可以點(diǎn)擊此處獲取本文中所使用的數(shù)據(jù)。還提供了一些我認(rèn)為有用的代碼。

讓我們從基礎(chǔ)開始,時間序列的定義是這樣的:

♦ 時間序列是按時間的順序進(jìn)行索引、排列或者繪制的數(shù)據(jù)點(diǎn)的集合。最常見的定義是,一個時間序列是在連續(xù)的相同間隔的時間點(diǎn)上取得的序列,因此它是一個離散時間數(shù)據(jù)的序列。

♦ 時間序列數(shù)據(jù)是圍繞相對確定的時間戳而組織的。因此,與隨機(jī)樣本相比,可能包含我們將要嘗試提取的一些相關(guān)信息。

♦ 加載和控制時間序列

數(shù)據(jù)集

讓我們使用一些關(guān)于能源消耗計費(fèi)的數(shù)據(jù)作為例子,以kWh(每半小時)為單位, 在2011年11月至2014年2月期間,對參與英國電力網(wǎng)絡(luò)領(lǐng)導(dǎo)的低碳倫敦項(xiàng)目的倫敦居民樣本數(shù)據(jù)進(jìn)行分析。我們可以從繪制一些圖表開始,最好了解一下樣本的結(jié)構(gòu)和范圍,這也將允許我們尋找最終需要糾正的缺失值。

 

 

對于本文的其余部分,我們只關(guān)注DateTime和kWh兩列。

 

 

重采樣

讓我們從較簡單的重采樣技術(shù)開始。重采樣涉及到更改時間序列觀測的頻率。特征工程可能是你對重新采樣時間序列數(shù)據(jù)感興趣的一個原因。實(shí)際上,它可以用來為監(jiān)督學(xué)習(xí)模型提供額外的架構(gòu)或者是對學(xué)習(xí)問題的領(lǐng)會角度。pandas中的重采樣方法與GroupBy方法相似,因?yàn)槟慊旧鲜前凑仗囟〞r間間隔進(jìn)行分組的。然后指定一種方法來重新采樣。讓我們通過一些例子來把重采樣技術(shù)描述的更具體些。我們從每周的總結(jié)開始:

♦ ·data.resample()方法將用于對DataFrame的kWh列數(shù)據(jù)重新取樣;

♦ ·“W”表示我們要按每周重新取樣;

♦ ·sum()方法用于表示在此時間段計算kWh列的總和;

 

 

我們可以對每日的數(shù)據(jù)也這么做處理,并且可以使用groupby和mean函數(shù)進(jìn)行按小時處理:

 

 

 

 

為了進(jìn)一步進(jìn)行重新采樣,pandas有許多內(nèi)置的選項(xiàng),你甚至還可以定義自己的方法。下面兩個表分別顯示了時間周期選項(xiàng)及其縮寫別名和一些可能用于重采樣的常用方法。

 

 

 

 

其它探索

這里還有一些你可以用于處理數(shù)據(jù)而進(jìn)行的其它探索:

 

 

 

 

 

 

 

 

 

 

用Prophet建模

 

 

Facebook Prophet于2017年發(fā)布的,可用于Python,而R.Prophet是設(shè)計用于分析在不同時間間隔上顯示模式的日觀測時間序列。Prophet對于數(shù)據(jù)丟失情況和趨勢的變化具有很強(qiáng)的魯棒性,并且通常能夠很好地處理異常值。它還具有高級的功能,可以模擬假日在時間序列上產(chǎn)生的影響并執(zhí)行自定義的變更點(diǎn),但我將堅持使用基本規(guī)則來啟動和運(yùn)行模型。我認(rèn)為Prophet可能是生產(chǎn)快速預(yù)測結(jié)果的一個好的選擇,因?yàn)樗兄庇^的參數(shù),并且可以由有良好領(lǐng)域知識背景的但缺乏預(yù)測模型的技術(shù)技能的人來進(jìn)行調(diào)整。有關(guān)Prophet的更多信息,大家可以點(diǎn)擊這里查閱官方文檔。

在使用Prophet之前,我們將數(shù)據(jù)里的列重新命名為正確的格式。Date列必須稱為“ds”和要預(yù)測值的列為“y”。我們在下面的示例中使用了每日匯總的數(shù)據(jù)。

 

 

然后我們導(dǎo)入Prophet,創(chuàng)建一個模型并與數(shù)據(jù)相匹配。在Prophet中,changepoint_prior_scale參數(shù)用于控制趨勢對變化的敏感度,越高的值會更敏感,越低的值則敏感度越低。在試驗(yàn)了一系列值之后,我將這個參數(shù)設(shè)置為0.10,而不是默認(rèn)值0.05。

 

 

為了進(jìn)行預(yù)測,我們需要創(chuàng)建一個稱為未來數(shù)據(jù)框(future dataframe)的東西。我們需要指定要預(yù)測的未來時間段的數(shù)量(在我們的例子中是兩個月)和預(yù)測頻率(每天)。然后我們用之前創(chuàng)建的Prophet模型和未來數(shù)據(jù)框進(jìn)行預(yù)測。

 

 

非常簡單!未來數(shù)據(jù)框包含了未來兩個月內(nèi)的預(yù)估居民使用電量。我們可以用一個圖表來進(jìn)行可視化預(yù)測展示:

 

 

圖中的黑點(diǎn)代表了實(shí)際值,藍(lán)線則代表了預(yù)測值,而淺藍(lán)色陰影區(qū)域代表不確定性。

如下圖所示,不確定性區(qū)域隨著我們在之后的進(jìn)一步變化而擴(kuò)大,因?yàn)槌跏嫉牟淮_定性隨著時間的推移而擴(kuò)散和增多。

 

38eb6e48000e3ba52559500d527c9d36ea2a2188

 

Prophet還可以允許我們輕松地對整體趨勢和組件模式進(jìn)行可視化展示:

 

 

每年的模式很有趣,因?yàn)樗雌饋肀砻髁司用竦碾娏渴褂迷谇锛竞投緯黾,而在春季和夏季則會減少。直觀地說,這正是我們期望要看到的。從每周的趨勢來看,周日的使用量似乎比一周中其它時間都要多。最后,總體的趨勢表明,使用量增長了一年,然后才緩慢地下降。需要進(jìn)行進(jìn)一步的調(diào)查來解釋這一趨勢。在下一篇文章中,我們將嘗試找出是否與天氣有關(guān)。

LSTM(Long Short-Term Memory,長短期記憶網(wǎng)絡(luò))預(yù)測

LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)具有學(xué)習(xí)長序列觀測值的前景。博客文章《了解LSTM網(wǎng)絡(luò)》,在以一種易于理解的方式來解釋底層復(fù)雜性方面做的非常出色。以下是一個描述LSTM內(nèi)部單元體系結(jié)構(gòu)的示意圖:

 

 

來源:Understanding LSTM Networks

LSTM似乎非常適合于對時間序列的預(yù)測。讓我們再次使用一下每日匯總的數(shù)據(jù)。

 

 

LSTM對輸入數(shù)據(jù)的大小很敏感,特別是當(dāng)使用Sigmoid或Tanh這兩個激活函數(shù)的時候。通常,將數(shù)據(jù)重新調(diào)整到[0,1]或[-1,1]這個范圍是一個不錯的實(shí)踐,也稱為規(guī)范化。我們可以使用scikit-learn庫中的MinMaxScaler預(yù)處理類來輕松地規(guī)范化數(shù)據(jù)集。

 

 

現(xiàn)在我們可以將已排好序的數(shù)據(jù)集拆分為訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集。下面的代碼計算出了分割點(diǎn)的索引,并將數(shù)據(jù)拆分為多個訓(xùn)練數(shù)據(jù)集,其中80%的觀測值可用于訓(xùn)練模型,剩下的20%用于測試模型。

 

 

我們可以定義一個函數(shù)來創(chuàng)建一個新的數(shù)據(jù)集,并使用這個函數(shù)來準(zhǔn)備用于建模的訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集。

 

 

LSTM網(wǎng)絡(luò)要求輸入的數(shù)據(jù)以如下的形式提供特定的數(shù)組結(jié)構(gòu):[樣本、時間間隔、特征]。

數(shù)據(jù)目前都規(guī)范成了[樣本,特征]的形式,我們正在為每個樣本設(shè)計兩個時間間隔?梢詫(zhǔn)備好的分別用于訓(xùn)練和測試的輸入數(shù)據(jù)轉(zhuǎn)換為所期望的結(jié)構(gòu),如下所示:

 

 

就是這樣,現(xiàn)在已經(jīng)準(zhǔn)備好為示例設(shè)計和設(shè)置LSTM網(wǎng)絡(luò)了。

 

 

從下面的損失圖可以看出,該模型在訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集上都具有可比較的表現(xiàn)。

 

 

在下圖中,我們看到LSTM在擬合測試數(shù)據(jù)集方面做得非常好。

 

c59950101ccd3c25c09c6bbd075563124ffcbd00

 

聚類(Clustering)

最后,我們還可以使用示例的數(shù)據(jù)進(jìn)行聚類。執(zhí)行聚類有很多不同的方式,但一種方式是按結(jié)構(gòu)層次來形成聚類。你可以通過兩種方式形成一個層次結(jié)構(gòu):從頂部開始來拆分,或從底部開始來合并。我決定先看看后者。

讓我們從數(shù)據(jù)開始,只需簡單地導(dǎo)入原始數(shù)據(jù),并為某年中的某日和某日中的某一小時添加兩列。

 

 

 

 

Linkage和Dendrograms

linkage函數(shù)根據(jù)對象的相似性,將距離信息和對象對分組放入聚類中。這些新形成的聚類隨后相互連接,以創(chuàng)建更大的聚類。這個過程將會進(jìn)行迭代,直到在原始數(shù)據(jù)集中的所有對象在層次樹中都連接在了一起。

對數(shù)據(jù)進(jìn)行聚類:

 

 

完成了!!!這難道不是很簡單嗎?

當(dāng)然很簡單了,但是上面代碼中的“ward”在那里意味著什么呢?這實(shí)際上是如何執(zhí)行的?正如scipy linkage文檔上告訴我們的那樣,“ward”是可以用來計算新形成的聚類之間距離的一個方法。關(guān)鍵字“ward”讓linkage函數(shù)使用Ward方差最小化算法。其它常見的linkage方法,如single、complete、average,還有不同的距離度量標(biāo)準(zhǔn),如euclidean、manhattan、hamming、cosine,如果你想玩玩的話也可以使用一下。

現(xiàn)在讓我們來看看這個稱為dendogram的分層聚類圖。dendogram圖是聚類的層次圖,其中那些條形的長度表示到下一個聚類中心的距離。

 

 

如果這是你第一次看到dendrogram圖,那看起來挺復(fù)雜的,但是別擔(dān)心,讓我們把它分解來看:

♦ ·在x軸上可以看到一些標(biāo)簽,如果你沒有指定任何其它內(nèi)容,那么這些標(biāo)簽就是X上樣本的索引;

♦ ·在y軸上,你可以看到那些距離長度(在我們的例子中是ward方法);

♦ ·水平線是聚類的合并;

♦ ·那些垂線告訴你哪些聚類或者標(biāo)簽是合并的一部分,從而形成了新的聚類;

♦ ·水平線的高度是用來表示需要被“橋接”以形成新聚類的距離;

即使有解釋說明,之前的dendogram圖看起來仍然不明顯。我們可以減少一點(diǎn),以便能更好地查看數(shù)據(jù)。

 

 

建議查找聚類文檔以便能了解更多內(nèi)容,并嘗試使用不同的參數(shù)。

文章原標(biāo)題《Playing with time series data in python》

譯者:Mags

標(biāo)簽: 代碼 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:一文詳解數(shù)據(jù)科學(xué)家的必備技能(附學(xué)習(xí)資源)

下一篇:Submarine:在Apache Hadoop中運(yùn)行深度學(xué)習(xí)框架