乐趣区

关于人工智能:掌握Pandas时间序列分析的20个知识点

作者 |Soner Yıldırım
编译 |VK
起源 |Towards Datas Science

工夫序列数据有很多种定义,它们以不同的形式示意雷同的含意。一个简略的定义是,工夫序列数据是蕴含序列工夫戳的数据点。

工夫序列数据的起源是周期性测量或观测。咱们察看了许多行业的工夫序列数据。举几个例子:

  • 股票价格随工夫变动
  • 日、周、月销售额
  • 过程中的周期性测量
  • 一段时间内的电力或天然气消耗率

在这篇文章中,我将列出 20 点,这将有助于你全面理解如何解决 Pandas 的工夫序列数据处理。


1. 不同模式的工夫序列数据

工夫序列数据能够是特定日期、持续时间或固定定义距离的模式。

工夫戳能够是一天的日期,也能够是给定日期的纳秒,具体取决于精度。例如,“2020–01–01 14:59:30”是基于秒的工夫戳。

2. 工夫序列数据结构

Pandas 提供灵便高效的数据结构来解决各种工夫序列数据。

除了这三种构造,Pandas 还反对日期偏移概念,这是一种思考日历算法的绝对工夫长度。

3. 创立工夫戳

最根本的工夫序列数据结构是工夫戳,它能够应用 to_datetimeTimestamp 函数创立

import pandas as pd

pd.to_datetime('2020-9-13')
Timestamp('2020-09-13 00:00:00')

pd.Timestamp('2020-9-13')
Timestamp('2020-09-13 00:00:00')

4. 拜访工夫戳的信息

咱们能够取得存储在工夫戳中的日期、月份和年份的信息。

a = pd.Timestamp('2020-9-13')

a.day_name()
'Sunday'

a.month_name()
'September'

a.day
13

a.month
9

a.year
2020

5. 获取不太显著的信息

Timestamp 对象还保留无关日期算术的信息。例如,咱们能够问一年是否是平年。以下是咱们能够取得的一些更具体的信息:

b = pd.Timestamp('2020-9-30')

b.is_month_end
True

b.is_leap_year
True

b.is_quarter_start
False

b.weekofyear
40

6. 欧式日期

咱们能够应用 to_datetime 函数来解决欧式日期(即日期优先)。dayfirst 参数设置为 True。

pd.to_datetime('10-9-2020', dayfirst=True)
Timestamp('2020-09-10 00:00:00')

pd.to_datetime('10-9-2020')
Timestamp('2020-10-09 00:00:00')

注:如果第一项大于 12,Pandas 晓得它不能是月份。

pd.to_datetime('13-9-2020')
Timestamp('2020-09-13 00:00:00')

7. 将数据帧转换为工夫序列数据

to_datetime 函数能够将具备适当列的数据帧转换为工夫序列。思考以下数据帧:

pd.to_datetime(df)

0   2020-04-13 
1   2020-05-16 
2   2019-04-11 
dtype: datetime64[ns]

8. 工夫序列数据

在现实生活中,咱们简直总是解决间断的工夫序列数据,而不是独自的日期。Pandas 使解决时序数据变得非常简单。

咱们能够将日期列表传递给 to_datetime 函数。

pd.to_datetime(['2020-09-13', '2020-08-12', 
'2020-08-04', '2020-09-05'])

DatetimeIndex(['2020-09-13', '2020-08-12', '2020-08-04', '2020-09-05'], dtype='datetime64[ns]', freq=None)

返回的对象是 DatetimeIndex。

有更实用的办法来创立日期序列。

9. 创立蕴含 to_datetime 和 to_timedelta 的工夫序列

能够通过向工夫戳增加 TimedeltaIndex 来创立 DatetimeIndex。

pd.to_datetime('10-9-2020') + pd.to_timedelta(np.arange(5), 'D')

“D”示意“day”,但还有许多其余选项可用。你能够在这里查看整个清单:https://pandas.pydata.org/pan…

10.date_range 函数

它提供了一种更灵便的办法来创立 DatetimeIndex。

pd.date_range(start='2020-01-10', periods=10, freq='M')

