You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:34:56