📜  散点图矩阵

📅  最后修改于: 2022-05-13 01:54:53.476000             🧑  作者: Mango

散点图矩阵

在数据集中,对于k组变量/列 (X 1 , X 2 , ....X k ),散点图矩阵以矩阵的形式绘制不同变量之间的所有成对散点图。

散点图矩阵回答以下问题:

  • 不同变量之间是否存在成对关系?如果存在关系,这些关系的性质是什么?
  • 数据集中是否有异常值?
  • 数据集中是否存在基于特定变量的分组聚类?

对于数据集中的k个变量,散点图矩阵包含 k 行和 k 列。每行和每列表示为单个散点图。每个单独的图 (i, j) 可以定义为:

  • 纵轴:变量X j
  • 水平轴:变量X i

以下是我们在绘制散点图矩阵时考虑的一些重要因素:

  • 位于对角线上的图只是一条 45 线,因为我们在这里绘制 X i与 X i。但是,我们可以在对角线上绘制 X i的直方图,或者将其留空。
  • 由于 X i vs X j等价于 X j vs X i轴反转,我们也可以省略对角线下方的图。
  • 如果我们在图中的散点上叠加一些线图以更好地理解该图会更有帮助。
  • 成对图的想法也可以扩展到不同的其他图,例如分位数-分位数图或双直方图。

执行

  • 对于这个实现,我们将使用泰坦尼克号数据集。这个数据集可以从 Kaggle 下载。在绘制散点矩阵之前,我们将对数据帧执行一些预处理操作,以获得所需的形式。
Python3
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
% matplotlib inline
  
# load titanic dataset
titanic_dataset = pd.read_csv('tested.csv.xls')
titanic_dataset.head()
# Drop some unimportant columns in the dataset.
titanic_dataset.drop(['Name', 'Ticket','Cabin','PassengerId'],axis=1, inplace=True)
  
# check for different data types
titanic_dataset.dtypes
  
# print unique values of dataset
titanic_dataset['Embarked'].unique()
titanic_dataset['Sex'].unique()
  
# Replace NAs with mean
titanic_dataset.fillna(titanic_dataset.mean(), inplace=True)
  
# convert some column into integer for representation in 
# scatter matrix
titanic_dataset["Sex"] = titanic_dataset["Sex"].cat.codes
titanic_dataset["Embarked"] = titanic_dataset["Embarked"].cat.codes
  
titanic_dataset.head()
  
# plot scatter matrix using pandas and matplotlib
survive_colors = {0:'orange', 1:'blue'}
pd.plotting.scatter_matrix(titanic_dataset,figsize=(20,20),grid=True,
                           marker='o', c= titanic_dataset['Survived'].map(colors))
  
  
# plot satter matrix using seaborn
sns.set_theme(style="ticks")
sns.pairplot(titanic_dataset, hue='Survived')


PassengerId    Survived    Pclass    Name    Sex    Age    SibSp    Parch    Ticket    Fare    Cabin    Embarked
0    892    0    3    Kelly, Mr. James    male    34.5    0    0    330911    7.8292    NaN    Q
1    893    1    3    Wilkes, Mrs. James (Ellen Needs)    female    47.0    1    0    363272    7.0000    NaN    S
2    894    0    2    Myles, Mr. Thomas Francis    male    62.0    0    0    240276    9.6875    NaN    Q
3    895    0    3    Wirz, Mr. Albert    male    27.0    0    0    315154    8.6625    NaN    S
4    896    1    3    Hirvonen, Mrs. Alexander (Helga E Lindqvist)    female    22.0    1    1    3101298    12.2875    NaN    S
PassengerId      int64
Survived         int64
Pclass           int64
Sex             object
Age            float64
SibSp            int64
Parch            int64
Fare           float64
Embarked        object
dtype: object
Survived    Pclass    Sex    Age    SibSp    Parch    Fare    Embarked
0    0    3    1    34.5    0    0    7.8292    1
1    1    3    0    47.0    1    0    7.0000    2
2    0    2    1    62.0    0    0    9.6875    1
3    0    3    1    27.0    0    0    8.6625    2
4    1    3    0    22.0    1    1    12.2875    2

Matplotlib 散点矩阵

Seaborn 散点矩阵

参考:

  • NIST手册