如何在选课DataFrame上应用Levenshtein distance计算行间相似度
计算学生课程行之间的Levenshtein相似度
首先还原你的数据集:
import pandas as pd data = { 'Student_ID': ['131X1319', '13212YX3', '13216131', '132921W6', '132W22YY', '132X219Y', '132Y231B'], 0: ['COMM1370', 'COMM2362', 'COMM1318', 'CRIJ3380', 'COMM2362', 'COMM2362', 'COMM2371'], 1: ['COMM1307', 'COMM4381', 'COMM2362', 'CRIJ3311', 'COMM1318', 'COMM1318', 'COMM2371'], 2: ['COMM1315', 'MATH1314', 'COMM4381', pd.NA, 'COMM4381', 'HIST1301', 'COMM1307'], 3: [pd.NA, 'COMM1318', 'PSYC3320', pd.NA, 'COMM3315', 'COMM4381', 'COMM3340'], 4: [pd.NA, 'COMM4396', 'COMM4396', pd.NA, 'COMM4340', 'POLS2301', 'COMM4310'], 5: [pd.NA, 'POLS2301', 'COMM4396', pd.NA, 'COMM3390', 'CRIJ1301', 'COMM1373'], 6: [pd.NA, 'COMM4362', 'SOCI3375', pd.NA, 'COMM1370', 'COMM4397', 'COMM1373'] } df = pd.DataFrame(data)
步骤1:处理每行课程数据
Levenshtein距离基于字符串计算,先把每行的非空课程拼接成空格分隔的字符串:
# 生成每行的课程字符串(忽略NaN) df['course_str'] = df.drop('Student_ID', axis=1).apply(lambda x: ' '.join(x.dropna()), axis=1)
步骤2:安装并导入Levenshtein库
先安装依赖:
pip install python-Levenshtein
导入库:
import Levenshtein
步骤3:计算距离矩阵和相似度矩阵
- Levenshtein距离:数值越小,两行课程序列越相似
- 相似度:用
1 - (距离 / 两个字符串的最大长度)转换为0-1范围的数值,越接近1相似度越高
# 获取学生ID和对应的课程字符串列表 student_ids = df['Student_ID'].tolist() course_strings = df['course_str'].tolist() # 初始化距离矩阵 distance_df = pd.DataFrame(index=student_ids, columns=student_ids) # 初始化相似度矩阵 similarity_df = pd.DataFrame(index=student_ids, columns=student_ids) # 填充矩阵 for i in range(len(student_ids)): str_i = course_strings[i] len_i = len(str_i) for j in range(len(student_ids)): str_j = course_strings[j] len_j = len(str_j) # 计算Levenshtein距离 dist = Levenshtein.distance(str_i, str_j) distance_df.iloc[i, j] = dist # 计算相似度 max_len = max(len_i, len_j) sim = 1 - (dist / max_len) if max_len != 0 else 1.0 similarity_df.iloc[i, j] = round(sim, 4)
查看结果
# 打印距离矩阵 print("Levenshtein距离矩阵:") print(distance_df) # 打印相似度矩阵 print("\n相似度矩阵:") print(similarity_df)
可选优化
- 若不关心课程顺序,可以先对每行课程排序后再拼接字符串
- 若要排除重复课程,可修改拼接逻辑为
' '.join(x.dropna().unique())
内容的提问来源于stack exchange,提问作者black street boy
相关产品推荐
相关产品推荐

