?? 作者:韓信子@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()創建任意數量的日期,函式需要你提供起始時間、時間長度和時間間隔,
# 構建時長為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'是月開始,
下面我們創建一個包含日期和銷售額的時間序列資料,并將日期設定為索引,
# 設定隨機種子,可以復現
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,重新采樣,是對原樣本重新處理的一個方法,是一個對常規時間序列資料重新采樣和頻率轉換的便捷的方法,
方法的格式是:
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是表示按照月度求平均,
# Resample by month end date
df.resample(rule= 'M').mean()
按月取平均值后,將索引設定為每月結束日期,結果如下,
我們也可以按每周銷售額繪制匯總資料,
# 采樣繪圖
df.resample('W').mean().plot(figsize=(15,5), title='Avg Weekly Sales');
上圖可以看出,銷量在3月和4月之間的銷售額有所下降,而在 6 月中旬達到頂峰,
?? 平移
Pandas 中的shift功能,可以讓欄位向上或向下平移資料,這個平移資料的功能很容易幫助我們得到前一天或者后一天的資料,可以通過設定shift的引數來完成上周或者下周資料的平移,
# 原始資料的一份拷貝
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后的資料做差就很容易得到,
# 計算差值
df_shift['one_week_net'] = df_shift.sales - df_shift.sales.shift(-7)
?? 滑動平均
下一個核心功能是rolling滑動平均,它是做交易的朋友非常常用到的一個功能,rolling函式創建一個視窗來聚合資料,
# 長度為2天的視窗,求滑動平均
df.rolling(2).mean()
在下圖中,我們可以看到第一個值是NaN,因為再往前沒有資料了,對第2個點,它對資料集的前2行計算平均: (6787 + 4325)/2 = 5556,
滾動平均值非常適合表征趨勢,滑動視窗越大,得到的結果曲線越平滑,最常用的是7天平均,
# 滑動平均繪圖
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
推薦閱讀
- ?? 資料分析實戰系列 :https://www.showmeai.tech/tutorials/40
- ?? 機器學習資料分析實戰系列:https://www.showmeai.tech/tutorials/41
- ?? 深度學習資料分析實戰系列:https://www.showmeai.tech/tutorials/42
- ?? TensorFlow資料分析實戰系列:https://www.showmeai.tech/tutorials/43
- ?? PyTorch資料分析實戰系列:https://www.showmeai.tech/tutorials/44
- ?? NLP實戰資料分析實戰系列:https://www.showmeai.tech/tutorials/45
- ?? CV實戰資料分析實戰系列:https://www.showmeai.tech/tutorials/46
- ?? AI 面試題庫系列:https://www.showmeai.tech/tutorials/48
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538627.html
標籤:其他
下一篇:MICCAI 論文投稿須知翻譯
