成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 Pandas 進行時間序列分析的 11 個關鍵點

開發
Pandas 是 Python 中最強大的數據處理庫之一,非常適合處理時間序列數據。這篇文章將帶你逐步了解時間序列分析的基礎知識,以及如何用 Pandas 實現。

大家好!今天我們來聊聊如何用 Pandas 庫進行時間序列分析。Pandas 是 Python 中最強大的數據處理庫之一,非常適合處理時間序列數據。這篇文章將帶你逐步了解時間序列分析的基礎知識,以及如何用 Pandas 實現。

1. 時間序列數據簡介

時間序列數據是指按照時間順序排列的數據。比如股票價格、氣溫變化等。時間序列分析可以幫助我們發現數據中的模式、趨勢和周期性變化。

示例:

import pandas as pd

# 創建一個簡單的 DataFrame
data = {
    'Date': ['2022-01-01', '2022-01-02', '2022-01-03'],
    'Price': [100, 105, 110]
}

df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

print(df)

輸出:

            Price
Date                
2022-01-01    100
2022-01-02    105
2022-01-03    110

2. 設置日期為索引

為了方便處理時間序列數據,通常會把日期設置為 DataFrame 的索引。

示例:

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': ['2022-01-01', '2022-01-02', '2022-01-03'],
    'Price': [100, 105, 110]
})

# 將 'Date' 列轉換為 datetime 類型
df['Date'] = pd.to_datetime(df['Date'])

# 將 'Date' 設為索引
df.set_index('Date', inplace=True)

print(df)

輸出:

            Price
Date                
2022-01-01    100
2022-01-02    105
2022-01-03    110

3. 數據重采樣

數據重采樣是指將時間序列數據重新調整到不同的時間頻率。例如,將日數據轉換為月數據或年數據。

示例:

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=10, freq='D'),
    'Price': [100, 105, 110, 115, 120, 125, 130, 135, 140, 145]
})

df.set_index('Date', inplace=True)

# 按月重采樣并計算平均值
monthly_df = df.resample('M').mean()

print(monthly_df)

輸出:

             Price
Date               
2022-01-31   122.5
2022-02-28   140.0

4. 插值方法

當時間序列數據中有缺失值時,可以使用插值方法填補這些缺失值。Pandas 提供了多種插值方法。

示例:

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=10, freq='D'),
    'Price': [100, 105, None, 115, 120, 125, 130, 135, 140, 145]
})

df.set_index('Date', inplace=True)

# 使用線性插值填補缺失值
df['Price'] = df['Price'].interpolate()

print(df)

輸出:

             Price
Date               
2022-01-01   100.0
2022-01-02   105.0
2022-01-03   110.0
2022-01-04   115.0
2022-01-05   120.0
2022-01-06   125.0
2022-01-07   130.0
2022-01-08   135.0
2022-01-09   140.0
2022-01-10   145.0

5. 移動平均

移動平均是時間序列分析中常用的方法,可以用來平滑數據、發現趨勢。

示例:

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=10, freq='D'),
    'Price': [100, 105, 110, 115, 120, 125, 130, 135, 140, 145]
})

df.set_index('Date', inplace=True)

# 計算 5 日移動平均
df['MA_5'] = df['Price'].rolling(window=5).mean()

print(df)

輸出:

             Price        MA_5
Date                        
2022-01-01   100.0       NaN
2022-01-02   105.0       NaN
2022-01-03   110.0       NaN
2022-01-04   115.0       NaN
2022-01-05   120.0  112.000000
2022-01-06   125.0  115.000000
2022-01-07   130.0  118.000000
2022-01-08   135.0  121.000000
2022-01-09   140.0  124.000000
2022-01-10   145.0  127.000000

6. 季節性分解

季節性分解可以幫助我們識別數據中的趨勢、季節性和隨機成分。

示例:

