Datadory notebook

ClassyFire/ChemOnt Labels Dataset in Parquet: What Exists and How It Delivers

Datadory delivers specialty chemicals data covering cheminformatics classification end to end: ClassyFire/ChemOnt labels for 73,356,229 InChIKey-deduplicated compounds drawn from PubChem, ZINC20 and Enamine REAL, packed as native list<uint16> arrays across a five-tier kingdom-to-parent path and shipped as ready-made 80/10/10 train/validation/test splits totaling about 4.8 GB. Delivered as files, feeds, or straight into your warehouse, daily, weekly, or hourly.

1,744 datasets. Pick your catch.

What is the ClassyFire/ChemOnt labels dataset?

The InChIKey-Deduplicated ClassyFire/ChemOnt Label Collection is the record this query points to: version v4, published June 2, 2026, attaching ClassyFire functional classifications — expressed against the ChemOnt 2.1 ontology — to 73,356,229 structurally unique compounds.

Three upstream libraries feed it. PubChem contributes 68,693,295 rows carrying a CID. ZINC20 contributes 30,187,323 rows carrying a ZINC ID, of which 25,775,344 compounds overlap the PubChem set. Enamine REAL adds 250,948 screening-compound rows. Because deduplication runs on the InChIKey hash, the collection holds one row per unique compound rather than one row per database entry, which is what stops the same molecule inflating your training set three times over.

InChIKey-Deduplicated ClassyFire/ChemOnt Label Collection sits among the 12 primary specialty-chemicals records in the Datadory catalog — scored 7/10 and tagged cheminformatics, classification and machine-learning. The release is static: v4 is a snapshot, not a subscription feed.

Why does this dataset exist at all? Classifying a chemical structure by hand means reading it, matching substructures against an ontology and repeating that millions of times. ClassyFire automates the match using ChemOnt, a chemistry-specific ontology of structural features, and this collection takes its output at full scale so you never have to call the classifier yourself.

What ships inside the Parquet train/validation/test splits?

About 4.8 GB across seven files make up the distribution, and the modelling payload is three Parquet frames: train.parquet at 2.1 GB, validation.parquet at 294.5 MB and test.parquet at 294.4 MB. They form an 80/10/10 split stratified by the deepest resolved ChemOnt slot — 58.7 million training rows, 7.3 million validation rows and 7.3 million test rows. You never construct your own split, and compounds cannot leak across partitions the way they do when teams re-split a shared corpus informally.

A full export travels alongside them: classyfire.v4.tsv.zst, a 2.1 GB zstd-compressed TSV holding all labelled compounds for teams outside the Python Parquet ecosystem.

The reference files matter as much as the data. vocabulary.json (321 kB) maps the integer indices packed into every label column back to ChemOnt terms. chemont_dictionary.tsv (362 kB) maps numeric ids to ChemOnt ids, names and parents. ChemOnt_2_1.obo.zip (308 kB) ships the ontology itself for hierarchy-aware losses.

Parquet is the differentiator here. The multi-valued labels are stored natively as list<uint16> arrays instead of delimited strings, so column pruning reads identity columns without touching hundreds of millions of label entries. This is the only Parquet distribution among the 12 primary specialty-chemicals records in the Datadory catalog — catalog-wide, just 37 of 1,744 datasets ship Parquet at all.

How do you decode the ClassyFire/ChemOnt label columns?

The modelling payload arrives as three Parquet frames with identical schemas, and every label column decodes to human-readable chemistry in two joins. The workflow from frame to usable features:

  1. Read train.parquet with pyarrow, polars or pandas.read_parquet; the schema is identical across the train, validation and test frames.
  2. Decode each list<uint16> label column — kingdom_ids, superclass_ids, class_ids, subclass_ids and direct_parent_ids, plus intermediate_nodes_ids, alternative_parents_ids, substituents_ids and mapped_features_ids — by indexing into vocabulary.json.
  3. Attach human-readable names by joining chemont_dictionary.tsv, which resolves numeric ids to ChemOnt ids, names and parents; consult ChemOnt_2_1.obo.zip when evaluation needs full ancestor closure.
  4. Carry identity forward: cid (int64, present on PubChem-derived rows), zinc_id (uint32, ZINC-derived rows), smiles and inchikey.

The InChIKey column in step 4 is what makes enrichment joins practical — it is the same identifier the Kaggle LogP compilation ships. One subtlety belongs in your data card: deduplication is InChIKey-based without tautomer normalization, so tautomers can appear as separate entries. Collapse them before splitting if tautomer state affects your task.

How much of ChemOnt do 73 million compounds actually cover?

Coverage spans 4,120 of the 4,824 ChemOnt classes — 85.4%. The remaining 704 classes hold zero examples, concentrated in exotic inorganic, lanthanide and actinide chemistry that PubChem, ZINC20 and Enamine REAL barely sample. Treat any class outside the observed set as out-of-scope for training and reporting rather than as a modelling failure to fix.

Every row stores the full five-tier classification path — kingdom, superclass, class, subclass and direct parent — which supports flat prediction at any tier or hierarchical heads that respect the tree. Four further columns reach beyond the strict path: intermediate_nodes_ids captures extra nodes along the classification route, alternative_parents_ids lists secondary placements where a structure legitimately belongs to more than one branch, and substituents_ids with mapped_features_ids carry structural features that work as auxiliary multi-label targets.

