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

如何基于医嘱数据挖掘疾病与药物的强关联配对

问题描述

我拥有如下数据:

DrugsDiseases
drug1,drug2,drug3dis1,dis3
drug1,drug4dis1,dis2
drug1,drug2,drug4,drug7dis1, dis3,dis4,dis7
drug1,drug3dis1,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:15:07