Es ist eine Geschichte, die ich Python ein wenig ernsthaft geschrieben habe, basierend auf einer Bibliothek, die eine Verbindung namens RDKit versteht und viele Zahlen zurückgibt. Ich erforsche immer noch meine gemeinsame Funktion und die Form der Klassifizierung, und obwohl es nach dem anderen Tag immer noch verschiedene Einschränkungen gibt, denke ich, dass ich eine kleine Richtung sehen könnte.
Erstellen Sie eine CSV-Datei aus einer Datei mit zusammengesetzten Informationen, die als SDF-Datei bezeichnet wird. Eine Bibliothek namens RDKit erstellt 200 Spalten mit Zahlen und gibt zusätzlich 210 Spalten mit Namen und 10 Spalten aus. Da die Verallgemeinerung jedoch teilweise fehlerhaft ist, ist es nicht möglich, sie auf eine bestimmte Datei zu beschränken. Nun, ich habe vor, es später zu aktualisieren. Ich gehe.
-Die Verbindungen in der SDF-Datei sollten die folgenden Parameter haben. ['ID', 'NAME', 'SOL', 'SMILES', 'SOL_classification']
・ Seltsame Verbindungen sind NG. (Trennung, Ionen usw. Wenn Sie verwirrt sind, gibt RDKit keinen Berechnungsfehler aus.)
import pandas as pd
from rdkit import Chem
from rdkit.Chem import AllChem, Descriptors
from rdkit.ML.Descriptors import MoleculeDescriptors
def get_basevalues(sampleid, mol):
tmps = list()
tmps.append(('SampleID', sampleid))
tmps.append(('SampleName', mol.GetProp('_Name')))
tmps.append(('Structure', Chem.MolToMolBlock(mol)))
tmps.append(('Atoms', len(mol.GetAtoms())))
tmps.append(('Bonds', len(mol.GetBonds())))
names = [tmp[0] for tmp in tmps]
values = [tmp[1] for tmp in tmps]
return names, values
def get_exvalues(sampleid, mol):
names = ['ID', 'NAME', 'SOL', 'SMILES', 'SOL_classification']
values = list()
for name in names:
values.append(mol.GetProp(name))
return names, values
#Berechnen Sie den Deskriptor aus der SDF-Datei und geben Sie die CSV aus
# I :Zusammengesetzter Dateipfad
#CSV-Dateipfad
def ExportCSVFromSDF(sdfpath, csvpath):
#Holen Sie sich Verbindung
mols = Chem.SDMolSupplier(sdfpath)
#Vorbereiten der RDKit-Deskriptorberechnung
descLists = [desc_name[0] for desc_name in Descriptors._descList]
desc_calc = MoleculeDescriptors.MolecularDescriptorCalculator(descLists)
#ID mit Seriennummer angeben
sampleids = list()
#Verbindungsname usw.
values_base = list()
#Externe Parameter(Aktueller Status:5 Stück behoben)
values_ex = list()
#Holen Sie sich den Wert jeder Verbindung
for i, mol in enumerate(mols, 1):
sampleids.append(i)
names_base, values = get_basevalues(i, mol)
values_base.append(values)
names_ex, values = get_exvalues(i, mol)
values_ex.append(values)
#Berechnen Sie den RDKit-Deskriptor
values_rdkit = [desc_calc.CalcDescriptors(mol) for mol in mols]
#In DataFrame konvertieren
df_base = pd.DataFrame(values_base, columns=names_base, index=sampleids)
df_ex = pd.DataFrame(values_ex, columns=names_ex, index=sampleids)
df_rdkit = pd.DataFrame(values_rdkit, columns=descLists, index=sampleids)
#Kombiniere alles
df = pd.concat([df_base, df_ex, df_rdkit], axis=1)
#Zur Bestätigung ausdrucken()
print(df)
#Ausgabe an CSV
df.to_csv(csvpath, index=False)
def main():
sdfpath = 'solubility.test.sdf'
csvpath = 'solubility.test.csv'
ExportCSVFromSDF(sdfpath, csvpath)
if __name__ == '__main__':
main()
SampleID | SampleName | Structure | Atoms | Bonds | ID | NAME | SOL | SMILES | SOL_classification | MaxEStateIndex | MinEStateIndex |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 3-methylpentane | 6 | 5 | 5 | 3-methylpentane | -3.68 | CCC(C)CC | (A) low | 2.2777777777777777 | 0.9351851851851851 | |
2 | 2,4-dimethylpentane | 7 | 6 | 10 | 2,4-dimethylpentane | -4.26 | CC(C)CC(C)C | (A) low | 2.263888888888889 | 0.8749999999999998 | |
3 | ... | ||||||||||
4 |
Jep. Pandas, vielleicht bin ich ein bisschen besser geworden. Daher werde ich es von nun an auf verschiedene Arten erweitern. vielleicht. .. ..
Recommended Posts