天天看點

pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖

pandas時間序列

  • datatime子產品
    • 日期和時間資料類型
    • 字元串與datetime之間的轉換
  • 時間序列基礎
    • 索引,選取,子集,構造
    • 重複索引時間序列
    • 日期的範圍,頻率,移動
      • 生成時間範圍
      • 頻率和日期偏移
  • 時區處理
    • 時區的轉換
    • Timestamp對象與時區
  • 時期
    • 時期的頻率轉換
    • 按季度計算的時期頻率
    • Timestamp與Period的轉換
    • 重采樣及頻率轉換
  • 時間序列繪圖
    • 移動視窗函數

datatime子產品

日期和時間資料類型

now=datetime.datetime.now() #生成目前日期和時間
now.year
now.day
now.second

delta=datetime.timedelta(100,10)
delta.days
delta.seconds
           

datetime子產品中的資料類型

類型 說明
date 儲存月曆日期,(年,月,日)
time 儲存時間(時,分,秒,毫秒)
datetime 存儲日期和時間(年,月,日,時,分,秒,毫秒)
timedelta 表示兩個datetime值之間的差(日,秒,毫秒)

字元串與datetime之間的轉換

from dateutil.parser import parse

# 時間轉回字元串
stamp=datetime.datetime(2011,1,3)
str(stamp)
stamp.strftime('%Y-%m-%d')


# 字元串轉為時間
value='2011-01-03'
values=['2011-01-03','2012-02-06']
datetime.datetime.strptime(value,'%Y-%m-%d')

parse(value) #幾乎能解釋所有日期表示形式
parse('6/12/2011',dayfirst=True)

print(pd.to_datetime(value))
print(pd.to_datetime(values)) #傳回DatatimeIndex
           

datetime格式定義

代碼 說明
%Y 4位數年
%y 2位數年
%m 2位數月
%d 2位數日
%H 2位24制小時
%I 2位12制小時
%M 2位數分
%S 2位數秒
%w 用整數表示星期,0為星期天
%U 一年的第幾周,星期天為第一天,0周是第一個星期天的前幾天
%W 一年的第幾周,星期一位第一天,0周是第一個星期一的前幾天
%z _HHMM或-HHMM表示UTC時區偏移量
%F %Y-%m-%d的簡寫
%D %m-%d-%Y

特定于目前環境的日期格式

代碼 說明
%a 星期幾簡寫
%A 星期幾全稱
%b 月份簡寫
%B 月份全稱
%c 完整的日期和時間
%p 不同環境的AM或PM
%x 适合于目前環境的日期格式
%X 适合于目前環境的時間格式

時間序列基礎

  • 如果index資料類型為datetime.datetime,則資料為TimeSeries對象,index為DatetimeIndex
  • pandas用numpy的datetime64類型儲存時間拽

    s.index.dtype

  • DateTimeIndex中各個标量值是pandas的Timestamp對象,有需要可随時自動轉換為datetime對象

索引,選取,子集,構造

  • 可以傳入字元串日期,datetime,Timestamp
  • 傳入可被解釋的日期字元串

    ts['1/10/2012']

  • 可傳入年或年月

    ts['2011']``ts['2011-09']

  • 日期切片隻對符合規則有效

    ts[datetime(2011,1,7):]

  • 可以用不存在索引清單中的時間切片選取範圍
  • ts.truncate(after='1/9/2001')

重複索引時間序列

  • ts.index.unique

    傳回False表示不唯一
  • 對非唯一時間拽進行聚合

    ts.groupby(level=0).mean()

日期的範圍,頻率,移動

生成時間範圍

index=pd.date_range('4/1/2012','6/1/2013')
index=pd.date_range(start='4/1/2012',periods=20)
index=pd.date_range(end='4/1/2012',periods=20)

index=pd.date_range(start='4/1/2012 12:56:31',periods=20) #時間拽會被保留

index=pd.date_range(start='4/1/2012 12:56:31',periods=20,normalize=True) #把時間設定為0點 
           

頻率和日期偏移

頻率類型

from pandas.tseries.offsets import Hour,Minute
hour=Hour()
hour=Hour(4)
Hour(2)+Minute(30) #頻率加法,範圍更小的機關類型

index=pd.date_range(start='4/1/2012 12:56:31',periods=20,freq='4h') #頻率為4小時
index=pd.date_range(start='4/1/2012 12:56:31',periods=20,freq='1h30min') #頻率為4小時
index=pd.date_range('1/1/2012','1/1/2013',freq='BM') #設定頻率 每月最後一個工作日
index=pd.date_range('1/1/2012','1/1/2013',freq='WOM-3FRI') #設定頻率 每月的第3個星期5
           

偏移

ts/ts.shift(1)-1 #計算百分比,正數時資料下移,負數時資料上移

ts.shift(2,freg='M') #移動索引,正數時索引上移,,負數時索引下移,可以了解為資料移動并去除NA值索引

now=datetime.now()
now+MonthEnd() #傳回目前月的最後一天
now+MonthEnd(2) #傳回下個月的最後一天

