- 作者:韩信子@ShowMeAI
- 数据剖析实战系列:www.showmeai.tech/tutorials/4…
- 本文地址:www.showmeai.tech/article-det…
- 声明:版权所有,转载请联系平台与作者并注明出处
- 收藏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 速查表:www.showmeai.tech/article-det…
- 图解数据剖析:从入门到通晓系列教程:www.showmeai.tech/tutorials/3…
本文正在参加「金石计划 . 分割6万现金大奖」