尽管单变量和双变量分析能提供数据聚焦的视图,但同时理解多个变量间的联系对于展现复杂结构常常很必要。逐对检查变量可能费力,特别是当数据集包含许多特征时。我们需要一种方法来快速展示多个变量之间关系的方法。这就是对图的用武之地。一个对图,通常使用Python中的Seaborn库生成,它会创建一个图矩阵,显示数据集中变量间的成对关系。这是获取多个变量如何交互的高级概览的一种高效方法。理解对图网格seaborn.pairplot()函数是完成此任务的主要工具。当你调用sns.pairplot(dataframe)时,它会生成一个坐标轴网格,具体如下:对角线上的坐标轴:对角线上的每个图都显示单个变量的单变量分布。默认情况下,这通常是直方图或核密度估计 (KDE) 图,让你能够快速评估图中每个变量的形状、中心和分散程度。非对角线上的坐标轴:非对角线上的每个图表示两个不同变量之间的关系。y轴上的变量对应行,x轴上的变量对应列。通常,这些是散点图,有助于发现相关性、趋势和潜在聚类。让我们假设我们有一个Pandas DataFrame df,其中包含feature_A、feature_B和feature_C等数值特征。一个基本的对图可以轻松生成:import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # Create a sample DataFrame for demonstration np.random.seed(42) data = { 'feature_A': np.random.rand(50), 'feature_B': np.random.randn(50), 'feature_C': np.random.randint(1, 10, 50) } df = pd.DataFrame(data) # Generate and display the basic pair plot sns.pairplot(df) plt.show()执行此操作将生成一个3x3的网格(因为我们有3个特征)。左上角的图显示feature_A的分布。中间的图显示feature_B的分布。右下角的图显示feature_C的分布。第一行第二列的图显示feature_A(y轴)与feature_B(x轴)的关系。第二行第一列的图显示feature_B(y轴)与feature_A(x轴)的关系,所有成对关系依此类推。Understanding the Pair Plot Grid增强对图以获取更全面的理解基本对图很有用,但Seaborn提供了几个参数来自定义它并提取更多信息:按类别着色 (hue):这是最强大的功能之一。如果你的DataFrame包含一个分类列(例如,'species'、'customer_segment'),你可以使用hue参数为散点图中的点着色,并根据此类别在对角线图上叠加分布。这立即有助于直观地看出不同组之间关系或分布是否存在差异。import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # Create a sample DataFrame with a categorical column np.random.seed(42) data = { 'petal_length': np.random.normal(4.5, 1.5, 100), 'petal_width': np.random.normal(1.2, 0.5, 100), 'species': np.random.choice(['Setosa', 'Versicolor', 'Virginica'], 100) } df_iris = pd.DataFrame(data) # Use hue to color the points by species sns.pairplot(df_iris, hue='species', palette='viridis') plt.show()使用hue通常会显现出分离、聚类或子组内不同的趋势,这些在没有hue的情况下是不可见的。 Coloring by Category更改图类型 (kind、diag_kind):你可以控制使用的图类型。diag_kind:对于对角线上的单变量图,设置为'hist'(默认)或'kde'。KDE图对于展示分布形状可以更平滑。kind:对于非对角线上的双变量图,设置为'scatter'(默认)或'reg'。使用'reg'会在散点图上添加线性回归拟合和置信区间,有助于展示线性趋势。<!-- end list -->import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # Create a sample DataFrame with a linear relationship np.random.seed(42) data = { 'x': np.random.normal(10, 2, 50), 'y': 2 * np.random.normal(10, 2, 50) + np.random.normal(0, 1, 50) } df_linear = pd.DataFrame(data) # Use KDE on the diagonal and regression plots off-diagonal sns.pairplot(df_linear, kind='reg', diag_kind='kde') plt.show()Changing Plot Types选择变量 (vars):如果你的数据集有许多列,为所有列生成对图可能计算成本高且视觉上令人难以承受。你可以使用vars参数指定列的子集。import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # Create a DataFrame with multiple features np.random.seed(42) data = { 'feature_A': np.random.rand(50), 'feature_B': np.random.randn(50), 'feature_C': np.random.randint(1, 10, 50), 'feature_D': np.random.gamma(2, 2, 50), 'feature_E': np.random.beta(2, 5, 50) } df_large = pd.DataFrame(data) # Plot relationships only for specific columns sns.pairplot(df_large, vars=['feature_A', 'feature_C', 'feature_E']) plt.show()Selecting Variables自定义图表美观 (plot_kws、diag_kws):你可以传递关键字参数字典来微调非对角线图 (plot_kws) 和对角线图 (diag_kws) 的外观。这允许你控制点大小 (s)、透明度 (alpha)、直方图箱数 (bins) 等方面。import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # Create a sample DataFrame np.random.seed(42) data = { 'x': np.random.normal(10, 2, 200), 'y': np.random.normal(15, 3, 200) } df_custom = pd.DataFrame(data) # Make scatter points semi-transparent and adjust histogram bins sns.pairplot(df_custom, plot_kws={'alpha': 0.6, 's': 50}, diag_kws={'bins': 25}) plt.show()Customizing Plot Aesthetics在EDA中解释对图对图在EDA中有多重用途:关系发现:快速识别成对数值变量之间潜在的线性或非线性关系。分布检查:评估单个变量的分布。它们是否偏斜?是否多峰?是否近似正态?聚类识别:散点图,尤其是在使用hue着色时,可以显示数据中的自然分组或聚类。异常值检测:极端点在单变量和双变量图中都可能显眼。组间比较:使用hue可以直接比较不同类别间的关系和分布。思考这个示例可视化,它表示一个可能出现在对图非对角线上的散点图,并使用hue按分类变量着色。{"layout":{"xaxis":{"title":"萼片长度 (厘米)"},"yaxis":{"title":"萼片宽度 (厘米)"},"legend":{"title":"物种"},"title":"按物种划分的萼片宽度与长度","margin":{"l":50,"r":50,"t":50,"b":50}},"data":[{"type":"scatter","mode":"markers","x":[5.1,4.9,4.7,4.6,5.0,5.4,4.6,5.0,4.4,4.9],"y":[3.5,3.0,3.2,3.1,3.6,3.9,3.4,3.4,2.9,3.1],"marker":{"color":"#228be6","size":8},"name":"山鸢尾"},{"type":"scatter","mode":"markers","x":[7.0,6.4,6.9,5.5,6.5,5.7,6.3,4.9,6.6,5.2],"y":[3.2,3.2,3.1,2.3,2.8,2.8,3.3,2.4,2.9,2.7],"marker":{"color":"#12b886","size":8},"name":"变色鸢尾"},{"type":"scatter","mode":"markers","x":[6.3,5.8,7.1,6.3,6.5,7.6,4.9,7.3,6.7,7.2],"y":[3.3,2.7,3.0,2.9,3.0,3.0,2.5,2.9,2.5,3.6],"marker":{"color":"#fab005","size":8},"name":"维吉尼亚鸢尾"}]}散点图示例,显示萼片宽度与萼片长度的关系,并按鸢尾花物种着色。这样的图有助于识别不同物种是否表现出这两种特征之间不同的关系。考虑事项与局限尽管功能强大,但对图也存在局限:可伸缩性:随着变量数量的增加,性能会下降,图表变得杂乱且难以解释。对于包含数十或数百个变量的数据集,对图通常不实用。在这种情况下,首先查看相关性热图以找出潜在的有趣成对关系,或者使用降维技术可能更合适。重叠绘制:在数据点众多的数据集中,散点图可能会出现过度绘点问题,即点严重重叠,掩盖了底层关系。使用透明度 (alpha) 或对数据进行采样有助于缓解此问题,但这仍然是一个挑战。侧重于成对关系:对图仅显示成对关系。它们可能无法显示涉及三个或更多变量同时进行的复杂交互。尽管有这些局限,对图在EDA的初始阶段仍是一种标准且有价值的技术,它能提供数据特征中可管理子集内成对交互的全面视觉概括。它们有效地弥合了单变量/双变量分析与更复杂的建模步骤之间的差距。