Skip to main content

moregeek program

pandas中你一定要掌握的时间序列相关高级功能 ⛵_showmeai的博客-多极客编程



💡 作者:韩信子@ShowMeAI
📘 数据分析实战系列https://www.showmeai.tech/tutorials/40
📘 本文地址https://www.showmeai.tech/article-detail/389
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏ShowMeAI查看更多精彩内容




Pandas 是大家都非常熟悉的数据分析与处理工具库,对于结构化的业务数据,它能很方便地进行各种数据分析和数据操作。但我们的数据中,经常会存在对应时间的字段,很多业务数据也是时间序组织,很多时候我们不可避免地需要和时间序列数据打交道。其实 Pandas 中有非常好的时间序列处理方法,但是因为使用并不特别多,很多基础教程也会略过这一部分。


在本篇内容中,ShowMeAI对 Pandas 中处理时间的核心函数方法进行讲解。相信大家学习过后,会在处理时间序列型数据时,更得心应手。




数据分析与处理的完整知识技能,大家可以参考ShowMeAI制作的工具库速查表和教程进行学习和快速使用。


📘数据科学工具库速查表 | Pandas 速查表


📘图解数据分析:从入门到精通系列教程



💡 时间序列


时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。简单说来,时间序列是随着时间的推移记录某些取值,比如说商店一年的销售额(按照月份从1月到12月)。



💡 Pandas 时间序列处理


我们要了解的第一件事是如何在 Pandas 中创建一组日期。我们可以使用date_range()创建任意数量的日期,函数需要你提供起始时间、时间长度和时间间隔。


# 构建时长为7的时间序列
pd.date_range("2022-01-01", periods=7, freq='D')

# 输出
# DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04','2022-01-05', '2022-01-06', '2022-01-07'], dtype='datetime64[ns]', freq='D')

注意到上面的频率可用freq来设置:最常见的是'W'每周,'D'是每天,'M'是月末,'MS'是月开始。


下面我们创建一个包含日期和销售额的时间序列数据,并将日期设置为索引。


# 设置随机种子,可以复现
np.random.seed(12)

# 构建数据集
df = pd.DataFrame({
'date': pd.date_range("2022-01-01", periods=180, freq='D'),
'sales': np.random.randint(1000, 10000, size=180)})

# 设置索引
df = df.set_index('date')



注意,我们要方便地对时间序列进行处理,一个很重要的先序工作是将日期作为索引,我们前面已经完成这个工作了。



💦 重采样


Pandas 中很重要的一个核心功能是resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。


方法的格式是:


DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',kind=None, loffset=None, limit=None, base=0)

核心的参数rule是字符串,表示采样的频度。如下代码,在resample后接的mean是表示按照月度求平均。


# Resample by month end date
df.resample(rule= 'M').mean()

按月取平均值后,将索引设置为每月结束日期,结果如下。



我们也可以按每周销售额绘制汇总数据。


# 采样绘图
df.resample('W').mean().plot(figsize=(15,5), title='Avg Weekly Sales');


上图可以看出,销量在3月和4月之间的销售额有所下降,而在 6 月中旬达到顶峰。


💦 平移


Pandas 中的shift功能,可以让字段向上或向下平移数据。这个平移数据的功能很容易帮助我们得到前一天或者后一天的数据,可以通过设置shift的参数来完成上周或者下周数据的平移。


# 原始数据的一份拷贝
df_shift = df.copy()

# 平移一天
df_shift['next_day_sales'] = df_shift.sales.shift(-1)

# 平移一周
df_shift['next_week_sales'] = df_shift.sales.shift(-7)


在时间序列问题中,我们经常要完成同比和环比数据,通过shift后的数据做差就很容易得到。


# 计算差值
df_shift['one_week_net'] = df_shift.sales - df_shift.sales.shift(-7)

💦 滑动平均


下一个核心功能是rolling滑动平均,它是做交易的朋友非常常用到的一个功能,rolling函数创建一个窗口来聚合数据。


# 长度为2天的窗口,求滑动平均
df.rolling(2).mean()

在下图中,我们可以看到第一个值是NaN,因为再往前没有数据了。对第2个点,它对数据集的前2行计算平均:$(6787 + 4325)/2 = 5556$。



滚动平均值非常适合表征趋势,滑动窗口越大,得到的结果曲线越平滑,最常用的是7天平均。


# 滑动平均绘图
df.sales.plot(figsize=(25,8), legend=True, linestyle='--', color='darkgray')
df.rolling(window=7).sales.mean().plot(legend=True, label='7 day average', linewidth=2)
df.rolling(30).sales.mean().plot(legend=True, label='30 day average', linewidth=3)
df.rolling(100).sales.mean().plot(legend=True, label='100 day average', linewidth=4)


💡 总结


Pandas在时间序列处理和分析中也非常有效,ShowMeAI在本篇内容中介绍的3个核心函数,是最常用的时间序列分析功能:



  • resample:将数据从每日频率转换为其他时间频率。
  • shift:字段上下平移数据以进行比较或计算。
  • rolling:创建滑动平均值,查看趋势。

参考资料



推荐阅读




©著作权归作者所有:来自51CTO博客作者ShowMeAI的原创作品,请联系作者获取转载授权,否则将追究法律责任

fcos论文复现:通用物体检测算法_华为云开发者社区的博客-多极客编程

