Python大数据分析3:特殊时间序列的生成

前面所介绍的各种时间序列都是一些比较随机和杂乱的序列,在实际分析中,有时我们需要得到一种非常规律的时间序列,据此实现对特定数据的分析和统计。

我们先从最简单的时间点范围序列开始。

比如我们想得到从2020年1月1日开始的7天时间,并作为当前学生数据的索引:

pd.date_range(‘2020-1-1’, ‘2020-1-7’)

这里我们使用了pandas的date_range函数,直接生成指定时间起至的时间序列。

我们也可以将其应用于学生数据的索引。

也可以按照指定数量来生成:

pd.date_range(start=’2020-1-1′, periods=7)

其中的start指定起始时间,periods指定数量。

默认情况下,总是按照天数来计次,如果想按照其他时间单位,可以通过freq参数来设定:

pd.date_range(start=’2020-1-1′, periods=7, freq=’M’)

这个M表示月份,从结果能看出,它默认以每月月底来自动取一个时间,形成完整的时间序列。

要想月初开始,可以使用freq设置为MS:

frame = pd.DataFrame(data,pd.date_range(start=’2020-1-1′, periods=7, freq=’MS’))

可以设置为每2月取一次:

pd.date_range(start=’2020-1-1′, periods=7, freq=’2M’)

freq非常灵活,我们看看几个奇妙的设定:

比如按照1个半小时:

pd.date_range(start=’2020-1-1′, periods=7, freq=’1h30min’)

结果看的很清楚,时间类型既包括日期信息也包括小时等信息。

我们再来看看带有时间跨度的时间段范围序列。比如我们并不希望了解每个学生准确的加入时间,而是关注在哪个时间段加入,比如哪个月等。此时就需要使用一种时间段的时间类型。

比如从2020年1月起开始的7个月,可以设定起至时间范围:

pd.period_range(‘2020-01’, ‘2020-07′, freq=’M’)

结果看的很清楚,此时只以月份为单位,并不区分一个月中的天数。

正如前面一样,也可以指定数量:

pd.period_range(‘2020-01′, periods=7, freq=’M’)

这里的7表示取7个时间值。

有时我们也想得到未必是连续的时间段序列,这时可以自由指定时间段,比如通过列表:

values = [‘2019-12’, ‘2020-01’, ‘2019-11’, ‘2020-02’, ‘2019-12’, ‘2020-01’, ‘2019-07’]

然后据此生成时间段序列:

pd.PeriodIndex(values, freq=’M’)

此时当然也可以设定为索引。此处的PeriodIndex就表示时间段索引,freq很必要,表示时间段的单位。

如果采取了不同的时间段表示,就需要同时设定时间格式和freq参数:

values = [‘2019Q4’, ‘2020Q1’, ‘2019Q4’, ‘2020Q1’, ‘2019Q4’, ‘2020Q1’, ‘2019Q3’]

frame = pd.DataFrame(data, pd.PeriodIndex(values, freq=’Q’))

比如这里就表示以季度来取时间段。

灵活的借助于freq参数可以灵活的映射时间段的单位。比如我们可以把月份映射为季度:

values = [‘2019-12’, ‘2020-01’, ‘2019-11’, ‘2020-02’, ‘2019-12’, ‘2020-01’, ‘2019-07’]

frame = pd.DataFrame(data, pd.PeriodIndex(values, freq=’Q’))

一般而言,这种映射没有问题,结果也比较确定。

但是反过来,如果将季度映射为月份会怎么样?

values = [‘2019Q4’, ‘2020Q1’, ‘2019Q4’, ‘2020Q1’, ‘2019Q4’, ‘2020Q1’, ‘2019Q3’]

frame = pd.DataFrame(data, pd.PeriodIndex(values, freq=’M’))

在默认情况下,看得出来,它会自动以起始时间作为映射值,比如第四季度起始月为十月,因此显示为十月。

需要说明下,freq参数的取值不能随意写,每种功能都需要通过特定的字符来表示。如果需要了解具体情况和更多情况,大家可以自行百度了解,有很多详细的列举和说明。

在时间索引中,还有一种复合形式,就是可以单独设定年月等时间段索引值:

years = [2019, 2020, 2019, 2020, 2019, 2020, 2019]

months = [12, 1, 11, 2, 12, 1, 7]

frame = pd.DataFrame(data, pd.PeriodIndex(year=years, month=months, freq=’M’))

其中可以看到,我们在PeriodIndex创建时指定了年份和月份的时间段列表。

发表评论

邮箱地址不会被公开。 必填项已用*标注