Pythonで化学の構造式を描こう!RDKit, SMILES, PubChem(情報Ⅰプログラミング×化学①)

Pythonでインフォマティクス

構造式をパソコンで描いてみたい!

高校の化学で学ぶ構造式を、Pythonプログラミングを使って視覚化してみましょう!

今回は、化学構造の表現形式SMILES(スマイルス)と、化学構造の描画ライブラリRDKit(アールディーキット)を使って、構造式を簡単に描いてみます。

さらに、化合物名を入力するだけで構造式を描く方法も紹介するので、ぜひ最後までご覧ください💡




1. Pythonで構造式を描くには?

化合物の構造式は、Pythonを使ってかくことができます💡

…どうやって??

Pythonで扱える形式の化合物情報を渡して、構造式を描画できるライブラリを用いて、描きます!

📢 Pythonで扱える化合物情報の形式(入力)
 ⇒SMILES, InChI, SMARTS, Molfile / SDF など

📢Pythonの構造式を描画できるライブラリ(処理)
 ⇒RDkit, Open Babel, ASE, Indigo など

今回は、化合物情報の形式としてSMILES、構造式の描画ライブラリとしてRDKitを用いた例を紹介していきます。

💡 全体の流れ
① 分子の情報をSMILES(文字列)で表す
② その情報を RDKit に渡す
② RDKitが 構造式として描画してくれる!

2. 分子を描くライブラリRDKit

RDKitアールディーキット)は、化学構造を“コンピュータで扱う”ためのPythonライブラリです💡※
※参考 RDKit  https://rdkit.org/docs_jp/Getting_Started_with_RDKit_in_Python_jp.html

例えば、高校の化学では、紙に書いて覚えることが多い「構造式」や「化学反応」ですが、RDKitを使えば…

💻 パソコンの中で分子の形を描くことができる!
📏分子量や水素結合の数なども自動で計算!
AI×創薬の研究にも使われているツール!

RDKitは 無料で誰でも使えるし、Google Colabでも動くので、高校生やPython初学者の方でも簡単にスタートできます✨

3. 分子を文字列で表すSMILES

SMILESSimplified Molecular Input Line Entry System スマイルス)とは、化学構造式を文字列(コード)で表す方法のことです。

紙に書くような構造式を、アルファベットや記号だけの文字列で表現できるのが特徴で、SMILESは創薬研究、化学物質データベース、機械学習による物性予測などでも広く使用されています。

SMILESでの化合物の表現方法について、たとえば…

化合物 化学式 SMILES表記
エタノール C₂H₅OH CCO
ベンゼン C₆H₆ C1=CC=CC=C1
アセトン CH₃COCH₃ CC(=O)C

📢 SMILESの書き方のルール
原子は元素記号で表す
→ 例:C(炭素), O(酸素), N(窒素), Cl(塩素)など
水素原子(H)は省略される
単結合は何も書かない
→ CC と書けば、C–C の単結合を意味します
二重結合や三重結合は記号であらわす
→ C=O:二重結合、C#N:三重結合
分岐はかっこ()でかく
→ CC(=O)O:C に =O と –O が分岐した構造(酢酸)
環状構造は切断した鎖状構造にして、切断箇所を同じ数字でつなぐ
→ C1=CC=CC=C1:ベンゼン(1番と1番でつながる) など

では、実際PythonRDKitのライブラリを使って、SMILES情報から構造式を描いてみましょう!

今回はGoogle Colabでのコードを紹介します!

始め方は、以下に書いてますので、ご参考にされてください!

Pythonの始め方と使い方 (インストール不要のGoogle Colaboratory)(情報Ⅰプログラミング①)
プログラミング言語のPythonはシンプルな文法で書けるため、様々な領域で使われ、多くの研究者やエンジニア、学生など幅広く利用されています。高校情報Ⅰでは、情報社会の問題解決、コミュニケーションと情報デザイン、コンピュータ、情報通信ネットワ...
4. SMILESから分子を描いてみよう!
!pip install rdkit-pypi # RDKitのライブラリをインストール 
from rdkit import Chem # 化合物の構造データを扱うモジュールを読み込み
from rdkit.Chem import Draw # 分子構造を描画するモジュールを読み込み

