Pandas中你一定要掌握的時間序列相關高階功能
- 💡 作者:韓信子@ShowMeAI
- 📘 資料分析實戰系列:https://www.showmeai.tech/tutorials/40
- 📘 本文地址:https://www.showmeai.tech/article-detail/389
- 📢 宣告:版權所有,轉載請聯絡平臺與作者並註明出處
- 📢 收藏ShowMeAI檢視更多精彩內容
Pandas 是大家都非常熟悉的資料分析與處理工具庫,對於結構化的業務資料,它能很方便地進行各種資料分析和資料操作。但我們的資料中,經常會存在對應時間的欄位,很多業務資料也是時間序組織,很多時候我們不可避免地需要和時間序列資料打交道。其實 Pandas 中有非常好的時間序列處理方法,但是因為使用並不特別多,很多基礎教程也會略過這一部分。
在本篇內容中,ShowMeAI對 Pandas 中處理時間的核心函式方法進行講解。相信大家學習過後,會在處理時間序列型資料時,更得心應手。
資料分析與處理的完整知識技能,大家可以參考ShowMeAI製作的工具庫速查表和教程進行學習和快速使用。 - 📘資料科學工具庫速查表 | Pandas 速查表 - 📘圖解資料分析:從入門到精通系列教程
💡 時間序列
時間序列是指將同一統計指標的數值按其發生的時間先後順序排列而成的數列。簡單說來,時間序列是隨著時間的推移記錄某些取值,比如說商店一年的銷售額(按照月份從1月到12月)。
💡 Pandas 時間序列處理
我們要了解的第一件事是如何在 Pandas 中建立一組日期。我們可以使用date_range()
建立任意數量的日期,函式需要你提供起始時間、時間長度和時間間隔。
```python
構建時長為7的時間序列
pd.date_range("2022-01-01", periods=7, freq='D')
輸出
DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04','2022-01-05', '2022-01-06', '2022-01-07'], dtype='datetime64[ns]', freq='D')
```
注意到上面的頻率可用freq
來設定:最常見的是'W'
每週,'D'
是每天,'M'
是月末,'MS'
是月開始。
下面我們建立一個包含日期和銷售額的時間序列資料,並將日期設定為索引。
```python
設定隨機種子,可以復現
np.random.seed(12)
構建資料集
df = pd.DataFrame({ 'date': pd.date_range("2022-01-01", periods=180, freq='D'), 'sales': np.random.randint(1000, 10000, size=180)})
# 設定索引 df = df.set_index('date') ```
注意,我們要方便地對時間序列進行處理,一個很重要的先序工作是將日期作為索引,我們前面已經完成這個工作了。
💦 重取樣
Pandas 中很重要的一個核心功能是resample
,重新取樣,是對原樣本重新處理的一個方法,是一個對常規時間序列資料重新取樣和頻率轉換的便捷的方法。
方法的格式是:
python
DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',kind=None, loffset=None, limit=None, base=0)
核心的引數rule
是字串,表示取樣的頻度。如下程式碼,在resample
後接的mean
是表示按照月度求平均。
```python
Resample by month end date
df.resample(rule= 'M').mean() ```
按月取平均值後,將索引設定為每月結束日期,結果如下。
我們也可以按每週銷售額繪製彙總資料。
```python
取樣繪圖
df.resample('W').mean().plot(figsize=(15,5), title='Avg Weekly Sales'); ```
上圖可以看出,銷量在3月和4月之間的銷售額有所下降,而在 6 月中旬達到頂峰。
💦 平移
Pandas 中的shift
功能,可以讓欄位向上或向下平移資料。這個平移資料的功能很容易幫助我們得到前一天或者後一天的資料,可以通過設定shift
的引數來完成上週或者下週資料的平移。
```python
原始資料的一份拷貝
df_shift = df.copy()
平移一天
df_shift['next_day_sales'] = df_shift.sales.shift(-1)
平移一週
df_shift['next_week_sales'] = df_shift.sales.shift(-7) ```
在時間序列問題中,我們經常要完成同比和環比資料,通過shift後的資料做差就很容易得到。
```python
計算差值
df_shift['one_week_net'] = df_shift.sales - df_shift.sales.shift(-7) ```
💦 滑動平均
下一個核心功能是rolling
滑動平均,它是做交易的朋友非常常用到的一個功能,rolling
函式建立一個視窗來聚合資料。
```python
長度為2天的視窗,求滑動平均
df.rolling(2).mean() ```
在下圖中,我們可以看到第一個值是NaN
,因為再往前沒有資料了。對第2個點,它對資料集的前2行計算平均: (6787 + 4325)/2 = 5556。
滾動平均值非常適合表徵趨勢,滑動視窗越大,得到的結果曲線越平滑,最常用的是7天平均。
```python
滑動平均繪圖
df.sales.plot(figsize=(25,8), legend=True, linestyle='--', color='darkgray') df.rolling(window=7).sales.mean().plot(legend=True, label='7 day average', linewidth=2) df.rolling(30).sales.mean().plot(legend=True, label='30 day average', linewidth=3) df.rolling(100).sales.mean().plot(legend=True, label='100 day average', linewidth=4) ```
💡 總結
Pandas在時間序列處理和分析中也非常有效,ShowMeAI在本篇內容中介紹的3個核心函式,是最常用的時間序列分析功能:
resample
:將資料從每日頻率轉換為其他時間頻率。shift
:欄位上下平移資料以進行比較或計算。rolling
:建立滑動平均值,檢視趨勢。
參考資料
- 📘資料科學工具庫速查表 | Pandas 速查表:https://www.showmeai.tech/article-detail/101
- 📘圖解資料分析:從入門到精通系列教程:https://www.showmeai.tech/tutorials/33
本文正在參加「金石計劃 . 瓜分6萬現金大獎」
- whylogs工具庫的工業實踐!機器學習模型流程與效果監控 ⛵
- 脈脈瘋傳!2023年程式設計師生存指南;多款prompt效率加倍工具;提示工程師最全祕籍;AI裁員正在發生 | ShowMeAI日報
- 中國風?古典系?AI中文繪圖創作嚐鮮!⛵
- Python中內建資料庫!SQLite使用指南!
- Pandas中你一定要掌握的時間序列相關高階功能
- 資料科學家賺多少?資料全分析與視覺化 ⛵
- 互動式儀表板!Python輕鬆完成!⛵
- ChatGPT!我是你的破壁人;比爾·蓋茨不看好Web3與元宇宙;FIFA押中4屆世界盃冠軍;GitHub今日熱榜 | ShowMeAI資訊日報
- ChatGPT要收費了;華爾街大裁員;阿里2023十大科技趨勢;小紅書元宇宙虛擬服飾被吐槽;GitHub今日熱榜 | ShowMeAI資訊日報
- AI創業時代!這9個方向有錢途;AIGC再添霸榜應用Lensa;美團SemEval2022冠軍方法分享;醫學影象處理工具箱… | ShowMeAI資訊日報
- 噓!P站資料分析年報;各省市疫情感染進度條;愛奇藝推出元宇宙App;You推出AI聊天機器人;GitHub今日熱榜 | ShowMeAI資訊日報
- 美國公司裁員潮時間線◉科技寒冬視覺化;3份報告回顧中國開發者2022;自動駕駛下半場,誰會衝出重圍 | ShowMeAI每週通訊 #005-01.07
- 副業月入過萬?資料有話說;掃地機器人發展到哪步了;疫情後要不要重返辦公室;淘寶元宇宙直播間;GitHub今日熱榜 | ShowMeAI資訊日報
- 大戰谷歌!微軟Bing引入ChatGPT;羊了個羊40萬年薪招研發;Debian徹底移除Python2;GitHub今日熱榜 | ShowMeAI資訊日報
- 酸了!樂視工作制改為四天半;高通新年裁員;AI繪畫公司開始倒閉;網易入股張藝謀元宇宙公司;GitHub今日熱榜 | ShowMeAI資訊日報
- 要麼幹要麼滾!推特開始裁員了;深度學習產品應用·隨書程式碼;可分離各種樂器音源的工具包;Transformer教程;前沿論文 | ShowMeAI資訊日報
- 真實世界的人工智慧應用落地——OpenAI篇 ⛵
- 陽過→陽康,資料裡的時代側影;谷歌慌了!看各公司如何應對ChatGPT;兩份優質AI年報;本週技術高光時刻 | ShowMeAI每週通訊 #003-12.24
- 用魔法打敗魔法!這件毛衣讓攝像頭看不到你;兩款酷炫的AI寫作軟體;快如閃電的B站下載工具;基於擴散模型的蛋白質設計 | ShowMeAI資訊日報
- 一文讀懂!異常檢測全攻略!從統計方法到機器學習 ⛵