文科生学Python系列20:共享单车案例2(相关性分析)

第九课 案例分析:共享单车需求

本数据包含某城市共享单车租借数据。共享单车使人们可以一个地方租借自行车并在另一个地方换车,符合目前低碳环保的理念。 新增知识点:


特征工程的概念


日期型变量的处理

相关性分析

问题:

租车人数是由哪些因素决定的?

3.1  相关系数的计算和可视化

相关分析是一种基于不同特征相关系数的分析,是一种帮助我们理解特征是如何影响应变量(count)的常用方法。

相关系数是一个介于[-1,1]之间的一个实数。简单来说:

* 0表示没有线性相关性

* 负数表示一个值变大则另一个值有变小的趋势

* 正数表示一个值变大则另一个值有变大的趋势

* 相关系数的绝对值大小决定了这种线性相关性的强弱

我们通常用相关系数来反映它们的相关性。额,下图又是截屏于新生大学- 解密大数据团队-线上课程PPT内容:

《文科生学Python系列20:共享单车案例2(相关性分析)》 (截图于新生大学- 解密大数据团队- 线上课程PPT内容)

相关系数等于 0 的时候,没有线性相关性,但不代表没有其他关系,比如最后一行的各种各样的形状相关。相关性系数在 Python 中,我们可以用  df.corr( ) 来表示:

《文科生学Python系列20:共享单车案例2(相关性分析)》 相关系数

老师说,一般我们认为相关值大于 0.5,相关性就比较强了,小于这个数就是比较弱的相关性了。

从上面的矩阵可以看到,表格的对角线值是 1 ,其实就是自己和自己的相关性是1。也可以看到整个表格是对称的,因为 A 和 B 的相关性与 B 和 A 的相关性是一样的,只不过是顺序不一样。

观察上面的矩阵,我们有以下洞察

count 和 registered、casual 高度正相关,相关系数分别为 0.69 与0.97。因为 count = casual + registered ,所以这个正相关和预期相符。

count 和 temp 正相关,相关系数为 0.39。一般来说,气温过低人们不愿意骑车出行。

count 和 humidity(湿度)负相关,湿度过大的天气不适宜骑车。当然考虑湿度的同时也应该考虑温度。

temp(温度)和 atemp(体感温度)高度正相关(0.98)。因为体感温度是围绕温度上下波动的。

风速似乎对从租车人数影响不大(0.10),但我们也应该考虑到极端大风天气出现频率应该不高。风速在正常范围内波动应该对人们租车影响不大。

上面矩阵的数据有点多,看起来比较累,所以此时老师推荐我们把数据可视化,这次用的是热地图(heat map):

《文科生学Python系列20:共享单车案例2(相关性分析)》 heatmap 1

这里用的是 seaborn 里面的 heatmap ,correlation 就是上面矩阵的数据了,生成一个 DataFrame 类型。后面设置的参数是为了美化图的,像 vmax 是右边竖线条状图例的最大值,是 0.8 ,要是不设置的话,就是默认值 1 了。square 设置的是形状,不设置的话图形是一个长条形,老师觉得不太美观。annot 要是不存在的话,图表中的方格里面是没有数字的,只有颜色,就不太精确了。

哈哈为了深刻一点,我弄了一个不设置 correlation 后面参数的图,大家感受一下区别:

《文科生学Python系列20:共享单车案例2(相关性分析)》 heatmap 2

大家每次看连着的两张图的时候,都要看看哪里不同,然后再看看到底代码多了什么会让图变得不一样。

这个图的信息和上面矩阵的数据完全是一一对应的,因为图表建设的数据基础就是来源矩阵的数据。但是在图上面可以对相关性用颜色区别来更容易地识别相关性,可以看到对角线还是 1,相关性等于 1 。暖色是正相关,冷色是负相关。通过颜色,看到对应的坐标,然后知道哪些因素的相关性是比较大的。

3.2 在散点图中拟合简单线性回归

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。y=a*x+b

拟合一条直线更好的帮助我们查看趋势

可以证明直线的斜率就是相关系数

