不管是在金融学、经济学的社会学科领域,还是生态学、系统神经的自然学科领域,时间序列数据都是一种重要的结构化数据形式。
jupyter notebook在pycharm中的使用
我也是最近无意中才发现,jupyter notebook可以在pycharm中使用的。在写教学文档方面,因为jupyter有着像命令行一样即时输出的特点,比建立工程运行的方式要方便许多。将这个小功能推荐给大家,也建议大家在学习python的时候多用用jupyter。
基础
从这个小例子也可以看出jupyter notebook的好处,非常适合新手学习python的时候使用。同时这个例子也是最基础的时间序列类型。
datetime以毫秒形式存储日期和时间,两个日期相减得到所差毫秒数,同时也可以换算成天数和小时数。
在日常生活中,时间通常是以字符串的形式保存的,python中也提供了字符串和datetime相互转换的方法。
以下是常用的格式化编码。
代码 | 说明 |
---|---|
%Y | 4位数的年 |
%y | 2位数的年 |
%m | 2位数的月 |
%d | 2位数的日 |
%H | 24小时制的时 |
%I | 12小时制的时 |
%M | 2位数的分 |
%S | 秒[0, 61], 60、61用于闰秒 |
%w | 用整数表示的星期几 |
通过已知格式对日期进行解析当然最准确的做法,但是这种做法过于准确而显得比较麻烦。这种情况下,可以这样做。
从上图可以看出,parse解析器的功能相当强大,很多格式随意的时间字符串都可以解析成正确的时间。当然,遗憾的是,中文不可以。
下面我们来建立一个时间序列的数据集。
然后我们开始学习如何索引、选取、以及构造子集。
一门语言有一门语言的特色,其实pandas、numpy、还有现在学习的时间序列,它们对数据的索引选取都是大同小异的。只要掌握其中一个,其他包的索引基本也就都会了。
这一点在不同包的函数命名上也有所体现。细心的朋友可以发现,我并没有介绍data_range()这个函数,其实它和numpy中的range()是一样的,只有一些细节,参数会有变化。
比如。
freq这个参数可以决定取样的类型,BM就代表取每个月的最后一天。怎么说呢,越用越感觉到python的完善与强大。freq这个参数可以选择的类型有很多。如下是我经常用到总结下来的。
代码 | 说明 |
---|---|
D | 天 |
B | 工作日 |
H | 时 |
T | 分 |
S | 秒 |
L | 毫秒 |
U | 微秒 |
BM | 每月最后一个工作日 |
移动与滞后数据也是一个很常见的操作。
重采样、频率转换
上面介绍了一些有关时间序列的基础操作,接下来介绍一些进阶内容。
在做实验的时候,我们最常涉及的就是采样。
我们发现这段程序所实现的功能是,每五分钟采样,并将该五分钟内的值求和赋给新采样的频率。
以上是降采样,升采样是一样的,只不过可能会有一些插值操作,这里不予介绍。