Bio Datasets
收藏Bio Datasets
概述
Bio Datasets 是一个非官方扩展,旨在将生物数据(如分子等)引入 HuggingFace Datasets 库。主要目标包括:
- 高效存储生物数据以供机器学习使用。
- 低开销加载并将数据标准化为机器学习就绪的 Python 对象。
- 共享大小不一的数据集。
支持的生物分子结构数据格式
存储和加载格式
| 特征名称 | 存储格式 | 加载格式(由 load_as 特征关键字参数控制) |
|---|---|---|
| AtomArrayFeature | 笛卡尔内部坐标和注释的数组 | biotite.structure.AtomArray(默认)/ bio_datasets.BiomoleculeChain / bio_datasets.BiomoleculeComplex |
| StructureFeature | 嵌入到 parquet 列中的压缩字节字符串编码文件格式:PDB / mmCIF / binaryCIF | biotite.structure.AtomArray / bio_datasets.BiomoleculeChain / bio_datasets.BiomoleculeComplex |
蛋白质特定版本
| 特征名称 | 存储格式 | 加载格式 |
|---|---|---|
| ProteinAtomArrayFeature | 笛卡尔或(实验性)离散内部坐标和注释的数组 | biotite.structure.AtomArray / bio_datasets.ProteinChain / bio_datasets.ProteinComplex(默认) |
| ProteinStructureFeature | 嵌入到 parquet 列中的压缩字节字符串编码文件格式:PDB / mmCIF / binaryCIF / foldcomp | biotite.structure.AtomArray / bio_datasets.ProteinChain / bio_datasets.ProteinComplex(默认) |
安装
bash pip install datasets-bio
使用示例
从 Hub 加载数据
python import foldcomp from bio_datasets import load_dataset
dataset = load_dataset(
"biodatasets/afdb_e_coli",
split="train",
)
ex = dataset[0] # 包含 name 和 structure(biotite.structure.AtomArray 包装在 bio_datasets.Protein 对象中)
print(type(ex["structure"]))
<class bio_datasets.structure.protein.protein.ProteinChain>
创建数据集
从本地文件构建和共享数据集
python from bio_datasets import Dataset, Features, ProteinStructureFeature
def examples_generator(pdb_file_list): for file_path in pdb_file_list: yield {"structure": {"path": file_path}}
features = Features(structure=ProteinStructureFeature(encode_with_foldcomp=True)) ds = Dataset.from_generator(examples_generator, gen_kwargs={"pdb_file_list": pdb_file_list}, features=features) ds[0]
将生物数据集分享到 HuggingFace Hub
ds.push_to_hub(HUB_REPO_ID)
性能优化
python from bio_datasets import Features, Value, load_dataset, AtomArrayFeature
dataset = load_dataset( "biodatasets/afdb_e_coli", split="train", ) pdb_time = timeit.timeit(stmt="""[ex for ex in dataset]""", number=1, globals=globals()) def convert_structure_to_array(ex, features): return features.encode_example(ex)
new_features = Features(name=Value("string"), structure=AtomArrayFeature()) array_dataset = dataset.map(convert_structure_to_array, features=new_features, fn_kwargs={"features": new_features}) array_time = timeit.timeit(stmt="""[ex for ex in array_dataset]""", number=1, globals=globals())
print( f"Iterated over {len(dataset)} examples in " f"{pdb_time:.1f}s with PDB storage vs {array_time:.1f}s with array storage " f" i.e. {len(dataset)/pdb_time:.1f} samples/s vs {len(dataset)/array_time:.1f} samples/s" )
Iterated over 8726 examples in 47.5s with PDB storage vs 7.0s with array storage i.e. 183.6 samples/s vs 1237.8 samples/s
未来计划
- 支持其他生物数据类型:MD、单细胞/组学等。
贡献
欢迎代码贡献(如新的特征类型)、新数据格式/特征类型的建议,以及兼容生物数据集的分享。




