FooDB 食物成分库 — 把一顿饭拆到分子层

四张表 / 数万条化合物记录 / 数百家来源的聚合 / 大部分浓度从未被测定

来源 https://foodb.ca/发布时间: 2026-10-29最后更新: 2026-10-29 阅读 5
FooDB 食物成分库 — 把一顿饭拆到分子层

信息速览

数据集名称FooDB 食物成分库 — 把一顿饭拆到分子层
数据类型化学成分,浓度数据,化学结构,元数据
规模不适用(以食物与化合物计数:食物不足千条,化合物记录数万条)
接入方式https://foodb.ca/
AI 就绪度

FooDB 的全称是 The Food Database,一个把「食物里有什么」写成可检索表格的库。它不问某种食物有多少热量、多少蛋白质,而问这颗大蒜里到底出现了哪些化学物质、其中多少种已经知道含量。这个问题在各国官方的营养成分表里通常只有几十到一百多个答案,FooDB 给出的答案则数以千计。

它由加拿大阿尔伯塔大学的 David Wishart 实验室维护,与人体代谢组数据库 HMDB、药物数据库 DrugBank 出自同一团队。三者的分工可以用一句话概括:HMDB 管人体里的小分子,DrugBank 管药物,FooDB 管吃进去的东西。同一套编号习惯、同一套字段设计、同一批交叉链接,只是对象换成了餐桌。

因此它更像一部「食物化学成分的索引」,而不是一份测量报告。库里绝大多数化合物只被记录了「存在」,没有被记录「多少」;浓度一栏的数字来自数百家来源的汇编,彼此口径并不统一。理解这一点,比记住任何一个总数都重要。一屏速览见下表。

维度 内容
全称 The Food Database(FooDB)
维护方 阿尔伯塔大学 Wishart 实验室 / 加拿大代谢组学创新中心(TMIC)
站点版本 Version 1.0;下载页标注 Pre-release 1.0
数据截止 2020 年 4 月 7 日
组织方式 食物、化合物、浓度三张主表,另加营养素分组表
标识符 食物五位编号,化合物六位编号
食物记录 近千条(Food 表)
化合物记录 数万条(Compound 表,详见 §2.4)
浓度记录 五百余万条(Content 表)
来源数 三百余家,其中带定量数据的四家
浓度单位 每 100 克食物中的毫克数
字段规模 每个化合物记录一百余个字段
许可 CC BY-NC 4.0,非商业自由,商业需授权
下载 免注册、免登录,整包下载
已知短板 八成以上化合物未定量,单位与命名未归一

§1 它要解决的具体麻烦

1.1 营养成分表只回答了一百多个问题

任何做过膳食调查的人都会碰到同一堵墙。你手上有一份二十四小时回顾,能算出受试者吃了多少克西兰花、多少克咖啡,也能从食物成分表里查到热量、蛋白质、脂肪、几种维生素和矿物质。然后你想再往前一步,问一句「他今天摄入的槲皮素大概多少」,表里没有这一栏。

这不是哪个国家偷懒。官方的食物成分表是为公共卫生与标签法规服务的,它必须保证每个数字都来自可复现的标准方法,因此只收录那些有标准方法、有标准品、有实验室能常规测的项目。这套约束把字段数锁在一两百个的量级,而食物中已知的化学物质数量是数万级。

FooDB 的出发点就是把计数单位从「营养素」换成「化合物」。它不再问「这份食物符不符合标签规范」,而问「文献里报道过这份食物里出现过哪些分子」。这个转向让字段数从一百多跃升到数千,同时也把可靠性从「标准方法」降到了「文献报道」。库的全部优点与全部麻烦,都从这一次转向里来。

一个常被引用的对照:美国农业部的库把生蒜拆成六十七项,FooDB 把同一颗蒜拆成两千三百零六项。数量的差距不是精度提升,而是口径扩张——后者的绝大多数项只是「检出过」,没有含量。

1.2 三条常见的错误期待

常见期待 实际情况
以为库里的浓度都是实验室测出来的 浓度是数百家来源的汇编,真正带定量数据的只有四家成分库,其余多为只记「含有」的文献
以为它像营养成分表一样做过标准化 同一化合物有多个名称、同一食物有多个叫法、单位混用 ppm 与毫克每百克,表内未归一
以为化合物记录的条数就等于被搞清楚的物质种数 其中五万余条是推定存在而非分离鉴定,另有四万余条属脂类,有浓度值的只有万余种

1.3 它能给到的与给不到的

你的需求 它给的 够不够
某种食物里报道过哪些化合物 按食物查化合物,一次列出数千条,带结构与分类 够,这是它的主场
某种化合物出现在哪些食物里 按化合物查食物,可作暴露来源的初筛 够,但需自行去重与对齐名称
某食物某化合物的含量 一个平均值,附若干条来源与数值 勉强够做量级判断,不够做定量结论
同一化合物在不同食物间的比较 可以并列,但单位需先统一 够,前提是先做换算与异常值剔除
浓度测定的不确定度、样本量、检测方法 不提供,只给来源名称与数值 不够
加工食品的配方级组成 不提供,只有粗粒度品类 不够
可食部位与不可食部位的区分 不标注,数据里混有种子、果皮、茎叶 不够,需自行剔除
二〇二〇年之后的新数据 不提供,库已停止更新 不够

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
想为一份膳食问卷补上植物次生代谢物的摄入估算 给出食物到化合物的候选清单与量级 先把食物名对齐到问卷编码,再逐化合物检查是否有浓度
想找某种风味物质可能来自哪些食材 按化合物反查食物,附带香气与滋味描述 用香气字段交叉验证,别把「检出」当作「主要贡献」
想为食物-化合物二部图做嵌入或推荐 现成的边表,节点带结构标识与分类 剔除无浓度的边,按来源分层加权
想找某个化合物的食品基质背景 列出所有报道过它的食物 注意同物异名,先按结构标识去重
想做食品安全的毒理筛查 可作候选化合物清单 库内无毒理终点,需外接其他库

1.5 一句话判断

如果你要的是「某种食物里可能出现哪些分子」的宽口径索引,FooDB 是目前覆盖最广的公开选择;如果你要的是「这份食物里某物质到底有多少」的可引用数字,它的诚实程度只到「某文献报道过某个值」这一层。

1.6 不适合谁:四条边界

第一,不适合做法规与标签的人。标签需要可复现的标准方法学、需要检测限与不确定度,FooDB 两样都没有。它给的是一堆来源不明的数字的平均值,无法支撑任何合规声称。

第二,不适合做精确暴露评估的人。暴露评估的误差预算要求每个浓度值带样本量与方法信息,FooDB 只给来源名称。用它算出的摄入量,误差主要来自浓度而非食物消费量,且这个误差无法量化。

第三,不适合做配方研发的人。库里没有配料表、没有配比、没有工艺,也没有品牌与批次。想回答「这款饮料含多少某香精」,只能回到供应商的规格书。

第四,不适合需要最新数据的人。数据只到二〇二〇年,此后高分辨质谱普及带来的大量新检出没有进来。做近五年的食品趋势分析,它只能当历史基线。

§2 数据构成与规格

2.1 四张主表,而不是五个模块

坊间常把 FooDB 描述成「食物、化合物、浓度、风味、通路」五个模块。这个说法在概念上不算错,但与下载到的表结构对不上。整包下载解压后是四张主表:Compound、Food、Content、Nutrient,另有若干引用与交叉链接表。

风味不是独立模块。颜色、香气、滋味是 Compound 记录里的字段,一个化合物可以标「大蒜气味」「苦味」「无色」,这些描述跟着化合物走,不构成单独的实体表。想按风味检索,正确做法是筛化合物字段,而不是找一张风味表。

通路也不是独立模块。站点上化合物的通路信息以外链形式指向 SMPDB(同团队的小分子通路图库),FooDB 自身不存通路拓扑。因此「五个模块」应当理解为「四张表加两类外链」。

表 一行是什么 规模(下载页口径)
Food 一种食物,带五位编号与名称 不足千行
Compound 一种化合物,带六位编号、结构、分类、风味字段 数万行,见 §2.4
Content 一条浓度观测:某食物中某化合物的某个值 五百余万行
Nutrient 一个营养素分组(蛋白质、脂肪、某类脂肪酸等) 数十行

四张表的关系是典型的星型:Content 是事实表,Food 与 Compound 是维度表,Nutrient 是把化合物按营养学口径分组的另一套维度。这个设计的好处是浓度记录可以无限追加而不动字典;坏处是任何一次分析都要先做两次连接。

2.2 字段字典

Compound 表字段最多,官方称每个化合物记录有一百余个字段。实际分析常用的是下面这些。

字段 含义 可用性
id 六位化合物编号 主键,稳定
name 化合物名称 常用,但同物异名严重
cas_number CAS 登记号 部分缺失
smiles / inchi / inchikey 结构标识 覆盖较好,去重首选
formula / mass 分子式与分子量 覆盖较好
kingdom / superclass / class / subclass 化学分类四级 有缺失,曾被第三方用 ClassyFire 重算
food_source 报道过的食物 冗余字段,与 Content 不一致
flavour / aroma / taste 风味描述 文本,未结构化
biosource / biological 生物来源与生理作用 文本,稀疏

Content 表的字段少而关键,全部围绕「一个数值从哪来」。

字段 含义 备注
food_id 指向 Food 的五位编号 有缺失,部分记录只有食物名
orig_food_common_name 食物名称原文 缺失时只能靠它对齐
compound_id 指向 Compound 的六位编号 有缺失
orig_source_name 化合物名称原文 与字典表名称常不一致
orig_content 浓度数值 主体载荷
orig_unit 原始单位 混杂,需统一
orig_min / orig_max 来源给出的上下限 仅部分来源有
source_type 来源类型 可据此分层
citation 文献或库的引用 文本,未规范化

2.3 一条浓度记录的解剖

取一条典型的 Content 行,它读起来是这样的。

#-- 一条 Content 记录的各字段(示意,非真实记录)
food_id              ->  "1234"
orig_food_common_name->  "Garlic"
compound_id          ->  "000123"
orig_source_name     ->  "Quercetin"
orig_content         ->  1.7
orig_unit            ->  "mg/100 g"
source_type          ->  "DUKE"
citation             ->  "Duke's Phytochemical and Ethnobotanical Databases"

这条记录回答的只有一件事:有人报道过大蒜里槲皮素的含量是每百克一点七毫克。它不回答测了几份样品、用的什么方法、检出限多少、是不是同一个品种。这些信息在原始文献里,但不在表里。

于是同一个「大蒜—槲皮素」组合在 Content 表里会出现多行,来自不同文献、不同成分库、不同年份,数值可能是一点七,也可能是十七。站点在展示层给出一个平均值,而在下载表里保留全部行。这个设计是有意的:它把「选哪个值」的决定权交给了使用者,代价是使用者必须自己承担这个决定。

2.4 三套并行口径

同一个库,三篇文章会给出三个不同的化合物总数,原因在于数的是不同的层。

第一层是字典层。Compound 表的行数是七万零四百七十七行(第三方对二〇二〇年四月版下载包的统计),这是「化合物记录」数,不等于「被确认存在的化合物」数。研究者指出其中五万余条是推定存在,四万余条属脂类或类脂物质,真正由实验分离鉴定的只是一部分。

第二层是有浓度层。Content 表里出现过的不同化合物约一万零九百种(第三方清洗统计),这是「至少有一条浓度记录」的化合物数。再严格一点,只保留名称与数值都齐全的记录,可用的化合物降到两千六百三十三种。

第三层是食物层。Food 表的行数不足千,但 Content 表里出现过的不同食物名有九千余个。多数食物名从未被提升为独立的 Food 记录,只以字符串形式挂在浓度行上。

口径 数的是什么 量级 出处
字典层 Compound 表行数 70,477 二〇二三年对下载包的统计
有浓度层 Content 中出现过的不同化合物 一万余 第三方清洗后统计
严格可用层 名称与数值齐全的化合物 数千 营养流行病学清洗流程
食物层(表) Food 表行数 近千 下载页
食物层(串) Content 中不同食物名 九千余 第三方清洗后统计

看到任何一个「FooDB 有多少化合物」的说法,第一件事是问它数的是哪一层。三层之间差一个数量级,互相并不矛盾。

2.5 标识符与稳定性

食物用五位编号,化合物用六位编号,站点把这套编号当作永久标识来承诺:编号在站内可检索,在下载数据里也带着,同一个编号永远指向同一个实体。

实际使用中,编号的覆盖并不完整。Content 表里有相当比例的记录只有名称、没有编号,尤其是来自文献转录的部分。这意味着「按编号连接」会丢掉一批记录,「按名称连接」又会引入同物异名的错误。稳妥的做法是两条路都走一遍,再按结构标识(InChIKey)做终局去重。

2.6 浓度与单位

站点的规范单位是每 100 克食物中的毫克数。原始来源五花八门:有的用 ppm,有的用每百克微克,有的用微摩尔,有的干脆只给「微量」「主要成分」这类定性描述。入库时做了折算,折算规则没有公开文档。

三个后果值得记住。

其一,只给上下限的来源被取了中值。DUKE 植物化学库只记录测定的最低量与最高量,不记录单体值,FooDB 取两者平均后写入。这等于把「区间」压成了「点」,而且这个点往往偏高,因为最高值常来自极端样本。

其二,零值被保留。浓度为零的记录不删,因为它可能表示「检出限以下」,也可能表示「确实没有」。两种含义混在一起,直接做统计会把「未检出」当成「含量为零」。

其三,单位事故有实例可查。有研究报告了蓝莓维生素 K 在库中记为每百克三十毫克,而标准成分表是每百克零点零二毫克,源头是 DUKE 以 ppm 记录后被放大了百倍。这类错误不是孤例,硒与烟酸也有类似偏高。

2.7 风味与通路挂在哪里

想把 FooDB 当风味数据库用的人,需要先知道它的边界。香气与滋味是化合物属性,一个化合物可以同时标「存在于大蒜」「有硫味」「有刺激性气味」。这些字段是自由文本,没有受控词表,也没有强度分级,因此只能做粗筛,不能做风味强度建模。

通路信息则完全在库外。化合物页会给出 SMPDB 的链接,指向该化合物参与的小分子反应图。FooDB 自身不存反应、不存酶、不存通路拓扑。想研究「蒜氨酸在体内变成什么」,路径是 FooDB 找化合物,再去 HMDB 或 SMPDB 看代谢。

§3 它的身份:谁的库,对谁负责

3.1 三个名称,一个东西

站点标题写 FooDB,副标题写 The Food Database,正文里又常出现全大写的 FOODB。三个写法指同一个库。文件名与下载包里用的是 foodb,学术引用里通常写 FooDB。

版本标识有一处不一致值得记下:首页写 Version 1.0,下载页写 Pre-release 1.0。前者读起来像正式版,后者说明维护方自己把它当作尚未定稿的预发布。此后近六年再无版本更新,这个「预发布」状态事实上被冻结了。

3.2 Wishart 套件里的食物分支

David Wishart 在阿尔伯塔大学建立的这一组库,习惯上被称作「小分子知识库家族」。它们共享同一套设计哲学:一个实体一个页面,页面上一百余个字段,字段按「命名—结构—理化—生物学—来源—浓度」的顺序排列,末尾挂交叉链接。

库 管什么 计数单位 与 FooDB 的关系
HMDB 人体内源代谢物 代谢物 同一化合物在两库各有页面,互相链接
DrugBank 药物与药物靶点 药物 食物-药物相互作用不在 FooDB,需另找
T3DB 环境毒物与毒素 毒物 食物中的天然毒素部分重叠
SMPDB 小分子通路图 通路 FooDB 的通路信息以外链指向它
FooDB 食物中的化学成分 食物×化合物 本词条主体
MCDB 乳汁成分 化合物 更细的单一基质版本

这张表解释了一个常见困惑:为什么在 FooDB 里查到的化合物,往往在 HMDB 里也有一模一样的页面布局。因为它们本就是同一套模板喂进不同的数据。对使用者来说,好处是学习成本只付一次;坏处是容易忘记三个库的可靠性完全不同——HMDB 有相当比例的实验测定,FooDB 的主体是文献汇编。

3.3 谁在维护,钱从哪来

站点署名的维护方是阿尔伯塔大学 Wishart 实验室,运营依托加拿大代谢组学创新中心(TMIC)。站内没有披露资助来源,也没有编委会名单,只有一封用于商业授权的联系邮箱。

这一点对使用有实际影响:当你在论文里写「据 FooDB」,审稿人无法通过公开文档判断这个库的策展标准、错误更正流程与撤稿机制。库的权威性建立在团队其他库的声誉上,而不是建立在这个库自己的方法学文档上。

3.4 对谁负责:三种责任边界

对引用者,它负责的是「可检索、可追溯到一个来源名称」。每条浓度记录都带来源字段,虽然这个字段常常只是一个库名而不是一篇文献。

对被聚合的源库,它负责的是「标注出处」。USDA、DTU、Phenol-Explorer、DUKE 的数据进入 FooDB 后仍带原名,这是它敢自称聚合库的底气。

对商业使用者,它负责的是「划清许可边界」。数据以 CC BY-NC 4.0 发布,非商业可自由使用;商业使用需要单独取得授权。这条边界在实务中经常被忽略,尤其是企业内部工具把小库并进产品时。

3.5 三根坐标轴

理解这个库的最快方式,是把它想成一个三维坐标系:一轴是食物,一轴是化合物,一轴是浓度。任何一个数据点都是三个坐标的乘积,缺一个就不成立。

绝大多数已有记录落在「食物×化合物」这个平面上,第三轴的坐标是空的。这就是为什么库看起来很大(平面上的点极多),用起来很小(有高度的点很少)。所有关于 FooDB 的误判,几乎都源于把这个平面当成了立体。

§4 它的手艺:聚合,而不是测量

4.1 食物成分天生测不全

一份食物里的化学物质数量,取决于你用什么方法去找。用靶向方法找三十种维生素与脂肪酸,得到三十个数字;用非靶向高分辨质谱找,一份样本可以打出数千个特征峰,其中能定性的只是少数。

这个不对称决定了任何「完整的食物成分库」都不可能靠单一实验室完成。以大蒜为例,文献报道过的化合物超过两千种,但其中被定量过的只有一百四十六种,其余两千多种只知道「存在」。这不是哪个库偷懒,而是定量一种化合物需要一个标准品、一条标准曲线、一次方法验证,成本远高于「检出」。

FooDB 的应对策略是承认这个现实,然后把「存在」与「含量」分开记录:所有化合物都进字典表,只有有数值的才进浓度表。这个设计是对的,问题出在后来的使用者常常只看字典表的行数。

4.2 数百家来源,三种类型

站点称全库聚合了数百家来源。第三方梳理把这些来源分成三类:科学文献、国家食物成分库、食物本体(对食物分类的概念框架)。

三类来源的性质差别很大。科学文献提供的是「某研究在某样本中检出某物质」,往往样本量小、基质特定、方法各异;国家成分库提供的是标准化的营养素数值,可靠但字段窄;食物本体提供的是分类与命名,不含数值。

关键事实是:把「必须有食物名、必须有化合物名、必须有浓度值」三条同时加上之后,全部来源里只剩四家能留下记录。其余数百家贡献的是「存在性」,不是「含量」。

来源 性质 擅长 在库中的角色
USDA 国家营养成分库 国家成分库 维生素、矿物质、脂肪酸、氨基酸 食物记录最多的贡献者
DTU Frida(丹麦) 国家成分库 同上,北欧食物为主 补充欧洲食物
Phenol-Explorer 多酚专题库 多酚类,逐条溯源到原始文献 植物次生代谢物的主力
DUKE 植物化学库 植物学汇编 植物化学物质覆盖广 覆盖最广,但只给上下限
其余数百家 文献与本体 存在性证据 只贡献「含有」

4.3 有定量数据的只有四家

这张表值得单独强调,因为它决定了数据质量的分布。

USDA 贡献了绝大多数食物记录,但它贡献的化合物只有一百余种,全是常规营养素。DTU 类似,化合物数一百余种。Phenol-Explorer 的化合物数近五百,全部是多酚,且每条含量都能追到原始文献,是四家里溯源质量最高的。DUKE 的化合物数最多,超过七千,但它只记录测定的最低值与最高值,且包含大量不可食用部位。

四家拼起来的覆盖是这样的:常规营养素靠 USDA 与 DTU,植物次生代谢物靠 Phenol-Explorer 与 DUKE。前两家可靠但不深,后两家深但可靠性参差。FooDB 把四家混在一张表里,没有在字段上标注「这一条来自哪一类」,只给来源名。这是使用时必须自己补的一层。

4.4 平均值的代价

同一食物同一化合物有多个来源时,站点展示平均值。这个选择在工程上简单,在统计上代价明确。

平均值抹掉了离散度。若某化合物在某食物中的报道值从每百克零点一毫克到十毫克,平均可能是一毫克,而真实的分布是双峰——不同品种、不同产地、不同部位各占一峰。使用者拿到一毫克,会以为这是一个有代表性的中心,实际上它可能不属于任何一个真实样本。

平均值也抹掉了来源质量。一条来自 Phenol-Explorer 的、可溯源到原始文献的值,和一条来自 DUKE 的、由上下限平均出来的值,在平均时权重相同。前者的不确定度可能是百分之十,后者可能是十倍。

4.5 案例:一颗蒜的两千三百零六与一百四十六

这个案例可以贯穿整个库的逻辑。

第一步,问「大蒜里有多少种化合物」。按字典层回答,两千三百零六种。这个数字让 FooDB 显得远比官方成分表强大——后者只列六十七项。

第二步,问「其中多少种知道含量」。按浓度层回答,一百四十六种。剩下两千一百六十种只有「存在」的记载。

第三步,问「这一百四十六种的含量可信吗」。答案取决于来源:若来自 Phenol-Explorer,可追到原始文献;若来自 DUKE,只是一个区间中点;若来自文献转录,可能连样本是哪个品种都不知道。

三步走完,同一个库给出的三个答案分别是两千三百零六、一百四十六、以及一个无法量化的可信度。任何一个只引用第一个数字的说法,都在无意中夸大这个库的能力。

4.6 为什么不做名称与单位归一

这是最常被抱怨的一点:为什么不把「维生素 B5」和「泛酸」合成一条,为什么不把 ppm 全换成毫克每百克。

部分原因是规模。数万条化合物、五百万条浓度记录,逐条人工归一是不现实的。部分原因是来源约束:改写源库的名称会破坏溯源,而溯源是这个库唯一的信誉来源。部分原因是这件事在库外更容易做——Phenol-Explorer 已经做过自己那部分的归一,使用者只需要在合并层做一次映射。

代价落在使用者身上。任何一次严肃的使用,都要先写一段名称映射与单位换算的代码,而这段代码的质量决定了结论的质量。已有研究把这段清洗流程完整发表出来,可以作为起点。

§5 取数:从网页点击到整包下载

5.1 四条路径的取舍

路径 适合谁 拿到什么 限制
网页按食物浏览 想快速看某食物含什么 化合物列表与浓度摘要 分页,无法批量
网页按化合物浏览 想找某物质的食物来源 食物列表与浓度 同上
整包下载 要做分析的人 四张表的全量数据 体量以 GB 计,需自行清洗
结构检索 手上有结构想知道是不是已知食物成分 结构匹配结果 只做结构层,不含浓度

四条路径的数据同源,差别只在聚合粒度。做任何需要统计的事,都应当走整包下载;网页只适合确认某个具体事实。

5.2 下载页给什么

下载页提供整包,格式包括 JSON、CSV、XML、SQL,另有质谱与核磁的交换格式(mzML、nmrML)用于谱图文件。站点的合规声明写明:访问与下载不需要身份验证,浏览器直接可取。

整包解压后是若干表文件,命名直观(compound、food、content、nutrient 及各交叉链接表)。体量最大的永远是 content,因为它是五百万行级别的事实表;compound 次之,因为每条记录一百余个字段;food 与 nutrient 都很小,可以直接在内存里当字典用。

5.3 用 pandas 读一张事实表

下面这段是最小可运行路径。它只做三件事:读表、选列、按来源分组看规模。

import pandas as pd

#-- 整包解压后的目录,按实际文件名调整
BASE = "foodb_2020_04_07_csv"

content = pd.read_csv(f"{BASE}/Content.csv", low_memory=False)
print(content.shape)                       #-- (行数, 列数)

#-- 只留分析必需的列,五百万行全字段读入会吃掉十几 GB
cols = ["food_id", "orig_food_common_name", "compound_id",
        "orig_source_name", "orig_content", "orig_unit", "source_type"]
c = content[cols].copy()

#-- 看每个来源贡献了多少条浓度记录
print(c["source_type"].value_counts().head(10))

#-- 单位先看一眼再决定怎么换算,别默认全是 mg/100 g
print(c["orig_unit"].value_counts().head(15))

读进来之后第一件事不是统计,而是看单位分布。单位不统一时,任何按化合物求均值的操作都会得到无意义的数。

5.4 两条浏览轴

网页端提供两个视角:按食物看(FoodView,列出一种食物的所有化合物),按化合物看(ChemView,列出一种化合物的所有食物)。这两个视角是同一张事实表的两个投影,切换视角不改变数据。

实践中,FoodView 适合做「这份食材值不值得研究」的初判,ChemView 适合做「这个化合物从哪来」的溯源。前者看行数,后者看分布。

5.5 结构检索与谱图

站点提供结构检索,可以画一个子结构或贴一个 SMILES,返回库内匹配的化合物。这对天然产物研究很实用:手上分离到一个未知峰,先看它是不是已经在食物成分的名单里。

谱图层面的支持体现在格式上:质谱以 SPLASH 标识符寻址,核磁以 nmrML 存放。这意味着理论上可以把自测谱图与库内谱图做匹配,但库内谱图的覆盖面远小于化合物覆盖面,多数化合物没有谱图。

5.6 版本固定

库已停止更新,这让版本固定变得简单:引用时写清「Pre-release 1.0,数据截止二〇二〇年四月七日」,就足以定位到唯一一份数据。这与仍在滚动的库相反——那些库必须写下载日期,否则结果无法复现。

需要提醒的是,站点的网页层与下载包可能不同步。网页上的某些化合物页面在下载表里找不到对应行,反之亦然。做可复现分析应以下载包为准。

§6 与库内条目的关系

6.1 关系图谱

在「千方 hub」已收录的资源里,FooDB 的位置不是孤立的。它同时是阿尔伯塔家族的一员,又是食物成分数据这一支的代表。

库 与本库的关系 差异要点
HMDB 同门,管人体内源代谢物 对象从餐桌换到体液;实验测定比例更高
DrugBank 同门,管药物 对象是外源小分子药物,带靶点与相互作用
USDA FoodData Central 上游来源之一 以营养素为字段,食物记录数远大于 FooDB
Phenol-Explorer 上游来源之一 只做多酚,但每条可溯源到原始文献
LOTUS 天然产物库 曾考虑整合 FooDB,最终排除 排除理由是许可不允许再发布

最后一行值得展开。天然产物文献库 LOTUS 在构建时扫描了四十余个公开资源,FooDB 在候选名单里,最终没有进入整合。原因不是数据质量,而是许可:FooDB 的 CC BY-NC 条款要求商业使用另行授权,与「可自由再发布」的整合前提冲突。同一份数据,在一个场景里是开放资源,在另一个场景里就成了受限资源。这个例子说明许可证不是标签,而是会实际改变数据流向的约束。

6.2 与 HMDB 的分工:体液与餐桌

HMDB 收录的是人体内源代谢物,样本是血清、尿液、脑脊液;FooDB 收录的是食物成分,样本是食材。两者的交集在于「食物中的分子进入人体后仍是同一个分子」——槲皮素在大蒜里叫槲皮素,在血浆里也叫槲皮素。

这份交集让两个库可以接起来做一件事:从膳食摄入推到体内暴露。路径是先在 FooDB 找食物中的化合物,再到 HMDB 看该化合物的吸收、分布、代谢与排泄。站点之间的交叉链接正是为这条路径准备的。

分工之外还有一层质量差异需要记住。HMDB 有相当比例的数据来自该团队自己的实验测定与文献精读,一个代谢物页面上的浓度往往标注了体液类型、病理状态与样本量。FooDB 的浓度多数只是「某来源报道过某值」。同样是一百多个字段的页面,可信度不在一个层级。

6.3 与 DrugBank 的分工:吃进去的药与吃进去的饭

DrugBank 管的是药物,带靶点、带相互作用、带剂量。FooDB 管的是食物成分,不带靶点、不带相互作用、不带剂量。

两者唯一该被联系起来的地方是食物-药物相互作用,而这恰恰是 FooDB 不提供的。想研究「西柚汁为什么影响某些药物代谢」,需要的是呋喃香豆素对 CYP3A4 的抑制数据,这类数据在 DrugBank 的相互作用记载与药理学文献里,不在食物成分表里。FooDB 能做的是告诉你西柚里有呋喃香豆素,含量大概多少,仅此而已。

把这三个库放在一起看,能看出一条清晰的分界:HMDB 回答「体内有什么」,DrugBank 回答「药物做什么」,FooDB 回答「吃的东西里有什么」。三个问题都很重要,但没有一个能替代另外两个。

6.4 与 USDA FoodData Central 的区隔

这是最容易混淆的一对,因为 FooDB 的多数食物记录正是从 USDA 来的。

维度 FooDB FoodData Central
计数单位 化合物 营养素
字段宽度 每个化合物一百余字段 每个食物数十到数百营养素
食物粒度 不足千条(表内) 数十万条,含品牌产品
数值来源 数百家汇编 官方实验室分析与厂商提交
品牌与加工食品 基本没有 大量覆盖
更新 停在二〇二〇年 持续更新
许可 CC BY-NC 美国联邦政府作品,公有领域

一句话概括:要「这款饼干含多少钠」,去 FoodData Central;要「大蒜里有哪些含硫化合物」,来 FooDB。前者的强项是广度与合规,后者的强项是分子层的深度。

6.5 该把它接在什么位置

对做多组学的人,FooDB 是「暴露端」的一张注释表:代谢组学找到的未知峰,可以来这里查是不是食物来源。对做营养流行病学的人,它是「把食物翻译成化合物」的词典。对做知识图谱的人,它是食物-化合物二部图的一个现成边集。

三种用法共享同一个前提:只用有浓度的那一小部分,且对浓度做分层处理。把它当作「全部食物成分的完整清单」来用,在任何一种场景里都会出错。

§7 质量与已知问题

7.0 阅读本节前的一个前置校正

讨论一个库的「质量」,先要确定它承诺了什么。FooDB 承诺的是「把文献与既有成分库里报道过的食物成分汇总到一处,并标注来源」。它没有承诺测定、没有承诺标准化、没有承诺完整。

按这个承诺衡量,它完成得不错:覆盖广、每条有来源、结构完整、可下载、可检索。按「测量数据集」的标准衡量,它几乎处处不及格:没有方法、没有误差、没有样本量、没有检出限。

绝大多数对该库的批评,本质上是拿第二把尺子量第一件事。这不是说批评不成立,而是说批评的落点应当是「别把它当测量数据用」,而不是「这个库做得很差」。

7.1 DAIMS 五维评分

维度 评分 依据
可发现性 强 有永久编号、有交叉链接、有结构检索、网页可直达
可访问性 强 免注册下载,多格式,CC BY-NC 明确
互操作性 中 结构标识规范,但名称与单位未归一,需外部映射
可复用性 中 许可清晰,但缺方法学文档与版本说明,复用成本高
可信度 弱至中 来源可标,但不可核;单位事故与部位混淆有实例

五维里最强的是前两项,这也是它能被广泛引用的原因;最弱的是最后一项,这也是它难以支撑定量结论的原因。

7.2 已知的、可枚举的偏差

偏差 表现 后果
存在性偏差 检出即入表,未检出不入表 越是研究得多的食物,化合物数越多,与真实组成无关
研究热度偏差 大蒜、绿茶、蓝莓等被反复研究 冷门食材的记录数被系统性低估
量化偏差 只有百分之一五左右的化合物有浓度 任何按化合物计的统计都被未定量部分稀释
区间压缩 DUKE 只给上下限,取中值 高估常见,且方差信息丢失
部位混淆 含种子、果皮、茎叶等不可食部位 部分食物浓度被高估数倍
名称漂移 同物异名、异构体混同 去重不彻底会重复计数
单位残留 ppm、微克、微摩尔混入 量级错误,最严重的可达百倍

这份清单不需要背,只需要记住一件事:任何一个从 FooDB 算出来的数,都同时背着这七种偏差。写论文时如果不提,等于默认它们不存在。

7.3 单位事故:一份可复查的案例

第三方在清洗 FooDB 时发现了一个可以完整复盘的错误链。

症状:蓝莓的维生素 K 在库中记为每百克三十毫克,而丹麦国家成分库是每百克零点零二毫克,相差一千五百倍。

原因:源头 DUKE 库以 ppm(即每公斤毫克数)记录该值,写作三十。FooDB 在折算为每百克时按毫克处理,数值未除以十,再被当作每百克毫克数写入,于是三十 ppm 变成了三十毫克每百克,放大一百倍。原始文献的实际测定值是每百克零点二六到零点三二毫克。

后果:任何用 FooDB 估算维生素 K 摄入的研究,若不清洗,蓝莓类食物的贡献会被高估两个数量级。同类问题在硒与烟酸上也被发现。

这个案例的价值不在错误本身,而在它说明错误的类型:不是随机噪声,而是系统性的换算失误,会沿着所有引用该值的下游分析传播。

7.4 八成以上没有数字

被广泛引用的一个估计是:FooDB 收录的营养化合物中,约百分之八十五从未被定量。这个比例与前面的大蒜案例一致——两千三百零六种里一百四十六种有值,约百分之六。

两个数字不矛盾,因为分母不同:前者按全库化合物计,后者按单一食物的化合物计。共同结论是,这个库的主体是「存在性」,不是「含量」。

对做机器学习的人,这一点决定了它能不能用作监督信号。把「有记录」当作「有含量」,会得到一个标签极度稀疏且非随机缺失的数据集——缺失与「研究热度」强相关,而非与「真实含量」相关。

7.5 它为何存在,又为何停住

它为何存在,答案在需求侧:营养流行病学需要一个比营养成分表更宽的化合物清单,而官方体系受方法学约束无法提供。FooDB 用聚合的方式绕过了这个约束,代价是把可靠性换成了覆盖面。这是一笔清醒的交易。

它为何停住,站内没有解释。可以观察到的事实是:数据停更已逾六年,版本号停在 1.0 且标着 Pre-release,此后再无更新公告。同一团队的 HMDB 仍在更新,说明停滞不是团队能力问题,而是这个项目的资源与优先级问题。

对使用者的直接含义是:把它当作一份有明确截止日期的历史快照,而不是一个仍在生长的资源。任何「最新数据」的期待都会落空。

§8 生态位与历史

8.1 沿革

FooDB 的思路可以追到阿尔伯塔食物代谢组计划:该计划对数十种极常见的食物做了系统的代谢组测定,用实验数据补上文献里缺失的部分。这批实验数据加上文献汇编,构成了库的初版。

方法学上,这个库没有一篇专属的建库论文。被引用最多的是二〇一一年发表在《农业与食品化学杂志》上的一篇综述,讨论食物植物化学数据库及其健康效应,FooDB 在其中作为案例出现。站点的引用指引也很直白:引用网址本身。

这一点值得在方法学部分说清楚:与 HMDB、DrugBank 各有正式论文不同,FooDB 缺少一份可引用的建库说明。想了解它的策展规则,只能读站内的说明页与合规声明。对于一个被大量论文引用的资源,这是明显的文档缺口。

8.2 三兄弟的分工表

维度 HMDB DrugBank FooDB
对象 人体内源代谢物 药物 食物成分
规模 二十五万条代谢物记录 万余药物记录 数万条化合物记录
每条内容 浓度、疾病关联、通路、谱图 靶点、相互作用、剂量、药代 结构、分类、食物来源、浓度
数据来源 实验测定与文献精读 药品说明书与文献 数百家汇编
更新 持续 持续 停在二〇二〇年
许可 开放,非商业为主 学术免费,商业授权 CC BY-NC
典型用法 代谢组学注释 药物重定位与相互作用 膳食暴露与食品化学

三行放在一起看,能看出团队的策略:把「小分子在人体内的三类角色」分别做成库,用同一套模板降低使用成本,用交叉链接把它们串成一条链。FooDB 是这条链的入口端,也是三兄弟里维护最弱的一个。

8.3 营养暗物质这个说法

二〇二〇年前后,「营养暗物质」成了一个流行比喻:我们对食物中绝大多数分子的了解,接近于对暗物质的了解——知道它们在那里,不知道它们是什么、有多少、做什么。

FooDB 是这个比喻最常被引用的证据。它的价值不在于证明食物复杂,而在于第一次把「复杂」量化成一个可数的清单:数万条记录,其中八成没有数字。这个清单让「未知」变成了可管理的对象——可以一条一条去补。

比喻也有副作用。把「未定量」等同于「未知功能」会夸大空白:许多未定量的化合物其实有充分的安全性资料,只是没有人在每种食物里逐一测过含量。空白更多是测量经济学的产物,不是知识的有无。

8.4 在 AI 时代的再定位

近五年,FooDB 最主要的增量用途不是营养学,而是机器学习。常见用法有三种:做食物-化合物二部图的预训练,做化合物性质预测的辅助特征,做食品推荐的内容侧表示。

三种用法都碰到同一个问题:边权(浓度)大面积缺失,且缺失不随机。直接把缺失当零,会学出一个「研究热度」模型而不是「成分」模型。可行的做法是把图结构(谁含有谁)与边权(含多少)分开建模,前者用全量边,后者只用有值的小子集。

这也解释了为什么这个停止更新的库仍有生命力:图结构部分的价值衰减很慢——大蒜含有槲皮素这件事,不会因为库不更新而变错;含量部分的价值衰减很快——新的测定方法会推翻旧值。

§9 使用指引

9.1 三种角色的路径

角色 第一步 关键动作 常见坑
营养流行病学者 下载 Content 表 食物名对齐到问卷编码,剔除不可食部位 直接用平均值算摄入,误差不可控
食品化学研究者 按化合物查食物 用结构标识去重,核对来源类型 把 DUKE 的区间中点当测定值
数据工程师 下载整包建图 分开建「含有」边与「含量」边 把缺失当零,学出热度偏差

9.2 一条最短的可用流程

第一步,下载整包,解压到本地。别指望网页端做批量导出。

第二步,读 Content 表,只保留有数值、有单位、有食物名的行。这一步会砍掉大半记录,剩下的才是可用的部分。

第三步,统一单位。先看 orig_unit 的取值分布,把 ppm、微克、微摩尔分别折算到毫克每百克,折算系数写在代码里,别凭记忆。

第四步,按结构标识而不是名称去重。名称层的同物异名会把同一个化合物拆成几条,直接影响任何计数。

第五步,按来源分层。至少把四家有定量数据的来源与其余来源分开,前者可用于定量,后者只可用于「存在性」。

第六步,做异常值筛查。同一食物同一化合物的多个来源值若相差两个数量级以上,先怀疑单位,再怀疑部位。

第七步,记录版本与清洗规则。库不再更新,但你的清洗脚本会变,写清版本才能复现。

9.3 引用方式

站点的要求很简单:引用网址。学术写作中更稳妥的写法是同时给出库名、版本、数据截止日期与访问日期,例如「FooDB, Pre-release 1.0, 数据截止 2020-04-07, https://foodb.ca/」。

如果用了具体的浓度值,建议在方法部分说明该值来自哪个上游来源(USDA、DTU、Phenol-Explorer 或 DUKE),因为同一个数值在不同上游的可信度差别很大。只写「据 FooDB」会把这份差别藏起来。

商业使用需另行取得授权,这一点在方法部分也应写明,尤其是企业内部的工具链。

§10 AI 使用声明

本词条由千方病案医学编辑部组织撰写,事实核对以站点公开页面为主,辅以第三方对该库的清洗研究。写作过程中未使用生成式模型编造数据;所有数字均标注了口径与出处,无法核实的部分明确写为「站内未披露」。

需要声明的局限有三条。其一,站点首页与说明页在核对期间对自动抓取返回了人机验证页,正文内容经检索索引取得,与直连所见可能存在细微差异,核对日期为二〇二六年十月二十九日。其二,库已停止更新,站内页面与下载包可能不同步,本词条以公开可查的下载包统计为准。其三,第三方清洗研究的数字基于二〇二〇年四月版,若维护方此后重新发布,相关数字需重新核对。

对本词条内容的使用建议:把它当作选型与理解的参考,不要当作数据字典。真正的字段含义以下载包内的表头为准,真正的许可以站点合规页为准。

常见误读(避坑清单)

常见说法 实际是什么 证据
「FooDB 收录了数万种食物成分,所以数万种都被确认存在」 那个数是字典表行数,其中五万余条为推定存在,四万余条属脂类 第三方对二〇二〇版下载包的统计与分类说明
「它和营养成分表一样,数字可以直接引用」 浓度是汇编值,同一组合常有多个来源值,站点取平均 站点说明与清洗研究的测定值比对
「没有浓度说明这种化合物不存在」 只说明没人在这个食物里定量过它,不说明它不在 大蒜两千余种化合物仅一百余种有浓度
「免费下载就等于可以随便用」 免费指访问,许可是 CC BY-NC,商业使用需授权 站点合规页的许可声明
「它是开放数据,所以可以被任意整合再发布」 部分整合项目因该许可而排除它 天然产物文献库的源筛选说明
「同一个化合物在不同库里编号不同,需要手工对齐」 三个同门库共用编号风格并互相链接,但编号本身不通用 站点交叉链接与编号规则说明
「它包含加工食品的配方信息」 只有粗粒度品类,无配料、无配比、无品牌 表结构中没有配方与品牌字段
「它是持续更新的活库」 数据停在二〇二〇年四月,版本仍标预发布 下载页标注的更新日期
「按名称合并就能去重」 同物异名与异构体混同普遍存在,须按结构标识去重 清洗研究报告的名称归一问题
「用它算摄入量只需乘一下消费量」 还需食物名对齐、单位统一、异常值剔除、来源分层 已发表的清洗与链接流程
「覆盖广意味着每种食物都研究得很透」 覆盖广度由研究热度决定,冷门食材被系统性低估 存在性偏差与量化偏差的分布
「谱图齐全,可以做未知峰匹配」 谱图覆盖面远小于化合物覆盖面,多数化合物无谱图 下载格式与谱图寻址方式说明

FAQ

Q1:FooDB 里的浓度数字是实验室测出来的吗?

不全是。它是聚合库,浓度来自它汇编的数百家来源,其中真正带定量数据的只有四家食物成分库。即便来自成分库,也常是二次汇编而非原始测定。站点对同一食物同一化合物取各来源平均值展示,下载表则保留全部原始行。

Q2:现在还能免费下载吗?

可以,且不需要注册或登录。站点合规页明确写明访问与下载不需要身份验证,整包提供 JSON、CSV、XML、SQL 等格式。访问门槛与许可是两件事:拿到数据不需要任何手续,但 CC BY-NC 的条款在下载那一刻就生效,非商业自由,商业需另行授权。

Q3:它和 HMDB、DrugBank 到底什么关系?

同一位研究者、同一个实验室、同一套模板的三个分支。HMDB 管人体内源代谢物,DrugBank 管药物,FooDB 管食物成分。三者共用编号风格与字段设计,彼此交叉链接。质量上不可等同:前两者的实验测定比例明显更高。

Q4:为什么各处引用的化合物总数差一个数量级?

因为数的是不同的层。字典层数万行,有浓度层一万余种,严格可用层数千种,早期文献还写过两万八千种。四个数字都对应真实存在的某张表或某个子集,混用时就会打架。引用时必须说清「数的是哪一层」。

Q5:能不能用它估算某人群的化合物摄入量?

可以,但要接受三道损失。食物名要手工对齐到膳食调查编码;浓度要从多个来源里挑一个或取平均;未定量的化合物只能记为零或缺失。已有研究走通了这条路,结论是可用的化合物数量远小于表内记录数。

Q6:它包含菜谱、配方或加工工艺吗?

不包含。数据只有食物与化合物两级,没有配料表、配比、工艺参数,也没有品牌与批次。加工食品以粗粒度品类出现,浓度多借用同类原料的数据。

术语表

术语 含义
食物成分库 记录食物中化学组成的数据库,官方体系以营养素为字段
营养素 有推荐摄入量与标准检测方法的成分,如维生素、矿物质、脂肪酸
化合物记录 字典表中的一行,代表一种被报道过的化学物质
浓度记录 事实表中的一行,代表某食物中某化合物的一个数值与一条来源
存在性数据 只记「含有」,不含数值
定量数据 带数值与单位的记录,本库中占比很小
推定存在 由分类或同属物种推断,未在本食物中直接分离鉴定
不可食部位 种子、果皮、茎叶等,非食用部分,库内未标注
上下限取中 来源只给最低量与最高量时,取其平均
每百克毫克 本库的规范浓度单位,写作 mg/100 g
ppm 百万分之一,按质量计相当于每公斤毫克,折算易错
结构标识 SMILES、InChI、InChIKey 一类字符串,用于跨库去重
交叉链接 指向其他库同一实体的链接,如 HMDB、PubChem、ChEBI
预发布 站点对自身版本的标注,表示尚未定稿

附录 A:核心数字核对表

