| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Python数据分析8-时间序列 -> 正文阅读 |
|
[人工智能]Python数据分析8-时间序列 |
? ? ? 目录 ????????在许多行业中,时间序列数据是一种重要的结构化数据类型。本章主要讲解datetime的数据类型及字符串的想换转换方法;时间序列的构造和使用放啊;日期和时期数据的使用方法;时间序列的频率转换与重采样。最后通过一个案例,讲解时间序列数据的处理与分析方法。 8.1datetime模块? ? ? ? 本节将讲解Python标准库中的datetime库的使用方法,以及datetime库的数据和字符串数据的转换方法。 8.1.1datetime的构造? ? ? ? Python的标准库datetime可用于创建时间数据类型。如下表所示为datetime库的时间数据类型。
? ? ? ? 其中date类数据可用于创建日期类数据,通过年、月、日来进行存储,如下图 ? ? ? ? ?time类数据用于存储时间数据,通过时、分、秒、毫秒进行存储,如下图 ? ? ? ? ?datetime类数据可以看做时date类和time类的组合,通过now方法可以查看当前的时间,如下图 ? ? ? ? ?timedelta类数据为两个datetime类数据的差,也可以通过daetime类对象加或减去timedelta类对象,以此获取新的datetime类对象,如下图 8.1.2数据转换? ? ? ? 在数据分析中,字符串和datetime类数据需要进行转换,通过str方法可以直接将datetime类数据转换为字符串 ? ? ? ? ?如果需要将datetime类数据转换为特定格式的字符串数据(格式化),需要使用strftime方法,如下图 ? ? ? ? ?下表所示为部分格式化编码
? ? ? ? 通过datetime.strptime方法可将字符串格式转换为datetime数据类型,如下图 ? ? ? ? ?在pandas中,可通过to_datetime方法将一列字符串数据转换为时间数据。以前面章节的示例为例,可以看出HireDate字段的数据类型为字符串 ? ? ? ? 通过to_datetime方法可以将HireDate字段进行转换,如下图,该数据为TimeStamp?(时间戳) 8.2时间序列基础? ? ? ? 时间序列是以时间戳为索引的Series或DataFrame。本节将讲解时间序列的构造方法,以及时间序列的索引和切片 8.2.1时间序列构造? ? ? ? pandas中的时间序列指的是以时间数据为索引的Series或DataFrame。如下图,为创建一个时间序列的Series ? ? ? ? ?创建的这个时间序列Series的索引为DatetimeIndex对象,如下图 ? ? ? ? 而DatetimeIndex对象的每个标量值是pandas的Timestamo对象,如下图,该对象以保存频率信息,后面会 讲解其用途。 ? ? ? ? 跟普通的series一样,不同索引的时间序列的算数运算会按照索引对齐,如下图 8.2.2索引与切片? ? ? ? 时间序列的索引用法和pandas基础数据类型的用法是一样的,如下图 ? ? ? ? 传入一个可用于解释的日期字符串,同样也可以完成索引工作,这是一种比较方便的用法,如下图 ? ? ? ? ? 切片的使用方法和pandas基础数据用法也是一样的,如下图所示 ? ? ? ? 同样的传入日期字符串或者datetime类数据也可以完成切片。由于大部分时间序列数据是按照时间先后顺序进行排序的,如果索引值不在该时间序列中也可以实现切片,如下图 ? ? ? ? 对于长时间序列来说,可以通过年、月来轻松获取时间序列的切片,如下图 注:时间序列的DataFrame的索引和切片使用方法同上面一样,不再赘述。 ? ? ? ? 对于具有重复索引的时间序列,可通过索引的is_unique属性进行检查,如下图 ? ? ? ? 对重复索引的时间序列进行索引时,产生的是切片,如下图 ? ? ? ? 这样可通过groupby函数对其进行聚合,如下图 8.3日期? ? ? ? 本节将讲解如何生成指定长度的DatetimeIndex,时间序列中的基础频率及如何移动时间数据。 8.3.1日期范围? ? ? ? 使用pd.date_range函数可以创建指定长度的DatetimeIndex索引,如下图 ? ? ? ? 如下图,默认情况下,产生的DatetimeIndex索引的间隔为天,也就是说,时间频率是填。通过freq参数可以使用其他频率,如下图 ? ? ? ? 在pd.date_range函数中传入起始或者结束如期,在传入一个表示一段时间的数据,就可以创建指定长度的DatetimeIndex索引,如下图 ? ? ? ? 默认情况下,pd.date_range函数会保留完整的时间信息,但可以通过normalize参数使其规范化,如下图所示 8.3.2频率与移动? ? ? ? 时间序列的频率由基础频率和日期偏移量组成。例如,通过4H就可以创建4个小时为频率的DatetimeIndex索引,如下图 ? ? ? ? 更为复杂的频率字符串,也可以被搞笑解析为相对应的频率,如下图 ? ? ? ? ?时间序列的常用基础频率如下表
? ? ? ? ?移动数据就是沿着时间索引将数据向前或者向后移动。通过shift方法可以完成移动数据的操作,如下图 ? ? ? ? 这种单纯的移动不会修改索引,而是使部分数据被丢弃。如果在shift方法中传入参数,这样就是修改索引了,如下图
|
参数 | 使用说明 |
freq | 转换频率 |
axies=0 | 重采样的轴 |
closed=’right | 在降采样中,设置各时间段哪端是闭合的 |
label=‘right’ | 在降采样中,如何设置聚合值的标签 |
loffset=None | 设置时间偏移量 |
kind=None | 聚合到时期或时间戳,默认为时间序列得索引类型 |
convention=None | 升采样所采用得约定(start或end)。默认为end |
? ? ? ? 在降采样中,重点需要考虑得是closed和label参数,这两个参数分别表示哪边区间是闭合的,哪边用于标记。如图所示为将两个参数值都设置为right
? ? ? ? 如下图所示将closed和label参数值均设为left。大家可以思考一下这两个参数的变化带来的影响。多看两遍就可以掌握了,其实很简单。
? ? ? ? ? 通过设置loffset日期偏移量,也可以看出其时间戳所属的区间,如下图,红色的是未来改版的警告信息,大家按照他那个写法改改就好。
? ? ? ? 在升采样中用到的就不再是聚合,而是需要对缺失值进行填充,其填充方法与前面介绍的fillna一样,如下图所示,也可以设置填充的个数。
? ? ? ? 该案例使用的数据及可在Kaggle(https://www.kaggle.com/c/bike/-sharing-demand/data)网站中下载,这里下载训练集。
? ? ? ? 数据说明:datetime为租赁时间:season为季节,1为春季,2为夏季以此类推:holiday表示是否为假期:0为非假期,1为假期:workingday与holday值正好相反,0为非工作日,1为工作日:weather为天气情况,数字越大,天气越差;temp和atemp为气温;humidity为湿度;windspeed为风俗;casual为普通用户;registered为注册用户;count为租赁自行车数量。读取文件如下:
? ? ? ? 本次分析围绕时间提出问题:时间段与自行车租赁的关系情况
? ? ? ? 查看缺失值,如下图可以看出没有缺失值。
? ? ? ? ?然后查看各字段数据类型,发现datetime字段不是时间数据类型,如下图
? ? ? ? ?此时利用pd.to_datetime函数将其转换为datetime类数据,如下图
? ? ? ? 最后将datetime字段设置为DataFrame的索引,这样就成为了时间序列数据,如下图
? ? ? ? 首先利用groupby方法也可以进行降采样,这里降采样到年份数据,如下图可以看出,2012年的租赁要高于2011年
? ? ? ? 然后通过下面的代码绘制柱状图:
? ? ? ? 接着再利用resample方法,将数据重采样到月份,类型为时期类型,如下图
? ? ? ? 然后利用plot方法绘制时间序列图,如下图由图可知,2011年和2012年去世大致相同,前几个月增加,到了5、6月达到峰值,再到9月份减少
? ? ? ? 为了分析每天和每小时的租赁分布情况,对日(day)和时(hour)的数据进行单独存储如下图
? ? ? ? 然后对day字段进行分组统计,如下图
注意:训练数据只有前19天
? ? ? ? 进行可视化
? ? ? ? ?同样的,在对hour字段和weather字段进行上述处理。这里不再展示。
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 12:33:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |