Python数据分析8-时间序列

2023-10-26

     

目录

8.1datetime模块

8.1.1datetime的构造

8.1.2数据转换

8.2时间序列基础

8.2.1时间序列构造

8.2.2索引与切片

8.3日期

8.3.1日期范围

8.3.2频率与移动

​8.4时期

8.4.1时期基础

8.4.2频率转换

8.4.3时期数据转换

 8.5频率转换与重采样

8.5.1重采样

8.5.2降采样

​8.5.3升采样

8.6综合示例-自行车租赁数据

8.6.1数据来源

8.6.2定义问题

8.6.3数据清洗

8.6.4数据探索


        在许多行业中,时间序列数据是一种重要的结构化数据类型。本章主要讲解datetime的数据类型及字符串的想换转换方法;时间序列的构造和使用放啊;日期和时期数据的使用方法;时间序列的频率转换与重采样。最后通过一个案例,讲解时间序列数据的处理与分析方法。

8.1datetime模块

        本节将讲解Python标准库中的datetime库的使用方法,以及datetime库的数据和字符串数据的转换方法。

8.1.1datetime的构造

        Python的标准库datetime可用于创建时间数据类型。如下表所示为datetime库的时间数据类型。

类型 使用说明
date 日期(年月日)
time 时间(时分秒毫秒)
datetime 日期和时间
timedelta 两个datetime的差(日秒毫秒)

        其中date类数据可用于创建日期类数据,通过年、月、日来进行存储,如下图

         time类数据用于存储时间数据,通过时、分、秒、毫秒进行存储,如下图

         datetime类数据可以看做时date类和time类的组合,通过now方法可以查看当前的时间,如下图

         timedelta类数据为两个datetime类数据的差,也可以通过daetime类对象加或减去timedelta类对象,以此获取新的datetime类对象,如下图

8.1.2数据转换

        在数据分析中,字符串和datetime类数据需要进行转换,通过str方法可以直接将datetime类数据转换为字符串

         如果需要将datetime类数据转换为特定格式的字符串数据(格式化),需要使用strftime方法,如下图

         下表所示为部分格式化编码

代码 使用说明
%Y 4位数的年
%y 2位数的年
%m 2位数的月
%d 2位数的填
%H 时(24小时制)
%I 时(12小时制)
%M 2位数的分
%W 每年的第几周,星期一为每周第一天

        通过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索引,如下图

        更为复杂的频率字符串,也可以被搞笑解析为相对应的频率,如下图

         时间序列的常用基础频率如下表

别名 使用说明
D 每日历日
B 每工作日
H 每小时
S 每秒
T或者min 每分钟
M 每月最后一个日历日
BM 每月最后一个工作日
A-JAN、A-EFB 每年指定月份的最后一个日历日

         移动数据就是沿着时间索引将数据向前或者向后移动。通过shift方法可以完成移动数据的操作,如下图

        这种单纯的移动不会修改索引,而是使部分数据被丢弃。如果在shift方法中传入参数,这样就是修改索引了,如下图


8.4时期

        时期表示的时间区间,如数日,数月和数年等。本节将讲解时期的构造方法、时期数据的频率转换和其数据结构

8.4.1时期基础

        Period可以创建时期数据类型,传入字符串或者整数、频率即可,如下图。下图中的Period对象表示从2018年1也1日到2018年12月31日之间的整段时间。

         该Period对象可以进行加减计算,使其进行时间的品阿姨。两个Period对象如果由相同的频率,则他们的差为他们之间的单位数量。

        类似于pd.date_range,pd.period_range函数可以创建时期范围,PeriodIndex索引同样可以构Series或DataFrame数据

 8.4.2频率转换

        Period和PeriodIndex对象可以通过asfreq方法转换频率,如下图所示将年度时期转换为月度时期

        当年度的频率不是位于12月时,转换频率就会发生变化,如下图

        PeriodIndex对象的频率转换方式也一样,如下图

8.4.3时期数据转换

         利用to_period方法可以将由时间戳索引的时间序列数据转换为时期为索引,如下图

         当然,也可以指定转换的频率,如图所示

        通过to_timestamp方法可进行逆操作,如下图

 8.5频率转换与重采样

        重采样时时间序列频率转换的处理过程。高频率聚合到低频率成为降采样,而低频率转换为高频率为高采样。

8.5.1重采样

        pandas中的resample方法用于各种频率的转换工作,如下图所示为将间隔为’天‘的频率转换为间隔为’月度‘的频率,这里的聚合方法为平均值。

        如下表所示为resample方法的参数及说明,具体使用方法后面会详细解说