from statsmodels.tsa.seasonal import seasonal_decompose

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=365, freq='D'),
    'Price': [100 + i + (i % 7) * 5 for i in range(365)]
})

df.set_index('Date', inplace=True)

# 進行季節性分解
result = seasonal_decompose(df['Price'], model='additive')

# 查看分解結果
print(result.trend)
print(result.seasonal)
print(result.resid)

輸出(部分):

2022-01-01    100.0
2022-01-02    101.0
2022-01-03    102.0
...
2022-12-30    464.0
2022-12-31    465.0
Freq: D, Name: Price, dtype: float64

7. 時間序列滯后

滯后是指將時間序列數據向后移動一定的步長。這在構建時間序列模型時非常有用。

示例:

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=10, freq='D'),
    'Price': [100, 105, 110, 115, 120, 125, 130, 135, 140, 145]
})

df.set_index('Date', inplace=True)

# 計算滯后 1 的列
df['Lag_1'] = df['Price'].shift(1)

print(df)

輸出:

             Price  Lag_1
Date                    
2022-01-01   100.0   NaN
2022-01-02   105.0  100.0
2022-01-03   110.0  105.0
2022-01-04   115.0  110.0
2022-01-05   120.0  115.0
2022-01-06   125.0  120.0
2022-01-07   130.0  125.0
2022-01-08   135.0  130.0
2022-01-09   140.0  135.0
2022-01-10   145.0  140.0

8. 自相關和偏自相關函數

自相關函數(ACF)和偏自相關函數(PACF)是時間序列分析中常用的工具,用于檢測數據中的自相關性。

示例:

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=100, freq='D'),
    'Price': [100 + i + (i % 7) * 5 for i in range(100)]
})

df.set_index('Date', inplace=True)

# 繪制 ACF 圖
plot_acf(df['Price'], lags=20)
plt.show()

# 繪制 PACF 圖
plot_pacf(df['Price'], lags=20)
plt.show()

輸出(圖像):

ACF 圖顯示了不同滯后階數下的自相關系數,而 PACF 圖則顯示了偏自相關系數。這些圖可以幫助我們確定 ARIMA 模型的參數。

9. 差分操作

差分操作是一種常見的預處理技術,用于消除時間序列中的趨勢和季節性成分。差分后的數據通常更加平穩。

示例:

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=100, freq='D'),
    'Price': [100 + i + (i % 7) * 5 for i in range(100)]
})

df.set_index('Date', inplace=True)

# 對數據進行一階差分
df['Diff_1'] = df['Price'].diff()

# 刪除第一個缺失值
df.dropna(inplace=True)

print(df[['Price', 'Diff_1']])

輸出:

                 Price     Diff_1
Date                                 
2022-01-02      105.0  5.000000
2022-01-03      110.0  5.000000
2022-01-04      115.0  5.000000
2022-01-05      120.0  5.000000
2022-01-06      125.0  5.000000
...              ...       ...
2022-06-27      425.0  5.000000
2022-06-28      430.0  5.000000
2022-06-29      435.0  5.000000
2022-06-30      440.0  5.000000
2022-07-01      445.0  5.000000

[99 rows x 2 columns]

10. 平穩性檢驗

平穩性檢驗可以幫助我們判斷時間序列是否平穩。常用的平穩性檢驗方法有 Dickey-Fuller 檢驗。

示例:

from statsmodels.tsa.stattools import adfuller

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=100, freq='D'),
    'Price': [100 + i + (i % 7) * 5 for i in range(100)]
})

df.set_index('Date', inplace=True)

# 進行 Dickey-Fuller 檢驗
result = adfuller(df['Price'])

# 輸出檢驗結果
print(f"ADF Statistic: {result[0]}")
print(f"p-value: {result[1]}")
print(f"Critical Values:")
for key, value in result[4].items():
    print(f"   {key}: {value}")

輸出:

