第 2 篇:初探時間序列 - 可視化與基本概念

第 2 篇:初探時間序列 - 可視化與基本概念

在這里插入圖片描述

(圖片來源: Luke Chesser on Unsplash)

在上一篇《你好,時間序列!》中,我們了解了什么是時間序列數據以及學習它的重要性。現在,是時候卷起袖子,真正開始接觸和探索這些按時間流動的數據了!

本篇我們將聚焦于:

  1. 如何使用 Python 加載和處理時間序列數據? (基礎操作)
  2. 如何通過可視化讓時間序列“說話”? (核心技能)
  3. 時間序列通常由哪些基本“成分”構成? (核心概念)

準備好你的 Python 環境 (Pandas, Matplotlib/Seaborn),讓我們開始吧!

數據加載與基礎操作:Pandas 的魔法

處理時間序列數據,Pandas 庫是我們的得力助手。它提供了強大的 TimestampDatetimeIndex 對象,專門用于處理時間信息。

假設我們有一個 CSV 文件 my_time_series.csv,內容如下:

Date,Value
2023-01-01,10
2023-01-02,12
2023-01-03,15
2023-01-04,13
2023-01-05,16
...

我們可以這樣加載它,并確保日期列被正確識別為時間索引:

import pandas as pd# 加載數據
# parse_dates=['Date'] 告訴 Pandas 'Date' 列包含日期信息
# index_col='Date' 將 'Date' 列設置為 DataFrame 的索引
try:# 假設文件在當前目錄下df = pd.read_csv('my_time_series.csv', parse_dates=['Date'], index_col='Date')print("數據加載成功!")
except FileNotFoundError:print("錯誤:找不到 my_time_series.csv 文件。請確保文件路徑正確。")# 為了演示,我們創建一個簡單的示例 DataFrameprint("將創建一個示例 DataFrame 繼續演示...")dates = pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'])values = [10, 12, 15, 13, 16]df = pd.DataFrame({'Value': values}, index=dates)# 查看數據前幾行和索引類型
print("\n數據概覽:")
print(df.head())
print("\n索引類型:")
print(type(df.index))

關鍵點:

  • parse_dates=['列名']:讓 Pandas 嘗試將指定列解析為日期時間格式。
  • index_col='列名':將解析后的日期時間列設置為 DataFrame 的索引。這會創建一個 DatetimeIndex

為什么 DatetimeIndex 很重要?

擁有 DatetimeIndex 后,我們可以方便地進行基于時間的各種操作,例如:

  • 按時間范圍選擇數據 (Slicing):
# 選擇 2023 年 1 月的數據
print("\n選擇 2023 年 1 月數據:")
try:print(df['2023-01'])
except KeyError:print("示例數據中沒有完整的 1 月數據,此為切片示例。")print(df['2023-01-01':'2023-01-03']) # 選擇特定日期范圍# 選擇特定日期
print("\n選擇 2023 年 1 月 2 日的數據:")
print(df.loc['2023-01-02'])
  • 重采樣 (Resampling): 改變時間序列的頻率(例如,從日數據變為月度平均數據)。我們后面會更詳細地接觸。
# 簡單示例:計算月度平均值 (如果數據足夠多)
# 'M' 表示 月末 (Month End)
# .mean() 計算平均值
try:monthly_mean = df.resample('M').mean()print("\n月度平均值 (如果數據覆蓋多月):")print(monthly_mean)
except Exception as e:print(f"\n計算月度平均值出錯 (可能是數據量太少): {e}")

可視化:讓數據“說話”

時間序列最直觀的探索方式就是畫圖折線圖 (Line Plot) 是我們的首選,它能清晰地展示數據點如何隨著時間變化。

我們將使用 MatplotlibSeaborn (通常基于 Matplotlib 提供更美觀的圖形) 來繪圖。

import matplotlib.pyplot as plt
import seaborn as sns# 設置繪圖風格 (可選)
sns.set_style("whitegrid")# 創建圖形
plt.figure(figsize=(12, 6)) # 設置圖形大小# 繪制折線圖
plt.plot(df.index, df['Value'], marker='o', linestyle='-')
# 或者使用 Seaborn
# sns.lineplot(data=df, x=df.index, y='Value', marker='o')# 添加標題和標簽
plt.title('My Time Series Data Over Time')
plt.xlabel('Date')
plt.ylabel('Value')# 優化日期顯示 (可選)
plt.xticks(rotation=45)
plt.tight_layout() # 調整布局防止標簽重疊# 顯示圖形
plt.show()