参数 使用说明
freq 转换频率
axies=0 重采样的轴
closed=’right 在降采样中,设置各时间段哪端是闭合的
label=‘right’ 在降采样中,如何设置聚合值的标签
loffset=None 设置时间偏移量
kind=None 聚合到时期或时间戳,默认为时间序列得索引类型
convention=None 升采样所采用得约定(start或end)。默认为end

 8.5.2降采样

        在降采样中,重点需要考虑得是closed和label参数,这两个参数分别表示哪边区间是闭合的,哪边用于标记。如图所示为将两个参数值都设置为right

        如下图所示将closed和label参数值均设为left。大家可以思考一下这两个参数的变化带来的影响。多看两遍就可以掌握了,其实很简单。

          通过设置loffset日期偏移量,也可以看出其时间戳所属的区间,如下图,红色的是未来改版的警告信息,大家按照他那个写法改改就好。

8.5.3升采样

        在升采样中用到的就不再是聚合,而是需要对缺失值进行填充,其填充方法与前面介绍的fillna一样,如下图所示,也可以设置填充的个数。

8.6综合示例-自行车租赁数据

8.6.1数据来源

        该案例使用的数据及可在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为租赁自行车数量。读取文件如下:

8.6.2定义问题

        本次分析围绕时间提出问题:时间段与自行车租赁的关系情况

8.6.3数据清洗

        查看缺失值,如下图可以看出没有缺失值。

         然后查看各字段数据类型,发现datetime字段不是时间数据类型,如下图

         此时利用pd.to_datetime函数将其转换为datetime类数据,如下图

        最后将datetime字段设置为DataFrame的索引,这样就成为了时间序列数据,如下图

8.6.4数据探索

        首先利用groupby方法也可以进行降采样,这里降采样到年份数据,如下图可以看出,2012年的租赁要高于2011年

        然后通过下面的代码绘制柱状图:

        接着再利用resample方法,将数据重采样到月份,类型为时期类型,如下图

        然后利用plot方法绘制时间序列图,如下图由图可知,2011年和2012年去世大致相同,前几个月增加,到了5、6月达到峰值,再到9月份减少

        为了分析每天和每小时的租赁分布情况,对日(day)和时(hour)的数据进行单独存储如下图

        然后对day字段进行分组统计,如下图

注意:训练数据只有前19天

        进行可视化

         同样的,在对hour字段和weather字段进行上述处理。这里不再展示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python数据分析8-时间序列 的相关文章

