Jeu manuel Python (calcul du descripteur RDKit: SDF en CSV à l'aide de Pandas)

Quel est cet article?

C'est une histoire que j'ai écrite un peu sérieusement en Python sur la base d'une bibliothèque qui comprend un composé appelé RDKit et renvoie beaucoup de nombres. J'explore toujours ma fonction commune et la forme de classification, et bien qu'il y ait encore diverses restrictions après l'autre jour, je pense que je pourrais voir une petite direction.

Donc que fais-tu?

Créez un fichier CSV à partir d'un fichier contenant des informations composées appelé fichier SDF. Une bibliothèque appelée RDKit crée 200 colonnes de nombres, donc en plus de cela, elle génère 210 colonnes comprenant des noms et 10 colonnes. Cependant, la généralisation étant partiellement interrompue, il n'est pas possible de la limiter à un fichier spécifique. Eh bien, je prévois de le mettre à niveau plus tard. Je vais.

Limites

-Les composés du fichier SDF doivent avoir les paramètres suivants. ['ID', 'NAME', 'SOL', 'SMILES', 'SOL_classification']

・ Les composés étranges sont NG. (Séparation, ions, etc. Si vous êtes confus, RDKit ne donnera pas d'erreur de calcul)

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


#Calculer le descripteur à partir du fichier SDF et générer le CSV
# I :Chemin du fichier composé
#Chemin du fichier CSV
def ExportCSVFromSDF(sdfpath, csvpath):

    #Obtenez composé
    mols = Chem.SDMolSupplier(sdfpath)

    #Préparation du calcul du descripteur RDKit
    descLists = [desc_name[0] for desc_name in Descriptors._descList]
    desc_calc = MoleculeDescriptors.MolecularDescriptorCalculator(descLists)

    #Donner un identifiant avec numéro de série
    sampleids = list()
    #Nom du composé, etc.
    values_base = list()
    #Paramètres externes(Statut actuel:Fixe 5 pièces)
    values_ex = list()

    #Obtenez la valeur de chaque composé
    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)

    #Calculer le descripteur RDKit
    values_rdkit = [desc_calc.CalcDescriptors(mol) for mol in mols]

    #Convertir en DataFrame
    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)

    #Combinez tout
    df = pd.concat([df_base, df_ex, df_rdkit], axis=1)

    #Imprimer pour confirmation()
    print(df)

    #Sortie au format CSV
    df.to_csv(csvpath, index=False)


def main():
    sdfpath = 'solubility.test.sdf'
    csvpath = 'solubility.test.csv'
    ExportCSVFromSDF(sdfpath, csvpath)


if __name__ == '__main__':
    main()


Exemple de sortie

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

Impressions

Ouaip. Pandas, je me suis peut-être un peu amélioré. Je vais donc l'élargir de diverses manières à partir de maintenant. peut être. .. ..

Recommended Posts

Jeu manuel Python (calcul du descripteur RDKit: SDF en CSV à l'aide de Pandas)
Jeu à la main Python (Pandas / DataFrame début)
[Python] Chargement de fichiers csv à l'aide de pandas
Jeu à la main Python (CSV est appliqué avec Pandas DataFrame, mais seulement la colonne complète Insérer de CSV à DB?)
Jeu manuel Python (interopérabilité entre CSV et PostgreSQL)
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Calcul de l'âge à l'aide de python
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
Traiter les données csv avec python (traitement du comptage à l'aide de pandas)
Python hand play (obtenir les noms de colonnes à partir du fichier CSV)
Jeu de main Python (division)
Conversion de Pandas DataFrame en System.Data.DataTable à l'aide de Python pour .NET
Essayez d'exploiter un fichier Excel en utilisant Python (Pandas / XlsxWriter) ①
Essayez d'exploiter un fichier Excel en utilisant Python (Pandas / XlsxWriter) ②
Exportez les informations produit au format CSV à l'aide de l'API de recherche de produits Rakuten [Python]
Jeu de main Python (liste à deux dimensions)
Lire csv avec des pandas python
Publier sur Twitter en utilisant Python
Commencez à Selenium en utilisant python
# 1 [python3] Calcul simple à l'aide de variables
Écrire en csv avec Python
Convertissez rapidement SDF en CSV
Analyse de données à l'aide de pandas python
Comment coller un fichier CSV dans un fichier Excel à l'aide de Pandas
Rejoignez CSV normalisé par les pandas Python pour faciliter la vérification
Obtenez un flux RSS en utilisant Python + pandas → Publiez sur Mattermost et enregistrez dans DB
Comment installer Python à l'aide d'Anaconda
[Python] Ecrire dans un fichier csv avec Python
[Python] Comment utiliser la série Pandas
Sortie vers un fichier csv avec Python
[Introduction à Python] Utilisons les pandas
[Introduction à Python] Utilisons les pandas
[Introduction à Python] Utilisons les pandas
[Python] Comment lire le fichier csv (méthode read_csv du module pandas)