How does that compare with what regulators publish? ECHA CHEM classifies well over 100,000 EU substances under REACH and CLP rules, and EPA's TSCA Inventory lists about 70,800 non-confidential US substances split into 36,522 active and 34,252 inactive entries. Those inventories are authoritative for compliance but two to three orders of magnitude smaller — and neither assigns an ontology-backed chemical class to every compound the way ChemOnt does here.

On label trust, the author is explicit: labels cannot be fully re-verified against the live ClassyFire API because its rate limits would stretch a complete re-check across decades. Audit a random sample instead, document the caveat, and report benchmarks as trained on the Zenodo snapshot rather than on freshly regenerated labels.

Which labeled chemical dataset fits your task?

Pick by question, not by row count. The Zenodo collection answers what chemical class is this structure? across tens of millions of compounds. The Kaggle compilation answers how lipophilic is it? for 426,850 molecules with eight RDKit 2D descriptors and an XLogP3 target, uploaded November 20, 2025 as a ~33 MB zipped CSV. The Dryad set answers what life-cycle impacts should I assume for this class?, publishing seven distribution statistics (minimum through maximum) per impact category for GWP, acidification, eutrophication, ozone depletion and POCP across four taxonomy levels of proxy groups.

All three join cleanly. The Kaggle file carries an InChIKey column matching the Zenodo deduplication key, and the Dryad proxies group chemicals by the same ClassyFire/ChemOnt taxonomy — so class labels, property targets and impact factors compose into one feature store. For regulatory cross-checks outside ML, OECD eChemPortal federates about 800,000 substance records from 34 participating government databases in one federated search.

Where to go next

This cluster sits inside a 12-primary-record Specialty Chemicals pool spanning price intelligence, regulatory inventories, official production statistics, cheminformatics and sustainability data. The specialty chemicals data guide walks the whole pool, and the specialty chemicals data hub lists every product with coverage and delivery options in one table.

For depth around this page's topic: the InChIKey-Deduplicated ClassyFire/ChemOnt Label Collection profile carries the full field dictionary and sample rows, and best data for specialty chemicals teams ranks the slice by data-science workflow — formats, coverage and granularity first. Adjacent cluster guides walk the Kaggle LogP descriptor set and the Dryad carbon-footprint proxies in the same depth. To see the delivery model priced end to end, start at Datadory pricing.

Pick up where this leaves off

Every one of these ships with sample rows before you commit to anything.

Specialty Chemicals Global chemical space (not geographically bounded)

InChIKey-Deduplicated ClassyFire/ChemOnt Label Collection

Specialty Chemicals Global chemical space (not geographically bounded)

Kaggle — 426k PubChem Molecules for LogP Prediction

InChIKey · SMILES · Original_InChI …+9 more

Specialty Chemicals United States (Federal LCA Commons processes

LCA Impact Data for Chemicals (proxy classification)

Specialty Chemicals Global - 34 national and regional government chemical…

OECD eChemPortal - Global Chemical Hazard and Property Data

name · number · number_type …+5 more

Want rows instead of a pitch? Name the datasets.

API, files, or your warehouse. Daily, weekly, or hourly.

Get a sample

Questions worth asking

What is the ClassyFire/ChemOnt labels dataset?

A five-tier classification layer keyed on structure, not name. The strongest record in Datadory's catalog attaches ClassyFire functional classes — expressed against the ChemOnt 2.1 ontology — to 73,356,229 InChIKey-deduplicated compounds drawn from PubChem, ZINC20 and Enamine REAL, shipped as ready-made 80/10/10 train/validation/test splits.

What are the train/validation/test split sizes?

An 80/10/10 split stratified by the deepest resolved ChemOnt slot: 58.7 million rows in train.parquet, 7.3 million in validation.parquet and 7.3 million in test.parquet, drawn from 73,356,229 unique InChIKey compounds. Using the shipped splits avoids leakage; rebuilding your own means re-stratifying across the full labelled TSV.

Why do some ChemOnt classes have no training examples?

4,120 of the 4,824 ChemOnt classes appear in the data — 85.4%. The 704 empty classes sit mostly in exotic inorganic, lanthanide and actinide chemistry, which PubChem, ZINC20 and Enamine REAL barely cover. Exclude them from training and reporting, or treat them as out-of-scope, rather than expecting a classifier to learn them.

Can the ClassyFire labels be re-verified against the live service?

Not practically. The author states labels cannot be fully re-checked against the live ClassyFire API because its rate limits would stretch verification across decades. The pragmatic approach is sampling: audit a few thousand rows manually, document the caveat, and report benchmarks as trained on the Zenodo snapshot rather than freshly regenerated labels.

How is the ClassyFire/ChemOnt label data delivered?

Files, feeds, or straight into your warehouse — daily, weekly, or hourly, your call. Most teams take a versioned extract of the v4 snapshot loaded once beside their feature-store tables; hierarchical-model training runs as a warehouse load so the label frames join compound masters in SQL. Samples cut to your taxonomy tiers ship first, field dictionary attached.