J'ai écrit un script pour convertir rapidement SDF, qui est un format de données composé, en CSV.
SDF2CSVConvert.py
import pandas as pd
from rdkit import Chem
import argparse
from collections import defaultdict
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-input", type=str, required=True)
parser.add_argument("-output", type=str, required=True)
parser.add_argument("-save_name", action='store_true', help="store header line as _Name")
args = parser.parse_args()
#Chargement du SDF(Lire tous les noms de paramètres la première fois)
sdf_sup = Chem.SDMolSupplier(args.input)
Props = []
if args.save_name:
Props.append("_Name")
for mol in sdf_sup:
for name in mol.GetPropNames():
if name not in Props:
Props.append(name)
#Dictionnaire pour stocker des données
param_dict = defaultdict(list)
#Chargement du SDF(La deuxième fois, j'ai eu les paramètres du composé. Sinon une erreur)
sdf_sup = Chem.SDMolSupplier(args.input)
for mol in sdf_sup:
#Obtenir le nom
for name in Props:
if mol.HasProp(name):
param_dict[name].append(mol.GetProp(name))
else:
param_dict[name].append(None)
#Convertissez immédiatement avec les pandas
df = pd.DataFrame(data=param_dict)
df.to_csv(args.output, index=False)
if __name__ == "__main__":
main()
Le SDF est chargé en premier pour connaître les propriétés de tous les composés. Ensuite, la valeur de la propriété de chaque composé est lue en seconde lecture. Si le composé n'a pas de propriétés, None est inclus. Enfin, le type de dictionnaire qui stocke les propriétés a été jeté dans Pandas et sorti au format CSV. De plus, la première ligne de SDF peut être enregistrée avec la propriété "_Name" avec -save_name. Voir la source pour d'autres arguments.
Les données de solubilité de RDKit ressemblent à ceci.
_Name,ID,NAME,SOL,SMILES,SOL_classification
3-methylpentane,5,3-methylpentane,-3.68,CCC(C)CC,(A) low
"2,4-dimethylpentane",10,"2,4-dimethylpentane",-4.26,CC(C)CC(C)C,(A) low
1-pentene,15,1-pentene,-2.68,CCCC=C,(B) medium
cyclohexene,20,cyclohexene,-2.59,C1CC=CCC1,(B) medium
"1,4-pentadiene",25,"1,4-pentadiene",-2.09,C=CCC=C,(B) medium
cycloheptatriene,30,cycloheptatriene,-2.15,C1=CC=CC=CC1,(B) medium
1-octyne,35,1-octyne,-3.66,CCCCCCC#C,(A) low
ethylbenzene,40,ethylbenzene,-2.77,c1ccccc1CC,(B) medium
"1,3,5-trimethylbenzene",45,"1,3,5-trimethylbenzene",-3.4,c1c(C)cc(C)cc1C,(A) low
indane,50,indane,-3.04,c(c(ccc1)CC2)(c1)C2,(A) low
isobutylbenzene,55,isobutylbenzene,-4.12,c1ccccc1CC(C)C,(A) low
n-hexylbenzene,60,n-hexylbenzene,-5.21,c1ccccc1CCCCCC,(A) low
Recommended Posts