periods 参数指定索引中的项数。freq 是频率,“M”示意一个月的最初一天。

就 freq 参数的参数而言,date_range 相当灵便。

pd.date_range(start='2020-01-10', periods=10, freq='6D')

咱们创立了一个频率为 6 天的索引。

11.period_range 函数

它返回一个周期索引。语法相似于 date_range 函数。

pd.period_range('2018', periods=10, freq='M')

12.timedelta_range 函数

返回 TimedeltaIndex。

pd.timedelta_range(start='0', periods=24, freq='H')

13 时区

默认状况下,pandas 的工夫序列对象没有指定的时区。

dates = pd.date_range('2019-01-01','2019-01-10')

dates.tz is None
True

咱们能够应用 tz_localize 办法为这些对象指定一个时区。

dates_lcz = dates.tz_localize('Europe/Berlin')

dates_lcz.tz
<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>

14. 创立具备指定时区的工夫序列

咱们还能够应用 tz 关键字参数创立一个带有时区的工夫序列对象。

pd.date_range('2020-01-01', periods = 5, freq = 'D', tz='US/Eastern')

15. 偏移量

假如咱们有一个工夫序列索引,并心愿偏移特定工夫的所有日期。

A = pd.date_range('2020-01-01', periods=10, freq='D')
A

让咱们在这个序列中减少一周的偏移量。

A + pd.offsets.Week()

16. 挪动工夫序列数据

工夫序列数据分析可能须要挪动数据点来进行比拟。shift 函数可及时挪动数据。

A.shift(10, freq='M')

17.shift 与 tshift

  • shift:挪动数据
  • tshift:扭转工夫索引

让咱们创立一个带有工夫序列索引的数据帧,并对其进行绘图,以查看 shift 和 tshift 之间的差别。

dates = pd.date_range('2020-03-01', periods=30, freq='D')
values = np.random.randint(10, size=30)
df = pd.DataFrame({'values':values}, index=dates)

df.head()

让咱们将原始工夫序列与移位的工夫序列一起绘制进去。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(nrows=3, figsize=(10,6), sharey=True)
plt.tight_layout(pad=4)
df.plot(ax=axs[0], legend=None)
df.shift(10).plot(ax=axs[1], legend=None)
df.tshift(10).plot(ax=axs[2], legend=None)

18. 应用重采样性能从新采样

工夫序列数据的另一个常见操作是重采样。依据工作的不同,咱们可能须要以更高或更低的频率从新采样数据。

重采样创立指定外部的组,并容许你对组进行聚合。

让咱们创立一个蕴含 30 个值和工夫序列索引的 Pandas 序列。

A = pd.date_range('2020-01-01', periods=30, freq='D')
values = np.random.randint(10, size=30)
S = pd.Series(values, index=A)

上面将返回 3 天周期的平均值。

S.resample('3D').mean()

19.Asfreq 函数

在某些状况下,咱们可能对某些频率下的值感兴趣。Asfreq 函数返回指定距离完结时的值。例如,在上一步创立的序列中,咱们可能只须要每隔 3 天(而不是 3 天平均值)的值。

S.asfreq('3D')

20. 滚动

滚动是工夫序列数据的一种十分有用的操作。滚动意味着创立一个具备指定大小的滚动窗口,并对该窗口中的数据执行计算,当然,该窗口会滚动数据。下图解释了滚动的概念。

值得注意的是,当整个窗口都在数据中时,计算就开始了。换句话说,如果窗口的大小为 3,则第一次聚合将在第三行实现。

让咱们将 3 天的滚动窗口利用到咱们的序列中。

S.rolling(3).mean()[:10]

论断

咱们曾经全面介绍了 Pandas 的工夫序列剖析。值得注意的是,Pandas 提供了更多的工夫序列剖析。

官网文档涵盖了工夫序列的所有性能和办法。乍一看仿佛详尽无遗,但通过练习你会感到有所成长。

官网文档:https://pandas.pydata.org/doc…

谢谢你的浏览。如果你有任何反馈,请通知我。

原文链接:https://towardsdatascience.co…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

退出移动版