Visualizations
先简单看了一下可视化的例子,然后从开始讲数据可视化。讲解了多种常见的可视化图形。总而言之,这节课主要在将可视化实践
数据可视化的目标
- To help your own understanding of your data/results.
- Key part of exploratory data analysis.
- Useful throughout modeling as well.
- Lightweight, iterative and flexible.
- To communicate results/conclusions to others.
- Highly editorial and selective.
- Be thoughtful and careful!
- Fine tuned to achieve a communications goal.
- Often time-consuming: bridges into design, even art.
分布
- 每个样本值只计算一次,例如上课的学生中,你不可能同时是大二,又是大三。
- 总的百分比为100
如何可视化数据分布?条形图
条形图
条形图通常用来展示 类别型特征变量的分布
Bar Plots are the most common way of displaying the distribution of a qualitative (categorical) variable.
- For example, the proportion of adults in the upper, middle, and lower classes.
- Lengths encode values.
- Widths encode nothing!
- Color could indicate a sub-category (but not necessarily).

# 直接用pandas绘制,但是基本不会用这种方式 births['Maternal Smoker'].value_counts().plot(kind = 'bar') # 用 matplotlib.pyplot 绘制,太过底层了,用的也不多 ms = births['Maternal Smoker'].value_counts(); plt.bar(ms.index, ms); # seaborn 使用更简单。外观更佳。通常首选 import seaborn as sns sns.countplot(data = births, x = 'Maternal Smoker'); # plotly 是一个更为现代的库,是可交互的(不是构建于matplotlib之上) import plotly.express as px px.histogram(births, x = 'Maternal Smoker', color = 'Maternal Smoker')
直方图
直方图是一种常用的统计图表,用于呈现数据(连续型变量)分布的情况。它将数据集分成多个相互排斥的区间,然后将每个区间内的数据数量统计出来。然后,把每个区间的数量用柱状图的形式呈现出来,形成由一系列竖直或水平的条形组成的图表。每个条形的高度表示该区间内数据的频数或频率,而条形的宽度可以增加或减少,以便覆盖更多或更少的数据。通过直方图,我们可以查看数据的分布规律和趋势,找到数据的平均值,中位数以及极值,还可以检查是否存在异常值和不一致的数据。
# 当然可以按照 条形图的方式来绘制,把每个数值当作一个类别 sns.countplot(data = births, x = 'Maternal Pregnancy Weight'); # 用一组数据当作一个类别 sns.histplot(data = births, x = 'Maternal Pregnancy Weight'); # 用 plotly 绘制可交互的图像 px.histogram(births, x = 'Maternal Pregnancy Weight')
可以在直方图上添加 rugplot 信息来查看每一个bin中数的分布。
sns.histplot(data = births, x = 'Maternal Pregnancy Weight'); sns.rugplot(data = births, x = 'Maternal Pregnancy Weight', color = "red");
Rugplot是一种数据可视化方法,其主要功能是在坐标轴上显示给定数据集中每一个观测值的实际位置。它的形式是一组垂直于坐标轴的“毛毯头”,每个毛毯头代表了数据中的一个观测值。在rugplot中,毛毯头的数量与数据集的大小相等,并且它们被放置在一个水平或垂直的线上,以显示它们在数值轴上的位置。rugplot通常与其他类型的图表(如直方图和核密度图)一同使用,以帮助理解数据集的分布和趋势。

rugplot的好处是:它提供了一种简洁而直观的方式来显示个别数据点的分布,从而更好地帮助识别离群值和异常观测值。rugplot也经常用于统计模型诊断和调试,因为它允许你对模型的预测进行可视化,并查看预测误差的分布情况。
如何描述直方图
直方图允许我们通过形状来得到数据的分布,那如何描述直方图呢?
- 偏度和尾部。
- 左偏和右偏。
- 左尾和右尾。
- 异常值。
- 模式
偏度和尾部

异常值

模式

表面上感觉上图又两个mode,但是通过核密度估计可以发现,只有一个mode,因为密度曲线很平滑

KDEs and Modes

直方图于密度,在绘制直方图的时候,可以不计数,而是选择计算密度,如下:

图中所有方框的面积加起来为1,一次每个方框的高度,有方框的宽度以及落在开范围内的样本数量决定。高度 = (落在该范围的样本数量 / 样本总数) / 方框宽度
箱线图
先了解一下分位数的概念,分为第一四分位数,第二四分位数,第三四分位数

将上图中红色区域的样本去掉,只留下蓝色样本,则可以绘制为箱线图中的”箱“:

箱线图中的每条线代表含义为:


小提琴图
小提琴图类似于箱线图,但除了各个四分位数值之外,还显示了平滑的密度曲线。 图形的“宽度”现在具有意义!为样本的密度

连续性变量特征分布的比较
重叠的直方图和密度曲线 (不推荐,原因参加图中)

# First: sns.distplot(nsm_bweights, bins=bw_bins, kde=False, hist_kws=dict(ec='w'), label='non smoker'); sns.distplot(sm_bweights, bins=bw_bins, kde=False, hist_kws=dict(ec='w'), label='smoker'); plt.legend(); # Second: sns.distplot(nsm_bweights, bins=bw_bins, hist_kws=dict(ec='w'), label='non smoker'); sns.distplot(sm_bweights, bins=bw_bins, hist_kws=dict(ec='w'), label='smoker'); plt.legend(); # Third: sns.distplot(nsm_bweights, hist=False, label='non smoker'); sns.distplot(sm_bweights, hist=False), label='smoker'); plt.legend();
箱线图和小提琴图并排展示


连续型变量相关性分析
算是下节课的热身,简单探讨如何揭示连续变量之间的关系
散点图


可见,使用seaborn绘制散点图,可以给第三个维度上颜色,此处第三个维度为是否抽烟。
上图有个问题就是很多点重合了,应该如何解决呢? 在横轴加随机抖动

至于是否合理,视目的而看
Hex plots
可以看作是一个二维的直方图,显示了联合分布。XY平面被分成六边形箱子。通常,更深色的六边形箱子表示更大的密度/频率。
为什么要用六边形而不是正方形呢?更容易看到线性关系。更有效地覆盖区域。正方形的视觉偏差 - 更容易看出垂直和水平线。

等高线图(Contour plots)

总结