(請運行上面的代碼,生成的圖就是這里應該展示的內容。一個簡單的折線圖,X 軸是時間,Y 軸是數值。)

如何解讀圖形?

盯著這張圖,試著回答以下問題:

  1. 整體趨勢 (Trend): 數據是長期來看是上升的?下降的?還是保持水平?(看大方向
  2. 周期性模式 (Seasonality/Cycles): 是否存在固定時間間隔內(比如每年、每周、每天)反復出現的模式?(看重復的波峰波谷
  3. 異常點 (Outliers): 是否有某個或某幾個點顯得特別“突兀”,遠離整體模式?
  4. 波動性 (Volatility): 數據變化的幅度是大致恒定的,還是時大時小?

通過可視化,我們就能對時間序列的特性有一個初步的、直觀的認識。

時間序列的基本成分 (概念引入)

剛才我們在解讀圖形時提到了“趨勢”、“周期性模式”等,這些其實就是時間序列數據通常包含的基本成分。理解這些成分對于后續分析和建模至關重要。

一個時間序列 Y(t) 通常被認為可以分解為以下幾個(并非所有序列都包含全部)主要部分:

  1. 趨勢 (Trend, T(t)):

    • 描述數據在長期內的主要走向或基本趨勢。
    • 可以是上升的(如經濟增長)、下降的(如某種技術被淘汰)或水平的。
    • 想象成一條貫穿數據中心的平滑曲線。
  2. 季節性 (Seasonality, S(t)):

    • 指數據在一個固定且已知的時間周期內(如一年、一季度、一周、一天)表現出的、可預測的模式性波動。
    • 例如:冰淇淋銷量夏季高、冬季低(周期為年);工作日通勤交通量早晚高峰(周期為天)。
    • 關鍵: 周期長度是固定的。
  3. 周期性 (Cyclicality, C(t)):

    • 指數據在非固定長度的時期內出現的長期波動,通常與經濟周期等宏觀因素相關。
    • 周期長度通常比季節性長(比如幾年甚至幾十年),且沒有固定的時間間隔。
    • 注意: 這個成分對于初學者來說比較難識別和處理,我們初期會更多關注趨勢和季節性。
  4. 隨機性 / 噪聲 / 殘差 (Noise / Irregular / Residual, R(t)):

    • 剔除掉趨勢、季節性和周期性成分后,數據中剩余的、不規則的、通常是隨機的波動。
    • 可以看作是模型無法解釋的部分。
      在這里插入圖片描述

(這張圖展示了一個序列 (Data) 被分解為趨勢 (Trend)、季節性 (Seasonal) 和殘差 (Remainder/Residual) 的經典示例)

我們目前只需要理解這些概念即可,下一篇我們將學習如何使用工具實際地將一個時間序列分解開來。

小結與代碼示例回顧

今天我們:

  • 學會了使用 pandas 加載時間序列數據,并理解了 parse_datesindex_col 的重要性,創建了 DatetimeIndex
  • 掌握了使用 matplotlibseaborn 繪制時間序列折線圖這一核心可視化技能。
  • 學習了如何從圖中初步觀察趨勢季節性等模式。
  • 理解了時間序列通常包含的趨勢 (T)季節性 (S)周期性 ?隨機性 ? 四個基本成分(概念層面)。

完整代碼示例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 1. 生成示例數據 (包含趨勢和季節性)
np.random.seed(42) # for reproducibility
dates = pd.date_range(start='2022-01-01', periods=365 * 2, freq='D') # 2 年的日數據
trend = np.linspace(0, 10, len(dates)) # 線性上升趨勢
seasonality = 5 * np.sin(2 * np.pi * dates.dayofyear / 365.25) # 年度季節性
noise = np.random.normal(0, 1, len(dates)) # 隨機噪聲
values = trend + seasonality + noise + 20 # 基線值為 20# 創建 DataFrame
df_generated = pd.DataFrame({'Value': values}, index=dates)print("生成的示例數據概覽:")
print(df_generated.head())
print("\n索引類型:")
print(type(df_generated.index))# 2. 可視化
sns.set_style("whitegrid")
plt.figure(figsize=(14, 7))# 繪制折線圖
sns.lineplot(data=df_generated, x=df_generated.index, y='Value')# 添加標題和標簽
plt.title('Generated Time Series with Trend and Seasonality')
plt.xlabel('Date')
plt.ylabel('Value')# 優化日期顯示
plt.xticks(rotation=30)
plt.tight_layout()# 顯示圖形
plt.show()# 3. 初步解讀
print("\n觀察上圖:")
print("- 整體看,數據是不是有一個向上的大方向?(趨勢)")
print("- 數據是不是每年都在重復相似的上下波動模式?(季節性)")

通過觀察生成的圖,你應該能比較清晰地看到我們定義的“趨勢”(整體向上)和“季節性”(每年重復的波浪形)。

下一篇預告

現在我們對時間序列有了直觀感受,也知道了它可能包含哪些成分。那么,如何更精確地把這些成分分離出來呢?下一篇,我們將深入探討時間序列分解 (Time Series Decomposition) 技術,學習如何量化地識別和提取趨勢與季節性。

敬請期待!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76643.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76643.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76643.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux服務器配置Anaconda環境、Pytorch庫(圖文并茂的教程)

引言:為了方便后續新進組的 師弟/師妹 使用課題組的服務器,特此編文(ps:我導從教至今四年,還未招師妹) ? NLP 研 2 選手的學習筆記 筆者簡介:Wang Linyong,NPU,2023級&a…

Spring-AOP分析

Spring分析-AOP 1.案例引入 在上一篇文章中,【Spring–IOC】【https://www.cnblogs.com/jackjavacpp/p/18829545】,我們了解到了IOC容器的創建過程,在文末也提到了AOP相關,但是沒有作細致分析,這篇文章就結合示例&am…

【Python網絡爬蟲開發】從基礎到實戰的完整指南

目錄 前言:技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊技術選型對比 二、實戰演示環境配置要求核心代碼實現(10個案例)案例1:基礎靜態頁面抓取案例2:動…

服務器監控軟件推薦

以下是幾款常用的服務器監控軟件推薦,涵蓋開源和商業方案,適用于不同規模和需求: 一、開源免費方案 Prometheus Grafana 特點:時序數據庫 可視化儀表盤,支持多維度監控和告警。適用場景:云原生、Kubernet…

編譯原理實驗(四)———— LR(1)分析法

一、實驗目的 掌握LR(1)分析法的基本原理與實現流程。通過構造LR(1)分析表,驗證符號串是否符合給定文法規則。理解LR(1)分析中向前搜索符(Lookahead Symbol)的作用,解決移進-歸約沖突。 二、實驗題目 1.對下列文法,用…

vue3 主題模式 結合 element-plus的主題

vue3 主題模式 結合 element-plus的主題 npm i element-plus --save-dev在 Vue 3 中,實現主題模式主要有以下幾種方式 1.使用 CSS 變量(自定義屬性) CSS 變量是一種在 CSS 中定義可重用值的方式。在主題模式中,可以將顏色、字體…

科大訊飛Q1營收46.6億同比增長27.7%,扣非凈利同比增長48.3%

4月21日盤后,AI龍頭科大訊飛(002230.SZ)發布2024年報,公司全年實現營業收入233.43億元,同比增長18.79%,同期歸母凈利潤為5.6億元。 公司核心賽道業務保持快速增長,消費者、教育、汽車、醫療業務…

Day5-UFS總結

UFS 傳輸協議的本質:兩個收發器件,對需要傳輸的數據,一層一層的封裝和解析,利用封裝增加的額外信息,做一些數據處理,完成源地址到目標地址的數據傳輸功能。 應用協議的本質:基于某種傳輸協議之…

嵌入式工程師( C / C++ )筆試面試題匯總

注:本文為 “嵌入式工程師筆試面試題” 相關文章合輯。 未整理去重。 如有內容異常,請看原文。 嵌入式必會 C 語言筆試題匯總 Z 沉浮 嵌入式之旅 2021 年 01 月 19 日 00:00 用預處理指令 #define 聲明一個常數,用以表明 1 年中有多少秒&a…

29-JavaScript基礎語法(函數)

知識目標 理解函數的基本概念;掌握函數的定義和調用;理解函數參數和返回值及作用域;掌握函數高階用法。 1. 理解函數的基本概念 明確函數在 JavaScript 里是一段可重復使用的代碼塊,它能接收輸入參數,執行特定任務&…

AI答題pk機器人來襲

AI答題PK機器人是一種具備知識問答競賽功能的人工智能程序。以下為您詳細介紹: 一、實時對戰:能在答題排位PK升級賽中,與用戶進行1V1在線實時PK答題 。比如在一些知識競賽類APP中,用戶可匹配到AI機器人對手,在規定時…

PclSharp ——pcl的c#nuget包

簡介: NuGet Gallery | PclSharp 1.8.1.20180820-beta07 下載.NET Framework 4.5.2 Developer Pack: 下載 .NET Framework 4.5.2 Developer Pack Offline Installer 離線安裝nupkg: nupkg是visual studio 的NuGet Package的一個包文件 安…

【Unity筆記】Unity音視頻播放監聽器封裝筆記:VideoPlayer + AudioSource事件觸發與編輯器擴展

關鍵點 Unity VideoPlayer 播放結束事件Unity AudioSource 播放檢測 Unity音視頻播放監聽器封裝筆記:VideoPlayer AudioSource事件觸發與編輯器擴展 在 Unity 的多媒體開發中,我們經常需要監聽 VideoPlayer 或 AudioSource 的播放狀態,以便…

WPF常用技巧匯總

主要用于記錄工作中發現的一些問題和常見的解決方法。 此文會持續更新。 >abp new Evan.MyWpfApp -t wpf --old --framework .net8 1. 解決不同屏幕分辨率下的鋸齒問題 UseLayoutRounding"True" <Grid UseLayoutRounding"True"><Border Mar…

分數線降低,25西電馬克思主義學院(考研錄取情況)

1、馬克思主義學院各個方向 2、馬克思主義學院近三年復試分數線對比 學長、學姐分析 由表可看出&#xff1a; 1、馬克思主義理論25年相較于24年下降10分&#xff0c;為355分 3、25vs24推免/統招人數對比 學長、學姐分析 由表可看出&#xff1a; 1、 馬克思主義學院25年共接…

【Linux網絡】構建UDP服務器與字典翻譯系統

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

【項目管理】成本類計算 筆記

項目管理-相關文檔&#xff0c;希望互相學習&#xff0c;共同進步 風123456789&#xff5e;-CSDN博客 &#xff08;一&#xff09;知識總覽 項目管理知識域 知識點&#xff1a; &#xff08;項目管理概論、立項管理、十大知識域、配置與變更管理、績效域&#xff09; 對應&…

div(HTML標準元素)和view(微信小程序專用組件)的主要區別體

div&#xff08;HTML標準元素&#xff09;和view&#xff08;微信小程序專用組件&#xff09;的主要區別體現在以下方面&#xff1a; 一、應用場景與開發框架 ?適用平臺不同? div是HTML/CSS開發中通用的塊級元素&#xff0c;用于Web頁面布局?&#xff1b;view是微信小程序專…

【C++軟件實戰問題排查經驗分享】UI界面卡頓 | CPU占用高 | GDI對象泄漏 | 線程堵塞 系列問題排查總結

目錄 1、UI界面卡頓問題排查 2、軟件CPU占用高問題排查 3、UI界面顯示異常&#xff08;GDI對象泄漏導致窗口繪制異常&#xff09;問題排查 4、軟件線程堵塞&#xff08;包含線程死鎖&#xff09;問題排查 5、最后 C軟件異常排查從入門到精通系列教程&#xff08;核心精品專…

管理雜談——采石磯大捷的傳奇與啟示

南宋抗金史上&#xff0c;岳飛與岳家軍的鐵血傳奇家喻戶曉&#xff0c;但另一位力挽狂瀾的“文官戰神”卻常被忽視——他從未掌兵&#xff0c;卻在南宋存亡之際整合潰軍&#xff0c;以少勝多&#xff0c;締造采石磯大捷。此人正是虞允文。一介書生何以扭轉乾坤&#xff1f;他的…