Open3

【化学情報学/ChemInformatics】PubChem(化学物質データベース)について📝

まさぴょん🐱まさぴょん🐱

PubChem(化学物質データベース)について📝

PubChemは、化学物質やその生物学的活性に関する情報を提供する、米国国立衛生研究所(NIH)が運営する公開データベースです。
主に化学者、薬理学者、生物学者などが利用し、以下のような内容を含みます。

  • 化学物質の構造と物性:分子式、構造式、物理化学的性質(溶解度、融点など)。
  • 生物学的活性:化合物が生物学的アッセイで示す効果や活性データ。
  • 安全性情報:毒性や取り扱いに関するデータ。
  • 文献情報:関連する科学論文や特許へのリンク。

PubChemは、化合物の検索、データのダウンロード、APIを通じたプログラムによるアクセスが可能で、創薬研究や化学研究に広く活用されています。
データは主に公開ドメインで、無料で利用できます。

詳細は公式サイトで確認できます。

https://pubchem.ncbi.nlm.nih.gov/

PubChem Docs📝

https://pubchem.ncbi.nlm.nih.gov/docs

PubChem Data Sources📝

https://pubchem.ncbi.nlm.nih.gov/sources/

まさぴょん🐱まさぴょん🐱

PubChemのAPIや、その使い方について📝

https://pubchem.ncbi.nlm.nih.gov/docs/programmatic-access

https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest-tutorial

PubChemのAPIは、PubChemデータベースにプログラムでアクセスするためのインターフェースで、化学物質や生物学的活性データの取得、検索、操作を自動化できます。
主に以下のAPIが提供されており、特にPUG-RESTが広く使われています。
以下に概要と使い方を説明します。

1. 主なPubChem APIの種類

PubChemは複数のプログラムアクセス方法を提供しています。それぞれの特徴は以下の通りです

  • PUG-REST

    • RESTfulなインターフェースで、シンプルなHTTPリクエスト(GET/POST)でデータを取得。
    • 化学構造検索、物性データ取得、類似化合物検索などに適している。
    • 軽量で使いやすく、初心者にもおすすめ。
    • 例: 化合物の物性(分子量、SMILESなど)や生物学的アッセイデータを取得。
  • PUG-View

    • 化合物や物質の注釈データ(例: 特許情報、薬理学的データ、文献参照)に特化。
    • PubChemのサマリーページや詳細な注釈情報を取得するのに適している。
  • PUG-SOAP

    • SOAPプロトコルを使用したAPIで、XMLベースの通信。
    • 複雑なクエリや高いセキュリティが必要な場合に使用されるが、PUG-RESTに比べ利用頻度は低い。
  • PUG(Power User Gateway)

    • 汎用的なゲートウェイで、RESTやSOAPを統合的にサポート。
    • 大量のデータ取得や複雑なタスクに使用されるが、設定がやや複雑。
  • Entrez Utilities

    • PubChemと他のNCBIデータベース(PubMedなど)を連携して検索可能。
    • 文献や遺伝子データとの統合が必要な場合に有用。
  • PubChemRDF REST

    • セマンティックウェブ向けにRDF形式でデータを提供。
    • データの構造化やリンクデータに特化。

以下では、最も一般的で使いやすいPUG-RESTを中心に説明します。


2. PUG-RESTの特徴

  • URLベース: すべてのリクエストは単一のURLで構成され、ブラウザやスクリプトで簡単に実行可能。
  • 同期/非同期: 基本的に短時間の同期リクエスト(100ms以内が理想、最大30秒)だが、化学構造検索など時間のかかるタスクは非同期で処理可能。
  • 出力形式: JSON、XML、CSV、TXT、PNG(画像)など多様な形式をサポート。
  • 制限:
    • 1秒あたり5リクエスト、1分あたり400リクエスト、1分あたり300秒の実行時間以内。
    • 大量リクエスト(数百万件)は非推奨。大量データが必要な場合はPubChemに連絡して最適化を相談。

3. PUG-RESTの基本構造

PUG-RESTのURLは以下の4つの部分で構成されます:

