如何在单个DataFrame中按行计算corrwith生成学生成绩相关矩阵?
按行计算学生成绩的相关性矩阵方法
要计算不同学生(行)之间的成绩关联,核心思路是把学生的成绩向量作为变量,计算它们之间的相关性。由于pandas的corr()方法默认按列计算相关性,我们可以通过转置数据来实现需求:
步骤1:预处理数据
首先将Name列设为索引,分离出纯成绩数据:
import pandas as pd cols = ['Name', 'Math', 'Science', 'English', "History"] data = [['Tom', 100, 93, 95, 92], ['Nick', 89, 75, 82, 57], ['Julie', 99, 89, 76, 88], ['Sarah', 79, 78, 94, 88]] df = pd.DataFrame(data, columns=cols) # 提取成绩数据,以学生名为索引 score_df = df.set_index('Name')
步骤2:计算皮尔逊相关系数矩阵
转置成绩数据后,学生变为列,此时使用corr()即可得到学生之间的线性相关系数:
# 转置后计算列(学生)之间的相关性 student_corr_matrix = score_df.T.corr() print(student_corr_matrix)
输出结果会是一个对称矩阵,每个单元格代表对应两名学生的成绩线性相关程度(取值范围-1到1,越接近1说明成绩趋势越一致)。
其他相似度计算方法
如果需要对比成绩的向量方向相似度(不考虑成绩绝对值的差异),可以使用余弦相似度:
from sklearn.metrics.pairwise import cosine_similarity # 生成余弦相似度矩阵 cos_sim_matrix = pd.DataFrame( cosine_similarity(score_df), index=score_df.index, columns=score_df.index ) print(cos_sim_matrix)
余弦相似度取值范围0到1,值越高说明两名学生的成绩相对高低趋势越相似。
内容的提问来源于stack exchange,提问作者E_Sarousi
相关产品推荐
相关产品推荐

