pubchem-database
PUG-REST APIおよびPubChemPyを通じてPubChemの1億1千万以上の化合物データベースに問い合わせるスキル。化合物名・CID・SMILESによる検索、物性情報の取得、類似性・部分構造検索、生物活性データの取得など、ケモインフォマティクス用途に幅広く対応します。
description の原文を見る
Query PubChem via PUG-REST API/PubChemPy (110M+ compounds). Search by name/CID/SMILES, retrieve properties, similarity/substructure searches, bioactivity, for cheminformatics.
SKILL.md 本文
PubChem Database
Overview
PubChemは世界最大の無料化学データベースで、110M以上の化合物と270M以上のバイオアクティビティデータを保有しています。PUG-REST APIとPubChemPyを使用して、名前、CID、またはSMILESで化学構造をクエリし、分子特性を取得し、類似性および部分構造検索を実行し、バイオアクティビティデータにアクセスできます。
このスキルを使用する場合
このスキルは以下の場合に使用します:
- 名前、構造(SMILES/InChI)、または分子式で化学化合物を検索する
- 分子特性(MW、LogP、TPSA、水素結合記述子)を取得する
- 類似性検索を実行して構造的に関連した化合物を見つける
- 特定の化学モチーフの部分構造検索を実施する
- スクリーニング実験からバイオアクティビティデータにアクセスする
- 化学識別子フォーマット(CID、SMILES、InChI)間で変換する
- 医薬品類似性スクリーニングまたは特性分析用に複数の化合物をバッチ処理する
コア機能
1. 化学構造検索
複数の識別子タイプを使用して化合物を検索します:
化学名による検索:
import pubchempy as pcp
compounds = pcp.get_compounds('aspirin', 'name')
compound = compounds[0]
CID(化合物ID)による検索:
compound = pcp.Compound.from_cid(2244) # Aspirin
SMILESによる検索:
compound = pcp.get_compounds('CC(=O)OC1=CC=CC=C1C(=O)O', 'smiles')[0]
InChIによる検索:
compound = pcp.get_compounds('InChI=1S/C9H8O4/...', 'inchi')[0]
分子式による検索:
compounds = pcp.get_compounds('C9H8O4', 'formula')
# この式にマッチするすべての化合物を返します
2. 特性取得
高レベルまたは低レベルのアプローチを使用して化合物の分子特性を取得します:
PubChemPyの使用(推奨):
import pubchempy as pcp
# すべての特性を持つ化合物オブジェクトを取得
compound = pcp.get_compounds('caffeine', 'name')[0]
# 個別の特性にアクセス
molecular_formula = compound.molecular_formula
molecular_weight = compound.molecular_weight
iupac_name = compound.iupac_name
smiles = compound.canonical_smiles
inchi = compound.inchi
xlogp = compound.xlogp # 分配係数
tpsa = compound.tpsa # 位相極性表面積
特定の特性を取得:
# 特定の特性のみをリクエスト
properties = pcp.get_properties(
['MolecularFormula', 'MolecularWeight', 'CanonicalSMILES', 'XLogP'],
'aspirin',
'name'
)
# 辞書のリストを返します
バッチ特性取得:
import pandas as pd
compound_names = ['aspirin', 'ibuprofen', 'paracetamol']
all_properties = []
for name in compound_names:
props = pcp.get_properties(
['MolecularFormula', 'MolecularWeight', 'XLogP'],
name,
'name'
)
all_properties.extend(props)
df = pd.DataFrame(all_properties)
利用可能な特性:MolecularFormula、MolecularWeight、CanonicalSMILES、IsomericSMILES、InChI、InChIKey、IUPACName、XLogP、TPSA、HBondDonorCount、HBondAcceptorCount、RotatableBondCount、Complexity、Chargeなど多数(完全なリストはreferences/api_reference.mdを参照)。
3. 類似性検索
Tanimoto類似性を使用して構造的に類似した化合物を見つけます:
import pubchempy as pcp
# クエリ化合物から開始
query_compound = pcp.get_compounds('gefitinib', 'name')[0]
query_smiles = query_compound.canonical_smiles
# 類似性検索を実行
similar_compounds = pcp.get_compounds(
query_smiles,
'smiles',
searchtype='similarity',
Threshold=85, # 類似性閾値(0-100)
MaxRecords=50
)
# 結果を処理
for compound in similar_compounds[:10]:
print(f"CID {compound.cid}: {compound.iupac_name}")
print(f" MW: {compound.molecular_weight}")
注:大規模なクエリの場合、類似性検索は非同期であり、完了に15~30秒かかることがあります。PubChemPyは非同期パターンを自動的に処理します。
4. 部分構造検索
特定の構造モチーフを含む化合物を見つけます:
import pubchempy as pcp
# ピリジン環を含む化合物を検索
pyridine_smiles = 'c1ccncc1'
matches = pcp.get_compounds(
pyridine_smiles,
'smiles',
searchtype='substructure',
MaxRecords=100
)
print(f"ピリジンを含む{len(matches)}個の化合物が見つかりました")
一般的な部分構造:
- ベンゼン環:
c1ccccc1 - ピリジン:
c1ccncc1 - フェノール:
c1ccc(O)cc1 - カルボン酸:
C(=O)O
5. フォーマット変換
異なる化学構造フォーマット間で変換します:
import pubchempy as pcp
compound = pcp.get_compounds('aspirin', 'name')[0]
# 異なるフォーマットに変換
smiles = compound.canonical_smiles
inchi = compound.inchi
inchikey = compound.inchikey
cid = compound.cid
# 構造ファイルをダウンロード
pcp.download('SDF', 'aspirin', 'name', 'aspirin.sdf', overwrite=True)
pcp.download('JSON', '2244', 'cid', 'aspirin.json', overwrite=True)
6. 構造の可視化
2D構造画像を生成します:
import pubchempy as pcp
# 化合物構造をPNGとしてダウンロード
pcp.download('PNG', 'caffeine', 'name', 'caffeine.png', overwrite=True)
# 直接URL経由(requestsを使用)
import requests
cid = 2244 # Aspirin
url = f"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/{cid}/PNG?image_size=large"
response = requests.get(url)
with open('structure.png', 'wb') as f:
f.write(response.content)
7. シノニム取得
化合物に関するすべての既知の名前とシノニムを取得します:
import pubchempy as pcp
synonyms_data = pcp.get_synonyms('aspirin', 'name')
if synonyms_data:
cid = synonyms_data[0]['CID']
synonyms = synonyms_data[0]['Synonym']
print(f"CID {cid}は{len(synonyms)}個のシノニムを持ちます:")
for syn in synonyms[:10]: # 最初の10個
print(f" - {syn}")
8. バイオアクティビティデータアクセス
アッセイからの生物学的活性データを取得します:
import requests
import json
# 化合物のバイオアッセイサマリーを取得
cid = 2244 # Aspirin
url = f"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/{cid}/assaysummary/JSON"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
# バイオアッセイ情報を処理
table = data.get('Table', {})
rows = table.get('Row', [])
print(f"{len(rows)}個のバイオアッセイレコードが見つかりました")
より複雑なバイオアクティビティクエリの場合、scripts/bioactivity_query.pyヘルパースクリプトを使用します。これは以下を提供します:
- 活性結果フィルタリング付きのバイオアッセイサマリー
- アッセイターゲット識別
- 生物学的ターゲットによる化合物検索
- 特定のアッセイの活性化合物リスト
9. 包括的な化合物注釈
PUG-Viewを通じて詳細な化合物情報にアクセスします:
import requests
cid = 2244
url = f"https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/{cid}/JSON"
response = requests.get(url)
if response.status_code == 200:
annotations = response.json()
# 以下を含む広範なデータが含まれます:
# - 化学的および物理的特性
# - 医薬品および医療情報
# - 薬理学および生化学
# - 安全性およびハザード
# - 毒性
# - 文献参照
# - 特許
特定のセクションを取得:
# 医薬品情報のみを取得
url = f"https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/{cid}/JSON?heading=Drug and Medication Information"
インストール要件
Pythonベースのアクセス用にPubChemPyをインストールします:
uv pip install pubchempy
直接API アクセスおよびバイオアクティビティクエリの場合:
uv pip install requests
データ分析用オプション:
uv pip install pandas
ヘルパースクリプト
このスキルには、一般的なPubChemタスク用のPythonスクリプトが含まれています:
scripts/compound_search.py
化合物情報の検索および取得用のユーティリティ関数を提供します:
主要関数:
search_by_name(name, max_results=10):名前で化合物を検索search_by_smiles(smiles):SMILES文字列で検索get_compound_by_cid(cid):CIDで化合物を取得get_compound_properties(identifier, namespace, properties):特定の特性を取得similarity_search(smiles, threshold, max_records):類似性検索を実行substructure_search(smiles, max_records):部分構造検索を実行get_synonyms(identifier, namespace):すべてのシノニムを取得batch_search(identifiers, namespace, properties):複数化合物のバッチ検索download_structure(identifier, namespace, format, filename):構造をダウンロードprint_compound_info(compound):フォーマットされた化合物情報を出力
使用方法:
from scripts.compound_search import search_by_name, get_compound_properties
# 化合物を検索
compounds = search_by_name('ibuprofen')
# 特定の特性を取得
props = get_compound_properties('aspirin', 'name', ['MolecularWeight', 'XLogP'])
scripts/bioactivity_query.py
生物学的活性データ取得用の関数を提供します:
主要関数:
get_bioassay_summary(cid):化合物のバイオアッセイサマリーを取得get_compound_bioactivities(cid, activity_outcome):フィルタリングされたバイオアクティビティを取得get_assay_description(aid):詳細なアッセイ情報を取得get_assay_targets(aid):アッセイの生物学的ターゲットを取得search_assays_by_target(target_name, max_results):ターゲットでアッセイを検索get_active_compounds_in_assay(aid, max_results):活性化合物を取得get_compound_annotations(cid, section):PUG-View注釈を取得summarize_bioactivities(cid):バイオアクティビティサマリー統計を生成find_compounds_by_bioactivity(target, threshold, max_compounds):ターゲットで化合物を検索
使用方法:
from scripts.bioactivity_query import get_bioassay_summary, summarize_bioactivities
# バイオアクティビティサマリーを取得
summary = summarize_bioactivities(2244) # Aspirin
print(f"総アッセイ数: {summary['total_assays']}")
print(f"活性: {summary['active']}、非活性: {summary['inactive']}")
APIレート制限とベストプラクティス
レート制限:
- 最大5リクエスト/秒
- 最大400リクエスト/分
- 1分間の最大実行時間300秒
ベストプラクティス:
- 反復クエリではCIDを使用:CIDは名前や構造より効率的です
- ローカルに結果をキャッシュ:頻繁にアクセスするデータを保存
- バッチリクエスト:可能な場合は複数のクエリを結合
- 遅延を実装:リクエスト間に0.2~0.3秒の遅延を追加
- エラーを適切に処理:HTTPエラーと欠落データを確認
- PubChemPyを活用:高レベルの抽象化により多くのエッジケースを処理
- 非同期パターンを活用:大規模な類似性/部分構造検索用
- MaxRecordsを指定:タイムアウトを回避するため結果を制限
エラーハンドリング:
from pubchempy import BadRequestError, NotFoundError, TimeoutError
try:
compound = pcp.get_compounds('query', 'name')[0]
except NotFoundError:
print("化合物が見つかりません")
except BadRequestError:
print("無効なリクエスト形式")
except TimeoutError:
print("リクエストがタイムアウト - スコープを削減してください")
except IndexError:
print("結果が返されません")
一般的なワークフロー
ワークフロー1:化学識別子変換パイプライン
異なる化学識別子間で変換します:
import pubchempy as pcp
# 任意の識別子タイプから開始
compound = pcp.get_compounds('caffeine', 'name')[0]
# すべての識別子形式を抽出
identifiers = {
'CID': compound.cid,
'Name': compound.iupac_name,
'SMILES': compound.canonical_smiles,
'InChI': compound.inchi,
'InChIKey': compound.inchikey,
'Formula': compound.molecular_formula
}
ワークフロー2:医薬品類似性特性スクリーニング
Lipinski's Rule of Fiveを使用して化合物をスクリーニングします:
import pubchempy as pcp
def check_drug_likeness(compound_name):
compound = pcp.get_compounds(compound_name, 'name')[0]
# Lipinski's Rule of Five
rules = {
'MW <= 500': compound.molecular_weight <= 500,
'LogP <= 5': compound.xlogp <= 5 if compound.xlogp else None,
'HBD <= 5': compound.h_bond_donor_count <= 5,
'HBA <= 10': compound.h_bond_acceptor_count <= 10
}
violations = sum(1 for v in rules.values() if v is False)
return rules, violations
rules, violations = check_drug_likeness('aspirin')
print(f"Lipinski違反: {violations}")
ワークフロー3:類似医薬品候補の検索
既知の医薬品に対して構造的に類似した化合物を特定します:
import pubchempy as pcp
# 既知の医薬品から開始
reference_drug = pcp.get_compounds('imatinib', 'name')[0]
reference_smiles = reference_drug.canonical_smiles
# 類似化合物を見つけ
similar = pcp.get_compounds(
reference_smiles,
'smiles',
searchtype='similarity',
Threshold=85,
MaxRecords=20
)
# 医薬品類似特性でフィルタリング
candidates = []
for comp in similar:
if comp.molecular_weight and 200 <= comp.molecular_weight <= 600:
if comp.xlogp and -1 <= comp.xlogp <= 5:
candidates.append(comp)
print(f"{len(candidates)}個の医薬品類似候補が見つかりました")
ワークフロー4:バッチ化合物特性比較
複数の化合物間で特性を比較します:
import pubchempy as pcp
import pandas as pd
compound_list = ['aspirin', 'ibuprofen', 'naproxen', 'celecoxib']
properties_list = []
for name in compound_list:
try:
compound = pcp.get_compounds(name, 'name')[0]
properties_list.append({
'Name': name,
'CID': compound.cid,
'Formula': compound.molecular_formula,
'MW': compound.molecular_weight,
'LogP': compound.xlogp,
'TPSA': compound.tpsa,
'HBD': compound.h_bond_donor_count,
'HBA': compound.h_bond_acceptor_count
})
except Exception as e:
print(f"{name}の処理エラー: {e}")
df = pd.DataFrame(properties_list)
print(df.to_string(index=False))
ワークフロー5:部分構造ベースのバーチャルスクリーニング
特定のファーマコフォアを含む化合物をスクリーニングします:
import pubchempy as pcp
# ファーマコフォア(スルホンアミドグループなど)を定義
pharmacophore_smiles = 'S(=O)(=O)N'
# このサブストラクチャを含む化合物を検索
hits = pcp.get_compounds(
pharmacophore_smiles,
'smiles',
searchtype='substructure',
MaxRecords=100
)
# 特性によってさらにフィルタリング
filtered_hits = [
comp for comp in hits
if comp.molecular_weight and comp.molecular_weight < 500
]
print(f"目的のサブストラクチャを持つ{len(filtered_hits)}個の化合物が見つかりました")
リファレンスドキュメント
完全な特性リスト、URLパターン、高度なクエリオプション、その他の例を含む詳細なAPIドキュメントについては、references/api_reference.mdを参照してください。この包括的なリファレンスには以下が含まれます:
- 完全なPUG-REST APIエンドポイントドキュメント
- 利用可能なすべての分子特性のリスト
- 非同期リクエスト処理パターン
- PubChemPy APIリファレンス
- 注釈用PUG-View API
- 一般的なワークフローと使用例
- 公式PubChemドキュメントへのリンク
トラブルシューティング
化合物が見つからない:
- 代替名またはシノニムを試してください
- CIDがわかっている場合はそれを使用
- スペルと化学名形式を確認
タイムアウトエラー:
- MaxRecordsパラメータを削減
- リクエスト間に遅延を追加
- 名前または構造の代わりにCIDを使用してより高速化
空の特性値:
- すべての特性がすべての化合物で利用できるわけではありません
- アクセス前に特性が存在するかを確認:
if compound.xlogp: - 一部の特性は特定の化合物タイプでのみ利用可能
レート制限を超過:
- リクエスト間に遅延(0.2~0.3秒)を実装
- 可能な場合はバッチ操作を使用
- ローカルに結果をキャッシュすることを検討
類似性/部分構造検索がハング:
- これらは15~30秒かかる可能性がある非同期操作です
- PubChemPyはポーリングを自動的に処理
- タイムアウトする場合はMaxRecordsを削減
追加リソース
- PubChem Home:https://pubchem.ncbi.nlm.nih.gov/
- PUG-REST Documentation:https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest
- PUG-REST Tutorial:https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest-tutorial
- PubChemPy Documentation:https://pubchempy.readthedocs.io/
- PubChemPy GitHub:https://github.com/mcs07/PubChemPy
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。