在大數(shù)據(jù)分析如何使用pandas進(jìn)行時(shí)間序列分析中,我們將學(xué)習(xí)pandas庫中功能強(qiáng)大的時(shí)間序列工具。
pandas最初是為金融時(shí)間序列(例如每日股票市場價(jià)格)開發(fā)的,其強(qiáng)大而靈活的數(shù)據(jù)結(jié)構(gòu)可應(yīng)用于任何領(lǐng)域的時(shí)間序列數(shù)據(jù),包括商業(yè),科學(xué),工程,公共衛(wèi)生等。使用這些工具,您可以輕松地以任何粒度級別組織,轉(zhuǎn)換,分析和可視化數(shù)據(jù)-在感興趣的特定時(shí)間段檢查詳細(xì)信息,并縮小以探索不同時(shí)間范圍的變化,例如每月或每年的匯總模式和長期趨勢。
在最廣義的定義中,時(shí)間序列是在不同時(shí)間點(diǎn)測量值的任何數(shù)據(jù)集。許多時(shí)間序列以特定的頻率均勻地間隔開,例如每小時(shí)的天氣預(yù)報(bào),每天的網(wǎng)站訪問次數(shù)或每月的銷售總額。時(shí)間序列也可以是不規(guī)則的間隔和零星的,例如,計(jì)算機(jī)系統(tǒng)的事件日志中的時(shí)間戳數(shù)據(jù)或911緊急呼叫的歷史記錄。pandas時(shí)間序列工具同樣適用于兩種時(shí)間序列。
大數(shù)據(jù)分析如何使用pandas進(jìn)行時(shí)間序列分析將主要關(guān)注時(shí)間序列分析的數(shù)據(jù)處理和可視化方面。使用能源數(shù)據(jù)的時(shí)間序列,我們將看到基于時(shí)間的索引編制,重采樣和滾動(dòng)窗口之類的技術(shù)如何幫助我們探索電力需求和可再生能源供應(yīng)隨時(shí)間的變化。我們將涵蓋以下主題:
1)數(shù)據(jù)集:開放式電源系統(tǒng)數(shù)據(jù)
2)時(shí)間序列數(shù)據(jù)結(jié)構(gòu)
3)基于時(shí)間的索引
4)可視化時(shí)間序列數(shù)據(jù)
5)季節(jié)性
6)頻率
7)重采樣
8)卷簾窗
9)發(fā)展趨勢
我們將使用Python 3.6,pandas,matplotlib和seaborn。為了充分利用大數(shù)據(jù)分析如何使用pandas進(jìn)行時(shí)間序列分析,您需要熟悉pandas和matplotlib的基礎(chǔ)知識。
還不在那里嗎?使用我們的Python數(shù)據(jù)科學(xué)基礎(chǔ)知識和中級課程來建立您的基礎(chǔ)Python技能。
數(shù)據(jù)集:開放式電源系統(tǒng)數(shù)據(jù)
在大數(shù)據(jù)分析如何使用pandas進(jìn)行時(shí)間序列分析中,我們將使用德國的開放電源系統(tǒng)數(shù)據(jù)(OPSD)的每日時(shí)間序列,該數(shù)據(jù)近年來已在迅速擴(kuò)展其可再生能源的生產(chǎn)。數(shù)據(jù)集包括2006-2017年全國范圍的用電量,風(fēng)力發(fā)電和太陽能發(fā)電總量。您可以在此處下載數(shù)據(jù)。
電力生產(chǎn)和消耗報(bào)告為千兆瓦時(shí)(GWh)的每日總計(jì)。數(shù)據(jù)文件的列為:
1)Date—日期(yyyy-mm-dd格式)
2)Consumption —用電量(GWh)
3)Wind — GWh中的風(fēng)力發(fā)電
4)Solar — GWh中的太陽能發(fā)電
5)Wind+Solar —風(fēng)電和太陽能發(fā)電量的總和
我們將使用pandas時(shí)間序列工具來回答以下問題,以探索德國的電力消耗和生產(chǎn)隨時(shí)間的變化:
1)通常什么時(shí)候耗電量最高和最低?
2)風(fēng)力和太陽能發(fā)電量會(huì)隨著季節(jié)的變化而變化嗎?
3)電力消耗,太陽能和風(fēng)能的長期趨勢是什么?
4)風(fēng)能和太陽能發(fā)電與電能消耗如何比較,該比率隨時(shí)間變化如何?
時(shí)間序列數(shù)據(jù)結(jié)構(gòu)
在深入研究OPSD數(shù)據(jù)之前,讓我們簡要介紹一下用于處理日期和時(shí)間的主要pandas數(shù)據(jù)結(jié)構(gòu)。在pandas中,單個(gè)時(shí)間點(diǎn)表示為Timestamp。我們可以使用該to_datetime()函數(shù)從各種日期/時(shí)間格式的字符串中創(chuàng)建時(shí)間戳。讓我們導(dǎo)入pandas并將一些日期和時(shí)間轉(zhuǎn)換為時(shí)間戳。
如我們所見,to_datetime()將根據(jù)輸入自動(dòng)推斷日期/時(shí)間格式。在上面的示例中,不明確的日期'7/8/1952'假定為月/日/年,并解釋為1952年7月8日。或者,我們可以使用dayfirst參數(shù)告訴pandas將日期解釋為1952年8月7日。
如果我們提供字符串列表或字符串?dāng)?shù)??組作為的輸入to_datetime(),則它將在DatetimeIndex對象中返回日期/時(shí)間值的序列,該對象是支持大部分pandas時(shí)間序列功能的核心數(shù)據(jù)結(jié)構(gòu)。
在上面的DatetimeIndex中,數(shù)據(jù)類型datetime64[ns]指示基礎(chǔ)數(shù)據(jù)以64納比特(ns)為單位存儲(chǔ)為-bit整數(shù)。這種數(shù)據(jù)結(jié)構(gòu)允許pandas緊湊地存儲(chǔ)大的日期/時(shí)間值序列,并使用NumPy datetime64數(shù)組有效地執(zhí)行矢量化操作。
如果我們要處理所有具有相同日期/時(shí)間格式的字符串序列,則可以使用format參數(shù)顯式指定它。對于非常大的數(shù)據(jù)集,to_datetime()與默認(rèn)行為相比,默認(rèn)行為是針對每個(gè)單獨(dú)的字符串分別推斷格式,因此可以大大提高性能。任何的格式代碼從strftime()和strptime()在Python的功能內(nèi)置日期時(shí)間模塊都可以使用。下面的示例使用格式代碼%m(數(shù)字月份),%d(月份的日期)和%y(兩位數(shù)字的年份)指定格式。
除了代表各個(gè)時(shí)間點(diǎn)的Timestamp和DatetimeIndex對象外,pandas還包括代表持續(xù)時(shí)間(例如125秒)和時(shí)間段(例如2018年11月)的數(shù)據(jù)結(jié)構(gòu)。有關(guān)這些數(shù)據(jù)結(jié)構(gòu)的更多信息,請點(diǎn)擊此處。在大數(shù)據(jù)分析如何使用pandas進(jìn)行時(shí)間序列分析中,我們將使用DatetimeIndexes,這是pandas時(shí)間序列最常見的數(shù)據(jù)結(jié)構(gòu)。
創(chuàng)建時(shí)間序列DataFrame
為了處理pandas中的時(shí)間序列數(shù)據(jù),我們使用DatetimeIndex作為DataFrame(或Series)的索引。讓我們看看如何使用我們的OPSD數(shù)據(jù)集執(zhí)行此操作。首先,我們使用該read_csv()函數(shù)將數(shù)據(jù)讀取到DataFrame中,然后顯示其形狀。
DataFrame有4383行,涵蓋從2006年1月1日到2017年12月31日的時(shí)間。要查看數(shù)據(jù)的樣子,我們使用head()和tail()方法顯示前三行和后三行。
接下來,讓我們檢查每一列的數(shù)據(jù)類型。
現(xiàn)在,該Date列是正確的數(shù)據(jù)類型,讓我們將其設(shè)置為DataFrame的索引。
另外,我們可以使用函數(shù)的index_col和parse_dates參數(shù)將以上步驟合并為一行read_csv()。這通常是一個(gè)有用的快捷方式。
現(xiàn)在,我們的DataFrame索引是DatetimeIndex,我們可以使用所有pandas基于時(shí)間的強(qiáng)大索引來處理和分析我們的數(shù)據(jù),這將在以下部分中看到。
所述DatetimeIndex的另一個(gè)有用的方面是,單獨(dú)的日期/時(shí)間的部件都可用作為屬性如year,month,day,等。讓我們在中添加更多列opsd_daily,其中包含年,月和周日的名稱。
基于時(shí)間的索引
大pandas時(shí)間序列的最強(qiáng)大和便捷的功能之一是基于時(shí)間的索引編制-使用日期和時(shí)間直觀地組織和訪問我們的數(shù)據(jù)。使用基于時(shí)間的索引,我們可以使用日期/時(shí)間格式的字符串來通過loc訪問器在DataFrame中選擇數(shù)據(jù)。索引的工作方式類似于使用的標(biāo)準(zhǔn)基于標(biāo)簽的索引loc,但有一些附加功能。
例如,我們可以使用諸如的字符串選擇一天的數(shù)據(jù)'2017-08-10'。
我們還可以選擇一片天,例如'2014-01-20':'2014-01-22'。與使用進(jìn)行基于標(biāo)簽的常規(guī)索引一樣loc,切片包含兩個(gè)端點(diǎn)。
大pandas時(shí)間序列的另一個(gè)非常方便的功能是部分字符串索引,我們可以在其中選擇部分匹配給定字符串的所有日期/時(shí)間。例如,我們可以使用選擇2006年全年opsd_daily.loc['2006'],或2012年2月選擇整個(gè)月opsd_daily.loc['2012-02']。
可視化時(shí)間序列數(shù)據(jù)
使用pandas和matplotlib,我們可以輕松地可視化時(shí)間序列數(shù)據(jù)。在本節(jié)中,我們將介紹一些示例和一些有用的自定義時(shí)序圖。首先,讓我們導(dǎo)入matplotlib。
我們將對繪圖使用seaborn樣式,然后將默認(rèn)圖形大小調(diào)整為適合時(shí)間序列繪圖的形狀。
讓我們使用DataFrame的plot()方法創(chuàng)建德國每日用電量的全時(shí)序列的線圖。
我們可以看到,該plot()方法為x軸選擇了很好的刻度位置(每兩年)和標(biāo)簽(年份),這很有用。但是,由于數(shù)據(jù)點(diǎn)太多,因此線圖比較擁擠且難以讀取。讓我們將數(shù)據(jù)繪制為點(diǎn),然后查看Solar和Wind時(shí)間序列。
我們已經(jīng)可以看到一些有趣的模式:
1)電力消耗在冬季最高,大概是由于電加熱和照明使用增加,在夏季最低。
2)電力消耗似乎分為兩類:一個(gè)簇的振蕩中心大約在1400 GWh左右,另一個(gè)簇的數(shù)據(jù)點(diǎn)越來越少,而散射點(diǎn)大約在1150 GWh左右。我們可能會(huì)猜測這些集群與工作日和周末相對應(yīng),我們將在短期內(nèi)對此進(jìn)行進(jìn)一步調(diào)查。
3)夏季的太陽能產(chǎn)量最高,而陽光最多,而冬季則最低。
4)風(fēng)力發(fā)電在冬季最高,大概是由于強(qiáng)風(fēng)和更頻繁的風(fēng)暴,而在夏季最低。
5)多年來,風(fēng)電生產(chǎn)似乎呈強(qiáng)勁增長趨勢。
這三個(gè)時(shí)間序列都清楚地顯示出周期性(在時(shí)間序列分析中通常稱為季節(jié)性),其中,模式會(huì)以規(guī)則的時(shí)間間隔一次又一次地重復(fù)。的Consumption,Solar和Wind高低值之間的時(shí)間序列上的振蕩,每年的時(shí)間尺度,在天氣在過去一年中季節(jié)的變化相對應(yīng)的。但是,一般而言,季節(jié)性不必與氣象季節(jié)相對應(yīng)。例如,零售銷售數(shù)據(jù)通常表現(xiàn)出每年的季節(jié)性,在11月和12月,直到假期之前,銷售都有所增加。
季節(jié)性也可能在其他時(shí)間范圍內(nèi)發(fā)生。上圖顯示德國的用電量每周可能有一些季節(jié)性,與工作日和周末相對應(yīng)。讓我們繪制一年中的時(shí)間序列,以進(jìn)行進(jìn)一步調(diào)查。
現(xiàn)在我們可以清楚地看到每周的波動(dòng)。在這種粒度級別上變得顯而易見的另一個(gè)有趣功能是1月初和12月下旬假期期間的用電量急劇下降。
讓我們進(jìn)一步放大,看看一月和二月。
正如我們所懷疑的,平日的消費(fèi)最高,而周末的最低。
自定義時(shí)間序列圖
為了更好地直觀顯示上圖中每周的每周用電量季節(jié)性變化,最好在每周的時(shí)間范圍內(nèi)(而不是在每個(gè)月的第一天)使用垂直網(wǎng)格線。我們可以使用matplotlib.dates自定義我們的情節(jié),因此讓我們導(dǎo)入該模塊。
由于日期/時(shí)間刻度在matplotlib.dates中的處理方式與DataFrame的plot()方法相比有所不同,因此讓我們直接在matplotlib中創(chuàng)建繪圖。然后,我們使用mdates.WeekdayLocator()和mdates.MONDAY將x軸刻度設(shè)置為每周的第一個(gè)星期一。我們還使用前面看到mdates.DateFormatter()的格式代碼來改進(jìn)刻度標(biāo)簽的格式。
現(xiàn)在,我們在每個(gè)星期一都有垂直網(wǎng)格線和格式良好的刻度標(biāo)簽,因此我們可以輕松分辨出哪幾天是工作日和周末。
還有許多其他方式可以使時(shí)間序列可視化,具體取決于您嘗試探索的模式-散點(diǎn)圖,熱圖,直方圖等。在以下各節(jié)中,我們將看到其他可視化示例,包括以某種方式轉(zhuǎn)換的時(shí)間序列數(shù)據(jù)的可視化,例如聚合或平滑的數(shù)據(jù)。
季節(jié)性
接下來,讓我們用箱形圖進(jìn)一步探索數(shù)據(jù)的季節(jié)性,使用seaborn boxplot()函數(shù)將數(shù)據(jù)按不同時(shí)間段分組并顯示每組的分布。我們將首先按月對數(shù)據(jù)進(jìn)行分組,以可視化年度季節(jié)性。
這些箱形圖確認(rèn)了我們在較早的圖中看到的年度季節(jié)性,并提供了其他一些見解:
1)盡管冬季的用電量通常較高,夏季較低,但是與11月和2月相比,12月和1月的四分位數(shù)中位數(shù)和下四分位數(shù)較低,這可能是由于商家在節(jié)假日關(guān)閉。我們在2017年的時(shí)間序列中看到了這一點(diǎn),箱形圖證實(shí)了這是多年來一致的模式。
2)雖然太陽能和風(fēng)能生產(chǎn)均顯示每年的季節(jié)性,但風(fēng)能分布卻有更多異常值,反映了暴風(fēng)雨和其他瞬態(tài)天氣條件下偶爾出現(xiàn)的極端風(fēng)速的影響。
接下來,讓我們按星期幾分組用電時(shí)間序列,以探討每周的季節(jié)性。
不出所料,工作日的用電量明顯高于周末。工作日的異常值較低可能是在假日期間。
本節(jié)簡要介紹了時(shí)間序列的季節(jié)性。稍后我們將看到,對數(shù)據(jù)應(yīng)用滾動(dòng)窗口還可以幫助可視化不同時(shí)間范圍內(nèi)的季節(jié)性。其他用于分析季節(jié)性的技術(shù)包括自相關(guān)圖,該圖繪制了時(shí)間序列與自身在不同時(shí)間滯后的相關(guān)系數(shù)。
具有較強(qiáng)季節(jié)性的時(shí)間序列通??梢杂脤⑿盘柗纸鉃榧竟?jié)性和長期趨勢的模型很好地表示,并且這些模型可用于預(yù)測時(shí)間序列的未來值。如大數(shù)據(jù)分析如何使用pandas進(jìn)行時(shí)間序列分析所示,經(jīng)典的季節(jié)性分解就是這種模型的一個(gè)簡單示例。一個(gè)更復(fù)雜的示例是Facebook的Prophet模型,該模型使用曲線擬合來分解時(shí)間序列,并考慮了多個(gè)時(shí)間尺度上的季節(jié)性,假日影響,突然的變化點(diǎn)和長期趨勢,如大數(shù)據(jù)分析如何使用pandas進(jìn)行時(shí)間序列分析所示。
頻率
當(dāng)時(shí)間序列的數(shù)據(jù)點(diǎn)在時(shí)間上均勻間隔(例如,每小時(shí),每天,每月等)時(shí),該時(shí)間序列可以與pandas的頻率相關(guān)聯(lián)。例如,讓我們使用date_range()函數(shù)來從創(chuàng)建均勻間隔的日期序列1998-03-10通過1998-03-15在每日頻率。
所得的DatetimeIndex具有freq值為的屬性'D',指示每日頻率。大pandas的可用頻率包括每小時(shí)('H'),每天('D'),每天('B'),每周('W'),每月('M'),每季度('Q'),每年('A')等。也可以將頻率指定為任何基本頻率的倍數(shù),例如'5D'每五天一次。
再舉一個(gè)例子,讓我們以每小時(shí)的頻率創(chuàng)建一個(gè)日期范圍,指定開始日期和期間數(shù),而不是開始日期和結(jié)束日期。
現(xiàn)在,讓我們再來看一下opsd_daily時(shí)間序列的DatetimeIndex 。
我們可以看到它沒有頻率(freq=None)。這是有道理的,因?yàn)樵撍饕菑腃SV文件中的日期序列創(chuàng)建的,而沒有為時(shí)間序列明確指定任何頻率。
如果我們知道我們的數(shù)據(jù)應(yīng)處于特定頻率,則可以使用DataFrame的asfreq()方法來分配頻率。如果數(shù)據(jù)中缺少任何日期/時(shí)間,則將為這些日期/時(shí)間添加新行,這些行可以為空(NaN),也可以根據(jù)指定的數(shù)據(jù)填充方法(如正向填充或插值)進(jìn)行填充。
為了了解其工作原理,讓我們創(chuàng)建一個(gè)新的DataFrame,其中僅包含Consumption2013年2月3日,6日和8日的數(shù)據(jù)。
現(xiàn)在,我們使用該asfreq()方法將DataFrame轉(zhuǎn)換為每日頻率,其中一列用于未填充的數(shù)據(jù),一列用于向前填充的數(shù)據(jù)。
在該Consumption列中,我們有原始數(shù)據(jù),NaN對于consum_sampleDataFrame 中缺少的任何日期,其值為。在該Consumption - Forward Fill列中,缺失項(xiàng)已向前填充,這意味著最后一個(gè)值將在缺失行中重復(fù),直到出現(xiàn)下一個(gè)非缺失值。
如果您要進(jìn)行任何需要均勻間隔的數(shù)據(jù)且沒有任何遺漏的時(shí)間序列分析,則需要使用asfreq()該方法將時(shí)間序列轉(zhuǎn)換為指定的頻率,并使用適當(dāng)?shù)姆椒ㄌ畛渌羞z漏。
重采樣
將我們的時(shí)間序列數(shù)據(jù)重新采樣到較低或較高的頻率通常很有用。重采樣到較低的頻率(降采樣)通常涉及聚合操作-例如,根據(jù)每日數(shù)據(jù)計(jì)算每月的銷售總額。我們在大數(shù)據(jù)分析如何使用pandas進(jìn)行時(shí)間序列分析中使用的每日OPSD數(shù)據(jù)是從原始的每小時(shí)時(shí)間序列中縮減采樣的。重采樣到較高頻率(上采樣)的情況比較少見,并且通常涉及插值或其他數(shù)據(jù)填充方法,例如,將每小時(shí)天氣數(shù)據(jù)插值到10分鐘間隔以輸入科學(xué)模型。
我們將在這里著重于下采樣,探索它如何幫助我們在各種時(shí)間尺度上分析我們的OPSD數(shù)據(jù)。我們使用DataFrame的resample()方法,該方法將DatetimeIndex拆分為多個(gè)時(shí)間段,并按時(shí)間段對數(shù)據(jù)進(jìn)行分組。該resample()方法返回一個(gè)Resampler對象,類似于pandas GroupBy對象。然后,我們可以應(yīng)用的聚合方法,例如mean(),median(),sum()等,以數(shù)據(jù)組為每個(gè)時(shí)間段。
例如,讓我們將數(shù)據(jù)重新采樣為每周平均時(shí)間序列。
第一行上面,標(biāo)注2006-01-01,包含了平均中包含的所有的時(shí)間塊中的數(shù)據(jù)2006-01-01通過2006-01-07。第二行標(biāo)記為2006-01-08,包含2006-01-08通過2006-01-14時(shí)間倉的平均數(shù)據(jù),依此類推。默認(rèn)情況下,向下采樣的時(shí)間序列的每一行都標(biāo)有時(shí)間倉的右邊緣。
根據(jù)構(gòu)造,我們的每周時(shí)間序列的數(shù)據(jù)點(diǎn)是每日時(shí)間序列的1/7。我們可以通過比較兩個(gè)DataFrame的行數(shù)來確認(rèn)這一點(diǎn)。
讓我們Solar一起繪制一個(gè)六個(gè)月內(nèi)的每日和每周時(shí)間序列,以進(jìn)行比較。
我們可以看到,每周平均時(shí)間序列比每日時(shí)間序列平滑,這是因?yàn)樵谥夭蓸又衅骄溯^高的頻率變異性。
現(xiàn)在,讓我們將數(shù)據(jù)重新采樣到每月一次,匯總總和而不是均值。與使用進(jìn)行聚合mean()(將設(shè)置為將NaN所有丟失數(shù)據(jù)的任何時(shí)間段的輸出)不同,的默認(rèn)行為是sum()將輸出輸出0作為丟失數(shù)據(jù)的總和。我們使用min_count參數(shù)來更改此行為。
您可能會(huì)注意到,每月重新采樣的數(shù)據(jù)標(biāo)有每個(gè)月的月底(右邊的條邊),而每周重新采樣的數(shù)據(jù)標(biāo)有左邊的條邊。默認(rèn)情況下,對于每月,每季度和每年的頻率,重新采樣的數(shù)據(jù)都標(biāo)記有右側(cè)bin邊緣,對于所有其他頻率,則標(biāo)記有左側(cè)bin邊緣??梢允褂胷esample()文檔中列出的參數(shù)來調(diào)整此行為和其他各種選項(xiàng)。
現(xiàn)在,通過將用電量繪制為線圖,將風(fēng)能和太陽能發(fā)電繪制為堆疊區(qū)域圖,來探索每月的時(shí)間序列。
在這個(gè)月度時(shí)間尺度上,我們可以清楚地看到每個(gè)時(shí)間序列中的年度季節(jié)性,并且很明顯,用電量隨著時(shí)間的推移一直相當(dāng)穩(wěn)定,而風(fēng)電產(chǎn)量一直在穩(wěn)定增長,其中風(fēng)能+太陽能發(fā)電量不斷增加消耗的電力份額。
讓我們通過對年度頻率重新采樣并計(jì)算每年的比率Wind+Solar來進(jìn)一步探索Consumption。
最后,讓我們用條形圖繪制風(fēng)電與太陽能在年度用電量中所占的比例。
我們可以看到,風(fēng)能+太陽能生產(chǎn)占年度用電量的比例已從2012年的約15%增長到2017年的約27%。
卷簾窗
滾動(dòng)窗口操作是時(shí)間序列數(shù)據(jù)的另一個(gè)重要轉(zhuǎn)換。類似于下采樣,滾動(dòng)窗口中的數(shù)據(jù)分成時(shí)間窗口和并且在每個(gè)窗口中的數(shù)據(jù)被聚集以如函數(shù)mean(),median(),sum()等。然而,不同于下采樣,其中,所述時(shí)間倉不重疊,并且所述輸出是在一個(gè)較低的頻率與輸入頻率相比,滾動(dòng)窗口重疊,并且以與數(shù)據(jù)相同的頻率“滾動(dòng)”,因此變換后的時(shí)間序列與原始時(shí)間序列的頻率相同。
默認(rèn)情況下,窗口中的所有數(shù)據(jù)點(diǎn)在聚合中的權(quán)重均相等,但是可以通過指定窗口類型(例如高斯,三角形和其他)來更改此值。我們將在此處繼續(xù)使用標(biāo)準(zhǔn)的等權(quán)重窗口。
讓我們使用該rolling()方法來計(jì)算每日數(shù)據(jù)的7天滾動(dòng)平均值。我們使用center=True參數(shù)在每個(gè)窗口的中點(diǎn)標(biāo)記標(biāo)簽,因此滾動(dòng)窗口為:
1)2006-01-01至2006-01-07-標(biāo)為2006-01-04
2)2006-01-02至2006-01-08-標(biāo)為2006-01-05
3)2006-01-03至2006-01-09-標(biāo)為2006-01-06
4)等等…
我們可以看到第一個(gè)非缺失滾動(dòng)平均值為on 2006-01-04,因?yàn)檫@是第一個(gè)滾動(dòng)窗口的中點(diǎn)。
為了可視化滾動(dòng)平均值和重采樣之間的差異,讓我們更新我們較早的2017年1月至6月太陽能發(fā)電量圖,以包括7天滾動(dòng)平均值以及每周平均重采樣時(shí)間序列和原始每日數(shù)據(jù)。
我們可以看到,滾動(dòng)平均時(shí)間序列中的數(shù)據(jù)點(diǎn)與每日數(shù)據(jù)具有相同的間隔,但是由于平均了較高的頻率可變性,因此曲線更加平滑。在滾動(dòng)平均時(shí)間序列中,高峰和低谷往往與每日時(shí)間序列的高峰和低谷緊密對齊。相反,由于重新采樣的時(shí)間序列具有較粗的粒度,因此每周重新采樣的時(shí)間序列中的高峰和低谷與每日時(shí)間序列的排列不太緊密。
發(fā)展趨勢
除了較高的頻率可變性(例如季節(jié)性和噪聲)以外,時(shí)間序列數(shù)據(jù)通常還表現(xiàn)出一些緩慢的漸進(jìn)可變性??梢暬@些趨勢的一種簡單方法是在不同的時(shí)間范圍內(nèi)使用滾動(dòng)方式。
滾動(dòng)平均值趨向于通過平均遠(yuǎn)高于窗口大小的頻率上的變化并在等于窗口大小的時(shí)間尺度上平均任何季節(jié)性來平滑時(shí)間序列。這允許探索數(shù)據(jù)中的低頻變化。由于我們的用電時(shí)間序列具有每周和每年的季節(jié)性,因此讓我們來看一下這兩個(gè)時(shí)間尺度上的滾動(dòng)平均值。
我們已經(jīng)計(jì)算了7天的滾動(dòng)平均值,所以現(xiàn)在讓我們計(jì)算OPSD數(shù)據(jù)的365天的滾動(dòng)平均值。
讓我們繪制7天和365天的滾動(dòng)平均用電量以及每日時(shí)間序列。
我們可以看到,為期7天的滾動(dòng)平均值已使所有的每周季節(jié)性都變得平滑,同時(shí)保留了年度季節(jié)性。7天的滾動(dòng)平均值顯示,雖然冬季的用電量通常較高,而夏季則較低,但是每個(gè)冬季在12月底和1月初的節(jié)假日期間,其用電量會(huì)急劇下降數(shù)周。
縱觀365天的滾動(dòng)平均時(shí)間序列,我們可以看到電力消耗的長期趨勢相當(dāng)平穩(wěn),在2009年和2012-2013年之間有幾個(gè)異常的低電量消耗時(shí)期。
現(xiàn)在讓我們看一下風(fēng)能和太陽能生產(chǎn)的趨勢。
隨著德國繼續(xù)擴(kuò)大在這些領(lǐng)域的能力,我們可以看到太陽能發(fā)電的增長趨勢很小,而風(fēng)力發(fā)電的增長趨勢很大。
總結(jié)和進(jìn)一步閱讀
我們已經(jīng)學(xué)習(xí)了如何使用諸如基于時(shí)間的索引,重采樣和滾動(dòng)窗口之類的技術(shù)來處理,分析和可視化pandas中的時(shí)間序列數(shù)據(jù)。將這些技術(shù)應(yīng)用于我們的OPSD數(shù)據(jù)集,我們獲得了有關(guān)德國電力消耗和生產(chǎn)的季節(jié)性,趨勢和其他有趣特征的見解。
我們尚未涉及的其他潛在有用主題包括時(shí)區(qū)處理和時(shí)移。如果您想了解更多有關(guān)在pandas中使用時(shí)間序列數(shù)據(jù)的信息。如果您對使用時(shí)間序列數(shù)據(jù)進(jìn)行預(yù)測和機(jī)器學(xué)習(xí)感興趣,我們將在以后的文章中介紹這些主題,請繼續(xù)關(guān)注!
填寫下面表單即可預(yù)約申請免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!
?2007-2022/ mwtacok.cn 北京漫動(dòng)者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc