Chimie avec Python

introduction

L'autre jour, j'ai analysé les données avec Python pour la première fois depuis longtemps. J'ai oublié comment utiliser les pandas.

À ce moment-là, j'y ai soudainement pensé. "Au fait, je n'ai pas beaucoup entendu parler de personnes qui ont utilisé Python en synchronisation avec notre département."

J'ai entendu quelques utilisateurs R ici et là ... (C'est facile, et il existe de nombreux packages, c'est donc naturel.)

Je vais vous présenter que Python peut également faire de la chimie.

RDkit C'est un package très actif dans le domaine de la Cheminformatique. Dessinez un composé ou lisez des données structurelles pour voir la structure du graphique. Ce que vous pouvez faire avec RDkit → https://www.rdkit.org

dessin

Tout d'abord, insérons la structure de manière appropriée.

from rdkit import Chem
from rdkit import IPythonConsole #Paramètres de dessin de structure
from rdkit.Chem import Draw

Ici, nous utilisons la notation SMILES pour entrer dans la structure. SMILES est une abréviation de Simplified Molecular Input Line Entry System, qui est une notation pour convertir des informations structurelles en une chaîne de caractères. Voir ici pour plus de détails (http://opensmiles.org)

Par exemple, souhaitez-vous dessiner de l'acide acétique?

m1=Chem.MolFromSmiles("CC(=O)O") #Méthode pour lire la chaîne de caractères écrite avec smile
m1

Ensuite, la formule développée de l'acide acétique peut être dessinée, ce qui est facile.

<Résultat de sortie> sakusan.png

De même, des composés aromatiques tels que la phénolphtaline peuvent être tirés.

m2=Chem.MolFromSmiles("O=C1OC(c2ccccc12)(c3ccc(O)cc3)c4ccc(O)cc4")
m2

<Résultat de sortie> phef.png

Tiré des données

Par exemple, lorsque vous souhaitez créer un ensemble de données et l'analyser. Si vous l'introduisez comme base de données ●ChEMBL(https://www.ebi.ac.uk/chembl/) ●PubChem(https://pubchem.ncbi.nlm.nih.gov) Je pense que ce domaine est intéressant.

J'aime le site NIH, donc cette fois j'utiliserai PubChem. Si vous recherchez "Aspirin", qui est célèbre pour son effet antipyrétique, l'écran de recherche ci-dessous apparaîtra. search.png

Enregistrez le fichier sdf de structure 2D à partir du bouton Télécharger. sdf.png

d1=Chem.SDMolSupplier("Structure2D_CID_2244.sdf")#Lire le fichier sdf
Draw.MolsToGridImage(d1)

<Résultat de sortie> aspirin.png L'aspirine a été invoquée correctement.

Recherche de structure

Je ne suis pas satisfait de la simple sortie, et je jouerai avec la structure de sortie de différentes manières.

chercher

Voyez où les structures partielles des deux produits chimiques correspondent.

#Cohérence structurelle entre l'acide acétique et l'acide formique
c1 = Chem.MolFromSmiles('CC(=O)O') #Acide acétique
c2 = Chem.MolFromSmarts('O=CO') #Acide formique

c1.GetSubstructMatches(c2) #Vérification de la partie où la structure correspond à l'acide acétique et à l'acide formique

<Résultat de sortie> ((2,1,3)) Ce nombre est l'indice atomique de l'acide acétique correspondant à l'acide formique.

Effacer
from rdkit.Chem import AllChem #Module pour faire des modifications moléculaires

delete = AllChem.DeleteSubstructs(c1,c2)#Suppression des parties communes avec de l'acide formique de l'acide acétique
Chem.MolToSmiles(delete)

<Résultat de sortie> Seulement'C'est resté

Remplacement
add = Chem.MolFromSmiles('CC(O)C(=O)O') #Sous-structure à remplacer(Acide lactique)
exc = AllChem.ReplaceSubstructs(c1,c2,add) #Remplacer la partie commune de l'acide acétique et de l'acide formique par de l'acide lactique
Chem.MolToSmiles(exc[0])

<Résultat de sortie> Je ne sais pas si cela existe, mais vous pouvez également synthétiser des composés inconnus comme «C.CC (O) C (= O) O».

Indice de similarité

Il existe une technique appelée empreinte digitale qui décrit les caractéristiques chimiques nécessaires pour montrer la similitude moléculaire.

#Calcul de similitude à l'aide des empreintes digitales d'acide acétique, d'acide formique et d'acide lactique

from rdkit import DataStructs
from rdkit.Chem.Fingerprints import FingerprintMols

data=[Chem.MolFromSmiles('CC(=O)O'),Chem.MolFromSmiles('O=CO'),Chem.MolFromSmiles('CC(O)C(=O)O')]#Insérez 3 molécules dont vous souhaitez vérifier la similitude

judge = [FingerprintMols.FingerprintMol(x) for x in data]
DataStructs.FingerprintSimilarity(judge[1],judge[2])#Similitude entre l'acide formique et l'acide lactique

<Résultat de sortie> C'était environ 0,19. Cela n'a pas l'air très similaire. Tanimoto et Dice sont réputés comme indicateurs pour mesurer la similitude. Dans DataStructs.FingerprintSimilarity, la valeur par défaut est le coefficient de Tanimoto, donc si vous souhaitez utiliser un autre index

DataStructs.FingerprintSimilarity(fps[1],fps[2], metric=DataStructs.DiceSimilarity)#Changement d'indice de similarité

<Résultat de sortie> 0.3125 Ceci est un indicateur par Dice.

Carte de similarité

Dessinez cette similitude sur la carte. Par exemple, dessinez une carte de similitude du lactose à base d'acide benzoïque.

from rdkit.Chem.Draw import SimilarityMaps #Module de carte de similarité

mol = Chem.MolFromSmiles('O=C(O)c1ccccc1')#acide benzoique
refmol=Chem.MolFromSmiles('O[C@H]1[C@H](O)[C@H](OC(O)[C@@H]1O)CO[C@@H]2O[C@H](CO)[C@H](O)[C@H](O)[C@H]2O')#Lactose

fp = SimilarityMaps.GetTTFingerprint(refmol, fpType='normal')#topological torsions finger print
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(mol, refmol, SimilarityMaps.GetMorganFingerprint, metric=DataStructs.TanimotoSimilarity)#Cartographie par coefficient de Tanimoto

<Résultat de sortie> 類似度マップ.png

Visualisation par charge

Cette fois, nous allons visualiser par la charge d'acide benzoïque.

AllChem.ComputeGasteigerCharges(mol)
contribs = [float(mol.GetAtomWithIdx(i).GetProp('_GasteigerCharge')) for i in range(mol.GetNumAtoms())] #Visualisation par charge partielle avec la méthode Gasteiger
fig = SimilarityMaps.GetSimilarityMapFromWeights(mol, contribs, colorMap='jet', contourLines=10)

<Résultat de sortie> J'ai pu visualiser l'effet de charge avec une carte couleur. Unknown.png

en conclusion

RDkit est pratique car il peut être utilisé pour le dessin, l'analyse structurelle et l'édition. S'il existe un package intéressant en Python, je voudrais le réessayer.

Recommended Posts

Chimie avec Python
Quadtree en Python --2
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Discord en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Réflexion en Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Modifier les polices en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python
Utilisez config.ini avec Python
Daily AtCoder # 33 en Python
Résoudre ABC168D en Python
Distribution logistique en Python
AtCoder # 7 tous les jours avec Python
Une doublure en Python
GRPC simple en Python
Résolvez ABC167-D avec Python
Daily AtCoder # 37 en Python