时序数据处理小技巧---巧用时间戳

时序数据处理小技巧—巧用时间戳

数据处理和特征工程中中常常会遇到对时序数据的聚合统计等操作,我在未发现这个技巧之前,常常需要查各类时间处理的函数的api。但当有一次,有个朋友问我如何每间隔15秒(比较极端)统计多个不同账号的下单次数时,我发现使用现有函数去对划分时间很困难。这时我想到了时间戳去解决这个需求

示例一

时序数据处理小技巧---巧用时间戳
上图为某个流水表的部分数据,_id代表了一个用户,_time是下单时间,如何每隔15秒统计一次用户的下单次数呢?
以往做的都是按月,按天统计时,可以把时间戳转换成datetime,调函数去获得对应时间的进行统计。然而只要理解了时间戳就是格林威治时间到现在经过的秒或毫秒,那么我们就只需要一句代码就可以对这部分数据进行处理了
df['new_time'] = df._time.apply(lambda x:x//15000*15000)
时序数据处理小技巧---巧用时间戳
如上图所示,new_time将数据按每隔15秒进行了一个切分(15秒=15000毫秒)。然后我们对相应地数据进行聚合统计就可以了。因为这里是多个用户的下单,正常我们需要按_id聚合后再按new_time进行聚合,这里在提另一个小技巧:字符串的拼接。
时序数据处理小技巧---巧用时间戳
如上图所示,我们只需要对新拼接好的列进行聚合统计即得出了每隔15秒的不同的用户的下单次数了
这个技巧通过除以15秒取整,再乘回去,就完成了对时间进行了一个划分。同理,1天的时间可以通过除以86400秒,再乘回去,进行时间划分。

示例二

在实际业务过程中,曾遇到过这样一个问题,需要写一个函数,以输入时间为起点的前一周的数据。而这个问题同样也可以通过本技巧进行处理
我们假设提取数据的时间范围为上上周天0点0分的,到上周天的0点0分。
时序数据处理小技巧---巧用时间戳
以上图时间为输入,我们可以查到的是时间戳为0的格林威治时间是1970年1月1日,这天是星期四,那么1970年1月4日即为星期天的时间戳为230400
时序数据处理小技巧---巧用时间戳
那么我们就可以通过这个条件,使用我们的技巧求出上个星期天的时间戳了
时序数据处理小技巧---巧用时间戳
其中86400是一天的秒数,86400*7为一周的秒数。

总结

综上,我们可以通过上述技巧处理时间戳,按星期,天,小时,分钟,秒,毫秒进行划分做统计工作,具体公式如下:

int(cur_timeStamp / timeDelta) * timeDelta

timeDelta为划分的时间间隔。

ps:建了个交流群,讨论一些数据处理小技巧,有兴趣加q群号:
693821912