乐趣区

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

本文解说 Pandas 工具库几个外围函数,能高效解决工夫序列:resample、shift、rolling。帮你得心应手解决工夫序列数据!


💡 作者:韩信子 @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:创立滑动平均值,查看趋势。

参考资料

  • 📘数据迷信工具库速查表 | Pandas 速查表:https://www.showmeai.tech/article-detail/101
  • 📘图解数据分析:从入门到精通系列教程:https://www.showmeai.tech/tutorials/33

举荐浏览

  • 🌍 数据分析实战系列:https://www.showmeai.tech/tutorials/40
  • 🌍 机器学习数据分析实战系列:https://www.showmeai.tech/tutorials/41
  • 🌍 深度学习数据分析实战系列:https://www.showmeai.tech/tutorials/42
  • 🌍 TensorFlow 数据分析实战系列:https://www.showmeai.tech/tutorials/43
  • 🌍 PyTorch 数据分析实战系列:https://www.showmeai.tech/tutorials/44
  • 🌍 NLP 实战数据分析实战系列:https://www.showmeai.tech/tutorials/45
  • 🌍 CV 实战数据分析实战系列:https://www.showmeai.tech/tutorials/46
  • 🌍 AI 面试题库系列:https://www.showmeai.tech/tutorials/48
退出移动版