Python中的数据可视化
7分钟阅读
在Python中进行交互式讲故事的数据可视化实践
我想用 "一图胜千言 "这句老话来开始这篇文章。这就是数据可视化的意义所在。数据可视化是数据科学和数据分析的一个组成部分。它不仅有助于我们理解数据,而且还能以更容易理解的图形形式呈现数据的洞察力。
比方说,我们正在进行一个数据科学项目。客户不会对我们代码的语法、模型的复杂性等感兴趣。主要的重点是我们能从数据中获得什么可操作的洞察力,以及如何使用它来解决业务问题。为了传达这些信息,没有比数据可视化更好的方法了。
在这篇文章中,让我们试着了解我们如何在Python中执行数据可视化任务。
注意:数据可视化是探索性数据分析(EDA)的一部分。所以我建议你在学习数据可视化之前先看一下我关于EDA的文章。点击这里阅读我在Medium上关于EDA的文章。
通过Python中一个有趣的用例来了解数据可视化。
数据集。为了理解EDA,我们将在乳腺癌威斯康辛(诊断)数据集上工作。在这里,特征是从乳腺肿块的细针抽吸物(FNA)的数字化图像中计算出来的。它们描述了图像中存在的细胞核的特征。你可以在Kaggle或UCI ML资源库中找到这个数据集。你也可以从这里下载该数据集。
这个数据集的关键数据可视化任务。
- 分类列的计数图
- 所有列的分布图
- 对子图
- 检查异常值
- 相关矩阵
- 从EDA和数据可视化中进行推断
导入数据可视化库。
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
import seaborn as sns
Matplotlib和Seaborn是Python中两个主要的数据可视化库。还有其他一些库,如Plotly和GGplot。
注意:我在上一篇文章中解释了如何对这个数据集做一些基本的探索性数据分析和数据处理。所以这段代码将是它的延续。
- 1.分类列的计数图。
这个数据集只包含一个分类变量("目标"),有两个类别。0(良性)和1(恶性)。当我们有分类变量时,我们将用计数图来绘制,当我们有数字变量时,我们将使用分布图。
(在这篇文章中,我将交替使用变量和列的术语,因为它们的意思是一样的)
sns.countplot(x='target', data=breast_cancer_data
输出
我们可以清楚地看到,标签为 "0 "的数据点的数量高于标签为 "1 "的。这意味着我们在数据集中有更多的良性病例,而不是恶性病例。因此,我们可以说,这个数据集稍微有点不平衡。计数图将显示每个类别的总计数。
- 2.所有列的分布图。
现在我们可以为所有其他列建立分布图,因为它们包含数值。分布图告诉我们,数据是正态分布还是存在一些偏斜性。
对称分布代表正态分布
当数据中的偏度较大时,我们可能需要做一些转换,以便在训练机器学习模型时获得更好的结果。
for column in breast_cancer_data:
sns.deposot(x=column, data=breast_cancer_data)
这里,我们正在执行一个for循环,它将为数据集中的所有列创建分布图。我将展示 "area_mean "列的分布图。
我们可以看到,"面积_平均值 "列的数据是右偏的。同样地,在这个数据集中,大多数列都有右偏性。我们将在特征工程部分处理这个问题。
这就是我们所说的单变量分析,我们一次只取一个变量并对其进行分析。当我们一次取两个变量并试图找到它们之间的关系时,这被称为双变量分析。当我们有两个以上的变量时,它被称为多变量分析。
-
3.配对图。
成对图给出了数据集中的成对关系。比方说,我们在一个数据集中有10个变量。当我们用这些数据来实现配对图时,它将在这10个变量之间建立图谱。例如,第一个变量将被作为X轴的值,其他变量将被单独作为Y轴的值。结果是,你将有10个单独的第一变量的图。对其他变量也将重复这一过程。对于这个特定的数据集,我们不会创建一个对子图,因为我们有大约30个不同的变量,绘制它需要很长的时间。因此,对于有很多列的数据集,你可以跳过这一步。
对子图的例子。
image.png
对子图的例子。
企鹅数据的配对图。来源Seaborn文档(当我们在x轴和y轴上都有相同的变量时,我们将得到该变量的分布。你可以在对角线图中看到这一点)
成对图背后的想法是为了了解数据中存在的变量之间的关系。另外,我们也可以使用相关矩阵来找到这种关系,我们将在本篇文章的后面讨论。
如果你想创建一个配对图,你可以使用函数,
sns.pairplot(dataframe_name)
- 检查离群值。
异常值检测是我们必须要做的重要任务之一。大多数机器学习模型,如回归模型、K-Nearest Neighbors等,都对离群值很敏感。另一方面,像随机森林这样的模型不受异常值的影响。因此,我们应该在将数据送入这些模型之前处理这些异常值。这也将在特征工程部分进行。
我们将创建一个盒状和须状图,以检查离群值。
for column in breast_cancer_data:
plt.figure()
breast_cancer_data.boxplot([column])
上述For循环将为数据集中的所有列创建箱形图。我将单独展示 "radius_mean "变量的箱形图。
上部晶须上方和下部晶须下方的圆圈代表离群值。在这里,我们仅在上限范围内有离群值。我将另外开一篇文章来解释离群值和箱形图的意义。这超出了本帖的范围。
- 相关矩阵。
建立一个相关矩阵是数据可视化的一个重要步骤。相关矩阵的主要目的是了解数据集中的变量之间的相关性(换句话说,关系)。它在特征选择中非常有帮助,选择重要的特征并删除不相关和不必要的特征。
correlation_matrix = breast_cancer_data.corr()
plt.figure(figsize=(20,20))
sns.heatmap(correlation_matrix, cbar=True, fmt=' .1f', annot=True, cmap=' Blues')
plt.savefig('Correlation Heat map')
我们将创建一个热图来可视化变量之间的相关关系。
相关值的范围从+1到-1。如果两个变量之间的相关性为+1,这意味着一个变量的值增加1个单位,如果另一个变量增加1个单位,反之亦然。这就是所谓的正相关。如果两个变量之间的相关性为-1,这意味着如果另一个变量增加1个单位,一个变量的值就会减少1个单位,反之亦然。这就是所谓的负相关。
你可以把正相关理解为直接比例关系,把负相关理解为反比例关系。
确定相关关系的重要性。正如我前面提到的,相关关系在特征选择中非常有帮助。当我们有两个相关度很高的自变量时,我们应该删除其中一个,因为我们遇到了多重共线性问题。在这些情况下,与这两个高度相关的变量相关的系数将是不可靠的。
我们将在特征选择中进一步讨论这个问题。
- 从EDA和数据可视化中推断。
数据集中没有缺失值。
除了目标列之外,所有的变量都有连续的数值。
大多数特征的平均数略高于中位数。所以它是右偏的。这在分布图中可以看到。
数据集中有轻微的不平衡(良性(0)病例多于恶性(1)病例)。参考计数图。
与良性病例相比,恶性病例的大多数特征的平均值明显较大(Groupby)。
大多数特征都有离群值。
相关矩阵显示,大多数特征是高度相关的。因此,我们可以在特征选择中删除某些特征。
结束语
这些是我们可以为我们的数据集创建的重要图表。还有其他一些图,如饼图、散点图等。我们必须使用的图取决于我们工作的数据集和我们正在寻找的洞察力。我们从EDA和数据可视化中获得的这些信息,在我们进入特征工程和模型训练时,将对我们有所帮助。
我建议你选择一个不同的数据集,并尝试所有这些探索性数据分析和数据可视化技术,以更好地了解该数据集。
机器学习和数据科学讲师
数据可视化
数据科学
机器学习
数据分析
探索性数据分析