MonthEnd().rollforward(now) #傳回目前月的最後一天
MonthEnd().rollback(now) #傳回上一個月的最後一天

ts.groupby(MonthEnd().rollforward).mean() #按月分組統計
ts.resample('M',how='mean') #按月分組統計
           

時間序列的基本頻率

别名 偏移量類型 說明
D Day 每月曆日
B BusinessDay 每工作日
H Hour 每小時
T或min Minute 每分鐘
S Second 每秒
L或ms Milli 每毫秒(千分之一秒)
U Micro 每微妙(百萬分之一秒)
M MonthEnd 每月最後一個月曆日
BM BusinessMonthEnd 每月最後一個工作日
MS MonthBegin 每月第一個月曆日
BMS BusinessMonthBegin 每月第一個工作日
W-MON Week 每周,指定起算的星期,(MON,TUE,WED,THU,FRI,SAT,SUN)
WOM-1MON WeekOfMonth 産生每月的第幾個星期幾
Q-JAN QuarterEnd 每季度,每年以指定月份結束,标記為指定月最後一個月曆日,(JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC)
BQ-JAN BusinessQuarterEnd 每季度,每年以指定月份結束,标記為指定月最後一個工作日
QS-JAN QuarterBegin 每季度,每年以指定月份結束,标記為指定月第一個月曆日
BQS-JAN BusinessQuarterBegin 每季度,每年以指定月份結束,标記為指定月第一個工作日
A-JAN YearEnd 每年,指定結束月,标記為指定月最後一個月曆日
BA-JAN BusinessYearEnd 每年,指定結束月,标記為指定月最後一個工作日
AS-JAM YearBegin 每年,指定結束月,标記為指定月第一個月曆日
BAS-JAM BusinessYearBegin 每年,指定結束月,标記為指定月第一個工作日

時區處理

  • 不同時區的運算時,實際時間拽用UTC存儲

時區的轉換

tz_localize和tz_convert是DateTimeIndex的執行個體方法

import pytz

pytz.common_timezones[-5:] #擷取時區名稱

pytz.timezone('US/Eastern') #擷取時區對象

index=pd.date_range('3/9/2012',periods=10,freq='D',tz='UTC') #設定時區集

ts.tz_localize('UTC') #本地化的設定,把什麼實際設定為本地

ts.tz_convert('US/Eastern') #時區轉換
           

Timestamp對象與時區

stamp=pd.Timestamp('2011-03-12 04:00')
stamp=pd.Timestamp('2011-03-12 04:00',tz='UTC')
stamp.tz_localize('UTC')
stamp.tz_convert('US/Eastern')
stamp.value #傳回1970年1月1日算起的納秒數
stamp+Hour()
           

時期

pd.Period('2007',freq='A-DEC') #生成時期對象

pd.period_range('2006','2009',freq='A-DEC') #建立時期範圍 傳回PeriodIndex

pd.PeriodIndex(['2001Q3','2002Q2','2003Q3'],freq='Q-DEC') #建立PeriodIndex

pd.PeriodIndex(year=data.year,quarter=data.quarter,freq='Q-DEC') #合并兩列時間
           

時期的頻率轉換

pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
  • PeriodIndex和TimeSeries的頻率轉換
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖

按季度計算的時期頻率

pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖

Timestamp與Period的轉換

ts.to_period('M') 

to_timestamp(how='end')
           

重采樣及頻率轉換

pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
  • 降采樣
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
  • 升采樣
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
  • convention
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
  • OHLC重采樣
    pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖

resample方法的參數

參數 說明
rule 表示重采樣頻率的字元串或DataOffset類型
how 用于産生聚合值得函數名或函數清單,‘mean’,‘ohlc’,np.max,預設為mean,還有first,last,median,max,min等
axis 重采樣軸,預設0
fill_method 內插補點方式ffill,bfill
closed 設定閉合(包含)端,預設為right
label 設定聚合标簽,預設right
loffset 面元标簽校正值,如‘-1s’/Second(-1)
limit 允許填充最大時期數
kind 聚合到時期(period)或時間拽(timestamp),預設聚合元索引類型
convention 高頻轉換時采用的約定,預設為end,還有start

時間序列繪圖

df.ix['2009'].plot()
ser.ix['01-2001':'03-2011'].plot()
           

移動視窗函數

#250日均線
pd.rolling_mean(ser,250).plot()
#250每日标準差
pd.rolling_std(ser,250,min_periods=10)
           

移動視窗和指數權重函數

函數 說明
rolling_count 傳回各視窗非na觀測值的數量
rolling_sum 移動視窗的和
rolling_mean 平均值
rolling_median 中位數
rolling_var,rolling_std 方差,标準差
rolling_skew,rolling_kurt 偏度,峰度
rolling_min,rolling_max 最小值,最大值
rolling_quantile 指定百分位/樣本分位數位置的值
rolling_corr,rolling_cov 相關系數,協方差
rolling_apply 對移動視窗應用普通數組函數
ewma 指數權重移動平均
ewmvar,ewmstd 指數權重移動方差,标準差
ewmcorr,ewmcov 指數權重移動相關系數,協方差