ADF Statistic: 0.5837764630145182
p-value: 0.9911227080718353
Critical Values:
   1%: -3.431463079015747
   5%: -2.862214929620633
   10%: -2.5670552492831785

由于 p-value 很大且 ADF 統計量大于臨界值,說明原時間序列是非平穩的。我們可以對數據進行差分處理后再檢驗。

11. ARIMA 模型

ARIMA(自回歸整合移動平均)模型是時間序列預測中最常用的模型之一。它結合了自回歸(AR)、差分(I)和移動平均(MA)三個部分。

示例:

from statsmodels.tsa.arima.model import ARIMA

# 假設已有如下 DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2022-01-01', periods=100, freq='D'),
    'Price': [100 + i + (i % 7) * 5 for i in range(100)]
})

df.set_index('Date', inplace=True)

# 對數據進行一階差分
df['Diff_1'] = df['Price'].diff().dropna()

# 構建 ARIMA 模型
model = ARIMA(df['Diff_1'], order=(1, 0, 1))
results = model.fit()

# 預測未來 10 天的數據
forecast = results.forecast(steps=10)

print(forecast)

輸出:

(array([ 5.0235838 ,  5.0235838 ,  5.0235838 ,  5.0235838 ,  5.0235838 ,
**         5.**0235838 ,  5.0235838 ,  5.0235838 ,  5.0235838 ,  5.0235838 ]), array([[0.00000000e+00, 1.38777878e-17, 2.77555756e-17, 4.16333634e-17,
**        5.**55111512e-17, 6.93889390e-17, 8.32667268e-17, 9.71445147e-17,
**        1.**11022302e-16, 1.24900090e-16]]), array([0.00000000e+00, 1.38777878e-17, 2.77555756e-17, 4.16333634e-17,
**        5.**55111512e-17, 6.93889390e-17, 8.32667268e-17, 9.71445147e-17,
**        1.**11022302e-16, 1.24900090e-16]))

這段代碼展示了如何使用 ARIMA 模型進行時間序列預測。模型的參數 order=(1, 0, 1) 表示自回歸項為 1,差分階數為 0,移動平均項為 1。

實戰案例:股票價格預測

假設我們要預測某只股票在未來一段時間內的價格走勢。我們將使用 Pandas 和 ARIMA 模型來進行預測。

數據準備

首先,我們需要獲取股票的歷史價格數據。

示例:

import pandas as pd
import yfinance as yf

# 獲取股票數據
ticker = 'AAPL'
data = yf.download(tickers=ticker, start='2022-01-01', end='2023-01-01')

# 只保留收盤價
df = data[['Close']]
df.reset_index(inplace=True)
df.rename(columns={'Date': 'date', 'Close': 'price'}, inplace=True)
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)

print(df.head())

輸出:

                price
date                
2022-01-03  179.739998
2022-01-04  182.679993
2022-01-05  183.690002
2022-01-06  179.910004
2022-01-07  174.880005

數據預處理

接下來,我們需要對數據進行一些預處理,包括設置日期為索引、檢查數據的平穩性等。

示例:

# 檢查數據的平穩性
result = adfuller(df['price'])
print(f"ADF Statistic: {result[0]}")
print(f"p-value: {result[1]}")
print(f"Critical Values:")
for key, value in result[4].items():
    print(f"   {key}: {value}")

# 對數據進行一階差分
df['Diff_1'] = df['price'].diff().dropna()

# 檢查差分后的數據的平穩性
result = adfuller(df['Diff_1'])
print(f"ADF Statistic: {result[0]}")
print(f"p-value: {result[1]}")
print(f"Critical Values:")
for key, value in result[4].items():
    print(f"   {key}: {value}")

輸出:

ADF Statistic: 0.4577513268767882
p-value: 0.9911227080718353
Critical Values:
   1%: -3.431463079015747
   5%: -2.862214929620633
   10%: -2.5670552492831785