我们先来看看租车人数 count 和温度 temp 的线性相关,还是使用 seaborn,老师说它非常好用,因为不仅可以显示图表,还直接帮使用者计算出来了。这次用的是 regplot 的函数,其实全称是 regression plot(线性回归散点图)。函数后面的括号其实都很熟悉了,不外乎是数据哪里来(data=BikeData),x 轴和 y 轴的设置,要是需要的话,后面对图表进行美化和完整标题什么的。啊!都是一个套路!主要还是使用的思维和对图表的熟悉程度,你得知道有这样图表的表达方法,以及这种数据适合什么样的图表作为可视化的输出。

《文科生学Python系列20:共享单车案例2(相关性分析)》 温度和租车人数的相关性

这是一个租车人数 count 和温度 temp 的相关性散点图。我说这像一只海豚,老师说它太臃肿了🙈🙈🙈里面有一条直线,是拟合出来的相关性的直线,它的斜率就是它的相关系数 0.39。这个数不超过 0.5,相关度不是太高哦。

再来一个例子,相关度比较高的——温度和体感温度的散点图:

《文科生学Python系列20:共享单车案例2(相关性分析)》 温度和体感温度的相关散点图

其实在课堂上我一眼就想说:这是条在烤的烤鱼!!!这样老是偏题好像不太好。。。这个图的点几乎都是分布在直线周围的,相关度非常高。而且这条拟合的线的斜率几乎是 45 度角,相关性是几乎接近 1 的。

作业9-2:

在同一幅图中画出 humidity 和 count 的散点图以及 windspeed 和count 的散点图,并分别加上简单线性回归直线

交作业:

《文科生学Python系列20:共享单车案例2(相关性分析)》 交9-2作业

应该没有错吧~🙈😁

额。。其实是不对,再读题,是要把两幅图放在同一个画布中,所以应该是要用 subplot:

《文科生学Python系列20:共享单车案例2(相关性分析)》 再次交9-2作业

4、数据可视化

回顾一下我们开头的问题是:哪些因素会影响每小时的租车人数?

4.1 问题:什么样的温度和湿度情况下租车的人数最多?

复习上节课中讲解的 cut 函数,并使用 seaborn 中的 FacetGrid 函数作图

《文科生学Python系列20:共享单车案例2(相关性分析)》 新增3个特征

图注:这个图只截屏了右上角的一部分,这是一个包含 10886 行的数据。。。

温度和湿度给的是一个连续的变量,连续的变量绘制柱状图不太方便,所以这里把它离散化,分成若干个区间,这里用 cut 函数操作,用的是pd.cut,后面加上需要离散化的数据:BikeData 的 humidity,包含在括号里面,化成 5 段数据直接在逗号后面加上 5 这个参数,赋值给一个新的数据列 humidity_band,取得的是湿度大区间。这就是将一个连续的变量离散化的方法了。 所以下面一行的温度也用同样的方法进行操作。

这里用到的 holiday ,我们回顾一下原始数据,这一列的数据呈现的时候,0 是表示非节假日,1 是表示节假日的。但是这样的显示观众是很难懂的,所以这里为了更加直观方便理解,重新将这里的值进行修改,这里把0 对应成 non-holiday ,1 对应成 holiday,用 map 方法进行映射转换。这个套路就是,前面取的数据,然后后面用 map 作为映射方法,参数地方用字典类型的数据对原始数据进行替换。这样就能将本来 0 和 1 ,不是很多人能理解的值,对应转换成直观的字符串了。

直到这里,我们是创建了 3 个新的特征了:humidity / temp_band / holiday_cat,也就是上图的最右边的 3 列数据。

我们把数据完善之后,来把数据变成可视化图表吧:

《文科生学Python系列20:共享单车案例2(相关性分析)》 温度和湿度影响租车人数可视化图表1
《文科生学Python系列20:共享单车案例2(相关性分析)》 温度和湿度影响租车人数可视化图表2

FacetGrid 表达的是一个模型,导入数据 BikeData。然后里面的 5 个图表的列的内容是 humidity_band,每一幅图绘制的是同一个湿度区间的数据,一共有 5 个湿度大区间。设置图的高度参数 size=3,和长宽比例 aspect=2。然后把这些数据映射到一个柱状图 barplot 中,然后传递相应的参数,前面 3 列是横坐标 temp_band 温度的区间,纵坐标是人数 count,然后用 holiday_cat:是否是节假日 来进行分组。设置配色用 palette=‘deep’.

