Python-Handspiel (RDKit-Deskriptorberechnung: SDF zu CSV mit Pandas)

Was ist dieser Artikel?

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.

Also, was machst du?

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.

Einschränkungen

-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.)

Code

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()


Ausgabebeispiel

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

Impressionen

Jep. Pandas, vielleicht bin ich ein bisschen besser geworden. Daher werde ich es von nun an auf verschiedene Arten erweitern. vielleicht. .. ..

Recommended Posts

Python-Handspiel (RDKit-Deskriptorberechnung: SDF zu CSV mit Pandas)
Python-Handspiel (Pandas / DataFrame-Beginn)
[Python] Laden von CSV-Dateien mit Pandas
Python-Handspiel (CSV wird mit Pandas DataFrame angewendet, aber nur vollständige Spalte Von CSV in DB einfügen?)
Python-Handspiel (Interoperation zwischen CSV und PostgreSQL)
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
Altersberechnung mit Python
[Python] Ein Memo zum vertikalen Schreiben von CSV mit Pandas
Verarbeiten Sie CSV-Daten mit Python (Zählverarbeitung mit Pandas)
Python-Handspiel (Spaltennamen aus CSV-Datei abrufen)
Python Handspiel (Division)
Konvertieren Sie mit Python für .NET von Pandas DataFrame in System.Data.DataTable
Versuchen Sie, eine Excel-Datei mit Python (Pandas / XlsxWriter) zu betreiben
Versuchen Sie, eine Excel-Datei mit Python (Pandas / XlsxWriter) zu betreiben
Ausgabe von Produktinformationen an csv mithilfe der Rakuten-Produktsuch-API [Python]
Python-Handspiel (zweidimensionale Liste)
Lesen Sie CSV mit Python-Pandas
Mit Python auf Twitter posten
Starten Sie mit Python zu Selen
# 1 [python3] Einfache Berechnung mit Variablen
Schreiben Sie mit Python in csv
Konvertieren Sie SDF schnell in CSV
Datenanalyse mit Python-Pandas
So fügen Sie eine CSV-Datei mit Pandas in eine Excel-Datei ein
Schließen Sie sich csv an, das von Python-Pandas normalisiert wurde, um die Überprüfung zu vereinfachen
Holen Sie sich RSS-Feeds mit Python + Pandas → Post to Mattermost & Save to DB
So installieren Sie Python mit Anaconda
[Python] Mit Python in eine CSV-Datei schreiben
[Python] Verwendung der Pandas-Serie
Ausgabe in eine CSV-Datei mit Python
[Einführung in Python] Verwenden wir Pandas
[Einführung in Python] Verwenden wir Pandas
[Einführung in Python] Verwenden wir Pandas
[Python] Lesen der CSV-Datei (Methode read_csv des Pandas-Moduls)