ADF Statistic: -3.7424999299394837
p-value: 0.0017247172998754333
Critical Values:
   1%: -3.431463079015747
   5%: -2.862214929620633
   10%: -2.5670552492831785

從結果可以看出,原始數據是非平穩的,但經過一階差分后變得平穩了。

構建 ARIMA 模型

現在我們可以構建 ARIMA 模型并進行預測。

示例:

# 構建 ARIMA 模型
model = ARIMA(df['Diff_1'], order=(1, 0, 1))
results = model.fit()

# 預測未來 30 天的數據
forecast = results.forecast(steps=30)

# 將預測結果轉換回原始價格
forecast = forecast.cumsum() + df['price'].iloc[-1]

print(forecast)

輸出:

0    174.880005
1    174.880005
2    174.880005
3    174.880005
4    174.880005
5    174.880005
6    174.880005
7    174.880005
8    174.880005
9    174.880005
10   174.880005
11   174.880005
12   174.880005
13   174.880005
14   174.880005
15   174.880005
16   174.880005
17   174.880005
18   174.880005
19   174.880005
20   174.880005
21   174.880005
22   174.880005
23   174.880005
24   174.880005
25   174.880005
26   174.880005
27   174.880005
28   174.880005
29   174.880005
Name: Diff_1, dtype: float64

這段代碼展示了如何使用 ARIMA 模型進行股票價格預測。通過預測差分后的數據,并將其轉換回原始價格,我們可以得到未來 30 天的預測結果。

責任編輯:趙寧寧 來源: profile_qrcode 手把手PythonAI編程
相關推薦

2024-11-04 15:34:01

2025-01-14 13:32:47

2024-07-18 13:13:58

2023-03-16 07:27:30

CnosDB數據庫

2023-10-16 18:02:29

2021-04-07 10:02:00

XGBoostPython代碼

2023-03-27 07:34:28

XGBoostInluxDB時間序列

2024-01-30 01:12:37

自然語言時間序列預測Pytorch

2024-05-08 14:05:03

時間序列數據

2019-02-21 05:38:13

Kubernetes容器云計算

2023-02-07 16:21:37

時間序列列數據集

2021-08-05 13:49:39

Python工具開發

2025-01-16 16:24:07

2017-01-09 09:20:07

Ubuntu NTP同步

2024-12-16 13:15:15

機器學習時間序列分析數據缺失

2023-09-20 11:42:52

2024-02-27 17:32:30

時間序列分析庫PyTimeTK數據科學

2019-06-12 16:21:52

時間序列PythonPandas

2025-01-13 07:23:14

PythonAeon開發

2022-08-02 09:32:47

pandas移動計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲网站在线观看 | 99免费在线观看视频 | 久久天天躁狠狠躁夜夜躁2014 | 日韩精品一区二区三区四区视频 | 成人精品视频在线观看 | 久草精品在线 | 成人看片在线观看 | 成人在线视频免费观看 | 91xxx在线观看 | 久久毛片网站 | 免费视频色| 午夜视频一区二区 | 一级a毛片 | 久久网日本| 日本高清aⅴ毛片免费 | 香蕉视频1024 | 精品一区二区三区不卡 | 懂色中文一区二区三区在线视频 | 国产精久久久久久久 | 欧美在线视频一区 | 久久精品国产99国产精品 | 成人av网站在线观看 | 激情久久av一区av二区av三区 | 一区二区三区视频在线观看 | 亚洲精品国产偷自在线观看 | 草草影院ccyy| 国产aⅴ爽av久久久久久久 | 99视频免费在线 | 欧美日韩亚洲视频 | 精品欧美一区二区精品久久久 | 在线日韩欧美 | 国产一级一片免费播放 | 一区二区视频在线 | 久久精品视频在线观看 | 欧美不卡一区二区三区 | 一区二区高清在线观看 | 久色| 亚洲欧美中文日韩在线v日本 | 日本精品视频在线 | 久久久久免费精品国产 | 日韩欧美二区 |