趋近智
尽管单变量和双变量分析能提供数据聚焦的视图,但同时理解多个变量间的联系对于展现复杂结构常常很必要。逐对检查变量可能费力,特别是当数据集包含许多特征时。我们需要一种方法来快速展示多个变量之间关系的方法。
这就是对图的用武之地。一个对图,通常使用Python中的Seaborn库生成,它会创建一个图矩阵,显示数据集中变量间的成对关系。这是获取多个变量如何交互的高级概览的一种高效方法。
seaborn.pairplot()函数是完成此任务的主要工具。当你调用sns.pairplot(dataframe)时,它会生成一个坐标轴网格,具体如下:
让我们假设我们有一个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轴)的关系,所有成对关系依此类推。
基本对图很有用,但Seaborn提供了几个参数 (parameter)来自定义它并提取更多信息:
按类别着色 (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的情况下是不可见的。

更改图类型 (kind、diag_kind):你可以控制使用的图类型。
diag_kind:对于对角线上的单变量图,设置为'hist'(默认)或'kde'。KDE图对于展示分布形状可以更平滑。kind:对于非对角线上的双变量图,设置为'scatter'(默认)或'reg'。使用'reg'会在散点图上添加线性回归拟合和置信区间,有助于展示线性趋势。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()

选择变量 (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()

自定义图表美观 (plot_kws、diag_kws):你可以传递关键字参数字典来微调 (fine-tuning)非对角线图 (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()

对图在EDA中有多重用途:
hue着色时,可以显示数据中的自然分组或聚类。hue可以直接比较不同类别间的关系和分布。思考这个示例可视化,它表示一个可能出现在对图非对角线上的散点图,并使用hue按分类变量着色。
散点图示例,显示萼片宽度与萼片长度的关系,并按鸢尾花物种着色。这样的图有助于识别不同物种是否表现出这两种特征之间不同的关系。
尽管功能强大,但对图也存在局限:
alpha) 或对数据进行采样有助于缓解此问题,但这仍然是一个挑战。尽管有这些局限,对图在EDA的初始阶段仍是一种标准且有价值的技术,它能提供数据特征中可管理子集内成对交互的全面视觉概括。它们有效地弥合了单变量/双变量分析与更复杂的建模步骤之间的差距。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•