python時間序列分析之_用pandas中的rolling函數計算時間窗口數據

2021-01-07 python萬

簡介

由於系統編輯器限制,代碼行用無序列表表示。

上篇文章中,我們講解了如何對時間數據進行重採樣及重採樣中降採樣和升採樣的概覽和使用方法,通過重採樣我們可以得到任何想要頻率的數據,但是這些數據也是一個時點的數據,那麼就存在這樣一個問題:時點的數據波動較大,某一點的數據不能很好的表現它本身的特性,於是我們就想,能否用一個區間的的數據去表現呢,這樣數據的準確性是不是更好一些呢?因此,引出滑動窗口(移動窗口)的概念,簡單點說,為了提升數據的可靠性,將某個點的取值擴大到包含這個點的一段區間,用區間來進行判斷,這個區間就是窗口。如下面的示意圖所示,其中時間序列數據代表的是15日每日的溫度,現在我們以3天為一個窗口,將這個窗口從左至右依次滑動,統計出3天的平均值作為這個點的值,比如3號的溫度就是1號、2號、3號的平均溫度,通過示意圖我們已經理解了滑動窗口,下面我們就看看pandas中使用的函數及各參數的含義。

滑動窗口示意圖

pandas.DataFrame.rolling參數詳解

pandas中提供了pandas.DataFrame.rolling這個函數來實現滑動窗口值計算,下面是這個函數的原型:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None),參數含義如下圖:

rolling參數詳解

用法代碼演示

上面我們介紹了滑動窗口的概念及實現函數的參數,下面我們通過代碼演示,依次展示各參數的作用。

import matplotlib.pylab as pltimport numpy as npimport pandas as pdindex=pd.date_range('20190116','20190130')data=[4,8,6,5,9,1,4,5,2,4,6,7,9,13,6]ser_data=pd.Series(data,index=index)

數據預覽

ser_data.rolling(3).mean()

window=3

如上圖所示,當窗口開始滑動時,第一個時間點和第二個時間點的時間為空,這是因為這裡窗口長度為3,他們前面的數都不夠3,所以到2019-01-18時,他的數據就是2019-01-16到2019-01-18三天的均值。那麼有人就會這樣想,在計算2019-01-16序列的窗口數據時,雖然不夠窗口長度3,但是至少有當天的數據,那麼能否就用當天的數據代表窗口數據呢?答案是肯定的,這裡我們可以通過min_periods參數控制,表示窗口最少包含的觀測值,小於這個值的窗口長度顯示為空,等於和大於時有值,如下所示:

#表示窗口最少包含的觀測值為1ser_data.rolling(3,min_periods=1).mean()

min_periods=1

上面講解了兩個常用的參數,下面我們通過繪圖來觀察原始序列與滑動窗口產生的序列值的關係圖,如下:

index=pd.date_range('20190116','20190216') np.random.seed(2)data=np.random.randint(20,size=len(index))ser_data=pd.Series(data,index=index) plt.figure(figsize=(15, 5)) ser_data.plot(style='r--') ser_data.rolling(3).mean().plot(style='b')

紅色是原始序列折線圖,藍色是窗口平均

可以從上面的圖中看到通過窗口取的值比原始序列數據更加平穩,這也是為何使用滑動窗口的原因。下節講解時間序列分析中的平穩性和差分法,偏理論,喜歡的小夥伴關注收藏!

