Python、機械学習

【Python】SMILES記法で化合物の化学構造を表記し、生成する方法(RDKit)

化学構造を表現する方法にはいくつかありますが、中でもよく使われているのがSMILES記法です。

ここでは、PythonにてRDKitを使い、SMILES記法でさまざまな化合物を生成してみます。これを眺めればSMILES記法の書き方がつかめるかと思います。

RDKitのライブラリをインポート

まずは、RDKitから必要なライブラリをインポートします。

from rdkit import Chem
from rdkit.Chem import Draw
from IPython.display import display

 

SMILE表記からMOLというファイル形式に変換し、それをビジュアル化する場合は、次のコードを書きます。

MOLファイル名 = Chem.MolFromSmiles('SMILES表記')
Draw.MolToImage(MOLファイル名)

SMILES記法で様々な化学構造を表記する(基本編)

結合の長さ:メタン、エタン、プロパン

元素を並べるだけでOKです。

methane_mol = Chem.MolFromSmiles('C')
Draw.MolToImage(methane_mol)

 

ethane_mol = Chem.MolFromSmiles('CC')
Draw.MolToImage(ethane_mol)

 

 

propane_mol = Chem.MolFromSmiles('CCC')
Draw.MolToImage(propane_mol)

 

結合の種類:エタン、エチレン、アセチレン

二重結合は「=」、三重結合は「#」で表します。実は単結合も「-」で表せますが、基本は省略します。

ethylene_mol = Chem.MolFromSmiles('C=C')
Draw.MolToImage(ethylene_mol)

 

 

acetylene_mol = Chem.MolFromSmiles('C#C')
Draw.MolToImage(acetylene_mol)

 

環状構造:シクロヘキサン

環状構造を表現する場合は、環を切って線状にし、切った箇所に数字を割り当てます。

シクロヘキサンの場合は、1箇所で切断して1という数字を割り当てます。よって、切断した部分の炭素はC1と表現します。

cyclohexane_mol = Chem.MolFromSmiles('C1CCCCC1')
Draw.MolToImage(cyclohexane_mol)

 

 

共役構造:ベンゼン

共役構造を表す場合は、元素を小文字にします。

benzene_mol = Chem.MolFromSmiles('c1ccccc1')
Draw.MolToImage(benzene_mol)

 

 

分岐構造:酢酸

分岐がある場合は、分岐の結合をカッコで括ります。

aceticacid_mol = Chem.MolFromSmiles('CC(=O)O')
Draw.MolToImage(aceticacid_mol)

 

 

イオン、塩:Fe+3イオン、NaCl

イオンを表現する場合は角カッコ [ ] で括ります。

Fe_mol = Chem.MolFromSmiles('[Fe+3]')
Draw.MolToImage(Fe_mol)

 

 

そして、イオン結合のように共有結合をもたない結合を表すときはピリオド「.」を使います。

NaCl_mol = Chem.MolFromSmiles('[Na+].[Cl-]')
Draw.MolToImage(NaCl_mol)

 

 

SMILES記法で様々な化学構造を表記する(応用編)

複素環:ナフタレン

ナフタレンの場合は、2箇所を切断します。1箇所目を1、2箇所目を2とします。

naphthalene_mol = Chem.MolFromSmiles('c2cc1ccccc1cc2')
Draw.MolToImage(naphthalene_mol)

 

 

ヘテロ複素環:ベンゾイミダゾール

ベンゾイミダゾールのようにヘテロ原子を含む芳香族を書く場合、水素(H)がついているヘテロ原子に大文字のHを添えて角カッコで括ることをします。

例えば、ベンゾイミダゾールのNHの部分ですと、[nH]と表現します。

benzimidazole_mol = Chem.MolFromSmiles('c2cc1nc[nH]c1cc2')
Draw.MolToImage(benzimidazole_mol)

 

 

かご状:アダマンタン

最後に、アダマンタンです。アダマンタンの場合は3箇所を切断します。1箇所目を1、2箇所目を2、3箇所目を3とします。

アダマンタンの場合、1, 2の2つの切断箇所に該当する炭素があります。その炭素はC12という書き方をしてあげます。

adamantane_mol = Chem.MolFromSmiles('C1C3CC(CC12)CC(C2)C3')
Draw.MolToImage(adamantane_mol)

 

 

見た目がきれいではありませんが、アダマンタンを表現することができました。

【Python】仮想環境とは何?何のための設定?Anacondaではどうやって構築するのか?Pythonを勉強していると、「仮想環境」という概念にぶち当たります。初心者にとってはなんのことやらわかりません。 そこで、本記事では...