如何使用 Pandas 繪製時間序列圖表?
在日常生活中,我們經常會遇到各種互動式圖形資料。在我們的日常工作或商業活動中,我們會遇到許多資料集或圖表,這些資料和圖表有助於我們進行決策、未來預測等等。我們日常生活中遇到的一組資料就是時間序列資料。
在固定的時間間隔內收集的一系列資料或資料點,這種與時間相關的的資料集稱為時間序列資料。這些資料集是在固定的時間間隔內收集的。一個簡單的例子可能是我們的天氣資料,或者可能是心電圖報告中的資料等等。這些資料集都按時間索引,並在一段時間內記錄。
分析這些資料並預測未來或當前情況是這些資料的主要目的。這使其成為最廣泛使用的資料形式之一。
在本文中,我們將嘗試找出我們可以透過使用 Python 中一個非常流行的庫 Pandas 將這些資料集繪製成圖表來探索或視覺化這些資料集的方法。我們可以透過多種方式實現這些資料集並獲得有價值的資料洞察。透過圖表視覺化基於時間的資料對於獲得洞察力和理解時間資料集中的趨勢至關重要。
入門
首先,我們需要確保我們有一個安裝了 Python 的工作系統(首選 3.xx 或更高版本)。由於我們使用的是 Pandas 庫和 matplotlib,因此我們需要為 Python 準備好這些包。一個簡單的過程是開啟一個 cmd 視窗並執行以下命令
pip install pandas pip install matplotlib
稍後在程式碼中匯入這些包,我們可以簡單地使用 import 關鍵字,如下所示
import pandas as pd import matplotlib.pyplot as plt
載入時間序列資料
現在,在繪製時間序列資料之前,我們需要資料。它可以來自某個來源,或者我們可以建立它並將其載入到 Pandas DataFrame 中。務必確保資料包含一個表示日期和時間資訊的特定列(時間序列資料)。您可以從各種來源(例如 .csv 檔案、Web API 或資料庫)將資料載入到資料框中。
如果我們有一個名為 data.csv 的 CSV 檔案包含時間序列資料,我們可以將其載入為
data = pd.read_csv('data.csv', parse_dates=['timestamp_column'])
*請確保您將“data.csv”替換為您系統上的實際檔案路徑,並將“timestamp_column”替換為包含時間資訊的列的名稱。
將時間戳設定為索引
為了確保正確處理時間序列資料集的資料,至關重要的是將時間戳列設定為 DataFrame 的索引。此步驟基本上是為了讓 Pandas 知道我們正在使用時間序列資料。您可以透過單行程式碼設定時間戳
data.set_index('timestamp_column', inplace=True)
*請記住,將“timestamp_column”替換為您資料表中包含時間資訊的列的名稱。
使用示例資料集
對於本文,我們將建立一個數據集以避免任何混淆,並且我們的所有結果都將主要基於此資料集,這意味著演示繪圖的實際程式碼將從此處開始。我們將建立一個包含 10 行 4 列的資料集。以下是建立資料集的方法
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01', '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855, 445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776, 924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
print(dataframe)
輸出
A B C Date 2022-01-01 302 849 715 2022-02-01 404 1488 355 2022-03-01 710 912 284 2022-04-01 484 855 543 2022-05-01 641 445 112 2022-06-01 669 752 1052 2022-07-01 897 699 891 2022-08-01 994 1045 776 2022-09-01 1073 1232 924 2022-10-01 944 974 786
使用 pandas 繪製時間序列資料
我們可以使用 pandas 在 Python 中實現或繪製這些資料集的方法有很多。我們有折線圖、條形圖、面積圖和散點圖等等。
讓我們看看一些主要使用的繪圖
繪製折線圖
這是表示時間序列資料的一種非常常見的方式。它表示兩個軸 X 和 Y 之間的關係,顯示由線連線的資料點。
要使用 Pandas 和 Matplotlib 建立基本的折線圖,請使用以下程式碼
import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01', '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855, 445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776, 924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(figsize=(10, 6))
plt.title('Timeseries Data')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()
輸出

*figsize 決定圖表的尺寸,可以透過更改 xlabel 和 ylabel 值來相應地設定標籤。
繪製條形圖
條形圖是資料的圖形表示,使用矩形條來成比例地表示相應的值。它更適合表示處理分類或離散值的時間序列資料。一個軸表示比較類別,另一個軸表示相應的值。要建立條形圖,請使用以下程式碼
示例
import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01', '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855, 445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776, 924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(kind='bar', figsize=(10, 6))
plt.title('Timeseries Data')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()
輸出

*這只是示例資料框的表示。
繪製面積圖
面積圖用於視覺化不同變數隨時間的幅度和比例。它們是透過填充線圖下方的區域來建立的。使用 pandas,我們可以生成此類圖表,如下所示
示例
import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01', '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855, 445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776, 924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(kind='area', figsize=(10, 6))
plt.title('Timeseries Data')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()
輸出

繪製散點圖
散點圖可有效地瞭解兩個連續變數之間的關係。它們幫助我們瞭解資料集中的趨勢、相關性和聚類。從給定資料集生成散點圖的簡單語法如下
示例
import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01', '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855, 445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776, 924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(kind='scatter', x='A', y='B', figsize=(10, 6))
plt.title('Scatter Plot')
plt.xlabel('A')
plt.ylabel('B')
plt.show()
輸出

自定義時間序列圖
Pandas 和 Matplotlib 為我們提供了靈活性,我們可以自定義時間序列圖。您可以調整包括線型、標記樣式、配色方案和軸格式在內的各個方面。
讓我們快速瀏覽一些自定義選項,我們將嘗試進行簡單的更改:
示例
import matplotlib.pyplot as plt
import pandas as pd
ts_data = { 'Date': ['2022-01-01', '2022-02-01','2022-03-01', '2022-04-01', '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01','2022-09-01', '2022-10-01'],
'A': [302, 404, 710, 484, 641, 669, 897, 994,1073, 944],'B': [849, 1488, 912, 855, 445, 752, 699, 1045, 1232, 974], 'C': [715, 355,284, 543, 112, 1052, 891, 776, 924, 786]}
dataframe = pd.DataFrame( ts_data,columns=[ 'Date', 'A', 'B', 'C'])
# Changing the datatype of Date
dataframe["Date"] = dataframe["Date"].astype("datetime64[ns]")
# Setting the Date as index
dataframe = dataframe.set_index("Date")
dataframe.plot(figsize=(10, 6), linewidth=2, linestyle='--', marker='o', markersize=5, color='red')
plt.title('Customized Timeseries Plot')
plt.xlabel('Time')
plt.ylabel('Value')
plt.grid(True) # Add grid lines
plt.legend(['Data'], loc='upper right') # Add legend
plt.show()
輸出

*我們在這裡自定義了線寬、線型、標記樣式、標記大小、顏色、網格線和圖例
結論
時間序列資料非常重要,廣泛用於研究和分析。Pandas 使我們能夠視覺化和分析這些資料集以獲得有意義的結果。
在本文中,我們探討了 Pandas 和 Matplotlib 中可用於視覺化時間序列資料的各種圖表。我們涵蓋了面積圖、散點圖、條形圖和折線圖。每種圖表型別都有其獨特的用途,可以為您的資料集提供寶貴的見解。
請探索龐大的 pandas 庫,檢視它提供的時序分解、滾動均值以及其他分析和視覺化工具。Python 及其庫的功能使其成為開發人員和分析師的首選語言。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP