信息速览
NPASS 的全称是 Natural Product Activity and Species Source database,直译是「天然产物活性与物种来源数据库」。它 2017 年由复旦大学药学院团队建立,此后按《核酸研究》数据库专刊的节奏更新过两轮。它做的事情说起来很朴素:把文献里那句「从黄花蒿中分离得到青蒿素,对恶性疟原虫的 IC50 为 5.82 纳摩尔」拆成结构化的几列——化合物、来源物种、靶点、活性类型、数值、单位、文献编号,然后一行一行抄进表里。
朴素之处正是它不可替代之处。天然产物研究里,「这东西从哪来」和「这东西有多强」通常写在两篇不同论文的不同位置:植物化学文章报分离与结构,药理文章报活性。ChEMBL 收活性但几乎不记来源物种,COCONUT 收结构与来源但没有定量活性,PubChem 两头都收但天然产物的来源注释稀薄。NPASS 把两头接在同一行,代价是每一行都要靠人读原文抄下来,规模因此受限。
也正因为靠人抄,它的规模数字必须分两种口径读:网页上标的是二十万级化合物、逾百万条活性,而下载区六个文件的主键只有三万级。这不是笔误,是快照落后。下面先给一屏速览,再逐层拆开。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全称 | Natural Product Activity and Species Source database |
| 维护方 | 复旦大学药学院生物药物学系,站点托管于 bidd.group |
| 首发 | 2017 年 8 月;2018 年发表于《核酸研究》数据库专刊 |
| 当前版本 | v3.0,站点标注 2025 年 6 月 15 日发布 |
| 官网计数 | 204,023 个天然产物、48,940 个来源生物、8,764 个靶点、1,048,756 条活性记录 |
| 下载包核对 | 六个制表符分隔文本,化合物主键三万级,活性行四十九万级 |
| 主键体系 | NPC(化合物)、NPT(靶点)、NPO(来源生物)三套顺序编号 |
| 外键 | ChEMBL ID、PubChem CID、ZINC ID、UniProt、NCBI Taxonomy |
| 结构表示 | 标准 InChI、InChIKey、规范化 SMILES,附分子量与五类分配系数 |
| 记录粒度 | 一行 = 一次活性测量,同一化合物同一靶点可有多行 |
| 文件格式 | 纯文本、制表符分隔、无表头嵌套;合计约七十五兆字节 |
| 获取方式 | 下载区直链,无需注册;网页另有检索与浏览界面 |
| 附带图层 | 定量组成、实验毒性、实验 ADME 仅在线提供,不在下载包内 |
| 许可 | 未声明统一许可;以原始文献与 PubChem 各条记录的使用条款为界 |
| 主要边界 | 无阴性结果、无患者数据、无合成路线、单位未归一 |
§1 它要解决的具体麻烦
1.1 一句话在论文里,拆成八列要半小时
天然产物活性数据的原始形态是散句。「化合物 3 对 HeLa 细胞的 IC50 为 12.4 微摩尔」——人读一眼就懂,机器读不了。要做任何规模的比较,必须把这句话拆成:哪个化合物、什么结构、对哪个靶点或细胞系、什么活性类型、数值多少、什么单位、在什么实验体系里、出自哪篇文献。八个位置,缺一个就没法跨文献比较。
一个人一天能拆几十条。天然产物活性文献以万篇计,每条文献平均报十几到几十个化合物。这个工作量靠单个实验室做不完,靠众包做不准,所以过去二十年里,愿意做这件事的团队屈指可数,NPASS 是其中坚持最久的一个。
它解决的问题可以用一句话概括:把「从哪来」与「有多强」这两条本来分居的线索,缝进同一张可以用主键连接的表。 缝的手段是人工抄录加编号归并,不是自动抽取,也不是众包审核。
判断这句话的分量,可以看一个具体场景。「青蒿素」这类被研究过半个世纪的分子,在库里挂着一千多条活性记录和两条物种来源:活性来自世界各地实验室的重复测量,来源却只有两条,且都转录自另一个库。这个库对「它有多强」记得很细,对「它从哪来」记得很粗。粗细不均是人工抄录事业的常态,也是使用之前必须认清的前提。
它还有一层容易被忽略的姿态:把「测量」与「裁定」分开。库里每一条活性都是一个独立事件,不取平均、不做加权、不判断哪篇文献更可信。多数数据库会给出一个推荐值,而推荐的过程往往不公开;NPASS 选择不给推荐,等于把裁定权明确交回给使用者。这既是它的可信之处,也是它不好用的地方。
1.2 三十秒决策卡:你的处境与它能给的东西
| 你的处境 | 它能帮你什么 | 你要自己补什么 |
|---|---|---|
| 想给一批天然产物预测活性,缺带标签的训练集 | 直接给出化合物—靶点—数值三元组,可按靶点类别切子集 | 单位归一、重复合并、负样本构造 |
| 研究某个植物或真菌的化学成分是否与药理作用对得上 | 从物种出发反查它产生的化合物,再查这些化合物的活性 | 分离部位与含量数据多数为空,需回原文 |
| 做中药物质基础的机制假设 | 化合物—靶点连线可用于生成假设,网站还提供结构相似性与活性相似性检索 | 假设验证仍需湿实验 |
| 需要一份可离线、可版本比对的开源活性库 | 六个平面文件,纯文本,直接进关系库或数据框 | 记录下载日期,官方无版本号字段 |
| 想找天然产物里尚未被开发的靶点空间 | 靶点字典含蛋白、复合物、细胞系、组织、整体生物五类以上 | 靶点归类有主观成分,跨类不可直接合并 |
| 做分子生成模型的奖励函数 | 活性值可作打分依据,结构可直接对接 | 奖励函数要处理单位与噪声,否则鼓励抄得多的分子 |
左列写的是处境,不是功能。这张表的用法是:先在上表找到自己那一行,再看右列要补什么。补不了的部分,就是它给不了的。
1.3 三条常见的错误期待
| 常见期待 | 实际情况 |
|---|---|
| 以为它是一份「天然产物活性大全」 | 它是「被研究过并写进论文的天然产物活性」的集合,覆盖取决于谁做过实验 |
| 以为二十万化合物都能下载 | 网页计数与下载包不是同一份数据,下载包只到三万级 |
| 以为活性值可以直接当连续标签 | 单位未归一、重复未合并、无阴性对照,直接当标签训练会学到抄录偏差 |
1.4 能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 化合物对靶点的定量活性 | 数值、单位、活性类型、关系符四列 | 够,但要自己归一 |
| 化合物从哪个物种分出来 | 配对表加分类学五级路径 | 够到物种,多数到不了部位与产地 |
| 化合物结构 | InChI、InChIKey、SMILES、分子式 | 够,部分记录缺结构 |
| 化合物在物种里的含量 | 仅网页在线提供,下载包没有 | 不够,除非逐页抓 |
| 实验毒性、实验 ADME | 同上,仅在线 | 不够 |
| 阴性结果与未测化合物 | 无 | 不够,需自建负样本 |
| 合成路线、供应来源、价格 | 无 | 不够 |
| 人体或临床数据 | 无 | 不够,且不应期待 |
1.5 一句话判断
要把「某个天然产物对某个靶点测出多少」与「它从哪个物种来」放进同一张可 join 的表,NPASS 是目前少数现成可用的来源;要一份干净、量纲统一、带阴性对照的机器学习数据集,它只是原料,不是成品。
1.6 不适合谁:四条边界
第一,不适合把活性值当权威常数的人。同一个化合物对同一个靶点,库里常并列着几条不同文献的不同数值,有时相差一个数量级。NPASS 的立场是记录,不是裁定:它不取平均,不标推荐值,也不判断哪篇文献更可靠。
第二,不适合需要覆盖率保证的人。天然产物已分离的估计在百万量级,库里的化合物是其中被做过定量活性实验、且实验写进论文的一小部分。某类化合物在库中稀疏,可能只是因为没人测过,不代表它没有活性。
第三,不适合需要监管级溯源的场景。每条记录有文献编号,但没有抄录人、没有复核人、没有抄录时间,也没有版本号字段。想回答「这条数值是哪一版、谁抄的、对不对」,只能回原始文献自己核。
第四,不适合做药物警戒或临床决策。库里没有任何人体暴露、剂量、疗程或不良事件字段,毒性一栏是体外或动物的实验读数,且不在下载包内。
§2 数据构成与规格
2.1 两种口径:网页在线版与下载快照
官网首页与关于页给出的 v3.0 口径是:204,023 个天然产物、48,940 个来源生物、8,764 个靶点、1,048,756 条活性记录,另有 208,415 条定量组成记录、34,975 条实验毒性记录、9,713 条实验 ADME 记录,以及 1,117,269 对生物—化合物配对。
下载区只挂六个文件。把六个文件读进来数主键,得到的数字是另一套:化合物三万余、活性行四十九万不到、物种两万四千余、靶点五千九百余。三个含有化合物主键的表,去重后的化合物数完全一致,说明这不是某张表被过滤,而是整个导出包是同一个较早快照。
这种不一致本身是一条重要规格:网页是活的,文件是冻的。引用时必须写明用的是哪一侧。用在线浏览做探索、用下载包做批量计算,两边数字对不上是常态,不是错误。
2.2 六张平面文件
| 文件 | 行数 | 列数 | 体量 | 内容 |
|---|---|---|---|---|
| NPASS_activities.txt | 493,835 | 14 | 约 39 MB | 活性记录主体,化合物—靶点—数值—文献 |
| NPASS_compound_info.txt | 30,926 | 6 | 约 4.4 MB | 化合物名称与三个外部库编号 |
| NPASS_compound_properties.txt | 与化合物表同量级 | 18 | 约 10 MB | 分子式、理化描述符、InChI 与 SMILES |
| NPASS_cpd_organism_pair.txt | 298,114 | 11 | 约 17 MB | 化合物与来源生物配对,附分离部位与文献 |
| NPASS_organism_info.txt | 24,894 | 16 | 约 3.1 MB | 物种名与五级分类学编号 |
| NPASS_target_info.txt | 5,917 | 6 | 约 0.4 MB | 靶点名、靶点类型、物种、UniProt |
六张表全部是制表符分隔的纯文本,第一行是表头,没有引号包裹,空值用空串或字面量 n.a. 表示,两套约定并存。没有任何压缩包、没有 SQL 转储、没有 JSON、没有 API。全部文件加起来约七十五兆字节,一个普通笔记本可以整块载入内存。
2.3 字段字典
化合物信息表只有六列,是六张表里最薄的一张:
| 列 | 含义 | 备注 |
|---|---|---|
np_id |
化合物编号 | NPC 前缀加数字,主键 |
pref_name |
首选名 | 常为俗名,部分为 n.a. |
iupac_name |
IUPAC 名 | 大量为空 |
chembl_id |
ChEMBL 编号 | 可空,可作跨库键 |
pubchem_cid |
PubChem 化合物号 | 可空 |
zinc_id |
ZINC 编号 | 多数为 n.a. |
结构与性质表把化学信息集中在一处:分子式、分子量、三种脂水分配系数(ALogP、MLogP、XLogP)、氢键给体与受体数、极性表面积、可旋转键数、环数、重原子数、Lipinski 违规计数、标准 InChI、InChIKey、规范化 SMILES。这一层是纯计算产物,不依赖文献,因此覆盖所有有结构的化合物。
活性表是主干,十四列,逐列看:
| 列 | 含义 | 实际取值情况 |
|---|---|---|
np_id |
化合物编号 | 与化合物表可连接 |
target_id |
靶点编号 | 与靶点表可连接 |
activity_type(第一处) |
活性类别 | 十种枚举,如 IC50、EC50、MIC、Others |
activity_relation |
关系符 | 十三种,含 =、>、<、~、XY% |
activity_type(第二处) |
活性名 | 具体写法,如 IC25、CC50、Potency |
activity_value |
数值 | 浮点,部分为空 |
activity_units |
单位 | 自由文本,四百余种写法 |
assay_organism |
实验体系物种 | 可空,常为细胞系来源物种 |
assay_tax_id |
实验体系分类号 | 可空 |
assay_strain |
实验体系品系 | 多数为空 |
assay_tissue |
实验体系组织 | 多数为空 |
assay_cell_type |
实验体系细胞类型 | 多数为空 |
ref_id |
文献编号 | PMID、DOI、专利号或数据集名 |
ref_id_type |
文献类型 | 六种:PMID、DOI、Dataset、Patent、Publication、Book |
配对表把「化合物—物种」这一对当作一行,并带上分离部位、采集地、采集时间、文献与来源库名。靶点表六列,含类型、名称、物种、UniProt。物种表十六列,从超界一路排到亚种。
2.4 一条记录的完整解剖
取「青蒿素」作例子。它在化合物表里的编号是 NPC260977,首选名 Artemisinin,IUPAC 名为空——这三个字段本身就说明问题:俗名有,系统名没有,结构得去性质表取。
配对表里它有两条来源记录:一条指向黄花蒿(Artemisia annua),一条指向黄花蒿的近缘种 Artemisia apiacea,两条的来源库都写着 TM-MC,分离部位、采集地、采集时间、文献编号全为空。也就是说,这两条配对是转录来的,不是从原始植物化学论文里抄的。
活性表里它的记录超过一千行。挑最早的两条:
| 字段 | 记录一 | 记录二 |
|---|---|---|
| 靶点 | NPT6,Plasmodium falciparum | NPT6,Plasmodium falciparum |
| 靶点类型 | Organism(整体生物) | Organism |
| 活性类别 | IC50 | IC50 |
| 数值与单位 | 5.82 nM | 5.41 nM |
| 实验体系 | 恶性疟原虫,分类号 5833 | 同一虫株 |
| 文献 | PMID 7608896 | PMID 7608896 |
同一篇文献、同一个虫株、同一个活性类型,两条数值相差百分之七。库里两条都留着,没有合并,没有标注哪条是复孔哪条是初测。这不是疏漏,是设计:NPASS 把自己定位在「记录」这一层,合并与裁定留给下游。
把这条记录完整读一遍,能看出四件事。第一,化合物、物种、靶点、文献四个维度都有独立编号,任何一个都能当入口。第二,实验语境靠五个 assay 字段承载,但其中四个在这条记录里是空的,语境其实只剩「虫株」一项。第三,数值离开单位没有意义,单位是独立一列且是自由文本。第四,来源与活性是两套文献,前者来自数据库转录,后者来自论文,两者并不互相印证。
2.5 与同类资源的定位差异
| 资源 | 核心内容 | 与 NPASS 的差别 |
|---|---|---|
| NPASS | 定量活性 + 物种来源 + 结构 | 唯一把三者按记录对齐的开放库 |
| COCONUT | 天然产物结构全集,含来源与地理 | 结构覆盖最广,几乎不含定量活性 |
| ChEMBL | 药物与类药分子的活性,人工整理 | 活性质量高,天然产物来源物种缺失 |
| NPAtlas | 微生物来源天然产物,人工整理 | 微生物专精,活性字段少 |
| PubChem | 化合物与生物测定汇总 | 覆盖极广,天然产物属性与来源注释稀薄 |
| TM-MC | 东亚传统药用的物种—化合物对应 | 只做来源,不做活性,且是 NPASS 的上游之一 |
一句可操作的判断:要结构全集去 COCONUT,要活性质量去 ChEMBL,要「天然产物 + 活性 + 来源」三件套同时在场,只剩 NPASS。 代价是它的抄录深度不如 ChEMBL,覆盖广度不如 PubChem。
2.6 网页那一侧:四个入口与三档相似度
六个文件之外,站点还有一套浏览与检索界面。这套界面不改变数据结构,但它是唯一能看到在线版全量数据的通道,也是唯一能看到毒性与 ADME 的通道,所以必须单独说清楚。
按名称首字母或分子量区间浏览。 首页给出一组柱状分布图,点某一根柱子进入该区间的化合物列表。这个入口适合「我知道分子量大概多少」的粗筛,不适合精确检索。
按物种类别浏览。 把来源生物按类别分块,点进去是物种列表,再点是该物种产生的化合物。这是从物种反查化合物最快的一条路,也是 §9.2 那段脚本想替代的那条路。
按靶点类别浏览。 列出靶点及其下挂的化合物数与活性记录数。帮助页明确说明,活性记录数可能大于化合物数,因为同一化合物对同一靶点会有多条测量。这句话本身就是对 §4.5 那节内容的一句官方确认。
按已批准或临床期药物浏览。 这一块把 NPASS 的化合物与已上市药物做结构相似性比对,按三档给出相似化合物的数量:高相似以 Tanimoto 系数不低于 0.85 为界,中相似以 0.7 为界,再往下算远缘。三档的意义是把「天然产物里有没有类药骨架」这个问题拆成可数的三格,而不是给一个是非判断。
检索侧还有两条值得一提。一条是批处理:可以一次粘贴一串名称、一串 SMILES 或一串编号(NPASS 编号、ChEMBL 编号、PubChem 化合物号都行),一行一个,返回匹配结果。另一条是结构相似性检索:画结构或粘 SMILES,设一个 Tanimoto 阈值,返回相似化合物表。这两条在批量做化合物注释时比逐条点更快。
这些界面功能无法用六个文件完全复现,原因不在算法,而在数据:在线版的化合物集合比下载包大,且挂着组成、毒性、ADME 三层下载包里没有的记录。要做全量分析,只能逐页抓取或读补充材料,这两条路都比下载六个文件麻烦得多。
§3 身份层:三套编号与一串外键
3.1 NPC、NPT、NPO
NPASS 给三类实体各发一套编号:化合物是 NPC 加数字,靶点是 NPT 加数字,来源生物是 NPO 加数字。编号是顺序分配的,不含语义,也不能从编号推出分子量、分类或发现年代。好处是稳定、短、易连接;坏处是人工阅读时完全无法凭编号判断内容,必须查表。
三套编号的关系是典型的星型:化合物表、靶点表、物种表各自是维度表,活性表与配对表是事实表。任何一次分析都是「事实表 join 一到两张维度表」。这种结构对关系库和数据分析框都友好,代价是要做三次连接才能拿到一张可读的表。
| 编号 | 前缀 | 例 | 指向 |
|---|---|---|---|
| 化合物 | NPC | NPC260977 | 「青蒿素」 |
| 靶点 | NPT | NPT6 | 恶性疟原虫(整体生物类靶点) |
| 来源生物 | NPO | NPO26589 | 黄花蒿 |
3.2 外键:把分子接到别的库
化合物表里有三个外键:ChEMBL 编号、PubChem 化合物号、ZINC 编号。三个都可空,ZINC 一列大量是 n.a.。靶点表有 UniProt 编号,只对蛋白类靶点有效,细胞系、组织、整体生物类靶点的这一列是空的。物种表有 NCBI 分类学编号,且不止一个:种、亚种、属、科、界、超界各一列。
这组外键的实际价值在于「别处查不到的东西这里能接上」。比如拿一份 ChEMBL 的活性表,想补上每个分子的来源物种,ChEMBL 本身没有这一列,唯一的路是用 ChEMBL 编号回连 NPASS 的化合物表,再连配对表。反过来,拿一份植物化学成分表,想补活性,也是同一条路。
| 外键 | 所在表 | 覆盖范围 | 典型用途 |
|---|---|---|---|
chembl_id |
化合物表 | 部分化合物 | 连 ChEMBL 的活性与药物信息 |
pubchem_cid |
化合物表 | 部分化合物 | 连 PubChem 的测定与毒性 |
zinc_id |
化合物表 | 少量 | 连可购买化合物库 |
uniprot_id |
靶点表 | 仅蛋白与复合物类 | 连序列、结构、通路 |
species_tax_id |
物种表 | 大部分物种 | 连分类学与基因组 |
subspecies_tax_id |
物种表 | 少量 | 区分亚种与变种 |
3.3 分类学路径:从超界到亚种
物种表把十六列里的十一列用来存分类学路径:超界、界、科、属、种、亚种,各配一个编号与一个名称。这条路径不是装饰,它决定了能做哪一类聚合。想按「植物 vs 微生物」切分,用界那一列;想按科做系统发育对照,用科那一列;想区分同属近缘种产生的化合物差异,用种那一列。
路径也有空缺。部分物种只有属一级的编号,种一级是 NA;部分只有名称没有编号。这类空缺在做跨库连接时会静默丢失,因为 NA 转成数值会变成缺失,而缺失在连接时会被丢掉。使用前应当先统计一遍每列的 NA 比例,再决定用哪一级做键。
3.4 编号暴露的三条边界
第一,编号不表达结构相似性。NPC 编号相邻的两个化合物可能毫无关系,做近邻检索必须用指纹或 InChIKey,不能用编号距离。
第二,同一化合物在不同版本间是否保持编号,官方没有承诺,也没有版本号字段可供核对。跨版本合并时,应以 InChIKey 而不是 NPC 编号作为稳定键。
第三,靶点编号混合了不同层级的实体。蛋白、蛋白复合物、蛋白家族、蛋白相互作用、核酸、亚细胞结构、细胞系、组织、整体生物,九类挤在一张表里,target_id 表面上同质,语义上并不同质。按靶点聚合前必须先按类型分层,否则会把「对某细胞系的活性」和「对某蛋白的活性」加在一起。
3.5 拿编号做跨库对接时的三个动作
外键列摆在那里,不等于连得上。实际操作里有三个动作必须做,否则连接会静默失败。
第一个动作是查空值形态。三个外键列的空值写法不统一:有的是空串,有的是 n.a.,有的是 NA。按空串过滤会漏掉后两种,按 n.a. 过滤又会漏掉前一种。稳妥的做法是把三种都映射成同一个缺失标记,再统计覆盖率。
第二个动作是查重。同一个 PubChem 化合物号可能对应多个 NPASS 编号,因为同一结构的不同盐型、不同立体化学写法在 NPASS 里可能是两条记录。直接以 PubChem 号做连接键会产生一对多,聚合时数字会翻倍。
第三个动作是查编号版本。ChEMBL 编号跨版本稳定,UniProt 编号会因记录合并而变,NCBI 分类号会因分类修订而拆并。后两者连出去之后,拿到的可能是与抄录时不同的实体。跨库分析要记录连接发生的时间,并对被合并的编号做人工核。
这三件事做完,剩下的才是分析。跳过它们直接 merge,得到的结果常常看起来正常、实际错了——这是这类多库拼接最常见的失败模式。
§4 质量层:一条活性记录的成色
4.1 五个语境字段撑不起一个实验
一条活性数值的可比性,取决于实验条件。理想的记录应当包含:物种、品系、组织、细胞类型、给药方式、暴露时长、检测方法、复孔数、统计量。NPASS 给了前四项,后五项没有。
四个语境字段的实际填充率差异极大。以整体生物类靶点为例,虫株或品系常有,组织与细胞类型几乎必空;以细胞系类靶点为例,细胞类型常有,品系与组织常空。这意味着跨记录比较时,条件对齐只能做到「物种 + 细胞类型」这一层,再往下就必须回原文。
| 语境维度 | 库内是否提供 | 缺了会怎样 |
|---|---|---|
| 实验物种 | 提供 | 无此项则无法判断是人源还是动物模型 |
| 品系/虫株 | 部分提供 | 同种不同株的敏感性可差数倍 |
| 组织 | 少量提供 | 原代细胞与细胞系的读数不可直接比 |
| 细胞类型 | 部分提供 | 无法区分肿瘤细胞与正常细胞 |
| 给药方式与时长 | 不提供 | 长时程与短时程的 IC50 不可比 |
| 检测方法 | 不提供 | 不同方法系统偏差可达数倍 |
| 复孔与统计量 | 不提供 | 无法给单条记录赋权 |
4.2 青蒿素的四条 IC50
回到 §2.4 那条记录。把「青蒿素」对恶性疟原虫的 IC50 全部取出,会看到同一靶点下并存着 5.82、5.41、4.7、2.2 纳摩尔四个值,另有以微克每毫升为单位的 0.008。前四个来自两篇文献,单位一致、靶点一致、虫株一致,数值却相差一倍以上。
这不是数据库的错,是原始实验的差异:不同实验室的虫株传代历史、培养基、同位素标记、孵育时长都不同。数据库能做的是把差异如实保留,让使用者看见分散度。如果它擅自取平均,反而会造出一个从未在任何实验中出现过的数。
同一化合物还有一条 ED50 记录:对伯氏疟原虫 607 毫克每千克,来自同一篇给出 4.7 与 2.2 纳摩尔的文献。一条体外、一条体内,量纲差三个数量级,混在一张表里但分属不同活性类型。把这两类混算是最常见的误用之一。
4.3 单位是自由文本,不是受控词表
活性表的单位列有四百余种不同写法。除了纳摩尔、微摩尔、微克每毫升这些常见项,还有百分比、每分钟百分比、每毫克蛋白每分钟、每立方毫米、每平方厘米、每日、每小时,以及一批拼写不一致的变体。空值也占一席。
这意味着不能按单位字符串直接分组做统计,必须先建映射。映射的难点不在常见单位,而在那些只出现一两次的长尾:它们的量纲往往要靠读原文才能确定,自动换算会出错。
| 单位类型 | 例子 | 能否直接换算 |
|---|---|---|
| 摩尔浓度 | nM、uM、mM | 可以,乘除数量级即可 |
| 质量浓度 | ug/ml、mg/L | 需分子量,可换算为摩尔浓度 |
| 百分比 | %、%v/v | 不可,分母不明 |
| 速率类 | /min、/mg/min | 不可,需实验时长与蛋白量 |
| 稀释度 | 1:1000 类写法 | 不可,需效价定义 |
| 空值 | 空串 | 不可,只能回原文 |
4.4 手抄与转录混在一起
活性记录的 ref_id_type 有六种取值:PMID、DOI、Dataset、Patent、Publication、Book。其中 Dataset 这一类值得单独说:它不是文献,而是 PubChem BioAssay 的汇总记录。这类记录的特征是活性类型多为 Potency,靶点多为单个蛋白,文献编号一栏写的是数据集名而不是编号。
两类记录的性质不同。手抄记录有明确原文可回溯,抄的是作者报告的那个数;转录记录是别人已经汇总过的二次数据,原始实验条件在转录时已被压缩。二者混在一张表里,没有任何一列区分「这条是抄的」还是「这条是转的」——只能靠 ref_id_type 判断,而 Dataset 之外的类型里也可能混有转录。
小檗碱是个清楚的例子。它有一百五十条物种来源配对,跨植物、地衣与真菌;活性记录一百余条,绝大多数来自 PubChem 的 Potency 汇总。把它当成「文献手工整理」的样本会高估人工curation 的深度;把它当成「PubChem 转储」又会低估它独有的来源信息。
4.5 重复记录是特性,不是缺陷
| 现象 | 表现 | 处理建议 |
|---|---|---|
| 同一文献多条 | 同一 PMID 下同一化合物同一靶点出现两三条 | 视为不同实验条件,取中位数或保留全部分布 |
| 跨文献多条 | 不同 PMID 给出相差数倍的值 | 保留全部,做敏感性分析 |
| 单位不一致 | 同一靶点下纳摩尔与微克每毫升并存 | 先换算再合并,换算不了的单列 |
| 关系符不完整 | 只有 > 或 < 而无具体值 |
当作区间处理,不能当点值 |
| 靶点粒度不一 | 同一蛋白在不同记录里归到蛋白、复合物或细胞系 | 按类型分层后再合并 |
4.6 靶点那九类,语义差在哪里
靶点表把九类实体放进同一个编号空间,这在数据模型上是简化,在语义上是压缩。九类的含义与可比性差别很大,使用之前值得逐一认清。
单蛋白是最干净的一类,有 UniProt 编号,活性数值通常来自酶活抑制或受体结合实验,跨文献可比性最好。
蛋白复合物指由多个亚基组成的受体或酶,名称里常带亚基组合,例如某个受体的 α2/β3/γ2 组合。这类靶点的 UniProt 列通常只填一个代表亚基,跨记录合并时要小心,同名不同亚基组合的读数不能直接比。
蛋白家族是更粗的归类,一条记录可能对应家族里若干成员。它的存在是为了安置那些原文只写了「某类受体」而没有指明亚型的实验。
蛋白—蛋白相互作用这一类记录的是阻断两个蛋白结合所需的浓度,与抑制酶活的 IC50 不是同一个量,混在一起排序毫无意义。
核酸一类多为 DNA 或 RNA 结合实验,读数常以结合常数或解链温度表示,单位与蛋白类完全不同。
亚细胞结构是更少见的一类,指线粒体、核糖体一类组分,实验体系往往是粗提物。
细胞系是数量最多的一类,读数常为半数抑制浓度或半数致死浓度。它的问题在于细胞系命名不统一,同一细胞系在不同文献里有不同写法,归并依赖人工。
组织一类记录离体组织上的实验,样本来源与个体差异都会进入读数。
整体生物一类包括动物模型与病原体,青蒿素对疟原虫的记录就在这一类。这一类的读数受给药途径、剂量方案、动物品系影响最大,也最不适合与体外数据并列。
把九类当成同质靶点做任何统计,等于把米、千克与摄氏度加在一起。正确的做法是先按类型分开,在类型内部比较,跨类型的结论只能定性,不能定量。
§5 取数层:六个文件怎么读进来
5.1 直接读,全部当字符串
第一件事是不要让它自动推断类型。数值列里既有空串又有 n.a.,分类列里既有数字又有文字,自动推断会把编号读成整数、把 n.a. 读成缺失、把千分位读错。全部按字符串读入,需要时再逐列转换。
import pandas as pd
BASE = "https://bidd.group/NPASS/download/"
FILES = {
"act": "NPASS_activities.txt",
"cpd": "NPASS_compound_info.txt",
"prop": "NPASS_compound_properties.txt",
"pair": "NPASS_cpd_organism_pair.txt",
"target": "NPASS_target_info.txt",
"org": "NPASS_organism_info.txt",
}
def load(name):
#-- 全部读成字符串:避免 n.a. 被当成缺失、编号被当成整数
return pd.read_csv(BASE + FILES[name], sep="\t", dtype=str,
keep_default_na=False, na_values=[""], quoting=3)
act = load("act")
print(act.shape) #-- (493835, 14)
print(list(act.columns))
quoting=3 关掉引号解析。文件里没有引号包裹,但某些 IUPAC 名里含单引号与双引号,默认解析会在这些行上错位。
5.2 表头里有两个同名列
活性表的第三列与第五列都叫 activity_type。pandas 读进来会自动改成 activity_type 与 activity_type.1,语义上一个是类别、一个是具体活性名。改名要在读入后立刻做,否则后面所有引用都会歧义。
act = act.rename(columns={"activity_type": "activity_class",
"activity_type.1": "activity_name"})
#-- activity_class: IC50 / EC50 / MIC / Potency / Others 等十种
#-- activity_name : IC25 / CC50 / Potency 等具体写法
print(act[["np_id", "activity_class", "activity_name"]].head(3))
5.3 拼一张能看的宽表
三张事实与维度表连起来,才是一张人能读的表。注意连接键的类型要一致,全部是字符串。
view = (act
.merge(load("cpd")[["np_id", "pref_name", "chembl_id"]], on="np_id", how="left")
.merge(load("target")[["target_id", "target_type", "target_name", "uniprot_id"]],
on="target_id", how="left"))
#-- 某化合物的全部活性,按靶点类型分组看
q = view.query("pref_name == 'Artemisinin'")
print(q.groupby(["target_type", "activity_class"]).size().head(10))
左连接是必须的。活性表里存在靶点编号指向靶点表之外的情况,内连接会静默丢行。丢了多少要先量一遍,再决定能不能接受。
orphan = set(act["target_id"]) - set(load("target")["target_id"])
print(len(orphan)) #-- 指向靶点字典之外的行,需单独处理
5.4 先核对口径,再开始分析
把每个文件的行数与主键数打出来,与官网首页的计数对照。两者不一致是常态,不一致时应当以文件为准做计算,以网页为准做描述,并在方法学里写明。
for k in ["cpd", "act", "pair", "org", "target"]:
df = load(k)
key = {"cpd": "np_id", "act": "np_id", "pair": "np_id",
"org": "org_id", "target": "target_id"}[k]
print(k, len(df), df[key].nunique())
输出的五组数字会显示:化合物表、活性表、配对表三者的化合物主键数完全相同,物种与靶点的主键数也与各自字典表一致。这种一致性正是判断「导出包是一次快照」而不是「部分表缺数据」的依据。
5.5 结构表与分子指纹
性质表给了规范化 SMILES 与 InChIKey,可以直接喂给 RDKit 做指纹。注意部分记录缺 SMILES,缺失的要先剔除,否则指纹矩阵会出现空行。
from rdkit import Chem
from rdkit.Chem import AllChem
import numpy as np
prop = load("prop")
smis = prop["canonical_smiles"].fillna("")
mols = [Chem.MolFromSmiles(s) for s in smis]
ok = [m for m in mols if m is not None]
print(len(ok), "of", len(smis)) #-- 可解析比例,先看清再决定是否丢弃
fps = np.array([AllChem.GetMorganFingerprintAsBitVect(m, 2, nBits=2048)
for m in ok])
用 InChIKey 而不是 NPC 编号做去重键,也是在这一层做。两个 NPC 编号可能对应同一结构的不同盐型或立体异构写法,反过来同一编号在不同版本间也可能指向不同结构。
去重的判据要分两层。第一层按 InChIKey 的前十四位匹配,这十四位由分子骨架与连接方式决定,把立体化学与同位素差异挡在外面,用于合并同一骨架的不同立体写法。第二层再看完整二十五位,用于区分真正不同的立体异构体。只用前十四位会把对映体并成一个,只用完整键又会把同一化合物的不同写法留下两份,两层都要跑一遍才知道自己面对的是哪种情况。
指纹计算还有一个隐性成本:Morgan 指纹默认半径二、二千零四十八位,对天然产物这类骨架复杂、环系多的分子,信息量会被压得很紧。做相似性检索时若发现近邻全是同系物,通常不是数据的问题,是半径或位数设小了。
§6 与库内词条的关系
6.1 关系图谱
NPASS 在库内的位置是「天然产物化学」与「药物靶点」两簇之间的桥。它不像 COCONUT 那样是结构全集,也不像 ChEMBL 那样是活性全集,它同时握着两边的一点,且握着一个别人没有的维度——来源物种。
| 库内词条 | 关系 | 用法 |
|---|---|---|
| COCONUT | 结构互补 | 用 InChIKey 把 NPASS 的活性挂到 COCONUT 的全量结构上 |
| ChEMBL | 活性互补 | ChEMBL 补药物阶段信息与更严的活性整理,NPASS 补物种来源 |
| DrugBank | 下游 | 已上市或临床期天然产物药物,可与 NPASS 的相似性检索结果对照 |
| NPAtlas | 子集重叠 | 微生物来源部分重叠,NPAtlas 的整理更细 |
| TCMSP | 上游之一 | 传统药用物种的化合物清单,是 NPASS 来源数据的转录源之一 |
| FooDB | 邻域 | 食物成分,与天然产物化合物大量重叠,活性维度不同 |
6.2 检索路径
三条常用路径,按入口分:
第一,从化合物出发。有 SMILES 或名称,先在 NPASS 做结构与名称检索,拿到 NPC 编号,再连活性表看有哪些靶点,连配对表看有哪些来源物种。
第二,从物种出发。有植物或微生物名,先在物种表按名称或分类号找到 NPO 编号,连配对表拿到化合物清单,再连活性表看这批化合物被测过什么。
第三,从靶点出发。有蛋白或细胞系,先在靶点表找到 NPT 编号,连活性表拿到化合物清单,再按活性值排序,或按来源物种分组看化学多样性。
三条路径的汇合点都是活性表。这也解释了为什么活性表是六张表里最大的一张:它是所有维度相遇的地方。
§7 质量评估与局限性
7.0 阅读本节前需要知道的一件事
不要用「数据库完整度」这把尺子量它。NPASS 不是普查,是抽样,而且抽样的规则由文献作者决定——谁做了实验、谁把结果写进论文、谁写得足够清楚能被抄成八列,谁才进库。用覆盖率评价它,等于用「收录了世界上多少种天然产物」来评价一本字典,问题本身就错位。
正确的评价框架是三条:抄得准不准、连接做得对不对、边界划得清不清。下面按这三条展开。
7.1 逐条局限
| 局限 | 具体表现 | 对使用的实际影响 |
|---|---|---|
| 无阴性结果 | 只收有活性的记录 | 二分类任务必须自建负样本,且构造方式会主导指标 |
| 覆盖由文献决定 | 热门靶点与热门化合物记录密集,冷门稀疏 | 按靶点做统计会混入研究热度,不是化学规律 |
| 单位未归一 | 四百余种写法,含空值与长尾 | 不建映射就不能聚合,建映射又会引入主观判断 |
| 重复不合并 | 同一化合物同一靶点多值并存 | 直接取均值会抹掉实验间差异,需做敏感性分析 |
| 语境字段稀疏 | 组织、细胞类型、品系大量为空 | 条件对齐只能到物种层,再往下要回原文 |
| 来源多为转录 | 分离部位、采集地、时间大量为空 | 不能做地理或部位层面的化学地理学分析 |
| 下载包滞后 | 网页计数与文件主键差一个数量级 | 引用数字必须注明取自哪一侧 |
| 无版本号字段 | 文件内没有版本标识 | 只能靠下载日期与文件校验和做版本管理 |
| 无许可条款 | 下载页只有链接,没有使用条款 | 商用与再分发需逐条回溯原始文献 |
| 靶点粒度混杂 | 蛋白、复合物、细胞系、组织、整体生物同类 | 按靶点聚合前必须分层,否则语义错配 |
7.2 DAIMS 视角下的四条线
| DAIMS 线 | NPASS 的表现 |
|---|---|
| 数据获取与处理 | 有论文描述抄录流程与归并规则;逐条记录没有抄录人与复核记录 |
| 数据建模 | 星型结构清晰,三套编号加六张表,模型极简且稳定 |
| 数据溯源 | 每条活性有文献编号,每条配对有来源库名;无文件级校验和,无版本字段 |
| 数据使用与治理 | 无统一许可,无使用条款,无引用格式模板之外的治理文本 |
四条线里最稳的是建模,最弱的是治理。治理最弱不是说它有问题,而是说它没有把「谁能用、能不能再分发、商用要不要授权」写成一段任何人都能读的条款。对一个被 PubChem 收录、被大量机器学习论文引用的库来说,这是一处明显的空缺。
7.3 外部验证矩阵
| 验证角度 | 外部证据 | 结论 |
|---|---|---|
| 学术认可 | 三版均发表于《核酸研究》数据库专刊 | 属于该领域被认可的正式资源 |
| 下游集成 | PubChem 2025 版更新中纳入 NPASS 的活性与来源数据 | 已成为上游数据源之一 |
| 方法学引用 | 多篇分子表征与生成研究以其活性数据做预训练或评测 | 在 AI 化学社区有实际使用 |
| 与 ChEMBL 的一致性 | 部分化合物共用 ChEMBL 编号,活性值可交叉核对 | 常见活性类型基本对得上,天然产物特有类型无从核对 |
| 与原始文献的一致性 | 抽样回原文可复现数值,但同文献多条记录的去向不明 | 抄录准确,组织方式需自行判断 |
7.4 三条系统性偏差
除逐条局限外,还有三条偏差是结构性的,它们不体现在任何一列里,却会系统性地影响以这份数据为基础的结论。
第一条是研究热度偏差。 进库的门槛是「有人做过实验并写成论文」,而做什么实验由科研资源的分配决定。抗肿瘤、抗炎、抗菌三类靶点被反复测,罕见病靶点、被忽视热带病靶点被测得少。若按靶点数或活性记录数给化合物排序,排在前面的往往是研究热点,而不是化学上最有潜力的分子。任何「某类天然产物活性更丰富」的结论,都要先排除这一层。
第二条是语言与期刊偏差。 抄录以英文文献为主,中文、日文、韩文的传统药物研究进入库中的比例低于其实际数量。这对中药研究尤其不利:一部分成分与活性只发表在本国期刊上,未必被收录。使用者若以本库为唯一来源评估某味药的物质基础,会低估其被研究过的广度。
第三条是时间偏差。 v3.0 明确只补充 2022 年 9 月以后的新文献,此前的记录沿用旧版。这意味着近三年的补充是完整的,而更早年份的缺口从未被系统回补。做时间趋势分析时,看到的增长可能只是整理节奏,不是研究产出节奏。
这三条偏差无法通过清洗消除,只能通过声明来管理。写方法学时把它们列出来,比事后解释异常点更省力。
§8 生态位与历史
8.1 三个版本
| 版本 | 时间 | 主要变化 | 规模口径 |
|---|---|---|---|
| v1.0 | 2017 年首发,2018 年发文 | 建立化合物—靶点—物种三元结构与抄录流程 | 三万五千余化合物、两万五千余物种、五千八百余靶点、四十四万余条活性 |
| v2.0 | 2023 年 1 月 | 加入定量组成层、共培养与工程菌来源、相似性推算的活性画像、ADMET 计算层 | 活性覆盖扩至四万三千余化合物、七千七百余靶点 |
| v3.0 | 2025 年 6 月 | 加入实验毒性与实验 ADME、共生菌与诱导子来源、活性三级分类 | 二十万级化合物、四万九千级物种、八千七百余靶点、逾百万条活性 |
三个版本的节奏是三年一次,与《核酸研究》数据库专刊的年度投稿窗口吻合。每次更新都加图层而不是改结构:星型模型从 v1 起就没变过,六张表的名字与列名也基本稳定。这种「结构冻结、内容增补」的策略,让老代码在新版本上仍能跑。
8.2 它为何能持续
第一,有明确的宿主。它挂在一个高校课题组的固定服务器上,而不是某次项目的临时产物;PI 有稳定的研究生梯队做抄录,这是人力密集工作的前提。
第二,有明确的发表出口。《核酸研究》数据库专刊每期都收这类资源,只要数据量有实质增长就能再发一篇。发表激励与数据维护在这里是同向的。
第三,有明确的刚性需求。做天然产物活性预测的研究者需要一个带来源的活性集,而 ChEMBL 与 COCONUT 都补不上这一块。需求方没有替代品,供给方就能持续获得引用与使用。
第四,有明确的低成本维护模式。抄录可以分批做,版本可以三年一更,服务可以只提供网页与静态文件,不需要 API、不需要实时同步、不需要用户体系。这套模式的人力成本可控,也因此能维持近十年。
8.3 谁在依赖它
三类使用者最典型。一类是做分子表征学习的团队,需要「结构—活性」对做预训练或评测,NPASS 是少数能直接给出天然产物子集活性的开放源。二类是做中药与民族药物质基础的研究者,需要从物种反查化合物再查活性,这是它独有的入口。三类是做化学空间与化学地理学的研究者,需要化合物与来源物种的对应,用来分析系统发育与化学多样性的关系。
三类使用者的共同点是:都不要求数据干净,都要求数据能被自己清洗。这也解释了为什么它的下载形态是六张裸表而不是一个封装好的工具——它假定使用者会写代码。
8.4 与三个邻库的具体差别
对比表容易写成口号,这里把三处差别落到可核对的层面。
与 COCONUT 比,差在「一行是什么」。 COCONUT 的一行是一个结构,字段围绕结构展开:分子式、分类、来源物种、地理、文献。NPASS 的一行是一次测量,字段围绕测量展开:靶点、活性类别、数值、单位、实验体系、文献。同一个化合物在 COCONUT 里通常只有一行,在 NPASS 里可能有上百行。因此用 COCONUT 做结构统计,用 NPASS 做活性统计,两边的计数口径根本不同,不能互相印证。
与 ChEMBL 比,差在「来源物种这一列」。 ChEMBL 的活性整理更严:有标准的活性类型词表、有统一的单位、有测定编号可以回溯到具体 assay。但它不系统记录天然产物的产生生物,因为它的对象是药物与类药分子。NPASS 用这一列换取了整理的严格度:它给了物种,代价是单位自由、重复不合并。想两者兼得,只能按 ChEMBL 编号做交集,各取所需。
与 PubChem 比,差在「天然产物这个身份」。 PubChem 的测定数据规模远超 NPASS,但它不区分一个化合物是不是天然产物,也不系统记录来源。要从 PubChem 里捞出天然产物子集,得先有一份天然产物清单——这正是 NPASS 与 COCONUT 能提供的东西。三者其实是上下游关系,不是替代关系。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一步 | 第二步 | 第三步 |
|---|---|---|---|
| 算法研究者 | 下载六表,建化合物—靶点矩阵 | 单位归一与重复合并,定标签口径 | 自建负样本,划分按化合物而非按记录 |
| 药学研究者和植物化学 | 从物种表定位 NPO | 连配对表拿化合物清单 | 连活性表看靶点谱,回原文核分离部位 |
| 数据工程 | 全字符串读入,修重名列 | 建星型模式入关系库 | 记下载日期与校验和,做版本快照 |
9.2 最小实现
一个能跑通「从物种到活性」的最小脚本,不需要任何外部依赖,只需要 pandas:
import pandas as pd
BASE = "https://bidd.group/NPASS/download/"
def load(f):
return pd.read_csv(BASE + f, sep="\t", dtype=str,
keep_default_na=False, na_values=[""], quoting=3)
org = load("NPASS_organism_info.txt")
pair = load("NPASS_cpd_organism_pair.txt")
act = load("NPASS_activities.txt")
tgt = load("NPASS_target_info.txt")
cpd = load("NPASS_compound_info.txt")
#-- 1. 找到黄花蒿
annua = org[org["org_name"].str.contains("Artemisia annua", na=False)]
#-- 2. 它产生哪些化合物
nps = pair[pair["org_id"].isin(annua["org_id"])]["np_id"].unique()
#-- 3. 这些化合物测过哪些靶点、什么值
sub = act[act["np_id"].isin(nps)]
out = (sub.merge(tgt[["target_id", "target_type", "target_name"]], on="target_id", how="left")
.merge(cpd[["np_id", "pref_name"]], on="np_id", how="left"))
print(out[["pref_name", "target_name", "activity_value", "activity_units"]].head(10))
这段脚本的输出会暴露三件事:黄花蒿名下的化合物数量远少于文献中已报道的数量;这些化合物的活性记录里,靶点类型分布很散;同一条化合物的不同记录单位不统一。三件事都不是 bug,是这份数据的常态。
9.3 在 AI 流程中的位置
放在数据管线的最前端,作为「标签源」,不放在中段当「特征源」。理由是它的结构列只有分子式与理化描述符,做特征远不如直接用 SMILES 现算;而它的活性列是别人测过的真实读数,这是模型自己造不出来的。
具体位置有三条:
第一,做活性预测的监督信号。按靶点切子集,单位归一后取中位数作标签,按化合物划分训练与测试,避免同一化合物的不同记录跨集泄漏。
第二,做分子生成的奖励或筛选条件。用靶点—活性对构造打分函数,注意天然产物的结构分布与类药库差异极大,直接套用类药性约束会系统性地压低得分。
第三,做检索增强的知识底座。把「化合物—靶点—物种」三元组灌进图库,作为问答或假设生成的检索源,此时不需要清洗数值,只需要关系。
9.4 三个最常见的工程坑
坑一:把化合物的行数当化合物的种类。 活性表的行数接近五十万,但化合物只有三万级。以「记录数」估计数据集规模,会把重复测量的密度误读成化学覆盖的广度。排序时更要注意:记录多的化合物往往只是被测得多,不代表它更常见或更重要。
坑二:用内连接拼完就以为拼全了。 活性表里存在靶点编号不在靶点字典中的行,也存在化合物编号不在化合物表中的行。内连接会把这些行静默丢掉,且丢得没有任何提示。上线前应当先做一次左连接与内连接的行数差,差值就是被丢掉的部分;差值大就说明字典本身不全。
坑三:按记录而不是按化合物划分训练集与测试集。 同一化合物在同一靶点下常有几十条记录,若按记录随机划分,训练集与测试集会共享同一化合物,模型等于在背答案。正确做法是按 np_id 或按 InChIKey 分组划分,让同一分子的所有记录只落在一侧。这一步不做,任何活性预测的指标都会明显虚高。
三个坑的共同点在于,它们都不会报错。数据能读进来、代码能跑完、指标能算出来,只是结论不对。
§10 AI 使用声明
| 项 | 内容 |
|---|---|
| 性质 | 文献人工抄录的天然产物活性与物种来源数据集 |
| 适合用途 | 活性预测的标签源、物种—化合物检索、化学空间分析 |
| 不建议用途 | 临床决策、药物警戒、监管申报、任何需要个体级数据的场景 |
| 伦理与隐私 | 无人体数据,无隐私风险;涉及传统知识时应注意来源社区权益 |
| 引用要求 | 引用对应版本论文(v3.0 为《核酸研究》2026 年数据库专刊)并注明下载日期 |
| 版本管理 | 官方无版本字段,须自行记录下载时间与文件校验和 |
| 许可状态 | 未声明统一许可,商用与再分发前须逐条回溯原始文献与 PubChem 记录 |
| 已知风险 | 单位未归一、重复未合并、无阴性样本、下载包与网页不同步 |
常见误读
| 常见说法 | 实际情况 | 证据 |
|---|---|---|
| 「NPASS 有二十万化合物,下载就能拿到」 | 下载包主键只有三万级,与网页计数差一个数量级 | 六个文件的 np_id 去重计数,三表完全一致 |
| 「活性值可以直接当回归标签」 | 单位四百余种写法且含空值,重复未合并 | 单位列去重计数;青蒿素四条 IC50 并存 |
| 「它和 COCONUT 差不多,选一个就行」 | 一个以活性为主干,一个以结构为主干 | 两者的下载字段与论文定位 |
| 「有文献编号就等于可溯源」 | 有编号无抄录人、无复核、无版本 | 活性表仅有 ref_id 与 ref_id_type 两列 |
| 「天然产物库都覆盖植物来源」 | 来源多为数据库转录,部位与产地大量为空 | 配对表的分离部位与采集地列 |
| 「记录多说明这个化合物研究得透」 | 记录多可能只是被 PubChem 汇总过 | 青蒿素逾千条记录,来源库仅两条 |
| 「靶点都是蛋白,可以统一按基因聚合」 | 靶点含细胞系、组织、整体生物等九类 | 靶点表的 target_type 列 |
| 「没有阴性样本可以靠随机采样补」 | 随机化合物与天然产物的化学空间差异极大 | 性质表的分子量与脂水分配系数分布差异 |
| 「网页上的毒性数据下载包里也有」 | 下载区只有六个文件,毒性、ADME、组成不在其中 | 下载页仅列六个链接 |
| 「靶点表里的 Uncleic Acid 是核酸的一类」 | 是 Nucleic Acid 的拼写错误 | 靶点表 target_type 取值 |
术语表
| 术语 | 含义 |
|---|---|
| 天然产物 | 由生物体合成的次生代谢物,区别于全合成化合物 |
| 定量活性 | 有具体数值与单位的活性测量,如 IC50、MIC |
| IC50 | 抑制一半目标活性所需的浓度 |
| MIC | 抑制微生物可见生长的最低浓度 |
| Potency | PubChem 汇总测定中的通用效力读数 |
| 靶点 | 活性测量所针对的实体,可为蛋白、细胞系或整体生物 |
| InChIKey | 由结构算出的二十五位哈希串,可作分子唯一键 |
| SMILES | 用文本线性表示分子结构的记号法 |
| 脂水分配系数 | 衡量分子亲脂性的描述符,有 ALogP、MLogP、XLogP 等算法 |
| Lipinski 违规 | 违反类药五规则中若干条的计数 |
| 物种来源 | 化合物被分离或检测到的那一个生物分类单元 |
| 分类学编号 | NCBI 给每个分类单元发的数字标识 |
| 转录 | 从别的数据库整批搬运记录,而非从原文抄录 |
| 阴性结果 | 测过但未观察到活性的记录,本库基本不收 |
| 平面文件 | 无嵌套结构的纯文本表格,如制表符分隔文件 |
| 快照 | 某一时点导出的静态数据副本,此后不随源更新 |
| DAIMS | 一套评估数据档案管理的框架,看采集、建模、溯源与治理 |
| 校验和 | 由文件内容算出的定长串,用于判断文件是否被改动 |
编辑说明
核验时间 2026 年 10 月 29 日。官网计数取自站点的首页、关于页与下载页;下载包的行数、列名、单位取值、文献类型与主键去重数,均由本编辑部实际下载六个文件后逐列统计得出,未做抽样。示例记录(「青蒿素」NPC260977、小檗碱 NPC53069)取自下载包原始行,未做任何改写。
未覆盖的内容:网页在线版的定量组成、实验毒性与实验 ADME 三类记录未纳入统计,因为下载区不提供这些表;v3.0 论文中的活性三级分类(分子、体外、体内)未与下载包逐条核对,因下载包不含该字段。官网计数与下载包不一致的原因,官方未作说明,本稿只陈述两侧数字,不推测成因。
本词条所记 slug 为 npass。经核实,该 slug 对应的实体是天然产物活性与物种来源数据库,与部分检索中出现的「国家癌症登记计划」类表述无关。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- davis — 共享标签:药物发现与化学 / 化学信息学 / 药物-靶点相互作用
- drugbank — 共享标签:药物发现与化学 / 化学信息学 / 药物-靶点相互作用
- tpddb — 共享标签:药物发现与化学 / 化学信息学 / 药物-靶点相互作用
- chembl — 共享标签:药物发现与化学 / 化学信息学 / 药物-靶点相互作用
- drugtargetcommons — 共享标签:药物发现与化学 / 化学信息学 / 药物-靶点相互作用
- iuphar-bps — 共享标签:药物发现与化学 / 化学信息学 / 药物-靶点相互作用
- hetionet — 共享标签:药物发现与化学 / 化学信息学 / 药物-靶点相互作用
- chembl — 共享标签:药物发现与化学 / 化学信息学 / 药物-靶点相互作用
- zinc — 共享标签:药物发现与化学 / 化学信息学
- pdbbind — 共享标签:药物发现与化学 / 化学信息学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