我们可以看到第一图都是蓝色的,在第一图关于节假日的数据缺失了。

洞察:

湿度在 0-60, 温度在20-40之间的租车人数较多

一般情况下,假日的平均租车人数比非假日多。寒冷的天气下,非假日的租车人数比假日多。

4.2 不同季节,每个小时平均租车人数如何变化?

《文科生学Python系列20:共享单车案例2(相关性分析)》 不同季节中时间段的租车人数 折线图

在上面季节的表示中,用 1234 来表示春夏秋冬,这里还是用 map 的方法来进行映射转换,还是用字典的方式哦。设置季节标签,便于在下面图例的代码中更容易用到。

绘图这一步应该都很熟悉了,用的是 seaborn 的 FacetGrid,数据导入,图形的大小,长宽比。map 映射到具体的绘图中,用的是 pointplot 折线图,后面参数是横纵轴坐标,hue 分类成 4 个折线分别代表春夏秋冬,颜色的设置。最后的 add_legend( ) 可以加上图例,表示不同颜色的线代表什么含义。

使用 pointplot 时,自动计算出来的是一个平均数。上面的折线图可以看到四个季节在每天时间短的租车人数的分布,春天相对来说是最少的,老师怀疑是跟当地的天气有关,课程上有同学怀疑跟春天共享单车的推广还没普及有关。还有就是看到上下班早晚高峰的分布。

洞察:

秋天和夏天租车人数最多

春天租车人数显著低于其他季节(可能和本地气候有关?)

4.3 不同天气情况下,每个月的平均租车人数如何变化?

首先我们来读题,和上面的内容不一样的是,4.2 是在不同季节,4.3 是不同天气,所以在绘制图的时候,hue 这个参数对应的不是 season,而是weather 了。还有一个不同的是,4.2 是每小时的租车人数,4.3 是每个月的租车人数,所以到这里的 X 轴也从 hour  变成了 month 了。图表绘制的内容就改这两个参数,其他几乎是一样的。

《文科生学Python系列20:共享单车案例2(相关性分析)》 不同天气中,不同月份的租车人数 折线图

洞察:

总体上,天气越好,租车的人数越多(晴天 > 多云、阴天 > 雨天)

5-10月的租车人数较多,从1月到5月,总体呈上升趋势,10月以后有明显的下降趋势。

作业9-3:

1,使用map方法将4.3中的weather改为有意义的标签

2,画出按照星期数划分的每小时平均租车数量,并写出自己的洞察结果。

交作业!(这次怎么这么乖交作业。。。难道是因为最后一课吗😭)

《文科生学Python系列20:共享单车案例2(相关性分析)》 9-3作业1,修改weather标签
《文科生学Python系列20:共享单车案例2(相关性分析)》 9-3作业2

啊,这图看得我头皮发麻,好像蜘蛛啊。。。

洞察:1,周六和周天租车高峰期在下午期间,工作日租车的高峰期是上下班高峰期。

2,这图颜色画的不好,区分度不高。

我们最后一次课程内容是机器学习的展望,我就不准备码出来了。所以这是课程内容的最后一次整理,后面还会有两篇课程答疑整理系列的文章更新。感觉自己完成了一个大任务啦!!给自己撒花!💕💕

感谢新生大学这个平台,感谢解密大数据团队的内容提供,让我有机会在简书码完整节课程,不然我很可能在学到一半就实现从入门到放弃了,因为大家的支持,我学到最后,码字到最后了。这对我这种容易三分钟热度的文科生来说,真不是件简单的事情😤🙈🙈

对课程内容感兴趣的可以私聊我,我帮你们解答一些我可以解答的问题,解答不了的我去问解密大数据团队的老师哈!有兴趣的读者也可以戳这个链接 解密大数据课程咨询 ,对团队后续的课程设置提供一些资料哟(毕竟我这个有梦想的文科生还是希望能上机器学习的课程的,感觉老师给的这个链接是要看学生的意向人数再开课的啊😂,你们要是想要学机器学习的,赶紧填这个链接一起拉大这个分母概率啊🤓一起学习)!

好啦!答疑整理的文章我会尽快更新的!谢谢你们!❤️

下次机器学习见🤓!

    原文作者:Lochaiching
    原文地址: https://www.jianshu.com/p/db42995380c5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