1. 程式人生 > 其它 >在Python中如何差分時間序列資料集

在Python中如何差分時間序列資料集

差分是一個廣泛用於時間序列的資料變換。在本教程中,你將發現如何使用Python將差分操作應用於時間序列資料。

完成本教程後,你將學到:

  • 關於差分運算,包括延遲差分的配置和差分序列。
  • 如何開發手動實現的差分運算。
  • 如何使用內建的Pandas差分函式。

讓我們開始吧。

為什麼差分時間序列資料?

差分是一種變換時間序列資料集的方法。它可以用於消除序列對時間性的依賴性,即所謂的時間性依賴。這包含趨勢和週期性的結構。

不同的方法可以幫助穩定時間序列的均值,消除時間序列的變化,從而消除(或減少)趨勢和週期性。

– Forecasting: principles and practice215頁

通過從當前觀察中減去先前觀察值來實現差分。

difference(t)= observation(t)- observation(t-1)

這樣可以計算出序列差分。

延遲差分

將連續觀察值之間的差值稱為延遲-1差分。

可以調整延遲差分來適應特定的時間結構。

對於有周期性成分的時間序列,延遲可能是週期性的週期(寬度)。

差分序列

執行差分操作後,如非線性趨勢的情況下,時間結構可能仍然存在。

因此,差分過程可以一直重複,直到所有時間依賴性被消除。

執行差分的次數稱為差分序列。

洗髮水銷售資料集

該資料集描述了3年內洗髮水的月銷量。這些單位是銷售數量,有36個觀察值。原始資料集記為Makridakis,Wheelwright和Hyndman(1998)。

在這裡下載並瞭解有關資料集的更多資訊。下面的例子載入並建立了載入資料集的圖。

from pandasimport read_csv
from pandasimport datetime
from matplotlibimport pyplot

def parser(x):
    return datetime.strptime('190'+x,'%Y-%m')

series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
series.plot()
pyplot.show()

執行該示例將建立顯示資料中清晰的線性趨勢圖。

手動差分

我們可以手動差分資料集。這涉及開發一個建立差分資料集的新函式。該函式將通過你提供的序列迴圈,並以指定的間隔或延遲計算差分值。

我們用名為difference()的函式實現此過程。

# create a differenced series
def difference(dataset, interval=1):
    diff= list()
    for iin range(interval,len(dataset)):
        value= dataset[i]- dataset[i- interval]
        diff.append(value)
    return Series(diff)

我們可以看到,在指定的時間間隔後,函式開始差分資料集,以確保實際上可以計算差分值。定義預設間隔或延遲的值為1。這是一個合理的預設值。另一個改進是能夠指定執行差分操作的時間順序或次數。

以下示例將手動difference()函式應用於洗髮水銷售資料集。

from pandasimport read_csv
from pandasimport datetime
from pandasimport Series
from matplotlibimport pyplot

def parser(x):
    return datetime.strptime('190'+x,'%Y-%m')

# create a differenced series
def difference(dataset, interval=1):
    diff= list()
    for iin range(interval,len(dataset)):
        value= dataset[i]- dataset[i- interval]
        diff.append(value)
    return Series(diff)

series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
X= series.values
diff= difference(X)
pyplot.plot(diff)
pyplot.show()

執行示例建立差分資料集並繪製結果。

自動差分

Pandas庫提供了一種自動計算差分資料集的功能。這個diff()函式是由Series和DataFrame物件提供。就像前一節中手動定義的差分函式一樣,它需要一個引數來指定間隔或延遲,在本例中稱為週期(periods)。

下面的例子演示瞭如何在Pandas Series物件上使用內建的差分函式。

from pandasimport read_csv
from pandasimport datetime
from matplotlibimport pyplot

def parser(x):
    return datetime.strptime('190'+x,'%Y-%m')

series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
diff= series.diff()
pyplot.plot(diff)
pyplot.show()

如上一節所述,執行該示例繪製了差分資料集。

使用Pandas函式的好處需要的程式碼較少,並且它保留差分序列中時間和日期的資訊。

總結

在本教程中,你已經學會了在python中如何將差分操作應用於時間序列資料。

具體來說,你學到了:

  • 關於差分運算,包括延遲差分的配置和差分序列。
  • 如何開發手動實現的差分運算。
  • 如何使用內建的Pandas差分函式。

原文:http://machinelearningmastery.com/difference-time-series-dataset-python/