项目 数值 口径与出处
站点版本 Version 1.0(下载页写 Pre-release 1.0) 首页与下载页,核对日 2026-10-29
数据截止 2020-04-07 下载页标注
食物表行数 近千 下载页与第三方统计
化合物表行数 70,477 第三方对二〇二〇版下载包的统计
浓度表行数 五百余万 同上
营养素分组 数十 同上
聚合来源 三百余家 第三方清洗研究的方法部分
带定量数据的来源 四家 同上
有浓度值的化合物 一万余 同上
严格可用化合物 数千 同上
未定量比例 约八成五 二〇二〇年公开报道的估计
单食物化合物上限案例 大蒜两千三百余种,其中一百四十余种有值 公开报道与研究引用
商业授权 需单独申请 首页与合规页
下载门槛 免注册 合规页

附录 B:数字的来源分层

第一层,站内直接声明:版本号、更新日期、编号规则、许可条款、下载格式、字段规模。这一层的数字可以直接引用,因为它们是维护方的自我描述。

第二层,下载包统计:四张表的行数。这一层的数字取决于下载日期与文件版本,本词条采用第三方在二〇二三年对二〇二〇年版的统计,与站内可能存在的展示计数不完全一致。

第三层,第三方清洗结果:有浓度化合物数、可用化合物数、来源分布。这一层的数字取决于清洗规则,换一套规则会得到不同的值,因此引用时必须连带引用规则。

第四层,媒体与研究转述:从两万余到十万余不等的总量说法。这一层的数字最容易被误传,通常缺失口径说明,只适合做背景描述。

四层之间的关系是递减的可信度与递增的传播力。写作时把层标清楚,比追求一个「正确总数」更有意义。

附录 C:完整参考文献

  1. FooDB 站点首页与说明页,https://foodb.ca/ ,核对日 2026-10-29。
  2. FooDB 合规与 FAIR 声明页,https://foodb.ca/compliance ,核对日 2026-10-29。
  3. FooDB 下载页,https://foodb.ca/downloads ,核对日 2026-10-29。
  4. Scalbert A, Andres-Lacueva C, Arita M, Kroon P, Manach C, Urpi-Sarda M, Wishart DS. Databases on food phytochemicals and their health-promoting effects. J Agric Food Chem. 2011;59(9):4331-4348. doi:10.1021/jf200591d
  5. 食物成分数据清洗与膳食队列链接方法研究,PubMed Central PMC12637271,二〇二五年。
  6. 食品基因毒性物筛查研究(使用 FooDB 化合物表),Food Chemistry: Molecular Sciences,二〇二五年,其中给出各表行数。
  7. Wishart DS, et al. HMDB: a knowledgebase for the human metabolome. Nucleic Acids Res. 2009;37(Database issue):D603-D610. doi:10.1093/nar/gkn810
  8. 维基百科 FooDB 词条(含早期规模表述与建库背景),核对日 2026-10-29。
  9. 二〇二〇年关于「营养暗物质」的公开报道,含未定量比例与单食物案例。

附录 D:取数代码

import pandas as pd

BASE = "foodb_2020_04_07_csv"

#-- 1) 读字典表,当内存字典用
food = pd.read_csv(f"{BASE}/Food.csv")
comp = pd.read_csv(f"{BASE}/Compound.csv", low_memory=False)
print(food.shape, comp.shape)

#-- 2) 读事实表,只取需要的列
content = pd.read_csv(f"{BASE}/Content.csv",
                      usecols=["food_id", "orig_food_common_name",
                               "compound_id", "orig_source_name",
                               "orig_content", "orig_unit", "source_type"],
                      low_memory=False)

#-- 3) 先看单位,再决定换算系数
print(content["orig_unit"].value_counts().head(20))

#-- 4) 折算到 mg/100 g(系数需按实际单位表补齐)
FACTOR = {"mg/100 g": 1.0, "ppm": 0.1, "ug/100 g": 0.001}
content["unit"] = content["orig_unit"].map(FACTOR)
content = content[content["unit"].notna()].copy()
content["mg_per_100g"] = content["orig_content"] * content["unit"]

#-- 5) 同名多值:先看离散度,再决定取均值还是中位数
g = content.groupby(["orig_food_common_name", "orig_source_name"])["mg_per_100g"]
agg = g.agg(["count", "median", "min", "max"]).reset_index()
agg["spread"] = agg["max"] / agg["min"].replace(0, pd.NA)

#-- spread 超过 100 的行优先人工复核,多为单位或部位问题
suspect = agg[agg["spread"] > 100]
print(suspect.head(20))
#-- 6) 按结构标识去重,而不是按名称
uniq = comp.dropna(subset=["inchikey"]).drop_duplicates("inchikey")
print("按 InChIKey 去重后的化合物数:", len(uniq))

#-- 7) 只保留有浓度记录的化合物,做「存在」与「含量」两张边表
has_conc = set(content["compound_id"].dropna())
comp["has_concentration"] = comp["id"].astype(str).isin(has_conc)
print(comp["has_concentration"].value_counts())

编辑说明

核验时间:二〇二六年十月二十九日。

核验方式:读取站点首页、说明页、合规页与下载页的公开正文;读取第三方对该库的清洗研究与其引用的表行数;对同一事实至少取两处独立表述交叉比对。核对期间站点对自动抓取返回人机验证页,正文经检索索引取得,未做页面截图。

未覆盖内容:未下载全量数据包做逐行复算,因此所有行数均为第三方统计口径,而非自行重算;未逐条核对单个化合物页面的字段完整性;未验证谱图覆盖率的准确比例。

口径说明:本词条中所有「数万」「一万余」一类表述,均指附录 B 所列的具体层,不指「已确认存在的化合物总数」。凡遇跨口径比较,正文均已注明所数的是哪一层。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • anpdb — 共享标签:药物发现与化学 / 化学信息学 / 代谢组学 / 公共卫生与流行病学
  • massbank — 共享标签:药物发现与化学 / 化学信息学 / 代谢组学
  • hmdb — 共享标签:药物发现与化学 / 化学信息学 / 代谢组学
  • meddra — 共享标签:药物发现与化学 / 公共卫生与流行病学
  • lotus-ref — 共享标签:药物发现与化学 / 化学信息学 / 代谢组学
  • comptox-dashboard — 共享标签:药物发现与化学 / 化学信息学 / 公共卫生与流行病学
  • chebi — 共享标签:药物发现与化学 / 化学信息学 / 代谢组学
  • zinc — 共享标签:药物发现与化学 / 化学信息学
  • pdbbind — 共享标签:药物发现与化学 / 化学信息学
  • toxcast — 共享标签:药物发现与化学 / 化学信息学

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集