如何将3个人工标注的推特Excel数据集合并并基于投票分类器输出?
合并多标注人员推特数据集的投票分类实现
核心思路
以tweet id为唯一标识对齐三个数据集,对PTI和PMLN列的标注值执行多数投票(或自定义投票规则),生成最终的统一标注列,最后导出合并后的文件。
实现步骤(Python + Pandas)
1. 依赖安装
如果未安装pandas和Excel处理依赖,先执行:
pip install pandas openpyxl
2. 加载并合并数据集
假设三个Excel文件名为annotator1.xlsx、annotator2.xlsx、annotator3.xlsx,代码如下:
import pandas as pd # 加载三个标注数据集 df1 = pd.read_excel("annotator1.xlsx") df2 = pd.read_excel("annotator2.xlsx") df3 = pd.read_excel("annotator3.xlsx") # 按唯一标识合并,重命名标注列避免冲突 merged_df = df1.merge(df2, on=["tweet id", "name", "PPP", "full text"], suffixes=("_anno1", "_anno2")) merged_df = merged_df.merge(df3, on=["tweet id", "name", "PPP", "full text"], suffixes=("", "_anno3")) # 统一第三份数据的标注列命名 merged_df.rename(columns={"PTI": "PTI_anno3", "PMLN": "PMLN_anno3"}, inplace=True)
3. 实现投票逻辑
定义多数投票函数,处理单条数据的三个标注值:
def majority_vote(values): # 统计各标注值的出现次数 count = values.value_counts() # 返回出现次数最多的标注;若三方标注均不同(平局),返回None或自定义规则 if count.max() > 1: return count.idxmax() else: return None # 可替换为"不确定"、中位数0或其他处理方式
应用投票规则到目标列
merged_df["PTI_final"] = merged_df[["PTI_anno1", "PTI_anno2", "PTI_anno3"]].apply(majority_vote, axis=1)
merged_df["PMLN_final"] = merged_df[["PMLN_anno1", "PMLN_anno2", "PMLN_anno3"]].apply(majority_vote, axis=1)
### 4. 生成最终文件 保留所需列并导出: ```python # 筛选最终需要的列 final_df = merged_df[["name", "tweet id", "PPP", "PTI_final", "PMLN_final", "full text"]] # 导出到新Excel文件 final_df.to_excel("merged_annotations.xlsx", index=False)
自定义投票规则扩展
如果需要更灵活的标注合并逻辑:
- 加权投票:给不同标注人员的标注赋予权重(如专业标注员权重设为2),计算加权得分最高的标注值
- 平局处理:三方标注不同时,可选择保留所有原始标注、取中位数(0、1、-1的中位数为0),或标记后手动审核
注意事项
- 确保三个数据集的
tweet id完全匹配,否则合并时会丢失数据;若存在缺失,可先对齐tweet id,缺失标注补为NaN - 如果标注值是字符串类型(如"0"而非数字0),先做类型转换:
df["PTI"] = pd.to_numeric(df["PTI"], errors="coerce")
内容的提问来源于stack exchange,提问作者ZAIN UL ABIDIN QADRI
相关产品推荐
相关产品推荐