https://pubchem.ncbi.nlm.nih.gov/rest/pug/<input>/<operation>/<output>[?options]
  • プロローグ: https://pubchem.ncbi.nlm.nih.gov/rest/pug
  • 入力(Input): 対象となる化合物、物質、アッセイ(例: CID、SMILES、名前)。
  • 操作(Operation): 実行する処理(例: 物性取得、類似検索)。
  • 出力(Output): データ形式(JSON、CSVなど)や取得するデータ(例: 分子量、構造画像)。
  • オプション: 追加のパラメータ(例: 検索の閾値)。

4. PUG-RESTの使用例

以下は、Pythonを使った具体的な例です(requestsライブラリを使用)。PubChemの使用ポリシーに従い、1秒あたり5リクエストを超えないよう注意してください。

例1: アスピリン(CID 2244)の分子量を取得

import requests
import time

# PUG-RESTリクエストURL
url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2244/property/MolecularWeight/JSON"

# リクエスト送信
response = requests.get(url)
data = response.json()

# 結果表示
print(data["PropertyTable"]["Properties"][0]["MolecularWeight"])

# リクエスト制限を守るため少し待機
time.sleep(0.2)

出力例: 180.157

例2: 名前で化合物を検索し、SMILESを取得

import requests
import time

url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/aspirin/property/CanonicalSMILES/JSON"
response = requests.get(url)
data = response.json()

print(data["PropertyTable"]["Properties"][0]["CanonicalSMILES"])
time.sleep(0.2)

出力例: CC(=O)OC1=CC=CC=C1C(=O)O

例3: 化合物の構造画像を取得

import requests
from IPython.display import Image, display

url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/aspirin/PNG"
response = requests.get(url)

# 画像をファイルに保存
with open("aspirin.png", "wb") as f:
    f.write(response.content)

# Jupyter Notebookで表示する場合
display(Image("aspirin.png"))
time.sleep(0.2)

例4: 類似化合物検索

import requests
import time

# SMILESでアスピリンを指定し、類似化合物を検索
url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/fastsimilarity_2d/smiles/CC(=O)OC1=CC=CC=C1C(=O)O/cids/JSON"
response = requests.get(url)
data = response.json()

# 類似化合物のCIDを表示
print(data["IdentifierList"]["CID"])
time.sleep(0.2)

出力例: [2244, 12345, ...](類似化合物のCIDリスト)


5. 役立つライブラリ

PUG-RESTを直接使う以外に、Python用のラッパーライブラリを使うとさらに簡単に操作できます。

  • PubChemPy

    • PubChem PUG-RESTのPythonラッパーで、化学検索やデータ取得を簡素化。
    • インストール: pip install pubchempy
    • 例:
      from pubchempy import get_compounds
      compounds = get_compounds("aspirin", "name")
      print(compounds[0].molecular_formula)  # C9H8O4
      print(compounds[0].xlogp)  # 1.2
      
  • RDKit(PubChemと併用)

    • 化学構造の操作や可視化に役立つ。PubChemから取得したSMILESを解析可能。
    • インストール: pip install rdkit

6. 使用時の注意点

  • リクエスト制限:

    • 1秒あたり5リクエストを超えないよう、time.sleep(0.2)をスクリプトに追加。
    • 制限を超えると一時的にアクセスがブロックされる可能性あり。
  • データ量:

  • エラーハンドリング:

    • リクエストが失敗した場合(例: 404エラー)、適切なエラーハンドリングを追加。
      try:
          response = requests.get(url)
          response.raise_for_status()
      except requests.exceptions.RequestException as e:
          print(f"Error: {e}")
      
  • ドキュメント参照:


7. 応用例

  • 創薬研究: 化合物ライブラリをスクリーニングし、類似構造や生物学的活性を比較。
  • データサイエンス: PubChemデータを機械学習モデルに統合(例: 物性予測、QSARモデル)。
  • 教育: 化学構造や物性の可視化ツールとして活用。

8. 参考資料


9. 補足

  • 制限を超える場合: 大量データが必要な場合は、PubChemのFTPサイトからデータを一括ダウンロード可能。
  • 他のAPIとの比較: PUG-RESTは軽量で学習曲線が緩やかだが、PUG-Viewは注釈データ、PubChemRDFはセマンティックデータに特化。
  • コミュニティ: GitHub(例: PubChemPyのリポジトリ)やフォーラムで質問や機能追加の提案が可能。