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

PubChem(化学物質データベース)について📝
PubChemは、化学物質やその生物学的活性に関する情報を提供する、米国国立衛生研究所(NIH)が運営する公開データベースです。
主に化学者、薬理学者、生物学者などが利用し、以下のような内容を含みます。
- 化学物質の構造と物性:分子式、構造式、物理化学的性質(溶解度、融点など)。
- 生物学的活性:化合物が生物学的アッセイで示す効果や活性データ。
- 安全性情報:毒性や取り扱いに関するデータ。
- 文献情報:関連する科学論文や特許へのリンク。
PubChemは、化合物の検索、データのダウンロード、APIを通じたプログラムによるアクセスが可能で、創薬研究や化学研究に広く活用されています。
データは主に公開ドメインで、無料で利用できます。
詳細は公式サイトで確認できます。
PubChem Docs📝
PubChem Data Sources📝

PubChemのAPIや、その使い方について📝
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)
をスクリプトに追加。 - 制限を超えると一時的にアクセスがブロックされる可能性あり。
- 1秒あたり5リクエストを超えないよう、
-
データ量:
- 数百万件のクエリは非推奨。大量データの取得はPubChemのダウンロードページや連絡先を利用。
-
エラーハンドリング:
- リクエストが失敗した場合(例: 404エラー)、適切なエラーハンドリングを追加。
try: response = requests.get(url) response.raise_for_status() except requests.exceptions.RequestException as e: print(f"Error: {e}")
- リクエストが失敗した場合(例: 404エラー)、適切なエラーハンドリングを追加。
-
ドキュメント参照:
- 詳細な仕様は公式ドキュメント(https://pubchemdocs.ncbi.nlm.nih.gov/pug-rest)を参照。
- PUG-RESTチュートリアル(https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest-tutorial)も役立つ。
7. 応用例
- 創薬研究: 化合物ライブラリをスクリーニングし、類似構造や生物学的活性を比較。
- データサイエンス: PubChemデータを機械学習モデルに統合(例: 物性予測、QSARモデル)。
- 教育: 化学構造や物性の可視化ツールとして活用。
8. 参考資料
- 公式PUG-RESTドキュメント: https://pubchemdocs.ncbi.nlm.nih.gov/pug-rest
- PUG-RESTチュートリアル: https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest-tutorial
- PubChemPyドキュメント: http://pubchempy.readthedocs.io
- IUPAC FAIR Chemistry Cookbook: https://iupac.github.io(PUG-RESTの例)
9. 補足
- 制限を超える場合: 大量データが必要な場合は、PubChemのFTPサイトからデータを一括ダウンロード可能。
- 他のAPIとの比較: PUG-RESTは軽量で学習曲線が緩やかだが、PUG-Viewは注釈データ、PubChemRDFはセマンティックデータに特化。
- コミュニティ: GitHub(例: PubChemPyのリポジトリ)やフォーラムで質問や機能追加の提案が可能。

PubChem MCP Serverについて📝