相關焦點

  • Python時間序列數據分析--以示例說明
    在閱讀本文之前 ,推薦先閱讀:時間序列預測之--ARIMA模型http://www.cnblogs.com/bradleon/p/6827109.html本文主要分為四個部分:用pandas處理時序數據怎樣檢查時序數據的穩定性怎樣讓時序數據具有穩定性時序數據的預測1.
  • Python數據分析實戰:用Pandas 處理時間序列
    多元時間序列在表現形式上就是數據包含多列(大於兩列),第一列是時間戳,後面的列都是觀察對象。當時間序列是多元時,很多經典的機器學習模型可以施展拳腳,比如回歸模型,分類模型,這些模型都依賴於多元的特徵。對於我們本文以及後續的分析中,我們不會將時間序列特指為一元時間序列。無論是一元時間序列的分析還是多元時間序列的分析,對於時間相關的預處理格外重要。
  • 使用Pandas的resample函數處理時間序列數據的技巧
    時間序列數據在數據科學項目中很常見。
  • 用Python進行時間序列分解和預測
    在開始使用時間序列數據預測未來值之前,思考一下我們需要提前多久給出預測是尤其重要的。你是否應該提前一天,一周,六個月或十年來預測(我們用「界限」來表述這個技術術語)?需要進行預測的頻率是什麼?在開始預測未來值的詳細工作之前,與將要使用你的預測結果的人談一談也不失為一個好主意。如何在PYTHON中繪製時間序列數據?
  • Pandas處理時間序列數據的20個關鍵知識點
    舉幾個例子:一段時間內的股票價格每天,每周,每月的銷售額流程中的周期性度量一段時間內的電力或天然氣消耗率在這篇文章中,我將列出20個要點,幫助你全面理解如何用Pandas處理時間序列數據。1.不同形式的時間序列數據時間序列數據可以是特定日期、持續時間或固定的自定義間隔的形式。時間戳可以是給定日期的一天或一秒,具體取決於精度。
  • Pandas處理時間序列數據的20個關鍵知識點
    將數據格式轉換為時間序列數據to_datetime函數可以將具有適當列的數據名稱轉換為時間序列。移動時間序列數據時間序列數據分析可能需要移數據點進行比較。移位函數可以移位數據。用取樣函數重新採樣時間序列數據的另一個常見操作是重採樣。根據任務的不同,我們可能需要以更高或更低的頻率重新採樣數據。Resample創建指定內部的組(或容器),並允許您對組進行合併。讓我們創建一個包含30個值和一個時間序列索引的Panda系列。
  • 手把手教你用Python進行時間序列分解和預測
    時間序列預測的需求不僅存在於各類業務場景當中,而且通常需要對未來幾年甚至幾分鐘之後的時間序列進行預測。如果你正要著手進行時間序列預測,那麼本文將帶你快速掌握一些必不可少的概念。什麼是時間序列?如何在Python中繪製時間序列數據?時間序列的要素是什麼?如何分解時間序列?經典分解法如何獲得季節性調整值?
  • 利用Python中的pandas(date_range)庫生成時間序列(time series)
    在講pandas時間序列函數之前,我大概介紹下什麼是時間序列(time series)。時間序列(time series)簡單的說就是各時間點上形成的數值序列,時間序列(time series)分析就是通過觀察歷史數據預測未來的值。比如股票預測、房價預測分析等。本篇文章主要詳細講解生成時間索引的函數date_range及延伸函數。
  • 乾貨 :手把手教你用Python進行時間序列分解和預測
    換句話說,以時間為索引的一組數據是一個時間序列。請注意,此處的固定時間間隔(例如每小時,每天,每周,每月,每季度)是至關重要的,意味著時間單位不應改變。別把它與序列中的缺失值混為一談。我們有相應的方法來填充時間序列中的缺失值。在開始使用時間序列數據預測未來值之前,思考一下我們需要提前多久給出預測是尤其重要的。你是否應該提前一天,一周,六個月或十年來預測(我們用「界限」來表述這個技術術語)?
  • Python中的時間序列數據可視化的完整指南
    時間序列數據在許多不同的行業中都非常重要。它在研究、金融行業、製藥、社交媒體、網絡服務等領域尤為重要。對時間序列數據的分析也變得越來越重要。在分析中有什麼比一些好的可視化效果更好呢?沒有一些視覺效果,任何類型的數據分析都是不完整的。因為一個好的情節比20頁的報告更能讓你理解。因此,本文是關於時間序列數據可視化的。
  • 獨家 | 手把手教你用Python進行時間序列分解和預測
    在開始使用時間序列數據預測未來值之前,思考一下我們需要提前多久給出預測是尤其重要的。你是否應該提前一天,一周,六個月或十年來預測(我們用「界限」來表述這個技術術語)?需要進行預測的頻率是什麼?在開始預測未來值的詳細工作之前,與將要使用你的預測結果的人談一談也不失為一個好主意。如何在PYTHON中繪製時間序列數據?
  • Python數據核對系列之2—power query VS pandas
    在query函數列表裡有下面這幾個JoinKind.RightOuter :右外連接在上面的案例中,我們選擇的是RightOuter。以後我們仔細介紹query的M函數,之前的多篇文章我們也有所涉及。在數據量相對不大的時候(大概300萬內吧看電腦性能),M函數真的很好用。比如上的Table函數,還有List函數、Text函數等,數據清洗利器!
  • Python數學建模技巧之pandas數據處理
    最常見的庫有進行矩陣運算的Numpy、進行數據處理的pandas、進行科學計算的Scipy、進行圖形繪製及科學可視化的matplotlib、進行符號計算的Sympy以及方便進行機器學習任務的Sklearn。由於今年美賽官方公告中稱,將會提前在賽題公布之前就提供下載C題數據集的方式。
  • 數據分析工具篇——pandas高效函數
    ,這些方法圍繞數據的查詢結果進行深入處理,在數據分析中主要做特徵處理工作。.str.split('-').strprint(df)某一列中存在固定的分隔符,我們可以採用split函數進行切分,有意思的是我們看到了python的鏈式結構。
  • Pandas處理時序數據(初學者必會)!
    時間序列數據是同一統一指標按時間順序記錄的數據列。在同一數據列中的各個數據必須是同口徑的,要求具有可比性。時序數據可以是時期數,也可以時點數。時間序列分析的目的是通過找出樣本內時間序列的統計特性和發展規律性,構建時間序列模型,進行樣本外預測。本文目錄    1. 時序的創建        1.1.
  • Python數據分析之pandas數據讀寫
    引言我們現在已經基本熟悉了pandas庫以及它所提供的用於數據分析的基礎功能,也知道了DataFrame和Series是這個庫的核心,數據處理、計算和分析都是圍繞他們展開的。I/O API工具pandas是數據分析專用庫,因此如你所料,它主要關注的是數據計算和處理。此外,從外部文件讀寫數據也被視作數據處理的一部分。實際上正如後面會講到的,即使在這個階段,你也可以對數據做一定處理,以為接下來對數據做進一步分析做好準備。
  • Python做數據分析-簡潔、易讀、強大
    由於python是一種解釋性語言,大部分編譯型語言都要比python代碼運行速度快,有些同學就因此鄙視python。但是python是一門高級語言,其生產效率更高,時間通常比CPU的時間值錢,因此為了權衡利弊,考慮用python是值得的。
  • python數據分析專題 (7):python數據分析模塊
    也就是這些python的擴展包讓python可以做數據分析,主要包括numpy,scipy,pandas,matplotlib,scikit-learn等等諸多強大的模塊,在結合上ipython交互工具 ,以及python強大的爬蟲數據獲取能力,字符串處理能力,讓python成為完整的數據分析工具。
  • 一文帶你搞懂pandas中的時間處理(詳細)
    與PeriodIndex函數:類似於to_datetime()函數4、Timedelta類  1)日期前移、後移一天  2)兩個時間做差1、pandas中6個時間相關的類    在多數情況下,對時間類型數據進行分析的前提就是將原本為字符串的時間轉換為標準時間類型。
  • 通過Python 代碼實現時間序列數據的統計學預測模型
    來源 | DeepHub IMBA封圖 | CSDN 付費下載於視覺中國在本篇中,我們將展示使用 Python 統計學模型進行時間序列數據分析。 目標是:根據兩年以上的每日廣告支出歷史數據,提前預測兩個月的廣告支出金額。