- calender 日期包
- datetime 日期时间处理
- 导入日期包 和 时间处理包
import calender
from datetime import datetime
特征工程 feature engineering
- 数据和特征决定了机器学习的上限,而一个好的模型,只是逼近那个上限而已
- 我们的目标是尽可能从原始数据上获取有用的信息,一些原始数据本身往往不能直接作为模型的变量
- 特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程
以datetime为例,这个特征里包含了日期和时间点两个重要信息,我们还可以进一步从日期中导出其所对应的月份和星期数
首先引入calender中的day_name,列举了周一到周日
calendar.day_name[:]
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
字符串转时间格式
使用datatime中的striptime函数将字符串转换为日期时间类型
注意这里的datatime是一个包不是我们dataframe里的变量名
第二个参数是 时间日期的格式
这里我们使用"%Y-%m-%d"来指定输入日期的格式是按照年月日排序,有时候可能会有月日年的排序形式
dateDT = datetime.strptime(dateString,"%Y-%m-%d")
使用时间日期格式的weekday方法取出日期对应的星期数 0-6
week_day = dataDT.weekday() #5
将星期映射到名字上
calender.day_name[week_day]
datetime格式还有其他的一些属性 比如 month year 可以获取 月份 年份
dateDT.month
绘制复习
设置画布大小
fig = plt.figure(figsize=(18,5))
添加第一个子图
ax1 = fig.add_subplot(121)
sns.boxplot(data=BikeData,y='count')
ax1.set(ylabel='count',title='box plot on count')
添加第二个子图
ax2 = fig.add_subplot(122)
sns.boxplot(data=BikeData,y='count',x='hour')
ax2.set(xlabel='Hour', ylabel='Count',title="Box Plot On Count Across Hours")
相关性分析 correlation analysis
相关性分析是一种基于 不同特征相关系数的 分析,
是一种帮助我们理解特征是如何影响变量的常用方法。
相关系数的计算和可视化
相关系数是一个介于-1到1之间的一个实数
- 符号表示正相关和负相关
- 0 表示不相关 没有相关性
- 先关系数的绝对值大小决定了这种线性相关性的强弱
使用df.corr()函数计算相关性
相关系数矩阵对角线的值永远为1,因为是特征本身与自己的相关系数
相关系数矩阵是一个对称矩阵,我们只需要看上三角部分或者下三角部分即可
correlation = BikeData[["casual","registered","temp","atemp","humidity","windspeed","count"]].corr()
使用热地图显示相关矩阵
暖色表示正相关。冷色表示负相关,大小由深浅来表示
由于对称性,我们只需考虑图形上半部分或者下半部分即可
其实热地图和上面的相关矩阵携带的信息是一模一样的,只不过加上了颜色更加直观。
#annot 注释 表示显示数字
#square 正方形 表示使用正方形显示
fig = plt.figure(figsize = (10, 10))
sns.heatmap(correlation, vmax=.8, square=True, annot=True)
在散点图中拟合简单线性回归
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
拟合一条直线更好的帮助我们查看趋势
斜率就是相关系数
我们使用seaborn中的regplot(regression plot)线性回归函数
sns.regplot(x='tmep',y='count',data=BikeData)
将无意义的数据变成有意义的数据
map函数可以做映射,比如 把 0 映射成假期
举个例子
使用map方法,将holiday数据做映射, 0对应'non-holiday', 1对应 'holiday'
BikeData['holiday_cat'] = BikeData['holiday'].map( {0: 'non-holiday', 1: 'holiday'} )
FacetGrid绘图
#add_legend()表示显示图例
#size=3 表示长为3
#aspect=2 表示宽高比为2
#row='humidity_band'竖着画 并且以humidity_band为分组
#map()参数表示 绘制条形图 横坐标是temp_band 纵坐标count 以holiday_cat分类也是图例的依据 深色配色 不显示置信区间
sns.FacetGrid(data = BikeData, row='humidity_band', size=3, aspect=2).\
map(sns.barplot, 'temp_band', 'count', 'holiday_cat', palette='deep', ci=None).\
add_legend()