如何添加小时,分钟,天和月计数以进行绘图?

时间:2018-12-07 12:27:57

标签: python matplotlib plot data-visualization

虽然针对ML算法进行数据预处理和特征工程设计,但日期和时间对于我的问题而言非常重要,因此我希望将其编码为循环变量。我在数据集中大约有6k-7k数据点,其中包含1到31的日期范围,1到12的月份范围,00到23的时间段,00到59的时间段。因此,我将时间戳分为年,月,日,小时和分钟列。

我进一步按照此处https://ianlondon.github.io/blog/encoding-cyclical-features-24hour-time/的说明对月,日,小时和分钟进行了编码,因此算法“获得了分数”。 11月1日和10月31日(以天计)比10月25日和10月31日彼此更接近。

这是我用来转换组件的代码:

# Transform the cyclical features 
cyclic_df['min_sin'] = np.sin(cyclic_df.minute*(2.*np.pi/59))       # Sinus component of minute 
cyclic_df['min_cos'] = np.cos(cyclic_df.minute*(2.*np.pi/59))       # Cosinus component of minute 
cyclic_df['hr_sin'] = np.sin(cyclic_df.hour*(2.*np.pi/23))          # Sinus component of hour 
cyclic_df['hr_cos'] = np.cos(cyclic_df.hour*(2.*np.pi/23))          # Cosinus component of hour
cyclic_df['d_sin'] = np.sin(cyclic_df.day*(2.*np.pi/30))            # Sinus component of day 
cyclic_df['d_cos'] = np.cos(cyclic_df.day*(2.*np.pi/30))            # Cosinus component of day
cyclic_df['mnth_sin'] = np.sin((cyclic_df.month-1)*(2.*np.pi/12))   # Sinus component of minute 
cyclic_df['mnth_cos'] = np.cos((cyclic_df.month-1)*(2.*np.pi/12))   # Cosinus component of minute 

# We drop the useless features, because we don't need them anymore, as for this model we extracted from it all features that we need. 
cyclic_df.drop(['minute', 'hour', 'day', 'month'], axis=1, inplace=True)

现在,当我绘制变换后的分量时,得到的是: plot of new cyclical features: month, day, hour, minute

我的3个问题: 1)如何在绘图上添加小时(00-23),月份(1-12),日期(1-31)? 2)如何更改每个子图标题的字体大小?以及如何减少字幕和子图之间的间隔?很大! 3)我可以使用Seaborn在上面绘制相同的图,以使该图看起来更好并且具有更好的调色板吗?

这是我用来绘制的代码:

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12,12))

fig.suptitle("Representation Of Cyclical Features", fontsize=16)

cyclic_df.sample(6000).plot.scatter('d_cos','d_sin', title='Cyclical Days Transformation', 
                                   ax=axes[0,0]).set_aspect('equal')
cyclic_df.sample(6000).plot.scatter('mnth_cos','mnth_sin', title='Cyclical Months Transformation', ax=axes[0,1]).set_aspect('equal')
cyclic_df.sample(6000).plot.scatter('hr_cos','hr_sin', title='Cyclical Hours Transformation', ax=axes[1,0]).set_aspect('equal')
cyclic_df.sample(6000).plot.scatter('min_cos','min_sin',title='Cyclical Minutes Transformation', ax=axes[1,1]).set_aspect('equal')

0 个答案:

没有答案