smiles = "CCO" # エタノール
mol = Chem.MolFromSmiles(smiles)
Draw.MolToImage(mol)

Pythonで構造式を書くことができました!!

複数の構造式を並べたい時は、以下のようなコードでOKです。

mols = [Chem.MolFromSmiles(s) for s in ["CCO", "C1=CC=CC=C1", "CC(=O)O"]] #エタノール, ベンゼン, 酢酸
Draw.MolsToGridImage(mols, molsPerRow=3)

エタノール、ベンゼン、酢酸3つ並べて構造式を書くことができました!

といっても、SMILESの表記を検索したり、書くのに慣れるのは一苦労。。。💦

ということで、化合物名さえわかれば、Pythonに、化合物名入力⇒SMILES⇒構造式が描ける方法を次に紹介します💡

5. 化合物名からSMILESを取得する(PubChem連携)

化合物の名前を入力するだけで、構造式を自動で描きます💡
PubChemという化学データベースを使って、SMILESを自動取得できます!

化合物名は英語入力します!

例:カフェイン(caffeine, 化学式:C₈H₁₀N₄O₂)の構造式を描く

!pip install pubchempy # pubchempyのインストール(最初の1回のみ)
import pubchempy as pcp # ライブラリを使えるように読み込み(pcp 短い別名を付けた) 
name = "caffeine"
compound = pcp.get_compounds(name, 'name')
if compound:
    smiles = compound[0].isomeric_smiles
    print("SMILES:", smiles)

    # RDKitで構造を描画
    mol = Chem.MolFromSmiles(smiles)
    img = Draw.MolToImage(mol)  # 画像として変数に格納
    display(img)                 # 明示的に表示
else:
    print("物質が見つかりませんでした。")
# 実行結果
# SMILES: CN1C=NC2=C1C(=O)N(C(=O)N2C)C

カフェインのSMILESと構造式を入手できました💡

✅ 「アスピリン(aspirin)」「ニコチン(nicotine)」「ビタミンC(vitamin C, ascorbic acid)」なども入力して試してみよう!

6. まとめ

SMILESは、化学構造を文字列で表す方法です
RDKitを使えば、Pythonのプログラミングで分子を描くことができます
PubChemと連携すれば、化合物名から自動で構造式を生成することも可能です!

Pythonで化学構造を扱う技術は、大学や研究現場でも活用されています。

高校でも「総合的な探究の時間」や「理数探究」などで、プログラミングを使った化学探究にチャレンジすることができます。

情報Ⅰで学ぶ基礎が、化学や創薬の世界への扉にもつながるかもしれません。
興味があれば、ぜひこのテーマを自分の探究にしてみてください!

本サイトは、使える「情報Ⅰ」を目指し、情報Ⅰの内容を毎週月曜日に新しい記事を発信予定です。
また、プログラミングの使い方は毎月2回(第2、4木曜日)配信予定です。

Pythonで「判断できる」プログラムを作ろう!条件分岐, if文(情報Ⅰプログラミング②)
Pythonで「判断できる」プログラムを作ろう!!判断できる、、たとえば、「80点以上なら合格」「IDとパスワードが正しいならログインを許可」など、“もし~なら” という判断を、どうやってしているのでしょうか??「ある条件のときに、特定の動...
Pythonの始め方と使い方 (インストール不要のGoogle Colaboratory)(情報Ⅰプログラミング①)
プログラミング言語のPythonはシンプルな文法で書けるため、様々な領域で使われ、多くの研究者やエンジニア、学生など幅広く利用されています。高校情報Ⅰでは、情報社会の問題解決、コミュニケーションと情報デザイン、コンピュータ、情報通信ネットワ...
高校情報Ⅰと実践活用
高校情報Ⅰとプログラミングを含めた実践活用に関する記事を発信していきます。高校情報Ⅰの範囲を、毎週1記事、全6か月で進めていきます。高校情報Ⅰのプログラミング(Python中心)も、使い方やコード例を含めた記事を毎月2つアップ予定です♬📢情...
本記事に対し、お気づきの点ございましたらお問い合わせよりご連絡頂けますと幸いです。



コメント

タイトルとURLをコピーしました