关于数据挖掘中对于时间的信息挖掘

       之前参加了datafountain的比赛,虽然没有拿到什么好的名次,但是通过自己的学习和别人的讨论,对于数据挖掘比赛中的对于时间的处理稍微整理下,首先对于时间的格式,一般情况下是给出年月如时分秒,我们需要做的是对于时间进行处理,需要明白的是一般情况下对我们有用的就是月份,一个月中的天数,一天中的小时,因为分钟和秒容易造成过拟合,对这些信息进行提取出来,然后构造新的特征。

TIME
2018-03-22 16:31:44

上面是一般情况下给出的时间的格式。我们需要做的就是将上面时间中的月份,一个月中的天数和最后的时间提取出来,至于分钟的秒钟视情况而定,一般情况下是不需要的,因为这样会导致训练样本的过拟合,从而在测试样本中的效果不好。可以用两种方法来做:

第一种方法:首先得到的Dataframe中的这一列Dataframe['TIME'],注意需要加单引号。然后调用map这个内置的隐射函数,这里的map是对Dataframe中的每一个元素进行映射,然后在map()内部设置函数,这里用的是匿名函数lambda x,然后在匿名函数内部用datetime模块中的datetime类中的strftime函数,将时间字符串转换变成时间元组的格式了,如

map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S")
strptime中的后面的参数表示的是前面的x需要转换的格式,关于这里的设置问题,查看datetime模块链接,然后对得到的时间元组的格式来得到day,hour,month等,这里需要特殊注意的是weekend(),此函数可以得到这一天是周几,具体如下
    Datatime['week'] = Datatime['Datatime'].map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S").weekday()
    Datatime['day'] = Datatime['Datatime'].map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S").day)
    Datatime['hour'] = Datatime['Datatime'].map(lambda x: time_of_day[datetime.strptime(x, "%Y-%m-%d %H:%M:%S").hour])

这样就可以提取出来了上面列中的day,weekend,hour等信息

 

第二种方法:直接选择Dataframe中的TIME列,然后直接调用函数apply,在内部使用函数lambda x,因为x是字符串所以直接对x中的字符进行选择,得到day,hour,如下

    Dataframe['day'] = Dataframe['TIME'].apply(lambda x: int(x[8:10]))
    Dataframe['hour'] = Dataframe['TIME'].apply(lambda x: int(x[11:13]))

但是这里无法得到星期几,我们可以设置函数来定义,如对得到的day这一列来进行计算,假如是2018年的三月,那么可以来进行设置,首先需要知道三月是从星期四开始,所以得到的

def get_week(Dataframe):
    day = int(day)
    weekend=day%7+3
    return weekend

转载请说明出处

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值