建网站问题,开发一个淘宝app需要多少钱,化妆培训,做个小程序的费用大概多少一、DrugBank 数据库简介
DrugBank 是一个综合性的生物信息学和化学信息学数据库#xff0c;专门收录药物和靶点的详细信息。它由加拿大阿尔伯塔大学的 Wishart 研究组 维护#xff0c;提供化学、药理学、相互作用、代谢、靶点等多方面的药物数据。DrugBank 结合了实验数据和…一、DrugBank 数据库简介
DrugBank 是一个综合性的生物信息学和化学信息学数据库专门收录药物和靶点的详细信息。它由加拿大阿尔伯塔大学的 Wishart 研究组 维护提供化学、药理学、相互作用、代谢、靶点等多方面的药物数据。DrugBank 结合了实验数据和计算预测广泛应用于药物研发、精准医疗、生物信息学研究等领域。
二、下载公开的数据
DrugBank 提供了多种方式下载其数据库包括 免费的开放数据 和 需要许可的完整数据库。如果需要完整的 DrugBank 数据包括所有药物、靶点、相互作用等则需要 注册账户并申请许可。申请页面DrugBank Release Version 5.1.13 | DrugBank Online
申请步骤
创建 DrugBank 账户注册页面选择许可类型 Academic License学术许可免费用于非商业科研如生物信息学研究、论文分析等。Commercial License商业许可收费适用于制药公司、AI 药物研发等商业用途。 提交申请等待 DrugBank 审核。批准后可下载完整数据库通常为 XML、CSV、SQL 格式
这里我们先把免费的开放的药物信息数据下载下来用Python解析。下载的SDF格式我们需要用到Rdkit包来读取结构文件。 三、Python解析药物SDF文件
import pandas as pd
from rdkit import Chem
from rdkit.Chem.MolStandardize import rdMolStandardize
from rdkit import RDLogger
RDLogger.DisableLog(rdApp.*)def get_drug_info(drug_file, current_dir):drug_list []drug_dict {}supplier Chem.SDMolSupplier(drug_file)for mol in supplier:if mol is not None:mol_id mol.GetProp(DRUGBANK_ID)drug_name mol.GetProp(COMMON_NAME)# smiles Chem.MolToSmiles(mol, isomericSmilesTrue, canonicalTrue)# smiles standardize_smiles(smiles)smiles Chem.MolToSmiles(mol)drug_list.append([mol_id, drug_name, smiles])drug_dict[mol_id] smilesdrug_df pd.DataFrame(drug_list, columns[ID, Name, SMILES])drug_df.to_csv(current_dir /drug_information.csv, indexFalse)return drug_dictcurrent_dir ./
drug_info_file current_dir drugbank_structures_2025_02_14.sdf
drug_id_smi_dic get_drug_info(drug_info_file, current_dir)print(Done!) 处理好的文件可在这里drugbank_2025_02_14下载。
四、Python解析药物XML文件
import json
import os
import xmltodict
import pandas as pd
From xml file to extract drug and traget information.
current_dir os.path.dirname(os.path.abspath(__file__))# 读取 XML 文件并转换为 JSON
xml open(current_dir /full-database.xml, encodingutf-8).read()
xml2json xmltodict.parse(xml, encodingutf-8)# 将数据保存为JSON文件设置缩进为4个空格
with open(drugbank.json, w, encodingutf-8) as file:json.dump(xml2json, file, ensure_asciiFalse, indent4)drugs xml2json[drugbank][drug]
results []
for drug in drugs:try:drug_id drug[drugbank-id][0][#text]except:drug_id drug[drugbank-id][#text]drug_name drug[name]try:targets drug[targets][target]except:continuedrug_type drug[type]if isinstance(targets, dict):try:uniprot_id targets[polypeptide][id]except:continuetarget_id targets[id]target_name targets[name]results.append([drug_id, drug_name, drug_type, uniprot_id, target_name])if isinstance(targets, list):for target in targets:try:uniprot_id target[polypeptide][id]except:continuetarget_id target[id]target_name target[name]results.append([drug_id, drug_name, drug_type, uniprot_id, target_name])my_columns [DrugBank ID, Drug Name, Drug Type, UniProt ID, Target Name]
df pd.DataFrame(results, columnsmy_columns)df.to_csv(current_dir /drugbank.csv, indexFalse)