時間序列
- 前言
- 一、Datetime 模塊
- 常用函數和數據結構的詳細解釋
- datetime模塊
- 示例一
- 示例二
- 二、時間運算
- 示例一
- 示例二
- 示例三
- 三、時間序列分析
- 自回歸(Autoregressive model/AR)模型
- 示例
- 滑動平均(moving average model/MA)模型
- 示例
- 自回歸滑動平均(Autoregressive moving average model/ARMA) 模型
- 示例
前言
時間序列是按照時間順序排列的一系列隨時間變化而變化的數據點或觀測值。時間序列可以是離散的,例如每月的銷售數據,也可以是連續的,例如氣溫和股票價格等。時間序列常用于預測和分析未來的趨勢,例如經濟增長、股票走勢、天氣變化等。
時間序列分析是數據分析中的重要部分,它涉及到對隨時間變化的數據進行研究,以揭示其內在規律、趨勢和周期性變化。Python作為一種強大的編程語言,擁有眾多的數據處理和可視化庫,如pandas
、numpy
、matplotlib
和seaborn
等,這些庫在處理時間序列數據時表現出色。
首先,我們需要明確什么是時間序列數據。時間序列數據是按照時間順序排列的一系列數據點,這些數據點可以是任何類型的測量值,如股票價格、氣溫、銷售額等。時間序列分析的目標是通過這些數據點來理解和預測未來的趨勢和模式。
在Python中,pandas
庫是處理時間序列數據的首選工具。pandas
提供了DataFrame
數據結構,可以輕松地導入、清洗、轉換和分析時間序列數據。例如,我們可以使用pandas
的read_csv
函數導入CSV
格式的時間序列數據,然后使用to_datetime
函數將日期列轉換為pandas
的DateTimeIndex
格式,這樣可以更方便地進行時間序列分析。
一旦數據被導入并準備好,我們就可以使用pandas
提供的各種函數來進行時間序列分析。例如,我們可以使用rolling
函數來計算移動平均或移動標準差,以平滑數據并消除短期噪聲。我們還可以使用diff
函數來計算數據的差分,以揭示數據的趨勢和周期性變化。
除了基本的統計分析,時間序列分析還包括更高級的技術,如ARIMA
模型、指數平滑和傅里葉分析等。這些技術可以幫助我們更深入地理解數據的內在規律,并用于預測未來的趨勢。在Python中,我們可以使用statsmodels
庫來實現這些高級技術。
最后,可視化是時間序列分析的重要組成部分。通過繪制時間序列圖、自相關圖、部分自相關圖等圖表,我們可以直觀地了解數據的趨勢、周期性和季節性變化。在Python中,matplotlib
和seaborn
庫提供了豐富的繪圖功能,可以幫助我們創建高質量的可視化圖表。
一、Datetime 模塊
Python標準庫中包含了datetime
模塊,該模塊提供了非常強大的功能來處理日期和時間。在Pandas
中,時間序列數據可以通過多種方式表示,包括Python的原生datetime
對象、字符串、整數等。
Datetime
模塊提供了將這些不同的時間表示方式轉換為Pandas
中的Datetime
類型的函數,以及一系列常用的時間序列操作函數。
常用函數和數據結構的詳細解釋
以下是Datetime
模塊的一些常用函數和數據結構的詳細解釋:
-
to_datetime
函數:將字符串或整數等轉換為Pandas
中的Datetime
類型。它能夠自動推斷日期的格式,并將其轉換為Pandas
中的Datetime
類型。例如,可以通過調用to_datetime
函數將字符串"2021-01-01
"轉換為Datetime
對象。 -
DatetimeIndex
類:表示由Datetime
類型組成的時間序列索引。它可以用于創建一個Datetime
類型的索引,用于對時間序列數據進行索引和切片操作。 -
Timestamp
類:表示一個具體的時間點。它是Datetime
模塊中最常用的數據結構之一,可以用于表示一個具體的日期和時間。例如,可以用Timestamp
類表示"2021-01-01 12:00:00"這個特定的時間點。 -
DateOffset
類:表示一個時間偏移量,用于對時間進行增減操作。它可以與Datetime
類型的對象進行加減運算,用于計算相對于一個特定時間點的偏移量。例如,可以通過將一個DateOffset
對象加到一個Datetime
對象上,得到一個新的Datetime
對象。 -
Period
類:表示一個時間段。它是Datetime
模塊中用于表示時間段的數據結構之一,可以表示一個時間段的開始和結束時間。例如,可以用Period
類表示"2021-01-01
"到"2021-01-31
"這個時間段。
除了以上介紹的函數和數據結構之外,Datetime
模塊還提供了一系列的時間序列操作函數,包括日期的加減運算、日期的比較判斷、日期的格式化輸出等。通過使用這些函數,可以方便地進行時間序列數據的處理和分析。
datetime模塊
Python的datetime
模塊是Python標準庫中用于處理日期和時間的模塊。它提供了一系列的函數和數據結構,用于操作日期和時間。
datetime
模塊中的主要類和函數包括:
-
datetime
類:表示一個具體的日期和時間。這個類提供了許多方法來操作日期和時間,如獲取年、月、日、時、分、秒等。 -
date
類:表示一個日期。這個類只包含年、月、日,不包含時間信息。 -
time
類:表示一個時間。這個類只包含時、分、秒,不包含日期信息。 -
timedelta
類:表示兩個日期或時間之間的時間差。可以對兩個日期或時間進行加減運算,得到它們之間的時間差。例如,可以計算兩個日期之間相隔多少天。 -
strftime
函數:用于將datetime
對象格式化為字符串。可以根據指定的格式將日期和時間對象轉換成字符串,如將日期格式化為"YYYY-MM-DD
"或將時間格式化為"HH:MM:SS
"等。 -
strptime
函數:用于將字符串解析為datetime
對象。可以根據指定的格式將字符串解析為datetime
對象,如將"2021-01-01
"解析為日期對象。 -
now
函數:返回當前的日期和時間。可以使用now
函數獲取當前的日期和時間信息。 -
timedelta
函數:用于創建一個時間差。可以使用timedelta
函數創建一個指定時間差的timedelta
對象,如創建一個表示5天的時間差對象。
datetime
模塊提供了一系列的函數和數據結構來處理日期和時間,可以方便地進行日期和時間的計算、格式化和解析等操作。它在數據分析、日志分析等領域都有廣泛的應用,是Python中處理日期和時間的重要工具。
總結:datatime
模塊是在time
模塊的基礎上做了封裝,提供了更多更好用的類,常用的類有date
、time
、datetime
, timedelta
, tzinfo
。
date
類主要用于處理年、月、日的日期數據;time
類主要用于處理時、分、秒的時間數據;datetime
類是date
類和time
類的綜合,可以處理年、月、日、時、分、秒;timedelta
類主要用于做時間的加減運算;
方法(屬性) | 說明 |
---|---|
today() | 返回當地的日期 |
fromtimestamp(timestamp) | 根據給定的時間戮,返回本地日期 |
min | date 所能表示的最小日期 |
max | date 所能表示的最大日期 |
import datetimetimestamp = 1623988800 # Represents June 18, 2021, 12:00:00 AM (UTC)datetime_obj = datetime.datetime.fromtimestamp(timestamp)print(datetime_obj) # Output: 2021-06-18 00:00:00
示例一
【例】請利用Python獲取當前日期。
關鍵技術:可以利用datetime
模塊date
類的today()
方法將當前日期保存在變量中。
通過使用date.today()
,可以創建一個date
類對象,其中包含了日期元素,如年、月、日,但不包含時間元素,比如時分、秒。最后,可以使用year
、month
和day
來捕獲具體的日期元素。
import datetime
current_date= datetime. datetime. today()
print (current_date)
print (current_date. year)
print (current_date. month)
print (current_date. day)
示例二
【例】請利用Python獲取當前日期和時間。
關鍵技術:可以利用datetime
模塊datetime
類的today()
方法將當前日期和時間保存在變量中。
通過使用datetime.today()
,可以創建一個datetime
類對象,其中包含了日期元素和時間元素,如年、月、日、時、分、秒。最后,可以使用year
、month
和day
來捕獲具體的日期元素,通過hour
、minute
和second
來捕獲具體的時間元素。
import datetime
current_date= datetime. datetime. today()
print (current_date)
print (current_date. year)
print (current_date. month)
print (current_date. day)
print (current_date. hour)
print (current_date. minute)
print (current_date. second)
二、時間運算
示例一
【例】給定兩個時間類型的數據,計算兩個時間的不同之處。
關鍵技術:利用datetime
將時間類型數據進行轉換,然后利用減法運算計算時間的不同之處,默認輸出結果轉換為用("天”,"秒”)表達。
示例二
【例】如果要將輸出結果轉換以“天”為單位,此時應該如何處理?
關鍵技術:針對上例中的delta
變量,利用delta.days
可以將輸出結果轉換以“天”為單位。
輸出結果如下所示:379
示例三
【例】如果要將輸出結果轉換以“秒”為單位,此時應該如何處理?
關鍵技術:針對上例中的delta
變量,利用delta.seconds
可以將輸出結果轉換以“秒”為單位。
輸出結果如下所示: 53100
三、時間序列分析
時間序列是把同一事件的歷史統計資料按照時間順序排列起來得到的一組數據序列,主要的分析方法包括移動平均和指數平滑。
時間序列預測法是以時間數列所能反映的社會經濟現象的發展過程和規律性進行引伸外推,預測其發展趨勢的方法。
時間序列預測法就是通過編制和分析時間序列,根據時間序列所反映出來的發展過程、方向和趨勢,進行類推或延伸,借以預測下一段時間或以后若干年內可能達到的水平。
自回歸(Autoregressive model/AR)模型
自回歸模型(Autoregressive Model,簡稱AR模型)僅通過時間序列變量的自身歷史觀測值來反映有關因素對預測目標的影響和作用,不受模型變量相互獨立的假設條件約束,所構成的模型可以消除普通回歸預測方法中由于自變量選擇、多重共線性等造成的困難,是最常見的平穩時間序列模型之一。
考慮一個單擺系統。
設xt為第t次擺動過程中的擺幅。根據物理原理,第 t 次的擺幅xt由前一次的擺幅xt-1決定,即有xt =a1xt-10考慮到空氣振動的影響,我們往往假設Xt = a1xt-1 + εt
其中,隨機干擾εt~N(0, σ2 ),稱模型為一階自回歸模型。
更一般地,可以考慮序列值x可由前p個時刻的序列值及當前的噪聲表出,即xt= a1xt-1 +…+ ajXt-j+…+ apXt-p + εt模型。
其中,a;為參數, et為白噪聲,則稱該序列為 p階自回歸AR ( p)
示例
【例】已知存儲在d盤的給定某只股票的交易數據(timeseries_data.csv
) ,請利用自回歸(AR)模型進行數據擬合,輸出AR模型的階數和擬合效果圖
滑動平均(moving average model/MA)模型
滑動平均(moving average model/MA)模型也稱移動平均模型,是用過去各個時期的隨機干擾或預測誤差的線性組合來表達當前預測值。相比之下, AR模型是通過分析研究歷史數據對當前數據的影響進行建模。
q階MA模型的公式為:xt = μ + at - θ1at-1 - … - θqat-q
示例
【例】同樣對于上述給定的股票交易數據,請利用滑動平均(MA)模型進行數據擬合,輸出MA模型的擬合效果圖。
自回歸滑動平均(Autoregressive moving average model/ARMA) 模型
ARMA模型就是AR模型和MA模型混合。在更加復雜的情況下,一個ARMA過程可能是AR與MA過程、幾個AR過程、AR與ARMA過程的迭加,也可能是測度誤差較大的AR過程。
ARMA(p,q)模型公式:
由此可見, ARMA(p,0)模型就是AR( p )模型, ARMA(0,q)模型就是MA(q)模型。
示例
【例】同樣對于上述給定的股票交易數據,請利用自回歸滑動平均(ARMA)模型進行數據擬合,輸出ARMA模型的擬合效果圖。