1. 药物重定位数据整合工程导论

药物重定位(Drug Repositioning,也称老药新用)是指为已上市或已进入临床阶段的药物寻找新的适应症。与从零开始的新药研发相比,重定位的起点不是化合物筛选,而是已经积累了大量安全性、药代动力学与临床使用证据的候选药物。这决定了它的核心优势:已知的人体安全性数据可以显著压缩早期毒理与I期临床的时间成本,失败风险相对可控。但优势的另一面是,重定位的成败往往不取决于"能不能合成一个分子",而取决于能否从分散、异构、质量参差的数据中,快速形成一条可验证的假设链。这正是"数据整合工程"要解决的问题。

一、什么是药物重定位数据整合工程

可以把这项工作拆成三个层次来理解。第一层是数据层:药物、靶点、疾病、通路、基因表达、副作用、临床记录等数据分散在ChEMBL、DrugBank、CTD、GEO、SIDER、Open Targets等不同来源中,字段命名、标识符体系、更新频率各不相同。第二层是整合层:把不同来源的数据映射到统一的标识符空间(如药物用DrugBank ID或ChEMBL ID,靶点用UniProt AC,疾病用MONDO或DOID),并处理冲突、缺失与冗余。第三层是工程层:把整合结果组织成可重复执行的流水线,使"换一批数据、换一个疾病、换一种算法"时不必推倒重来。

因此,药物重定位数据整合工程可以定义为:以药物—靶点—疾病三元关系为核心对象,通过标识符归一、数据清洗、关系抽取与流水线编排,构建可复用、可追溯、可扩展的重定位证据基础,并支撑假设生成与优先级排序的系统性方法。它不是单纯的数据库建设,也不是单纯的算法建模,而是两者的工程化衔接。

二、目标:从"有数据"到"有可验证假设"

整合工程的目标不是把数据堆在一起,而是让数据能够回答具体问题。典型目标包括:给定一个疾病,列出可能有效的已上市药物并给出证据强度;给定一个药物,找出其潜在的新适应症;给定一个药物—疾病对,追溯支持该关系的靶点、通路、表达与文献证据。这些目标对数据提出了共同要求:标识符一致、关系可追溯、证据可分层、结果可复现。

以"某药物是否可能用于某疾病"为例,一条完整的证据链通常包含:药物已知靶点集合、疾病相关基因集合、两者在通路层面的交集、表达数据中的方向一致性、以及文献或临床试验中的支持记录。整合工程要做的,是让这条链上的每一环都能被程序化地取出、比对和打分,而不是依赖人工逐条检索。

三、核心挑战

标识符异构是最基础的障碍。同一个药物在不同数据库中可能以商品名、通用名、CAS号、PubChem CID或DrugBank ID出现;同一个基因可能以别名、旧名或不同物种同源名出现。若不做归一,后续所有关联都会出现"看似有交集、实则对不上"的假阳性。

证据异质与冲突同样棘手。文献报道、实验验证、计算预测、临床观察的证据强度差异巨大,且不同来源可能给出相反结论。整合工程需要为证据标注来源、类型与置信度,而不是简单取并集。

数据泄漏与偏倚在重定位中尤为隐蔽。若训练或排序时使用了"该药物已被报道用于该疾病"的信息,模型可能只是在复现已知结论,而非发现新关系。工程上需要通过时间切分、去除已知关联等方式控制泄漏。

可复现性是工程化视角的核心诉求。数据版本、映射规则、过滤阈值、算法参数若不被记录,结果就无法被他人验证,也无法在数据更新后重跑。

四、工程化视角:把重定位当作一条数据流水线

工程化视角的关键,是把上述挑战转化为可管理的环节。下图给出了一条典型的重定位数据整合流水线:从多源数据接入,经过标识符归一与关系抽取,形成统一的三元关系层,再进入假设生成与优先级排序,最终输出可追溯的证据链。图中同时标出了每个环节最需要关注的工程控制点。

