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萬現金大獎」
- 感謝飛書放過幕布!100個GPT-4實戰案例;GPT-4免費平替Poe;AI繪畫新手指南之SD篇;new Bing靠譜教程 | ShowMeAI日報
- 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資訊日報