数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
九、时间序列
Pandas
提供了表示时间点、时间段、时间间隔等三种与时间有关的类型,以及元素为这些类型的索引对象。pandas
还提供了许多与时间序列相关的函数。
1. Python 中的时间
Python
中,关于时间、日期处理的库有三个:time
、datetime
、Calendar
。其中:datetime
又有datetime.date/datetime.time/datetime.datetime
三个类
1.1 时区
- 所有的时间都有一个时区。同样一个时间戳,根据不同的时区,它可以转换成不同的时间。
pytz
模块的common_timezones
可以获取常用的表示时区的字符串。你可以通过pytz.timezone('timezone_str')
来创建时区对象。
1.2 time 模块
time
模块中,时间有三种表现形式:Unix
时间戳。指的是从1970
年以来的秒数- 本地时间的
struct_time
形式:一个命名元组,第一位为年、第二位为月.... UTC
时间的struct_time
的形式:类似于上面的,只是为UTC
时间。区别在于:前者是本地时间local time
,后者是UTC
时间
查看当前时间的三种表现形式:
Unix
时间戳:time.time()
local struct_time
:time.localtime()
utc struct_time
:time.gmtime()
三种格式之间的转换:
timestamp--->local time
:time.localtime(time_stamp)
timestamp--->utc time
:time.gmtime(time_stamp)
local time--->timestamp
:time.mktime(local_time)
utc time---> timestamp
:calendar.timegm(utc_time)
三种格式的时间转换为字符串:
timestamp
:time.ctime(time_stamp)
local struct_time time/utc struct_time time
:time.asctime(struct_time)
- 对于
local struct_time time/utc struct_time time
:你也可以使用time.strftime(format_str,struct_time)
来自定义格式化串。其中format_str
为格式化串。
字符串转换为
struct_time
:time.strptime(time_str,format_str)
。其中format_str
为格式化串。查看当前时区:
time.timezone
。它返回的是距离UTC
时间的距离(单位为秒)(>0,在美洲;<=0,在大多数欧洲,亚洲,非洲)。你无法通过修改它的值来修改时区。time
模块使用的是系统的时区。
1.3 datetime 模块
datetime
模块中主要包含四个类:datetime.time
:时间类。只包含时、分、秒、微秒等时间信息datetime.date
:日期类。值包含年月日星期等日期信息datetime.datetime
:日期时间类。包含上述两者的全部信息datetime.timedelta
:日期时间间隔类,用来表示两个datetime
之间的差值。
datetime.time
的构造函数为:xxxxxxxxxx
time([hour[, minute[, second[, microsecond[, tzinfo]]]]])其中
tzinfo
就是时区对象。0<=hour<24
,0<=minute<60
,0<=second<60
,0<=microsecond<1000000
,否则抛出异常。tzinfo
默认为None
属性有:
hour/minute/second/microsecond/tzinfo
方法有:
time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
:替换对应的值,返回一个新的对象time.isoformat()
:返回一个ISO 8601
格式的字符串。time.strftime(format)
:格式化datetime.time
对象time.tzname()
:如果时区为为None
,则返回None
。否则返回时区名称
datetime.date
的构造函数为:xxxxxxxxxx
datetime.date(year, month, day)month
取值为[1,12]
;day
取值为[1,num]
,num
取决于指定的年和月有多少天
类方法有:
date.today()/date.fromtimestamp(timestamp)
属性有:
year/month/day
方法有:
- 运算:
date1-date2
、date1+timedelta
、date1-timedelta
、date1<date2
date.replace(year,month,day)
:替换掉对应值,返回新对象date.timetuple()
:返回一个time.struct_time
类型的元组date.weekday()
:返回代表星期几的数字。0
为周日date.isoweekday()
:返回代表星期几的数字。7
为周日date.isocalendar()
:返回一个元组(ISO year,IOS week num,ISO weekday)
date.isoformat()
:返回一个ISO 8601
格式的字符串。date.ctime()
:等价于time.ctime(time.mktime(d.timetuple()))
date.strftime(format)
:格式化datetime.date
对象
datetime.datetime
的构造函数为:xxxxxxxxxx
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)类方法有:
datetime.today()
:返回当前的时间日期datetime.now(tz=None)
:返回指定时区当前的时间日期。如果tz=None
,则等价于datetime.today()
datetime.utcnow()
:返回当前的UTC
时间日期datetime.fromtimestamp(timestamp, tz=None)
:根据时间戳,创建指定时区下的时间日期。datetime.utcfromtimestamp(timestamp)
:根据时间戳,创建UTC
下的时间日期。datetime.combine(date, time)
:从date
和time
对象中创建datetime
datetime.strptime(date_string, format)
:从字符串中创建datetime
属性有:
year/month/day/hour/minute/second/microsecond/tzinfo
方法有:
- 运算:
datetime1-datetime2
、datetime1+timedelta
、datetime1-timedelta
、datetime1<datetime2
datetime.date()
:返回一个date
对象datetime.time()
:返回一个time
对象(该time
的tzinfo=None
)datetime.timetz()
:返回一个time
对象(该time
的tzinfo
为datetime
的tzinfo
)datetime.replace([year[, month[, day[, hour[, minute[, second
[, microsecond[, tzinfo]]]]]]]])
:替换掉指定值,返回新对象datetime.astimezone(tz=None)
:调整时区。如果tz=None
,则默认采用系统时区。注意,调整前后的UTC
时间是相同的。datetime.tzname()
:返回时区名字datetime.timetuple()
:返回一个time.struct_time
这样的命名元组datetime.utctimetuple()
:返回一个time.struct_time
这样的命名元组,注意它是在UTC
时间下的,而不是local time
下的datetime.timestamp()
:返回一个时间戳datetime.weekday()
:返回代表星期几的数字。0
为周日datetime.isoweekday()
:返回代表星期几的数字。7
为周日datetime.isocalendar()
:返回一个元组(ISO year,IOS week num,ISO weekday)
datetime.isoformat(sep='T')
:返回一个ISO 8601
格式的字符串。datetime.ctime()
:等价于time.ctime(time.mktime(d.timetuple()))
datetime.strftime(format)
:格式化datetime.datetime
对象。
注意:不能将
tzinfo=None
和tzinfo!=None
的两个datetime
进行运算。下面是常用的格式化字符串的定义:
'%Y'
:4位数的年'%y'
:2位数的年'%m'
:2位数的月[01,12]
'%d'
:2位数的日[01,31]
'%H'
:小时(24小时制)[00,23]
'%I'
:小时(12小时制)[01,12]
'%M'
:2位数的分[00,59]
'%S'
:秒[00,61]
,61
秒用于闰秒'%w'
:用整数表示的星期几[0,6]
,0 表示星期日'%U'
:每年的第几周[00,53]
。星期天表示每周的第一天。每年的第一个星期天之前的那几天被认为是第 0 周'%W'
:每年的第几周[00,53]
。星期一表示每周的第一天。每年的第一个星期一之前的那几天被认为是第 0 周'%z'
:以+HHMM
或者-HHMM
表示的UTC
时区偏移量。如果未指定时区,则返回空字符串。'%F'
:以%Y-%m-%d
简写的形式'%D'
:以%m/%d/%y
简写的形式'%a'
:星期几的简称'%A'
:星期几的全称'%b'
:月份的简称'%B'
:月份的全称'%c'
:完整的日期和时间'%q'
:季度[01,04]
timedelta
代表一段时间。其构造:xxxxxxxxxx
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)在内部,只存储秒、微秒。其他时间单位都转换为秒和微秒。
实例属性(只读):
days/seconds/microseconds
实例方法:
timedelta.total_seconds()
:返回总秒数。
2. 时间点 Timestamp
时间点:
Timestamp
对象从Python
的datetime
类继承,它表示时间轴上的一个点。xxxxxxxxxx
pd.Timestamp(ts_input=<object object at 0x0000000001E8F340>, freq=None, tz=None, unit=None, year=None, month=None, day=None, hour=None, minute=None, second=None, microsecond=None, tzinfo=None, offset=None)参数:
ts_input
:一个datetime-like/str/int/float
,该值将被转换成Timestamp
freq
:一个字符串或者DateOffset
,给出了偏移量tz
:一个字符串或者pytz.timezone
对象,给出了时区unit
:一个字符串。当ts_input
为整数或者浮点数时,给出了转换单位offset
:废弃的,推荐使用freq
- 其他的参数来自于
datetime.datetime
。它们要么使用位置参数,要么使用关键字参数,但是不能混用
属性有:
year/month/day/hour/minute/second/microsecond/nanosecond
,这些属性都为整数tzinfo
:时区信息(默认为None
),它是一个datetime.tzinfo
对象dayofweek/dayofyear/days_in_mounth/freqstr/quarter/weekofyear/...
value
:保存的是UTC
时间戳(自UNIX
纪元1970年1月1日以来的纳秒数),该值在时区转换过程中保持不变
类方法有:
combine(date, time)
:通过datetime.date
和datetime.time
创建一个Timestamp
fromtimestamp(ts)
:通过时间戳创建一个Timestamp
now(tz=None)
:创建一个指定时区的当前时间。doday(tz=None)
:创建一个指定时区的当前时间。utcfromtimestamp(ts)
:从时间戳创建一个UTC Timestamp
,其tzinfo=None
utcnow()
:创建一个当前的UTC Timestamp
,其tzinfo=UTC
方法有:
.astimezone(tz)/.tz_convert(tz)
:将一个tz-aware Timestamp
转换时区.isoformat(sep='T')
:返回一个ISO 8601
格式的字符串。.normalize()
:将Timestamp
调整到午夜(保留tzinfo
)replace(**kwds)
:调整对应值,返回一个新对象.to_period(self, freq=None)
:返回一个Period
对象`.tz_localize(self, tz, ambiguous='raise', errors='raise')
:将一个tz-naive Timestamp
,利用tz
转换为一个tz-aware Timestamp
.to_pydatetime(...)
:转换为python datetime
对象.to_datetime64(...)
:转换为numpy.datetime64
对象- 从
datetime.date/datetime.datetime
继承而来的方法
默认情况下,
pands
中的Timestamp
是tz-naive
,即tz
字段为None
。Timestamp
提供了方便的时区转换功能。如果tz
非空,则是tz-aware Timestamp
。不同时区的时间可以比较,但是naive Timestamp
和localized Timestamp
无法比较。Timestamp
的减法,要求两个Timestamp
要么都是同一个时区下,要么都是tz-naive
的。DateOffset
对象:是一个表示日期偏移对象。Timestamp
加一个日期偏移,结果还是一个Timestamp
对象。其声明为:xxxxxxxxxx
pd.DateOffset(n=1, normalize=False, **kwds)通常我们使用的是其子类(它们位于
pandas.tseries.offsets
中):Day
:日历日BusinessDay
:工作日Hour
:小时Minute
:分钟Second
:秒Milli
:毫秒Micro
:微秒MonthEnd
:每月最后一个日历日BusinessMonthEnd
:每月最后一个工作日MonthBegin
:每月第一个日历日BusinessMonthBegin
:每月第一个工作日Week
:每周几
Day(2)
:表示两个工作日。DateOffset
对象可以加在datetime/Timestamp
对象上。如果是MonthEnd
这种加上Timestamp
,则第一次增量会将原日期向前滚动到符合频率规则的下一个日期。- 你可以通过
DateOffset.rollforward(time_stamp)
、DateOffset.rollback(time_stamp)
来显式地将日期向前或者向后滚动
利用
str(dt_obj)
函数或者datetime.strftime(format_str)
方法,可以将datetime
对象和Timestamp
对象格式化为字符串。而利用datetime.strptime(dt_str,format_str)
类方法,可以从字符串中创建日期。其中dt_str
为日期字符串,如'2011-11-12'
;format_str
为格式化字符串,如'%Y-%m-%d'
。datetime.strptime
是对已知格式进行日期解析的最佳方式。- 对于一些常见的日期格式,使用
dateutil
这个第三方包中的parser.parse(dt_str)
,它几乎可以解析所有的日期表示形式。 pandas.to_datetime()
方法可以解析多种不同的日期表示形式,将字符串转换为日期。对于标准日期格式的解析非常快。如果发现无法解析(如不是一个日期),则返回一个NaT
(Not a Time
),它是时间戳数据中的NA
值。
Timedelta
对象:表示时间间隔。它等价于datetime.timedelta
类。xxxxxxxxxx
pd.Timedelta(value=<object object at 0x00000000004BF340>, unit=None, **kwargs)参数:
value
:一个Timedelta
对象,或者datetime.timedelta
,或者np.timedelta64
、或者一个整数,或者一个字符串。指定了时间间隔unit
:一个字符串,指明了当输入时整数时,其单位。可以为'D'/'h'/'m'/'s'/'ms'/'us'/'ns'
days/seconds/microseconds/nanoseconds
:都是数值。给出了某个时间单位下的时间间隔
方法:
to_timedelta64()
:返回一个numpy.timedelta64
类型(按照纳秒的精度)total_seconds()
:返回总的时间间隔,单位秒(精度为纳秒)to_pytimedelta()
:返回一个datetime.timedelta
对象
属性:
components
:返回各成分的命名元组days/seconds/microseconds/nanoseconds
:返回各个成分delta
:返回总的时常(纳秒计)
一个时间间隔有天数、秒数等等属性。注意:所有的这些值与对应的单位相乘的和,才是总的时间间隔。
两个
Timestamp
相减可以得到时间间隔Timedelta
DateOffset
也一定程度上表示时间间隔,但是DateOffset
更侧重于按照某个固定的频率的间隔,比如一天、一个月、一周等。
3. 时间段 Period
Period
表示一个标准的时间段(如某年,某月)。时间段的长短由freq
属性决定。xxxxxxxxxx
pd.Period(value=None, freq=None, ordinal=None, year=None, month=None, quarter=None, day=None, hour=None, minute=None, second=None)参数:
value
:一个Period
对象或者字符串(如'4Q2016'
),它表示一个时区段。默认为None
freq
:一个字符串,表示区间长度。可选的值从下面函数获取:pandas.tseries.frequencies._period_code_map.keys()
pandas.tseries.frequencies._period_alias_dictionary()
- 其他的参数和前面的其他类的构造函数类似。其中
quarter
表示季度。
属性:
day/dayofweek/dayofyear/hour/minute/quarter/second/
year/week/weekday/weekofyear/year
:对应的属性end_time
:区间结束的Timestamp
。start_time
:区间开始的Timestamp
freq
方法:
.asfreq(freq,how)
:转换为其他区间。其中freq
为字符串。how
可以为'E'/'end'
,表示包含区间结束;'S'/'start'
表示包含区间开始。.now(freq)
:返回当期日期对应freq
下的Period
strftime(format)
:给出Period
的格式化字符串表示to_timestamp(freq,how)
:转换为Timestamp
。
pands
中的频率是由一个基础频率和一个倍数组成。- 基础频率通常以一个字符串别名表示,如
'M'
表示每月,'H'
表示每小时。 - 对于每个基础频率,都有一个
DateOffset
对象与之对应。如pandas.tseries.offsets
中的Hour/Minute
。Hour(4)
表示日期偏移为 4小时。 - 倍数为基础频率之前的数字,如
'4H'
。也可以组合多个频率4H30min
有些频率描述的时间点并不是均匀间隔的。如
'M'
就取决于每个月的天数。下面是一些常用的基础频率'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'...'W-TUE
:偏移量类型为Week
,为指定星期几(MON/TUE/WED/THU/FRI/SAT/SUN
)开始算起,每周
- 基础频率通常以一个字符串别名表示,如
调用
Timestamp
对象的.to_period(freq)
方法能将时间点转化为包含该时间点的时间段。Period
的.asfreq()
方法可以实现时间段的频率转换。创建
Period
时,我们可以传入一个Timestamp
的各分量(由year/month...
等提供)。创建的Period
是包含该时刻,且指定频率。在使用Timestamp.to_period(freq)
也是如此。给定一个频率的
Period
,如果转换到更低频的Period
,则非常简单:返回指定频率下的包含本Period
的那个Period
即可。如果想转换到更高频的Period
,则由于在本Period
下,对应了很多个高频的Period
,则返回哪一个,由how
参数指定:how=S
:返回最开头的那个Period
how=E
:返回最末尾的那个Period
而
Period.to_timestamp(freq,how)
方法中,我们首先进行时间段的频率转换,然后提取该频率的Period
开始处的Timestamp
如果两个
Period
对象有相同的频率,则它们的差就是它们之间的单位数量。
4. DatetimeIndex
DatetimeIndex
是一种索引,它的各个标量值是Timestamp
对象,它用numpy
的datetime64
数据类型以纳秒形式存储时间戳。xxxxxxxxxx
pd.DatetimeIndex(data=None, freq=None, start=None, end=None, periods=None, copy=False, name=None, tz=None, verify_integrity=True, normalize=False, closed=None, ambiguous='raise', dtype=None, **kwargs)data
:一个array-like
对象,给出了各个时间copy
:一个布尔值,如果为True
则拷贝基础数据freq
:一个字符串或者DateOffset
对象,给出了频率start
:一个datetime-like
,指定了起始时间。如果data=None
,则使用它来生成时间periods
:一个整数(大于0),指定生成多少个时间。如果data=None
,则使用它来生成时间end
:一个datetime-like
,指定了结束时间。如果data=None
且periods=None
,则使用它来生成时间closed
:一个字符串或者None
。用于指示区间的类型。可以为'left'
(左闭右开),'right'
(左开右闭),None
(左闭右闭)tz
: 一个字符串,指定了时区。如果非空,则返回的是localized DatetimeIndex
name
:指定了Index
的名字
pandas.date_range()
函数可以生成指定长度的DatetimeIndex
xxxxxxxxxx
pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False,name=None, closed=None, **kwargs)各参数意义参考
DatetimeIndex
的构造函数。对于以
DatetimeIndex
为索引的Series
,我们可以通过指定Timestamp
切片来截取指定时间区间的数据(也可以是对应的字符串来指定Timestamp
)。注意:这里的Timestamp
可以并不是DatetimeIndex
的key
。DatetimeIndex
的方法有:(DatetimeIndex
继承自Index
,因此它有Index
的所有方法)indexer_at_time(time, asof=False)
:返回指定time
的位置indexer_between_time( start_time, end_time, include_start=True,
include_end=True)
:返回指定的两个时间之间的索引的位置normalize()
:将时间调整到午夜to_period( freq=None)
:以指定freq
转换到PeriodIndex
to_perioddelta( freq)
:计算不同索引值的Timedelta
,然后转换成一个TimedeldaIndex
to_pydatetime
/tz_convert
/tz_localize
:对每个时间使用Timestamp
对应的方法
任何
Timestamp
的属性都可以作用于DatetimeIndex
。
5. PeriodIndex
如果将一个
Period
序列作为索引,则该索引就是PeriodIndex
类型。其各位置的值为Period
对象。xxxxxxxxxx
pd.PeriodIndex(data=None, ordinal=None, freq=None, start=None, end=None, periods=None, copy=False, name=None, tz=None, dtype=None, **kwargs)data
:一个array-like
对象,给出了各个时间段copy
:一个布尔值,如果为True
则拷贝基础数据freq
:一个字符串或者period
对象,给出了频率start
:一个period-like
,指定了起始时间段。如果data=None
,则使用它来生成时间段periods
:一个整数(大于0),指定生成多少个时间段。如果data=None
,则使用它来生成时间段end
:一个period-like
,指定了结束时间段。如果data=None
且periods=None
,则使用它来生成时间段year/month/quarter/day/hour/minute/second
:一个整数、array
或者Series
。通过它们可以组装出一个Period
序列。tz
: 一个字符串,指定了时区。如果非空,则返回的是localized DatetimeIndex
name
:指定了Index
的名字
pandas.period_range()
函数可以生成指定长度的PeriodIndex
xxxxxxxxxx
pd.period_range(start=None, end=None, periods=None, freq='D', name=None)参数意义参见
PeriodIndex
的构造函数。PeriodIndex
的方法有:(PeriodIndex
继承自Index
,因此它有Index
的所有方法)asfreq( freq=None, how='E')
:转换成另一种频率的时间段to_timestamp(self, freq=None, how='start')
:转成DatetimeIndex
tz_convert(self, tz)/tz_localize(self, tz, infer_dst=False)
:转成对应时区的DatetimeIndex
任何
Period
的属性都可以作用于PeriodIndex
。
6. resample 和频率转换
Series/DataFrame
有一个shift()
方法用于执行单纯的前移或者后移操作,:xxxxxxxxxx
Series/DataFrame.shift(periods=1, freq=None, axis=0)periods
:一个整数(可以为负的),指定移动的数量。对于时间序列,单位由freq
指定。freq
:一个DateOffset/timedelta
或者一个频率字符串。指定移动的单位。注意,如果为PeriodIndex
,则freq
必须和它匹配。axis
:为0/'index'
表示沿着0轴移动;为1/'columns'
表示沿着1轴移动
如果为时间序列,则该方法移动并建立一个新的索引,但是
Series/DataFrame
的值不变。对于非时间序列,则保持索引不变,而移动Series/DataFrame
的值。本质上,时间序列和非时间序列都是
index_i-->value_i
转换成index_i+n-->value_i
。只是时间序列截取的都是有效值,非时间序列截取了NaN
而已。重采样
resampling
指的是将时间序列从一个频率转换到另一个频率的处理过程。- 将高频数据转换到低频数据称作降采样。降采样时,待聚合的数据不必拥有固定的频率,期望的频率(低频的)会自动划分聚合的
bin
的边界。这些bin
将时间序列拆分为多个片段。这些片段都是半开放的,一个数据点只能属于一个片段,所有的片段的并集组成了整个时间帧。在对数据降采样时,只需要考虑两样: - 各个区间哪边是闭合的
- 如何标记各个聚合
bin
,用区间的开头还是结尾 - 将低频数据转换到高频数据称作升采样。将数据转换到高频时,就不需要聚合了,而是插值,默认引入缺失值。插值的填充和填充方式与
fillna/reindex
的一样。 - 在对时间段
Period
进行重采样时,升采样稍微麻烦点,因为你必须决定:哪个高频区间代表原区间。就像asfreq
一样,convention
可以设置为'end'/'start'
有些重采样并不划分到上述两者之中。比如将
W-WED
(每周三)转换到W-FRI
(每周五)。另外,由于Period
是时间区间,所以升采样和降采样的规则就比较严格:- 降采样中,目标频率必须包含原频率。如
Day->Month
,目标频率为每月,原频率为每天。 - 升采样中,原频率必须包含目标频率。如
Day->Hour
,目标频率为每小时,原频率为每天。
如果不满足这些条件,则会引发异常。
- 将高频数据转换到低频数据称作降采样。降采样时,待聚合的数据不必拥有固定的频率,期望的频率(低频的)会自动划分聚合的
resample
方法:xxxxxxxxxx
Series/DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None)rule
:一个字符串,指定了重采样的目标频率axis
:为0/'index'
表示沿着0轴重采样;为1/'columns'
表示沿着1轴重采样closed
:一个字符串,指定降采样中,各时间段的哪一端是闭合的。如果为'right'
,则是左开右闭区间;如果为'left'
,则是左闭右开区间label
:在降采样中,如何设置聚合值的标签。可以为'right'/'left'
(面元的右边界或者左边界)。如:9:30~9:35
这5分钟会被标记为9:30
或者9:35
how
:用于产生聚合值的函数名或者数组函数。可以为'mean'/'ohlc'/np.max
等。默认为'mean'
,其他常用的有:'first'/'last'/'median'/'ohlc'/'max'/'min'
。how
被废弃了,而是采用.resample().mean()
这种方案。convention
:当重采样时期时,将低频转换到高频所采用的约定。可以为's'/'start'
(用第一个高频)或者'e'/'end'
(用最后一个高频)loffset
:一个timedelta
,用于调整面元(bin
)标签。如'-1s'
,会将用于将聚合的结果标签调早1秒,从而更容易表示它代表哪个区间。比如12:00:00
你就难以判别是哪个区间,而11:59:59
就很容易知道它是那个区间。你也可以对调用结果对象使用
.shift()
方法来实现该目的,这样就不必设置loffset
了base
:一个整数,默认为0.用于聚合过程中,当频率可以整除1D
(比如4H
)时,第一个完整的分组从哪个元素开始的。如rule='4H'
,base=2
,则Series[0:1]
作为一个分组,Series[2:6]....
作为一个分组....on
:一个字符串,对于DataFrame
,它指定了重采样的列。该列必须是datetime-like
level
:一个字符串或者整数。对于MultiIndex
,该参数指定了被重采样的子索引fill_method
:一个字符串,指定升采样时,如何插值。如'ffill'/'bfill'
。默认不插值该参数被废弃。推荐使用
.resample().ffill()
这种方案。而limit
作为ffill()
的参数。limit
:一个整数。指定向前或者向后填充时,运行连续填充的最大单元数量kind
:一个字符串,指定聚合到时间段Period
还是时间戳Timestamp
。默认聚合到时间序列的索引类型
OHLC
重采样是计算bin
中的四个值:开盘值(第一个值)、收盘值(最后一个值)、最高值(最大值)、最低值(最小值)另一种降采样的办法是:使用
groupby
功能。如:xxxxxxxxxx
series.groupby(lambda x:x.month).mean()如果你想根据年份来聚合,则使用
x.year
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论