【Python數據分析】時間序列-重采樣


1.時間序列-重采樣

將時間序列從一個頻率轉換為另一個頻率的過程,且會有數據的結合。
降采樣:高頻數據 → 低頻數據,例如:以月為頻率的數據轉為以年為頻率的數據
升采樣:低頻數據 → 高頻數據,例如:以年為頻率的數據轉為以月為頻率的數據

1.1 重采樣

# 重采樣:.resample()
# 創建一個以天為頻率的TimeSeries,重采樣為按2天為頻率
import pandas as pd
import numpy as np
rng = pd.date_range('20170101', periods = 12)
ts = pd.Series(np.arange(12), index = rng)
print(ts)

ts_re = ts.resample('5D')
ts_re2 = ts.resample('5D').sum()
print(ts_re, type(ts_re))
print(ts_re2, type(ts_re2))
print('-----')
# ts.resample('5D'):得到一個重采樣構建器,頻率改為5天
# ts.resample('5D').sum():得到一個新的聚合后的Series,聚合方式為求和
# freq:重采樣頻率 → ts.resample('5D')
# .sum():聚合方法

print(ts.resample('5D').mean(),'→ 求平均值\n')
print(ts.resample('5D').max(),'→ 求最大值\n')
print(ts.resample('5D').min(),'→ 求最小值\n')
print(ts.resample('5D').median(),'→ 求中值\n')
print(ts.resample('5D').first(),'→ 返回第一個值\n')
print(ts.resample('5D').last(),'→ 返回最后一個值\n')
print(ts.resample('5D').ohlc(),'→ OHLC重采樣\n')
# OHLC:金融領域的時間序列聚合方式 → open開盤、high最大值、low最小值、close收盤

1.2 降采樣

# 降采樣
import pandas as pd
import numpy as np
rng = pd.date_range('20170101', periods = 12)
ts = pd.Series(np.arange(1,13), index = rng)
print(ts)

print(ts.resample('5D').sum(),'→ 默認\n')
print(ts.resample('5D', closed = 'left').sum(),'→ left\n')
print(ts.resample('5D', closed = 'right').sum(),'→ right\n')
print('-----')
# closed:各時間段哪一端是閉合(即包含)的,默認 左閉右閉
# 詳解:這里values為0-11,按照5D重采樣 → [1,2,3,4,5],[6,7,8,9,10],[11,12]
# left指定間隔左邊為結束 → [1,2,3,4,5],[6,7,8,9,10],[11,12]
# right指定間隔右邊為結束 → [1],[2,3,4,5,6],[7,8,9,10,11],[12]

print(ts.resample('5D', label = 'left').sum(),'→ leftlabel\n')
print(ts.resample('5D', label = 'right').sum(),'→ rightlabel\n')
# label:聚合值的index,默認為取左
# 值采樣認為默認(這里closed默認)

1.3 升采樣及插值

# 升采樣及插值
import pandas as pd
import numpy as np
rng = pd.date_range('2017/1/1 0:0:0', periods = 5, freq = 'H')
ts = pd.DataFrame(np.arange(15).reshape(5,3),
                  index = rng,
                  columns = ['a','b','c'])
print(ts)

print(ts.resample('15T').asfreq())
print(ts.resample('15T').ffill())
print(ts.resample('15T').bfill())
# 低頻轉高頻,主要是如何插值
# .asfreq():不做填充,返回Nan
# .ffill():向上填充
# .bfill():向下填充

1.4 時期重采樣

# 時期重采樣 - Period
import pandas as pd
import numpy as np
prng = pd.period_range('2016','2017',freq = 'M')
ts = pd.Series(np.arange(len(prng)), index = prng)
print(ts)

print(ts.resample('3M').sum())  # 降采樣
print(ts.resample('15D').ffill())  # 升采樣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM