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()