14000行CSV问卷MCQ-MR数据的Bitstring相似度评分计算需求
处理CSV中多选多选题的相似度评分替换方案
嘿,针对你手里14000行问卷CSV里的多选多选题(MCQ-MR)处理需求,我整理了一套完全契合你规则的解决方案——核心就是用汉明距离衍生的相似度评分,正好满足“单选项差异的位串相似度更高”的要求。
为什么选汉明距离?
你的需求本质上就是要量化两个二进制位串的差异程度:差异越少,相似度越高。汉明距离天生就是干这个的——它直接统计两个位串中不同位的数量。我们只需要把它转成相似度:相似度 = 总选项数 - 汉明距离
比如M13有8个选项:
- 完全相同的位串相似度是8(满分)
- 仅单个选项不同的话,相似度就是7(8-1)
- 差异越多,分数越低,完美匹配你的规则。
具体实现(Python代码示例)
假设你的CSV里M13题的8个选项列是M13_1到M13_8,用pandas+numpy处理14000行数据完全没压力,效率拉满:
第一步:读数据,提取目标列
import pandas as pd import numpy as np # 读取你的问卷CSV df = pd.read_csv("你的问卷文件名.csv") # 提取M13的所有选项列(根据实际列名调整,比如如果列名是M13_A、M13_B就改匹配规则) m13_cols = [col for col in df.columns if col.startswith("M13_")] m13_data = df[m13_cols].values # 转成numpy数组,方便批量运算
第二步:计算相似度评分
分两种常见场景,你可以按需选:
场景1:和指定基准样本比相似度
比如你想拿第一个受访者的选择当基准,算所有人和他的相似度:
# 取第一个样本的位串当基准 base_bitstring = m13_data[0] # 批量计算汉明距离:逐位对比,统计不同的数量 hamming_distances = np.sum(m13_data != base_bitstring, axis=1) # 转成相似度评分(总选项数是8) similarity_scores = 8 - hamming_distances # 把原来的8个M13列删掉,换成新的评分列 df = df.drop(m13_cols, axis=1) df["M13_similarity"] = similarity_scores
场景2:和所有其他样本的平均相似度
如果想知道每个受访者的选择和整体人群的相似程度(和其他人的平均相似度):
total_options = len(m13_cols) avg_similarity = np.zeros(len(m13_data)) # 初始化存储结果的数组 for i in range(len(m13_data)): # 计算当前样本和所有其他样本的汉明距离 distances = np.sum(m13_data != m13_data[i], axis=1) # 排除自己(自己和自己距离为0,不算入平均) other_distances = distances[distances != 0] # 转成平均相似度 avg_similarity[i] = total_options - np.mean(other_distances) # 替换原列 df = df.drop(m13_cols, axis=1) df["M13_avg_similarity"] = avg_similarity
第三步:保存处理好的数据
df.to_csv("处理后的问卷数据.csv", index=False)
额外小贴士
- 其他MCQ-MR题(比如M10)直接替换列名就能复用这套代码
- 如果某些选项的权重更高(比如你觉得某个选项的差异更重要),可以修改汉明距离的计算逻辑,给对应位加权重再求和
- 14000行数据用numpy的向量运算超快,完全不用担心卡顿
内容的提问来源于stack exchange,提问作者gkuhu
相关产品推荐
相关产品推荐

