Pandas中你一定要掌握的时间序列相关高级功能 ⛵

简介: 本文讲解Pandas工具库几个核心函数,能高效处理时间序列:resample、shift、rolling。帮你得心应手处理时间序列数据!
c6ec1f251ea81dd03b68d28d5b7e8ab5.png
💡 作者: 韩信子@ ShowMeAI
📘 数据分析实战系列https://www.showmeai.tech/tutorials/40
📘 本文地址https://www.showmeai.tech/article-detail/389
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏 ShowMeAI查看更多精彩内容
146d27df708fc14477810483f11b61e3.png

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

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

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

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

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

💡 时间序列

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

faf01485bd50eb5450c5ef0efddb8106.png

💡 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')
9ec7568fdf6263c1848a2fe7358697a4.png
注意,我们要方便地对时间序列进行处理,一个很重要的先序工作是将日期作为索引,我们前面已经完成这个工作了。

💦 重采样

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()

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

19e607e049e2d5a16e02655cf0c4ff0d.png

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

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

上图可以看出,销量在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)
263c90fd6cf26e9a01b474f71a9dd684.png

在时间序列问题中,我们经常要完成同比和环比数据,通过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。

3ccff829748a821740c4846736aca1ef.png

滚动平均值非常适合表征趋势,滑动窗口越大,得到的结果曲线越平滑,最常用的是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)
052d5ad2cf991a2f96b7290446c794fe.png

💡 总结

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

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

参考资料

推荐阅读

e9190f41b8de4af38c8a1a0c96f0513b~tplv-k3u1fbpfcp-zoom-1.image

目录
相关文章
|
6月前
|
数据挖掘 索引 Python
如何在Python中,Pandas库实现对数据的时间序列分析?
【4月更文挑战第21天】Pandas在Python中提供了丰富的时间序列分析功能,如创建时间序列`pd.date_range()`,转换为DataFrame,设置时间索引`set_index()`,重采样`resample()`(示例:按月`'M'`和季度`'Q'`),移动窗口计算`rolling()`(如3个月移动平均)以及季节性调整`seasonal_decompose()`。这些工具适用于各种时间序列数据分析任务。
62 2
|
6月前
|
数据可视化 数据挖掘 数据处理
进阶 pandas DataFrame:挖掘高级数据处理技巧
【5月更文挑战第19天】本文介绍了Pandas DataFrame的高级使用技巧,包括数据重塑(如`pivot`和`melt`)、字符串处理(如提取和替换)、日期时间处理(如解析和时间序列操作)、合并与连接(如`merge`和`concat`),以及使用`apply()`应用自定义函数。这些技巧能提升数据处理效率,适用于复杂数据分析任务。推荐进一步学习和探索Pandas的高级功能。
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
40 1
|
2月前
|
数据挖掘 数据处理 Python
​掌握Pandas中的rolling窗口,轻松处理时间序列数据
​掌握Pandas中的rolling窗口,轻松处理时间序列数据
133 1
|
2月前
|
数据可视化 数据挖掘 索引
探索Pandas中的explode功能
探索Pandas中的explode功能
89 1
|
2月前
|
数据处理 索引 Python
Pandas中resample方法:轻松处理时间序列数据
Pandas中resample方法:轻松处理时间序列数据
62 0
|
2月前
|
索引 Python
Pandas中的时间序列利器:set_index用法
Pandas中的时间序列利器:set_index用法
59 0
|
3月前
|
SQL Serverless 数据库
Pandas学习笔记之常用功能
Pandas学习笔记之常用功能
|
4月前
|
数据采集 数据挖掘 数据处理
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
【7月更文挑战第14天】Python的Pandas和NumPy库是数据分析的核心工具。Pandas以其高效的数据处理能力,如分组操作和自定义函数应用,简化了数据清洗和转换。NumPy则以其多维数组和广播机制实现快速数值计算。两者协同工作,如在DataFrame与NumPy数组间转换进行预处理,提升了数据分析的效率和精度。掌握这两者的高级功能是提升数据科学技能的关键。**
45 0
|
4月前
|
数据采集 机器学习/深度学习 数据处理
数据科学家的秘密武器:Pandas与NumPy高级应用实战指南
【7月更文挑战第14天】Pandas与NumPy在数据科学中扮演关键角色。Pandas的DataFrame和Series提供高效数据处理,如数据清洗、转换,而NumPy则以ndarray为基础进行数值计算和矩阵操作。两者结合,从数据预处理到数值分析,形成强大工具组合。示例展示了填充缺失值、类型转换、矩阵乘法、标准化等操作,体现其在实际项目中的协同效用。掌握这两者,能提升数据科学家的效能和分析深度。**
45 0