稚久|特征工程之处理时间序列数据( 二 )


MonthPandas自身有许多易于使用的方法来处理datetime类型的数据 。 要提取时间/日期信息 , 我们只需调用pd.Series.dt 。 pd.Series.dt.month是提取month信息所需的函数 。 这将产生一系列int64格式的月份数字(例如1代表1月 , 10代表10月) 。
# extract month featuremonths = raw.date_time.dt.monthDay of month和Month类似 , 我们只需要调用pd.Series.dt.day函数 。 以2012-10-27 09:00:00为例 , 调用该函数提取结果为27 。
# extract day of month featureday_of_months = raw.date_time.dt.dayHour类似地 , pd.Series.dt.hour将生产对应的小时信息数据(范围为0-23的整数) 。
# extract hour featurehours = raw.date_time.dt.hourDay name获取Day name的方式和上面几个数据有所不同 。 我们想要确定raw.date_time序列中关于星期几的信息 , 需要以下两个步骤 。 首先 , 通过pd.Series.dt.day_name()生成day name序列 。 然后 , 我们需要通过pd.get_dummies()进行独热编码(one-hot encode) 。
# first: extract the day name literalto_one_hot = raw.date_time.dt.day_name()# second: one hot encode to 7 columnsdays = pd.get_dummies(to_one_hot)#display datadays
稚久|特征工程之处理时间序列数据独热编码后的Day name信息
Daypart在本部分中 , 我们将基于Hour数据创建一个分组 。 我们希望有六个小组代表每一天的各个部分 。 它们是黎明(02.00-05.59)、上午(06.00-09.59)、中午(10.00-13.59)、下午(14.00-17.59)、晚上(18.00-21.59)和午夜(22.00-次日01.59) 。
为此 , 我们创建了一个标识函数 , 稍后将使用该函数来作为数据系列的apply方法 。 然后 , 我们对得到的dayparts执行一个热编码 。
# daypart functiondef daypart(hour):if hour in [2,3,4,5]:return "dawn"elif hour in [6,7,8,9]:return "morning"elif hour in [10,11,12,13]:return "noon"elif hour in [14,15,16,17]:return "afternoon"elif hour in [18,19,20,21]:return "evening"else: return "midnight"# utilize it along with apply methodraw_dayparts = hours.apply(daypart)# one hot encodingdayparts = pd.get_dummies(raw_dayparts)# re-arrange columns for conveniencedayparts = dayparts[['dawn','morning','noon','afternoon','evening','midnight']]#display datadayparts
稚久|特征工程之处理时间序列数据独热编码后的Day parts信息
Weekend flag我们从date_time时间序列数据中提取的最后一个特征是is_weekend 。 这一特征指示给定的日期时间是否在周末(星期六或星期日) 。 为了实现这一目标 , 我们将利用pd.Series.dt.day_name()方法以及lambda函数 。
# is_weekend flag day_names = raw.date_time.dt.day_name()is_weekend = day_names.apply(lambda x : 1 if x in ['Saturday','Sunday'] else 0)Holiday flag 以及 weather幸运的是 , 这些数据还包含公共假日信息 。 信息是细粒度的 , 因为它提到每个公共假日的名称 。 尽管如此 , 本文假设对每个假期进行编码并没有显著的好处 。 因此 , 让我们创建一个二进制特性来指示对应的日期是否是假日 。
# is_holiday flagis_holiday = raw.holiday.apply(lambda x : 0 if x == "None" else 1)


推荐阅读