Python Seaborn 数据相关性基本分析

Seaborn 是一个基于 matplotlib 的 Python 库,用于创建统计图形。它提供了一系列高级函数,可以轻松绘制各种类型的统计图形,例如散点图、条形图、箱线图和热图等。数据相关性 是指两个变量之间相互依赖的程度。可以用于分析数据相关性。通过绘制散点图、计算相关系数和绘制热图,可以快速了解数据集中的变量之间的关系。

1、数据清洗

进行Seaborn数据相关性分析之前,数据清洗是一个非常重要的步骤。数据清洗可以确保数据质量,从而使得分析结果更加可靠。

1)检查数据

使用df.info()了解数据的基本结构,包括行数、列数、每列的数据类型等。

参考文档:Python pandas.DataFrame.info函数方法的使用

import pandas as pd
import numpy as np

# 示例数据
data = {
    'Player': ['Player1', 'Player2', 'Player3', 'Player4', 'Player5'],
    'Points': np.random.randint(10, 35, size=5),
    'Assists': np.random.randint(1, 10, size=5),
    'Rebounds': np.random.randint(2, 15, size=5),
    'Steals': np.random.randint(0, 5, size=5),
    'Blocks': np.random.randint(0, 3, size=5)
}


# 创建DataFrame
df = pd.DataFrame(data)

# 使用df.info()查看数据的基本结构
df.info()

2) 缺失值处理

检查数据集中的缺失值,并决定如何处理它们。常见的处理方法包括填充缺失值、删除含有缺失值的行或列。

参考文档:

Python pandas.DataFrame.fillna函数方法的使用

Python pandas.DataFrame.dropna函数方法的使用

import pandas as pd
import numpy as np

# 示例数据
data = {
    'Player': ['Player1', 'Player2', 'Player3', 'Player4', 'Player5'],
    'Points': np.random.randint(10, 35, size=5),
    'Assists': np.random.randint(1, 10, size=5),
    'Rebounds': np.random.randint(2, 15, size=5),
    'Steals': np.random.randint(0, 5, size=5),
    'Blocks': np.random.randint(0, 3, size=5)
}


# 创建DataFrame
df = pd.DataFrame(data)

# 检查每列的缺失值数量
print(df.isnull().sum())

# 填充缺失值
df.fillna(value=0, inplace=True)  # 或使用其他合适的值

# 删除含有缺失值的行
df.dropna(inplace=True)

3) 异常值处理

识别并处理异常值。异常值可能是由输入错误或测量错误等原因造成的,可能会扭曲数据分析的结果。IQR(四分位数间距) 是衡量数据离散程度的一种指标。它等于第三四分位数 (Q3) 与第一四分位数 (Q1) 之差。将每个列中小于 Q1 - 1.5 * IQR 或大于 Q3 + 1.5 * IQR 的值视为异常值。

参考文档:Python Pandas DataFrame 多个条件过滤筛选数据的方法

import pandas as pd
import numpy as np

# 示例数据
data = {
    'Player': ['Player1', 'Player2', 'Player3', 'Player4', 'Player5'],
    'Points': np.random.randint(10, 35, size=5),
    'Assists': np.random.randint(1, 10, size=5),
    'Rebounds': np.random.randint(2, 15, size=5),
    'Steals': np.random.randint(0, 5, size=5),
    'Blocks': np.random.randint(0, 3, size=5)
}


# 创建DataFrame
df = pd.DataFrame(data)

# 基于IQR规则删除异常值
Q1 = df['Rebounds'].quantile(0.25)
Q3 = df['Rebounds'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['Rebounds'] < (Q1 - 1.5 * IQR)) |(df['Rebounds'] > (Q3 + 1.5 * IQR)))]

print(df)

4)数据类型转换

确保每列数据的类型是正确的,如将数字型的字符串转换为数值类型。

参考文档:Python pandas.to_numeric函数方法的使用

import pandas as pd
import numpy as np


data = {'col1': ['1', '2', 'three', '4', '5']}
df = pd.DataFrame(data)

# 使用 to_numeric 进行转换,并处理无法转换的值
df['col1'] = pd.to_numeric(df['col1'], errors='coerce')

