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