随机推荐

  • Windows10下python-pcl的安装步骤说明,亲测ok

    Windows10下python pcl的安装步骤说明 1 环境依赖 2 安装步骤 2 1 安装visual studio 2017 2 2 安装pcl并配置环境变量 2 3 编译python pcl并且导入moudle 2 4 验证安装成
  • 有点牛,10分钟把小程序直接迁移到APP

    大家好 我是北妈 0 没想到现在的APP都已经卷成这样了 最近一个朋友跟我吐槽他最近接手的一个APP项目 说现在的APP都想把自己从工具发展成平台 堆砌了各类形形色色的功能 然后如果APP一有点小问题或者增加一个小功能就需要发版迭代 同时代
  • Flask框架七:ORM操作MySQL(一)

    1 ORM基础操作 注意点 创建新表时必须写Base metadata create all 数据库中已存在这张表就可以不写 写了不会报错 代表将创建的 类 表映射到数据库中 如果数据库中已经存在这个表了 则不会改变表结构 如果后续操作有冲
  • AI绘画

    今天用Midjourney生成了质量极高的美少女武士后续会作为固定栏目来分享美图接下来请欣赏作品 提示词分享 1 an asian girl dressed in samurai style in the style of anime ae
  • (基于Python的毕业设计)微博舆情分析系统(附源码+论文)

    大家好 我是岛上程序猿 感谢您阅读本文 欢迎一键三连哦 目录 一 项目简介 二 系统设计 2 1软件功能模块设计 2 2数据库设计 三 系统项目部分截图 3 1管理员功能模块 3 2热搜数据 3 3热搜 四 论文目录 五 部分核心代码 4
  • 共阳极数码管与共阴极数码管联合使用来循环显示数字00-99。

    使用两个分立式数码管分别连接在P0和P2端口上 实现数字从00 99的循环显示 与上篇文章一样先查询一下共阴极与共阳极数码管数字0到9的数码表 共阴极数码管0 9的数码表 code int SEG CODE1 0x3f 0x06 0x5b
  • vue.config配置多个地址跨域

    本博客是本人在开发过程中遇到问题所积累下的经验 在前端想要实现跨域 在前端使用接口的时候 如果需要使用来源不同的接口 可以在vue config配置多个跨域 例如下面例子中的两个配置 一个是局域网内的接口 一个是部署在外网上的接口 在使用时
  • C练题笔记之:Leetcode-662. 二叉树最大宽度

    题目 给你一棵二叉树的根节点 root 返回树的 最大宽度 树的 最大宽度 是所有层中最大的 宽度 每一层的 宽度 被定义为该层最左和最右的非空节点 即 两个端点 之间的长度 将这个二叉树视作与满二叉树结构相同 两端点间会出现一些延伸到这一
  • Ubuntu22.04安装opencv4并配置VsCode

    一 安装Opencv 第一步 下载opencv 下载地址 https github com opencv opencv 第二步 解压安装 unzip opencv 4 6 0zip 第三步 安装编译文件 sudo apt get insta
  • shell文本去重

    shell文本去重 1 单个文件去重 2 两个文件的交集 并集 求两个文件的并集 求两个文件的交集 求两个文件的差集 3 两个文件合并 上下合并 左右合并 4 多个文件合并去重 1 单个文件去重 参考 https blog csdn net
  • SVN客户端TortoiseSVN基本使用方法步骤-初人指南

    本文将讲述SVN客户端TortoiseSVN基本使用方法步骤 模拟两个客户端与服务器之间的关系 操作包括 SVN commit 提交 SVN checkout 检出 SVN Update 更新 如上图所示 工作模式是 客户端从服务器中SVN
  • 神经网络 专业术语解释(Step、Batch Size、Iteration、Epoch)

    目录 1 名词解释 2 换算关系 3 举例说明 1 名词解释 Step 步 训练模型的步数 遍历学习一次训练集数据所需要的Batch数量 跟iteration一样 Batch Size 批尺寸 计算梯度所需的样本数量 太小会导致效率低下 无
  • oracle生成uuid函数

    sys guid
  • 抖音自媒体平台上最容易上热门的7大领域,你知道吗?

    抖音覆盖的内容领域日益广泛 因此 运营者在入驻抖音平台的时候不能过于草率 不能单纯地根据个人偏好来确定账号的运营方向 本文将主要介绍在抖音平台上最容易上热门的7大领域 以此来帮助运营者更好地进行账号的定位 接下来运营喵就和大家分享下 1 搞
  • 机器人学重点知识点总结

    机器人学重点知识点总结 坐标转换与机械臂运动学 雅克比矩阵 机械臂逆向动力学 牛顿欧拉递推 机械臂正向动力学 运动轨迹生成 动力学轨迹跟踪控制 这篇博客主要用来记录一下现代机器人学里面比较基础也比较重要的一些知识点 所有内容均仅仅记录是什么
  • [蓝桥杯][2013年第四届真题]幸运数

    题目 题目链接 题解 两种方法 DFS 模拟 先讲大佬的DFS 再讲我的模拟 分别对应代码1和代码2 代码3是根据大佬代码改进的我的模拟 推荐代码1和代码3 从幸运数字3开始每次都将 通过幸运数字更新过的数组中当前幸运数字的下一个数字 作为
  • 一文搞懂线性回归和逻辑回归

    1 线性回归 Linear Regression 1 介绍 线性回归是机器学习中最基础 最经典的算法之一 它利用线性函数对一个或多个自变量和因变量之间关系进行建模 建模过程就是使用数据点来寻找最佳拟合线 线性回归分为两种类型 单变量线性回归
  • 【网络篇】第一篇——网络入门基础

    计算机网络背景 网络发展 认识 协议 初识网络 网络协议初始 协议分层 OSI七层模型 TCP IP五层 或四层 模型 网络传输基本流程 同局域网的两台主机通信 跨网络的两台主机通信 网络中的地址管理 认识IP地址 认识MAC地址 计算机网
  • win10主题更换_Win10桌面最全美化指南!(任务栏透明+dock栏+磁贴美化+壁纸)

    点点关注不迷路 先看成品 知乎视频 www zhihu com 其他历史桌面 这两个桌面都是动态桌面 我是分割线 目录 桌面归类 任务栏美化 Dock栏美化 心形磁贴美化 动态桌面 护眼软件 桌面插件 仿Mac美化 壁纸 我是分割线 桌面归
  • Python数据分析8-时间序列

    目录 8 1datetime模块 8 1 1datetime的构造 8 1 2数据转换 8 2时间序列基础 8 2 1时间序列构造 8 2 2索引与切片 8 3日期 8 3 1日期范围 8 3 2频率与移动 8 4时期 8 4 1时期基础