print(df)

5)删除或处理重复值

检查并处理数据集中的重复行。

参考文档:

Python pandas.DataFrame.duplicated函数方法的使用

Python pandas.DataFrame.drop_duplicates函数方法的使用

import pandas as pd
import numpy as np

# 示例数据
data = {
    'Player': ['Player1', 'Player2', 'Player3', 'Player4', 'Player5'],
    'Points': np.random.randint(10, 35, size=5),
    'Assists': np.random.randint(1, 10, size=5),
    'Rebounds': np.random.randint(2, 15, size=5),
    'Steals': np.random.randint(0, 5, size=5),
    'Blocks': np.random.randint(0, 3, size=5)
}


# 创建DataFrame
df = pd.DataFrame(data)

# 检查重复行
print(df.duplicated().sum())

# 删除重复行
df.drop_duplicates(inplace=True)

print(df)

2、相关性分析

相关性矩阵是一个表格,其中显示了数据集中所有变量对之间的相关系数。Pandas的 corr() 方法可以用于计算DataFrame中所有列的成对相关系数,计算数据集中数值列的相关性。

参考文档Python pandas.DataFrame.corr函数方法的使用

import pandas as pd
import numpy as np

# 示例数据
data = {
    'Player': ['Player1', 'Player2', 'Player3', 'Player4', 'Player5'],
    'Points': np.random.randint(10, 35, size=5),
    'Assists': np.random.randint(1, 10, size=5),
    'Rebounds': np.random.randint(2, 15, size=5),
    'Steals': np.random.randint(0, 5, size=5),
    'Blocks': np.random.randint(0, 3, size=5)
}


# 创建DataFrame
df = pd.DataFrame(data)

# 计算相关性矩阵
correlation_matrix = df.corr()
print(correlation_matrix)

3、用 Seaborn 绘制相关性热图

利用 Seaborn 绘制相关性热图,以可视化不同变量之间的关系。heatmap() 函数可以用来可视化相关性矩阵。颜色深浅代表相关系数的大小,帮助快速识别高度相关的变量对。常用参数如下,

参数

描述

data

要在热图中显示的数据,通常是一个相关性矩阵。

annot

如果设置为True,则在每个方块内显示数值。

cmap

定义热图中颜色的映射。

linewidths

设置方块之间线的宽度。

linecolor

定义方块之间线的颜色。

cbar

是否显示颜色条或颜色标尺。默认为True。

cbar_kws

用于调整颜色条的参数,如大小、标签等的字典。

square

如果设置为True,则图中的方块将会是正方形的。

xticklabels

控制是否显示x轴的标签。可以是True、False或列表。

yticklabels

控制是否显示y轴的标签。可以是True、False或列表。

mask

一个布尔数组,用来隐藏热图中的特定数据。

vmin

用于标准化热图中的颜色的最小值。

vmax

用于标准化热图中的颜色的最大值。

center

设置颜色条的中心值。

使用示例:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 创建一个示例 NBA 数据集
data = {
    'Player': ['Player1', 'Player2', 'Player3', 'Player4', 'Player5'],
    'Points': np.random.randint(10, 35, size=5),
    'Assists': np.random.randint(1, 10, size=5),
    'Rebounds': np.random.randint(2, 15, size=5),
    'Steals': np.random.randint(0, 5, size=5),
    'Blocks': np.random.randint(0, 3, size=5)
}

# 转换为 DataFrame
df = pd.DataFrame(data)


# 首先,计算相关性矩阵
correlation_matrix = df.corr()

# 接着,使用Seaborn绘制热图
plt.figure(figsize=(12, 10))
sns.heatmap(correlation_matrix, 
            annot=True, 
            cmap='coolwarm', 
            linewidths=0.5, 
            linecolor='black', 
            cbar=True, 
            square=True,
            xticklabels=correlation_matrix.columns, 
            yticklabels=correlation_matrix.columns)

# 设置图表标题
plt.title('cjavapy')

plt.draw()
# 显示图表
plt.show()

推荐阅读
cjavapy编程之路首页