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
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>
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>
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.
Enregistrez le fichier sdf de structure 2D à partir du bouton Télécharger.
d1=Chem.SDMolSupplier("Structure2D_CID_2244.sdf")#Lire le fichier sdf
Draw.MolsToGridImage(d1)
<Résultat de sortie> L'aspirine a été invoquée correctement.
Je ne suis pas satisfait de la simple sortie, et je jouerai avec la structure de sortie de différentes manières.
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.
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é
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».
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.
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>
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.
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