Chemie mit Python

Einführung

Neulich habe ich die Daten zum ersten Mal seit einiger Zeit mit Python analysiert. Ich habe vergessen, wie man Pandas benutzt.

Zu dieser Zeit dachte ich plötzlich darüber nach. "Übrigens habe ich nicht viel über Leute gehört, die Python synchron mit unserer Abteilung verwendet haben."

Ich habe hier und da einige R-Benutzer gehört ... (Es ist einfach und es gibt viele Pakete, also ist es natürlich.)

Ich werde vorstellen, dass Python auch Chemie kann.

RDkit Es ist ein Paket, das auf dem Gebiet der Cheminformatik sehr aktiv ist. Zeichnen Sie eine Verbindung oder lesen Sie Strukturdaten, um die Diagrammstruktur anzuzeigen. Was Sie mit RDkit tun können → https://www.rdkit.org

Zeichnung

Fügen wir zunächst die Struktur entsprechend ein.

from rdkit import Chem
from rdkit import IPythonConsole #Einstellungen für Strukturzeichnungen
from rdkit.Chem import Draw

Hier verwenden wir die Notation SMILES, um die Struktur einzugeben. SMILES ist eine Abkürzung für Simplified Molecular Input Line Entry System, eine Notation zum Konvertieren von Strukturinformationen in eine Zeichenfolge. Siehe hier für Details (http://opensmiles.org)

Möchten Sie zum Beispiel Essigsäure zeichnen?

m1=Chem.MolFromSmiles("CC(=O)O") #Methode zum Lesen der mit einem Lächeln geschriebenen Zeichenkette
m1

Dann kann die Strukturformel von Essigsäure gezogen werden, was einfach ist.

![sakusan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223549/f98e3e56-1ec6-b0d1-f923-94e04656bcf5.png)

In ähnlicher Weise können aromatische Verbindungen wie Phenolphthalin gezogen werden.

m2=Chem.MolFromSmiles("O=C1OC(c2ccccc12)(c3ccc(O)cc3)c4ccc(O)cc4")
m2
![phef.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223549/6c6bb959-d51c-93d8-4fb0-a4c737fca0f6.png)

Aus Daten entnommen

Zum Beispiel, wenn Sie einen Datensatz erstellen und analysieren möchten. Wenn Sie es als Datenbank einführen ●ChEMBL(https://www.ebi.ac.uk/chembl/) ●PubChem(https://pubchem.ncbi.nlm.nih.gov) Ich finde diesen Bereich interessant.

Ich mag die NIH-Seite, also werde ich dieses Mal PubChem verwenden. Wenn Sie nach "Aspirin" suchen, das für seine fiebersenkende Wirkung bekannt ist, wird der folgende Suchbildschirm angezeigt. search.png

Speichern Sie die 2D-Struktur-SDF-Datei über die Schaltfläche Herunterladen. sdf.png

d1=Chem.SDMolSupplier("Structure2D_CID_2244.sdf")#SDF-Datei lesen
Draw.MolsToGridImage(d1)
![aspirin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223549/df817553-1d91-15cd-5404-c5a43abcb131.png) Aspirin wurde ordnungsgemäß gerufen.

Struktursuche

Ich bin nicht zufrieden damit, nur auszugeben, und ich werde auf verschiedene Weise mit der Ausgabestruktur spielen.

Suche

Sehen Sie, wo die Teilstrukturen der beiden Chemikalien übereinstimmen.

#Strukturelle Konsistenz zwischen Essigsäure und Ameisensäure
c1 = Chem.MolFromSmiles('CC(=O)O') #Essigsäure
c2 = Chem.MolFromSmarts('O=CO') #Ameisensäure

c1.GetSubstructMatches(c2) #Überprüfen Sie den Teil, in dem die Struktur mit Essigsäure und Ameisensäure übereinstimmt
((2,1,3)) Diese Zahl ist der Atomindex von Essigsäure, der Ameisensäure entspricht.
Löschen
from rdkit.Chem import AllChem #Modul zur Durchführung molekularer Modifikationen

delete = AllChem.DeleteSubstructs(c1,c2)#Gemeinsame Teile mit Ameisensäure aus Essigsäure entfernt
Chem.MolToSmiles(delete)
Nur ich bin geblieben
Ersatz
add = Chem.MolFromSmiles('CC(O)C(=O)O') #Unterkonstruktion zu ersetzen(Milchsäure)
exc = AllChem.ReplaceSubstructs(c1,c2,add) #Ersetzen Sie den gemeinsamen Teil von Essigsäure und Ameisensäure durch Milchsäure
Chem.MolToSmiles(exc[0])
Ich weiß nicht, ob es existiert, aber Sie können auch unbekannte Verbindungen wie "C.CC (O) C (= O) O" synthetisieren.

Ähnlichkeitsindex

Es gibt eine Technik namens Fingerabdruck, die die chemischen Merkmale beschreibt, die erforderlich sind, um molekulare Ähnlichkeit zu zeigen.

#Ähnlichkeitsberechnung mit Fingerabdrücken von Essigsäure, Ameisensäure und Milchsäure

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')]#Fügen Sie 3 Moleküle ein, für die Sie die Ähnlichkeit überprüfen möchten

judge = [FingerprintMols.FingerprintMol(x) for x in data]
DataStructs.FingerprintSimilarity(judge[1],judge[2])#Ähnlichkeit zwischen Ameisensäure und Milchsäure
Es war ungefähr 0,19. Es sieht nicht sehr ähnlich aus. Tanimoto und Dice sind als Indikatoren zur Messung der Ähnlichkeit bekannt. In DataStructs.FingerprintSimilarity ist der Standardwert der Tanimoto-Koeffizient. Wenn Sie also einen anderen Index verwenden möchten
DataStructs.FingerprintSimilarity(fps[1],fps[2], metric=DataStructs.DiceSimilarity)#Änderung des Ähnlichkeitsindex
0.3125 Dies ist ein Indikator von Dice.
Ähnlichkeitskarte

Zeichnen Sie diese Ähnlichkeit auf die Karte. Zeichnen Sie beispielsweise eine Ähnlichkeitskarte von Lactose auf Benzoesäurebasis.

from rdkit.Chem.Draw import SimilarityMaps #Ähnlichkeitskartenmodul

mol = Chem.MolFromSmiles('O=C(O)c1ccccc1')#Benzoesäure
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')#Laktose

fp = SimilarityMaps.GetTTFingerprint(refmol, fpType='normal')#topological torsions finger print
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(mol, refmol, SimilarityMaps.GetMorganFingerprint, metric=DataStructs.TanimotoSimilarity)#Abbildung nach Tanimoto-Koeffizient
![類似度マップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223549/a024e3e9-2f0c-a09b-b576-37946d62abb9.png)
Visualisierung gegen Gebühr

Dieses Mal werden wir durch die Ladung von Benzoesäure visualisieren.

AllChem.ComputeGasteigerCharges(mol)
contribs = [float(mol.GetAtomWithIdx(i).GetProp('_GasteigerCharge')) for i in range(mol.GetNumAtoms())] #Visualisierung durch Teilladung nach der Gasteiger-Methode
fig = SimilarityMaps.GetSimilarityMapFromWeights(mol, contribs, colorMap='jet', contourLines=10)
Ich konnte den Ladungseffekt mit einer Farbkarte visualisieren. ![Unknown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223549/98305d01-a1a1-dc55-79d1-b2df5da7c547.png)

abschließend

RDkit ist praktisch, da es zum Zeichnen, zur Strukturanalyse und zum Bearbeiten verwendet werden kann. Ich würde es gerne noch einmal versuchen, wenn es ein interessantes Paket in Python gibt.

Recommended Posts