Ich habe ein Skript geschrieben, um SDF, ein zusammengesetztes Datenformat, schnell in CSV zu konvertieren.
--Lesen Sie die Eigenschaften in SDF und geben Sie sie als CSV-Element aus
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()
#SDF wird geladen(Lesen Sie beim ersten Mal alle Parameternamen)
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)
#Wörterbuch zum Speichern von Daten
param_dict = defaultdict(list)
#SDF wird geladen(Das zweite Mal bekam ich die Parameter der Verbindung. Sonst ein Fehler)
sdf_sup = Chem.SDMolSupplier(args.input)
for mol in sdf_sup:
#Name holen
for name in Props:
if mol.HasProp(name):
param_dict[name].append(mol.GetProp(name))
else:
param_dict[name].append(None)
#Sofort mit Pandas konvertieren
df = pd.DataFrame(data=param_dict)
df.to_csv(args.output, index=False)
if __name__ == "__main__":
main()
Das SDF wird zuerst geladen, um die Eigenschaften aller Verbindungen zu kennen. Dann wird der Wert der Eigenschaft jeder Verbindung in der zweiten Lesung gelesen. Wenn die Verbindung keine Eigenschaften hat, ist Keine enthalten. Schließlich wurde der Wörterbuchtyp, in dem die Eigenschaften gespeichert sind, in Pandas geworfen und an CSV ausgegeben. Zusätzlich kann die erste Zeile von SDF mit der Eigenschaft "_Name" mit -save_name gespeichert werden. Weitere Argumente finden Sie in der Quelle.
Die Löslichkeitsdaten von RDKit sehen folgendermaßen aus.
_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