摘要:本案例代码是FCOS论文复现的体验案例,此模型为FCOS论文中所提出算法在ModelArts + PyTorch框架下的实现。本代码支持FCOS + ResNet-101在MS-COCO数据集上完整的训练和测试流程本文分享自华为云社区《​​通用物体检测算法 FCOS(目标检测/Pytorch)​​》,作者: HWCloudAI 。FCOS:Fully Convolutional One-St

详解支持向量机-svc的模型评估指标【菜菜的sklearn课堂笔记】_wx63088f6683f8f的博客-多极客编程

视频作者:菜菜TsaiTsai 链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 从上一节的例子中可以看出,如果我们的目标是希望尽量捕获少数类,那准确率这个模型评估逐渐失效,所以我们需要新的模型评估指标来帮助我们。如果简单来看,其实我们只需要查看模型在少数类上的准确率就好了,只要能够将少数类尽量捕捉出来,就能够达到我们的目的。 但是单纯地追

边玩边学!交互式可视化图解!快收藏这18个机器学习和数据科学网站!⛵_showmeai的博客-多极客编程

💡 作者:韩信子@ShowMeAI 📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41 📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42 📘 本文地址:https://www.showmeai.tech/article-detail/340 📢 声明:版权所有,转载请联系平台与作者并注明出处 📢

pgl图学习之基于unimp算法的论文引用网络节点分类任务[系列九]_汀丶的博客-多极客编程

1.[常规赛:图神经网络入门节点分类]介绍 (1)赛题介绍 图神经网络(Graph Neural Network)是一种专门处理图结构数据的神经网络,目前被广泛应用于推荐系统、金融风控、生物计算中。图神经网络的经典问题主要有三种,包括节点分类、连接预测和图分类三种,本次比赛是主要让同学们熟悉如何图神经网络处理节点分类问题。 在过去的一个世纪里,科学出版物的数量每12年增加近一倍,对每一种出版物的主

详解支持向量机-roc曲线中的概率和阈值【菜菜的sklearn课堂笔记】_wx63088f6683f8f的博客-多极客编程

视频作者:[菜菜TsaiTsai] 链接:[【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili] 基于混淆矩阵,我们学习了总共六个指标:准确率Accuracy,精确度Precision,召回率Recall,精确度和召回度的平衡指标F measure,特异度Specificity,以及假正率FPR。 其中,假正率有一个非常重要的应用:我们在追求较高的R

快为你的jupyter添加这7个扩展,效率upup! ⛵_showmeai的博客-多极客编程

💡 作者:韩信子@ShowMeAI 📘 Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56 📘 本文地址:https://www.showmeai.tech/article-detail/341 📢 声明:版权所有,转载请联系平台与作者并注明出处 📢 收藏ShowMeAI查看更多精彩内容 兵欲善其事,必先利其器。对于数据科学家和数据开

fcos论文复现:通用物体检测算法_华为云开发者社区的博客-多极客编程

摘要:本案例代码是FCOS论文复现的体验案例,此模型为FCOS论文中所提出算法在ModelArts + PyTorch框架下的实现。本代码支持FCOS + ResNet-101在MS-COCO数据集上完整的训练和测试流程本文分享自华为云社区《​​通用物体检测算法 FCOS(目标检测/Pytorch)​​》,作者: HWCloudAI 。FCOS:Fully Convolutional One-St

详解支持向量机-svc的模型评估指标【菜菜的sklearn课堂笔记】_wx63088f6683f8f的博客-多极客编程

视频作者:菜菜TsaiTsai 链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 从上一节的例子中可以看出,如果我们的目标是希望尽量捕获少数类,那准确率这个模型评估逐渐失效,所以我们需要新的模型评估指标来帮助我们。如果简单来看,其实我们只需要查看模型在少数类上的准确率就好了,只要能够将少数类尽量捕捉出来,就能够达到我们的目的。 但是单纯地追

边玩边学!交互式可视化图解!快收藏这18个机器学习和数据科学网站!⛵_showmeai的博客-多极客编程

💡 作者:韩信子@ShowMeAI 📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41 📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42 📘 本文地址:https://www.showmeai.tech/article-detail/340 📢 声明:版权所有,转载请联系平台与作者并注明出处 📢

pgl图学习之基于unimp算法的论文引用网络节点分类任务[系列九]_汀丶的博客-多极客编程

1.[常规赛:图神经网络入门节点分类]介绍 (1)赛题介绍 图神经网络(Graph Neural Network)是一种专门处理图结构数据的神经网络,目前被广泛应用于推荐系统、金融风控、生物计算中。图神经网络的经典问题主要有三种,包括节点分类、连接预测和图分类三种,本次比赛是主要让同学们熟悉如何图神经网络处理节点分类问题。 在过去的一个世纪里,科学出版物的数量每12年增加近一倍,对每一种出版物的主

详解支持向量机-roc曲线中的概率和阈值【菜菜的sklearn课堂笔记】_wx63088f6683f8f的博客-多极客编程

视频作者:[菜菜TsaiTsai] 链接:[【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili] 基于混淆矩阵,我们学习了总共六个指标:准确率Accuracy,精确度Precision,召回率Recall,精确度和召回度的平衡指标F measure,特异度Specificity,以及假正率FPR。 其中,假正率有一个非常重要的应用:我们在追求较高的R

快为你的jupyter添加这7个扩展,效率upup! ⛵_showmeai的博客-多极客编程

💡 作者:韩信子@ShowMeAI 📘 Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56 📘 本文地址:https://www.showmeai.tech/article-detail/341 📢 声明:版权所有,转载请联系平台与作者并注明出处 📢 收藏ShowMeAI查看更多精彩内容 兵欲善其事,必先利其器。对于数据科学家和数据开