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