天天看点

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

     这篇文章是alexander

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

<b>【pandas起源与目标】</b>

1. 开源python库

2. 实际数据分析-<b>高速</b><b>/</b><b>高效</b><b>/</b><b>简单</b>

3. 无缝连接工作流

4. wes mckinney 2008年开始编写, 再到现在continuum analytics的anaconda

5. 定期更新的稳定项目

<b>【特征】</b>

1. 支持csv, excel, json, sql, sas,

clipboard, hdf5等数据格式

2. 数据清洗

3. 重塑(reshape)、数据合并(joins &amp; merge)、数据透视(pivot)

4.<b>数据可视化</b>

5. 良好支持jupyter notebooks (ipython)

6.<b>类似数据库操作</b>

7. 高性能

1. <b>dataseries</b>

&amp; dataframe

2. <b>i/o</b><b>(输入</b><b>/</b><b>输出)</b>

3.data

analysis &amp;aggregation<b>(数据分析</b><b>&amp;</b><b>聚合)</b>

4.indexes<b>(索引)</b>

5. <b>visualization</b><b>(可视化)</b>

6.interacting

with the data<b>(数据交互)</b>

note: 下面的例子都是在时间戳--温度数据上运行的,示例如下:<b></b>

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

得到:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

1. 使用<b>matplotlib</b><b>库</b>,.plot()

函数

2. 可定制,可扩展

3. 盒图、条形图、散点图等

4. 也可以使用bokeh库或seaborn库

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

1. <b>一维有标签数组结构</b>,可以存入任一种python的数据类型(integers,

strings, floating point numbers, python objects, etc.)

2. 序列的标签通常称为<b>索引(</b><b>index</b><b>)</b>

3. 如果index没给定,会自动创建()

4. pd.series()函数中的参数,如data, index和dtype, 均是可选的

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

<b>数据选择与访问方式</b>:

1. 可以通过<b>标签(</b><b>index</b><b>)</b>选择,也可以通过<b>位置</b>来选择<b>(从</b><b>0</b><b>开始)</b>;

2. 通过<b>切片</b><b>/</b><b>布尔索引</b>访问数据,例如:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

<b>二维有标签</b>数据结构,如2维numpy数组,关于索引,有如下规定:

1.如果没有指定索引,将会自动创建;

2.<b>索引可以重置或者替换</b>;

3. 类型:<b>位置,时间戳,时间范围,标签</b>…;

4.一个索引号可能会出现多次(<b>不唯一</b>)

<b>例</b><b>1</b>. 给列命名

输出:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

<b>例</b><b>2</b>. 对数据进行运算:

第3行仅仅是对temperature这一列进行了运算,则输出:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

而第4行和第6行为不存在的列(temperature f)赋值,创建新列(temperaturef),均输出:

<b>timestamp</b>

<b>temperature</b>

<b>temperature f</b>

<b>0</b>

2014-09-26t03:50:00

14.0

57.2

<b>1</b>

2014-08-10t05:00:00

<b>2</b>

2014-08-21t22:50:00

12.0

53.6

<b>3</b>

2014-08-17t13:20:00

16.0

60.8

<b>4</b>

2014-08-06t01:20:00

<b>例3</b>. 两列之间也可以直接进行运算,如

<b>ruleoftumb</b>

4.085714

4.466667

3.800000

series和dataframe的方法实际上并没有修改原始的series和dataframe,而是返回一个新的series或dataframe,可以使用<b>inplace</b>参数来决定<b>是否要用新结果替换掉原来的数据</b>。

原列名被替换,输出:

<b>bad_rule</b>

删除bad_rule列,使用新dataframe替代原dataframe

1. describe()

2. groupby()

3. groupby([]) &amp; unstack()

4. mean(), sum(), median(),…

<b>例1</b>. 创建新列:

<b>deviation</b>

-1.590951

-3.590951

0.409049

<b>例2</b>. 用groupby()分组

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

<b>例3</b>. 输出指定数据统计信息

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

nan表示空值,可以使用drop( )移除;也可以用<b>默认值替换</b>或者<b>前向填充</b><b>/</b><b>后向填充</b>

<b>例</b><b>1.</b> 使用isnull( )函数判断是否为空

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

<b>例2</b>. 删除缺失值:

false ,因为已经删除缺失值,并且<b>用删除之后的数据替换掉原数据</b>,所以判断是否存在空值时,返回false,即<b>不存在空数据</b>。

     在进行时间序列分析时,先将dataframe的索引值<b>由默认的数字索引变为时间戳索引</b>:

此时,dataframe变为如下形式:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

画出dataframe前100行,此时<b>图的横坐标不再是数值索引,而是时间戳</b>。如下:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

    此时,<b>对</b><b>dataframe</b><b>加入weekday</b><b>列和weekend</b><b>列</b>,

目前,已经得到每天的数据包括时间戳,摄氏温度,华氏温度,偏差以及周几和是否周末,统计输出如下:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

     那么就可以进一步<b>分析温度随着时间的变化趋势</b>,比如观察每周气温的变化情况:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

也可以<b>分析指定时间内的温度变化趋势</b>

<b></b>

<b><b></b></b>

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

      重采样是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法,分为降采样和升采样,将高频率数据聚合到低频率数据称为降采样(downsampling),将低频率转换到高频率称为升采样(upsampling)。

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

首先用dataframe进行<b>重采样</b>:

  输出:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

又如<b>对</b><b>series</b><b>进行降采样</b>:

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

<b>升采样</b>,采样频率从5分钟变到100秒,

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

note:

statsmodels是一个包含统计模型、统计测试和统计数据挖掘python模块。对每一个模型都会生成一个对应的统计结果。统计结果会和现有的统计包进行对比来保证其正确性。

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

     如上图所示,是某种商品的历史销售数据,为了更好地分析商品销售变化趋势,将销售时序数据分解为长期趋势、季节趋势和随机成分。statsmodels支持两类分解模型,加法模型和乘法模型。默认采用加法模型,即分解后的这3个趋势相加要等于原始数据。

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

在得到不同的分解成分后,就可以使用时间序列模型对各个成分进行拟合,进行商品销量预测,这对商家库存管理和销售是很有帮助的。

欧洲最大的python会议,欢迎参加。

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

作者介绍

即学即用:Pandas入门与时间序列分析楔子Part 1 Pandas基础功能Part2 时间序列分析(以时间戳为index的序列)尾声

为创业和业界提供咨询服务

europython

&amp; pyconde 的组织者和程序委员会主席

mongodb大师

曾在mongodb

world, europython, pydata等大会上作学术报告

以上为译文

文章原标题《introduction to pandas

and time series analysis》,作者:alexander c. s. hendorf,译者:李烽 审校:海棠-段志成

ps:中文译制pdf版食用更佳,可读性更强,见附件。