Python用於時間序列分析:預測和異常檢測

PHPz
發布: 2023-08-31 20:09:13
轉載
1148 人瀏覽過

Python用於時間序列分析:預測和異常檢測

Python 已成為資料科學家和分析師的首選語言,提供全面的資料分析庫和工具。尤其是Python在時間序列分析方面表現突出,在預測和異常檢測方面表現出色。憑藉其簡單性、多功能性以及對統計和機器學習技術的強大支持,Python 提供了一個理想的平台,從依賴時間的數據中提取有價值的見解。

本文探討了 Python 在時間序列分析方面的卓越功能,並著重於預測和異常檢測。透過深入研究這些任務的實際方面,我們重點介紹了 Python 的函式庫和工具如何實現精確預測和識別時間序列資料中的異常。透過現實世界的範例和演示性輸出,我們展示了 Python 在應對時間序列分析挑戰方面的效率和實用性。與我們一起踏上 Python 之旅,進行時間序列分析並揭開與時間相關的資料中隱藏的寶藏。

使用 Python 進行預測

預測使我們能夠根據過去的觀察來預測未來的價值。 Python 提供了多個高效能函式庫,例如 NumPy、pandas 和 scikit-learn,有助於時間序列預測。此外,統計模型和 Prophet 等專業庫提供更進階的預測功能。

在預測零售店下個月銷售額的任務中,我們首先將時間序列資料載入到 pandas DataFrame 中並執行必要的準備工作。準備好數據後,我們可以探索移動平均線、指數平滑和 ARIMA 模型等各種預測方法來進行分析和預測。

範例

以下是範例程式碼

#
import pandas as pd import statsmodels.api as sm # Load and preprocess the time series data sales_data = pd.read_csv('sales_data.csv', parse_dates=['Date']) sales_data.set_index('Date', inplace=True) # Fit the ARIMA model model = sm.tsa.ARIMA(sales_data, order=(1, 1, 1)) model_fit = model.fit(disp=0) # Make predictions predictions = model_fit.predict(start='2023-07-01', end='2023-08-01', dynamic=False)
登入後複製

在此範例中,我們從 CSV 檔案載入銷售數據,將日期列設為索引,並將 ARIMA(1, 1, 1) 模型擬合到數據。最後,我們對下個月做出預測。

使用 Python 進行異常檢測

異常檢測涉及識別時間序列資料中的異常模式。 Python 提供了多種用於有效異常檢測的技術和函式庫,包括基於移動平均值和標準差的流行方法。

假設我們有一個包含每小時溫度讀數的感測器資料集。我們正在尋找例外情況,例如溫度快速升高或降低。以下是採用移動平均值和標準差策略的程式碼範例

範例

import pandas as pd # Load the time series data sensor_data = pd.read_csv('sensor_data.csv', parse_dates=['Timestamp']) sensor_data.set_index('Timestamp', inplace=True) # Calculate moving averages and standard deviations window_size = 6 rolling_mean = sensor_data['Temperature'].rolling(window=window_size).mean() rolling_std = sensor_data['Temperature'].rolling(window=window_size).std() # Detect anomalies anomalies = sensor_data[(sensor_data['Temperature'] > rolling_mean + 2 * rolling_std) | (sensor_data['Temperature'] < rolling_mean - 2 * rolling_std)]
登入後複製

在此範例中,我們使用 6 小時的視窗大小來計算溫度測量值的移動平均值和標準差。然後,透過定位明顯偏離移動平均線的數據點,我們能夠發現異常情況。

用於時間序列分析的 Python 視覺化

Python 提供了強大的視覺化函式庫,可以增強我們對時間序列資料的理解,超越預測和異常檢測。視覺化有助於直觀地識別模式、趨勢和異常,從而提高洞察力並做出明智的決策。

讓我們擴展先前的範例,並結合 Python 的視覺化功能來更深入地了解資料。

預測視覺化

使用ARIMA模型進行銷售預測後,我們可以將預期銷售與實際銷售數據一起顯示。使用此視覺化可以輕鬆比較預期數字和實際數字。

範例

import matplotlib.pyplot as plt plt.figure(figsize=(10, 6)) plt.plot(sales_data.index, sales_data['Sales'], label='Actual Sales') plt.plot(predictions.index, predictions, color='red', linestyle='--', label='Predicted Sales') plt.title('Sales Forecasting') plt.xlabel('Date') plt.ylabel('Sales') plt.legend() plt.show()
登入後複製

在此範例中,利用 matplotlib 函式庫產生線圖,直觀地表示實際銷售資料和預測銷售資料。這種圖形表示使我們能夠評估預測模型的準確性並識別預測值和觀測值之間的任何差異。

異常檢測視覺化

異常檢測視覺化需要建立一個圖表來展示時間序列資料、計算的移動平均值和偵測到的異常。這種視覺表示可以清晰地識別和分析異常數據點。這是一個範例

範例

import pandas as pd import matplotlib.pyplot as plt sensor_data = pd.read_csv('sensor_data.csv', parse_dates=['Timestamp']) sensor_data.set_index('Timestamp', inplace=True) window_size = 6 rolling_mean = sensor_data['Temperature'].rolling(window=window_size).mean() rolling_std = sensor_data['Temperature'].rolling(window=window_size).std() anomalies = sensor_data[(sensor_data['Temperature'] > rolling_mean + 2 * rolling_std) | (sensor_data['Temperature'] < rolling_mean - 2 * rolling_std)] plt.figure(figsize=(10, 6)) plt.plot(sensor_data.index, sensor_data['Temperature'], label='Temperature') plt.plot(sensor_data.index, rolling_mean, color='red', linestyle='--', label='Moving Average') plt.scatter(anomalies.index, anomalies['Temperature'], color='orange', label='Anomalies') plt.title('Anomaly Detection: Temperature Sensor') plt.xlabel('Timestamp') plt.ylabel('Temperature') plt.legend() plt.show()
登入後複製

該程式碼範例從 CSV 檔案載入時間序列數據,並將時間戳列設定為索引。然後,它使用特定的視窗大小計算溫度讀數的移動平均值和標準偏差。透過將溫度值與計算的移動平均值和標準差進行比較,可以檢測到異常情況。

結論

總而言之,Python 被證明是時間序列分析的寶貴工具,特別是在預測和異常檢測領域。其廣泛的函式庫(包括 statsmodels、pandas 和 scikit-learn)提供了一個專為處理時間序列資料而客製化的強大生態系統。透過利用這些庫的強大功能,可以建立 ARIMA 等準確的預測模型,並可以使用移動平均值和標準差等技術來識別異常情況。此外,Python 的視覺化函式庫(例如 matplotlib)使用戶能夠創建視覺上引人注目的繪圖,從而加深他們對時間序列資料的理解。無論專業知識水平如何,Python 都為初學者和經驗豐富的資料科學家提供了必要的資源,以發現趨勢、做出精確預測並識別時間序列資料集中的異常。

以上是Python用於時間序列分析:預測和異常檢測的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn