目录
数据特征描述
数据来源
该数据集由kaggle网站提供,Bike Sharing Demand数据集,里面包括三个csv文件,这里我选取里面的train.csv文件来进行数据挖掘与分析。
数据描述
train.csv提供了某城市的共享单车2011年到2012年的数据集,该数据集包括了租车日期,租车季节,租车天气,租车气温,租车空气湿度等数据。
其中各类具体数据代表意义如下:
season :1=春天2=夏天3=秋天4=冬天holiday :是否是节假日
workingday : 1=工作日 0=周末
weather :1:晴天,多云2:雾天,阴天3:小雪,小雨4:大雨,大雪,大雾
temp : 气温摄氏度
atemp :体感温度
humidity : 湿度
windspeed : 风速
casual :非注册用户个数
registered : 注册用户个数
count :给定日期时间(每小时)总租车人数
首先进行数据探索,分析数据集的特性
首先导入相关的包
再读取数据集,这里读取数据集的部分列(2到6列)
查看数据集大小
含有10086条数据。
查看数据集信息:
图形可视化观察各因素之间的关系
Violinplot数据分布
代码如下:先设置颜色主题,然后布置画板,里面包含四个小图。
图形如图所示。
可以看出workingday和temp和atemp之间的相差幅度较大,和holiday和weather之间的幅度较小。
Pointplot数据斜率
代码如下:
先设置颜色主题,然后布置画板,里面包含四个小图。
回归分析可视化
下面分别基于temp和atemp做线性回归的可视化,代码如下:
图形如下图所示
可以发现workingday为1比为0时更加密集。
数据预处理
先导入包
变量映射处理
把数据集中"season","weather"字段属于定性变量,将定性变量的数值取值,做映射处理,转化为描述性取值
处理结果如下:
缺失值处理
可以看出,该数据集没有缺失值。
如果数据集中有缺失值,在缺失值处理中,一般会删除缺失值。pandas模块中,提供了将包含NaN值的行删除的方法dropna(),处理缺失值最好的办法是“用最接近的数据替换它”
对于数值型数据,可用该列的数据的均值或者中位数进行替换。
对于分类型数据,可利用该列数据的出现频数最多的数据(众数)来填充。
决策树分类算法
选取其中部分列进行决策树算法。
读取train.csv文件并进行数据处理:将season为3和4的值变成1
将weather为3和4的值变成1
将temp大于10的值变为1
然后进行决策树的生成
上图所示代码生成了1.dot文件保存在桌面
查看1.dot文件
再将其变成决策树图形。
生成1.png图片的决策树如下图所示。
可以看出节假日和没有工作的日子里借用共享单车的数目较多。
贝叶斯分类算法
朴素贝叶斯分类算法是应用最为广泛的分类算法之一,是以贝叶斯定理为基础,并且假设特征条件之间相互独立的方法。先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。
具体代码如下:
测试数据集:
生成矩阵和维度:
得到结果如下图所示
可以得到,模型的准确度非常高。
神经网络分类算法
采用BP算法。BP算法的基本思想是:学习过程由信号的正向传播与误差反向传播两个过程组成。正向传播时,输入样本从输入层传入,经过各隐层逐层处理后,传向输出层。若输出层的实际输出与期望输出不符,则转入误差的反向传播阶段。误差反向传播是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层的误差信号,此误差信号即作为修正单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程周而复始的进行,权值不断调整的过程,也就是网络学习训练的过程,此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。
得到以下准确度的结果:
处理1000次以后 ,准确率逐渐稳定,可以得到准确率为0.9904
结果分析
一般情况下,假日的平均租车人数比非假日多。
寒冷的天气下,非假日的租车人数比假日多
秋天和夏天租车人数最多
春天租车人数显著低于其他季节
总体上,天气越好,租车的人数越多(晴天 > 多云、阴天 > 雨天)
周六和周天租车高峰期在下午期间,工作日租车的高峰期是上下班高峰期。