药物重定位数据整合流水线 多源接入 → 标识符归一 → 关系抽取 → 三元关系层 → 假设生成与排序 → 证据链输出 ① 多源数据接入 DrugBank / ChEMBL UniProt / Open Targets GEO / CTD / SIDER PubMed / ClinicalTrials 控制点:版本与快照 ② 标识符归一 药物 → DrugBank ID 靶点 → UniProt AC 疾病 → MONDO / DOID 别名与同义词映射表 控制点:映射覆盖率 ③ 关系抽取 药物—靶点结合 靶点—疾病关联 表达差异与通路 副作用与表型 控制点:证据类型标注 ④ 三元关系层 药物—靶点—疾病 统一标识符空间 证据来源与置信度 可查询的关系图 控制点:冲突消解规则 ⑤ 假设生成与优先级排序 网络传播 / 矩阵分解 / 图嵌入 通路富集与表达方向一致性 时间切分与已知关联剔除 控制点:数据泄漏与偏倚 ⑥ 可追溯证据链输出 药物—靶点—疾病路径 每条边的来源与置信度 排序分数与解释依据 控制点:可复现与可审计 统一关系层作为输入 结果反馈:补充数据源、修正映射规则、调整阈值 工程控制要点 数据版本与快照管理 标识符映射覆盖率 证据类型与置信度标注 数据泄漏与偏倚控制

这条流水线中有两个容易被忽视但决定成败的环节。其一是标识符归一:如果药物ID映射覆盖率只有70%,那么后续所有基于该药物的关联都会系统性缺失,且缺失并非随机,往往集中在冷门药物或新上市药物上,导致结论偏向研究充分的"明星药物"。其二是证据分层:把文献报道、实验验证与计算预测混在一起打分,会让预测结果看起来证据充分,实则经不起推敲。工程上通常为不同证据类型赋予不同权重,并保留原始来源以便回溯。

五、一个最小可运行的整合示例

为了把上述概念落到可操作层面,下面给出一个最小示例:给定药物D(假设为已上市药物,DrugBank ID: DB00001)和疾病X(MONDO:0005148),从两个来源抽取药物—靶点关系,并检查靶点是否落在疾病相关基因集合中。

# 示例:药物—靶点—疾病关系检查(伪代码,参数为教学假设值)
drug_id = "DB00001"
disease_id = "MONDO:0005148"

# 1. 从DrugBank抽取该药物的已知靶点(UniProt AC)
targets = drugbank.get_targets(drug_id)
# 假设返回: ["P00533", "P04637", "P31749"]

# 2. 从Open Targets抽取该疾病相关基因
disease_genes = opentargets.get_associated_genes(disease_id)
# 假设返回: ["P00533", "P42345", "P31749", "Q9Y6K9"]

# 3. 取交集,得到潜在支持靶点
shared = set(targets) & set(disease_genes)
# 结果: {"P00533", "P31749"}

# 4. 为每个共享靶点附加证据类型与来源
for t in shared:
    evidence = {
        "target": t,
        "drug_target_source": "DrugBank",
        "disease_gene_source": "Open Targets",
        "evidence_type": "curated_association",
        "confidence": 0.7  # 教学假设值
    }
    print(evidence)

这段代码本身并不复杂,但它体现了整合工程的基本动作:统一标识符、跨源取交集、为每条关系保留来源与置信度。在实际项目中,靶点集合可能来自多个数据库,疾病基因集合可能包含表达数据、遗传关联与通路成员,置信度也需要根据证据类型分别设定。示例中的数值仅用于说明流程,不代表真实结论。

工程化视角的三个判断标准:第一,换一个疾病或药物时,是否需要重写代码?如果需要,说明抽象层次不够。第二,结果能否追溯到具体的数据来源与版本?如果不能,说明可复现性不足。第三,已知关联是否被排除在评估之外?如果没有,说明存在数据泄漏风险。

六、本课程将覆盖的内容脉络

后续章节将沿着这条流水线逐步展开:数据源接入与版本管理、药物与靶点标识符归一、疾病本体与表型数据整合、关系抽取与证据分层、三元关系存储与查询、假设生成算法与排序、数据泄漏控制与评估、以及可复现流水线的工程实现。每一部分都会给出具体的对象、参数与判断依据,使读者不仅理解"是什么",也能动手搭建自己的重定位数据整合流程。

需要强调的是,药物重定位数据整合工程的产出不是"一个答案",而是一套能够持续产生可验证假设的基础设施。数据会更新,算法会迭代,疾病与药物的认知也会变化,唯有把整合过程工程化,才能让每一次更新都建立在可追溯、可复现的基础之上。