如何基于医嘱数据挖掘疾病与药物的强关联配对
问题描述
我拥有如下数据:
| Drugs | Diseases |
|---|---|
| drug1,drug2,drug3 | dis1,dis3 |
| drug1,drug4 | dis1,dis2 |
| drug1,drug2,drug4,drug7 | dis1, dis3,dis4,dis7 |
| drug1,drug3 | dis1,dis3 |
- 说明:第一列为患者服用的药物;第二列为医生诊断的疾病;
- 需求:找出所有
(diseaseX,drugY)配对——即drugY用于治疗diseaseX。示例中应输出(dis1,drug1),因为二者总是同时出现。如何针对更多同类格式的数据找出所有这类配对?
解决方案
要找出这类始终共同出现的疾病-药物配对,可以按以下步骤操作:
1. 拆解记录列表
先把每行中用逗号分隔的药物、疾病拆分成独立元素,比如第一条记录拆为:
- 药物列表:
[drug1, drug2, drug3] - 疾病列表:
[dis1, dis3]
2. 统计关联记录
对每个疾病X:
- 找出所有包含X的记录行
- 检查这些行里是否每一行都包含某个药物Y
- 满足条件的话,
(X,Y)就是目标配对
3. 代码自动化实现(Python示例)
数据量大时手动统计效率低,用代码可以快速处理:
# 模拟输入数据(已完成拆分) data = [ {"drugs": ["drug1", "drug2", "drug3"], "diseases": ["dis1", "dis3"]}, {"drugs": ["drug1", "drug4"], "diseases": ["dis1", "dis2"]}, {"drugs": ["drug1", "drug2", "drug4", "drug7"], "diseases": ["dis1", "dis3", "dis4", "dis7"]}, {"drugs": ["drug1", "drug3"], "diseases": ["dis1", "dis3"]} ] # 记录每个疾病出现的所有行索引 disease_rows = {} for row_idx, record in enumerate(data): for dis in record["diseases"]: if dis not in disease_rows: disease_rows[dis] = set() disease_rows[dis].add(row_idx) # 记录每个药物出现的所有行索引 drug_rows = {} for row_idx, record in enumerate(data): for drug in record["drugs"]: if drug not in drug_rows: drug_rows[drug] = set() drug_rows[drug].add(row_idx) # 筛选符合条件的配对 target_pairs = [] for dis, dis_row_set in disease_rows.items(): for drug, drug_row_set in drug_rows.items(): # 检查疾病出现的所有行,药物都存在其中 if dis_row_set.issubset(drug_row_set): target_pairs.append((dis, drug)) print("目标配对:", target_pairs) # 输出结果:目标配对: [('dis1', 'drug1')]
4. 灵活扩展(可选)
如果需要更贴合实际的筛选逻辑,可以调整判断条件:
- 按共同出现比例筛选:计算
len(dis_row_set & drug_row_set) / len(dis_row_set),设定阈值(比如0.9)保留高关联配对 - 排除仅出现1次的疾病/药物,避免偶然配对
内容的提问来源于stack exchange,提问作者hjc
相关产品推荐
相关产品推荐

