数据分析50图(三) —— 散点线性回归与置信区间
前言
华罗庚说过
数缺形时少直观,形少数时难入微.
这句话第一次听还是初中数学老师上二次方程课时说的.最近看到了3blue1brown对线性代数的直观解释感觉豁然开朗,于是我又捡起了儿时对美妙数学的兴趣. 发现一个博客,数据可视化很好的例子,决定花些时间和大家一起解读一下
例程来自:https://www.machinelearningplus.com/plots/matplotlib-histogram-python-examples//
感谢b站UP "菜菜TsaiTsai" 分享这个博客.
正式开始“50图”的学习。首先的一个系列 <u>关联图</u> 这通常能告诉我们几个事物之间的联系。
例3、4
from matplotlib import patches
from scipy.spatial import ConvexHull
import warnings; warnings.simplefilter('ignore')
import seaborn as sns
sns.set_style("white")
# Import Data
df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")
df_select = df.loc[df.cyl.isin([4,8]), :]
# Plot
sns.set_style("white")
gridobj = sns.lmplot(x="displ", y="hwy", hue="cyl", data=df_select,
height=7, aspect=1.6, robust=True, palette='tab10',
scatter_kws=dict(s=60, linewidths=.7, edgecolors='black'))
# Decorations
gridobj.set(xlim=(0.5, 7.5), ylim=(0, 50))
plt.title("Scatterplot with line of best fit grouped by number of cylinders", fontsize=20)
plt.show()
解析
解析下代码流程
这是第一次使用 seaborn 包,他是matplotlib 的高级封装,我第一次见他就被他色彩吸引了。
- 导入数据
- 画图(没错seaborn 就是这么方便)
- 添加标注说明
先看下这个不太友好的数据集
manufacturer | model | displ | year | cyl | trans | drv | cty | hwy | fl | class | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | audi | a4 | 1.8 | 1999 | 4 | auto(l5) | f | 18 | 29 | p | compact |
1 | audi | a4 | 1.8 | 1999 | 4 | manual(m5) | f | 21 | 29 | p | compact |
2 | audi | a4 | 2.0 | 2008 | 4 | manual(m6) | f | 20 | 31 | p | compact |
3 | audi | a4 | 2.0 | 2008 | 4 | auto(av) | f | 21 | 30 | p | compact |
4 | audi | a4 | 2.8 | 1999 | 6 | auto(l5) | f | 16 | 26 | p | compact |
这次用到的数据是 displ,hwy,cyl。 what? 不太懂车啊,这是什么鬼缩写。一顿谷歌搜索。
- displ 排量
- cyl 气缸数
- hwy 高速公路上时每加仑里程数
- cty 城市道路时每加仑里程数
方法参数解释
df.loc[df.cyl.isin([4,8]), :] 选择 cyl 等于 4和8的 所有行
sns.lmplot()
- x,y,data: seaborn 包接受DateFrame 对象的行标签作为输入,也就是选取列名为displ 的这一列数据作为x输入
- hue=‘cyl’:这里如果用hue,用col则2个点集会分别在2张图上显示而不是在同一张图上
- height,sapect: 整个画布的尺寸设置
- robust: 如果为真,表示回归要求是 鲁棒的
- palette: 色彩盘,我很喜欢他的配色除了 tab10 还有很多其他可用
- scatter_kws: 我们知道 seaborn 是matpoltlib 的高级封装 所以scatter_kws 表示原有的plt.scatter() 的关键字参数
图像
应用
图中2条回归线的意思两侧的点离这条线的距离方差最小,从直观上的解释。举个例子 有一个射击手瞄准这条线射击,所有弹孔离着根线越近则他的成绩越好,而方差表示他的发挥很稳定,每次都能打出8环。淡色的阴影面积表示,这些点落在直线周围的置信度。还是射击手的例子,假设这个射击手的发挥稳定程度不变,那么他下次射击的成绩大概率会在这个阴影里。
所以我们可以从这图上看出什么?
可以猜想如果汽车技术没什么革新,用原有的技术设计。要制造一台4杠,4.0排量的汽车,那么他的油耗应该是在每加仑15-20英里的样子。
如果你是个观察力非凡的画家,你可能会发现图中,有些点颜色较深而有些点颜色浅。这并不是绘图的错误,或者视觉差。这是因为有很多同样位置的点重叠在一起。许多统计数据都会有这种重叠的特点,比如高考的成绩,一类商品的热度。
那么如何用可视化的方式展现出同一车型的热度?带着这个问题我们下期见。
下期预告
例2 散点图重合点抖动与计数 —— 回到频次统计