mcpField
F
fda-database

fda-database

github.com/davila7データ・データベース33.0k313 回インストール今日更新
リポジトリ

fda-database について

openFDA経由でFDAの規制データを検索するPythonスキルです。医薬品、医療機器、食品、動物用製品、物質データを扱う研究者やチーム向けに、キャッシュ、レート制限、エラー処理を備えた統一インターフェースを提供します。

主な機能

  1. 01医薬品と医療機器データの検索
  2. 02食品と動物用製品記録の検索
  3. 03物質識別子の照会
  4. 04リコールと有害事象の分析
  5. 05キャッシュとレート制限

活用シーン

  1. 01医薬品の安全性とラベルの調査
  2. 02医療機器の有害事象とリコールの監視
  3. 03食品リコールとアレルゲンの追跡
  4. 04製品比較や傾向分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davila7/claude-code-templates --skill fda-database

インストール後、Claude Code で/fda-databaseを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
animal_veterinary.md
api_basics.md
devices.md
drugs.md
foods.md
other.md
scripts/
fda_examples.py
fda_query.py

詳細

FDA データベースへのアクセス

概要

openFDA を通じて、FDA の包括的な規制データにアクセスできます。openFDA は、公開データセット向けのオープン API を提供する FDA の取り組みです。標準化されたインターフェースを備えた Python を使用して、医薬品、医療機器、食品、動物用/獣医用製品、物質に関する情報を照会できます。

主な機能:

  • 医薬品、医療機器、食品、獣医用製品の有害事象を照会
  • 製品表示、承認、規制当局への申請情報にアクセス
  • リコールおよび執行措置を監視
  • 医薬品コード(NDC)と物質識別子(UNII)を検索
  • 医療機器の分類と認可(510(k)、PMA)を分析
  • 医薬品の供給不足と供給上の問題を追跡
  • 化学構造と物質の関係を調査

このスキルを使用するタイミング

このスキルは、次の用途で作業する場合に使用してください:

  • 医薬品研究: 安全性プロファイル、有害事象、表示、承認、供給不足
  • 医療機器サーベイランス: 有害事象、リコール、510(k) 認可、PMA 承認
  • 食品安全: リコール、アレルゲン追跡、有害事象、栄養補助食品
  • 獣医学: 動物種および品種別の動物用医薬品の有害事象
  • 化学/物質データ: UNII 検索、CAS 番号のマッピング、分子構造
  • 規制分析: 承認経路、執行措置、コンプライアンス追跡
  • 医薬品安全性監視: 市販後サーベイランス、安全性シグナルの検出
  • 科学研究: 薬物相互作用、比較安全性、疫学研究

クイックスタート

1. 基本セットアップ
from scripts.fda_query import FDAQuery

# Initialize (API key optional but recommended)
fda = FDAQuery(api_key="YOUR_API_KEY")

# Query drug adverse events
events = fda.query_drug_events("aspirin", limit=100)

# Get drug labeling
label = fda.query_drug_label("Lipitor", brand=True)

# Search device recalls
recalls = fda.query("device", "enforcement",
                   search="classification:Class+I",
                   limit=50)
2. API キーの設定

キーがなくても API は利用できますが、登録するとより高いレート制限が適用されます:

  • キーなし: 240 リクエスト/分、1,000 リクエスト/日
  • キーあり: 240 リクエスト/分、120,000 リクエスト/日

登録先: https://open.fda.gov/apis/authentication/

環境変数として設定します:

export FDA_API_KEY="your_key_here"
3. サンプルの実行
# Run comprehensive examples
python scripts/fda_examples.py

# This demonstrates:
# - Drug safety profiles
# - Device surveillance
# - Food recall monitoring
# - Substance lookup
# - Comparative drug analysis
# - Veterinary drug analysis

FDA データベースのカテゴリ

医薬品

承認から市販後サーベイランスまで、医薬品のライフサイクル全体をカバーする 6 つの医薬品関連エンドポイントにアクセスできます。

エンドポイント:

  1. 有害事象 - 副作用、エラー、治療の失敗に関する報告
  2. 製品表示 - 処方情報、警告、適応
  3. NDC ディレクトリ - 医薬品コード(National Drug Code)の製品情報
  4. 執行報告 - 医薬品のリコールと安全対策
  5. Drugs@FDA - 1939 年以降の承認履歴データ
  6. 医薬品供給不足 - 現在および解決済みの供給上の問題

よくある用途:

# Safety signal detection
fda.count_by_field("drug", "event",
                  search="patient.drug.medicinalproduct:metformin",
                  field="patient.reaction.reactionmeddrapt")

# Get prescribing information
label = fda.query_drug_label("Keytruda", brand=True)

# Check for recalls
recalls = fda.query_drug_recalls(drug_name="metformin")

# Monitor shortages
shortages = fda.query("drug", "drugshortages",
                     search="status:Currently+in+Shortage")

参考: 詳細なドキュメントは references/drugs.md を参照してください

医療機器

医療機器の安全性、承認、登録をカバーする 9 つの機器関連エンドポイントにアクセスできます。

エンドポイント:

  1. 有害事象 - 機器の不具合、傷害、死亡
  2. 510(k) 認可 - 市販前届出
  3. 分類 - 機器のカテゴリとリスククラス
  4. 執行報告 - 機器のリコール
  5. リコール - 詳細なリコール情報
  6. PMA - クラス III 機器の市販前承認データ
  7. 登録と届出 - 製造施設のデータ
  8. UDI - 固有機器識別子(Unique Device Identification)のデータベース
  9. COVID-19 血清学 - 抗体検査の性能データ

よくある用途:

# Monitor device safety
events = fda.query_device_events("pacemaker", limit=100)

# Look up device classification
classification = fda.query_device_classification("DQY")

# Find 510(k) clearances
clearances = fda.query_device_510k(applicant="Medtronic")

# Search by UDI
device_info = fda.query("device", "udi",
                       search="identifiers.id:00884838003019")

参考: 詳細なドキュメントは references/devices.md を参照してください

食品

安全性の監視とリコールのための 2 つの食品関連エンドポイントにアクセスできます。

エンドポイント:

  1. 有害事象 - 食品、栄養補助食品、化粧品に関する事象
  2. 執行報告 - 食品製品のリコール

よくある用途:

# Monitor allergen recalls
recalls = fda.query_food_recalls(reason="undeclared peanut")

# Track dietary supplement events
events = fda.query_food_events(
    industry="Dietary Supplements")

# Find contamination recalls
listeria = fda.query_food_recalls(
    reason="listeria",
    classification="I")

参考: 詳細なドキュメントは references/foods.md を参照してください

動物用・獣医用

動物種別の情報を含む獣医用医薬品の有害事象データにアクセスできます。

エンドポイント:

  1. 有害事象 - 動物種、品種、製品別の動物用医薬品の副作用

よくある用途:

# Species-specific events
dog_events = fda.query_animal_events(
    species="Dog",
    drug_name="flea collar")

# Breed predisposition analysis
breed_query = fda.query("animalandveterinary", "event",
    search="reaction.veddra_term_name:*seizure*+AND+"
           "animal.breed.breed_component:*Labrador*")

参考: 詳細なドキュメントは references/animal_veterinary.md を参照してください

物質・その他

UNII コード、化学構造、関連情報を含む、物質の分子レベルのデータにアクセスできます。

エンドポイント:

  1. 物質データ - UNII、CAS、化学構造、関連情報
  2. NSDE - 過去の物質データ(レガシー)

一般的なユースケース:

# UNII to CAS mapping
substance = fda.query_substance_by_unii("R16CO5Y76E")

# Search by name
results = fda.query_substance_by_name("acetaminophen")

# Get chemical structure
structure = fda.query("other", "substance",
    search="names.name:ibuprofen+AND+substanceClass:chemical")

リファレンス: 詳細なドキュメントについては、references/other.md を参照してください。

一般的なクエリパターン

パターン 1:安全性プロファイルの分析

複数のデータソースを組み合わせて、包括的な安全性プロファイルを作成します。

def drug_safety_profile(fda, drug_name):
    """Generate complete safety profile."""

    # 1. Total adverse events
    events = fda.query_drug_events(drug_name, limit=1)
    total = events["meta"]["results"]["total"]

    # 2. Most common reactions
    reactions = fda.count_by_field(
        "drug", "event",
        search=f"patient.drug.medicinalproduct:*{drug_name}*",
        field="patient.reaction.reactionmeddrapt",
        exact=True
    )

    # 3. Serious events
    serious = fda.query("drug", "event",
        search=f"patient.drug.medicinalproduct:*{drug_name}*+AND+serious:1",
        limit=1)

    # 4. Recent recalls
    recalls = fda.query_drug_recalls(drug_name=drug_name)

    return {
        "total_events": total,
        "top_reactions": reactions["results"][:10],
        "serious_events": serious["meta"]["results"]["total"],
        "recalls": recalls["results"]
    }
パターン 2:時系列トレンド分析

日付範囲を使って、経時的な傾向を分析します。

from datetime import datetime, timedelta

def get_monthly_trends(fda, drug_name, months=12):
    """Get monthly adverse event trends."""
    trends = []

    for i in range(months):
        end = datetime.now() - timedelta(days=30*i)
        start = end - timedelta(days=30)

        date_range = f"[{start.strftime('%Y%m%d')}+TO+{end.strftime('%Y%m%d')}]"
        search = f"patient.drug.medicinalproduct:*{drug_name}*+AND+receivedate:{date_range}"

        result = fda.query("drug", "event", search=search, limit=1)
        count = result["meta"]["results"]["total"] if "meta" in result else 0

        trends.append({
            "month": start.strftime("%Y-%m"),
            "events": count
        })

    return trends
パターン 3:比較分析

複数の製品を並べて比較します。

def compare_drugs(fda, drug_list):
    """Compare safety profiles of multiple drugs."""
    comparison = {}

    for drug in drug_list:
        # Total events
        events = fda.query_drug_events(drug, limit=1)
        total = events["meta"]["results"]["total"] if "meta" in events else 0

        # Serious events
        serious = fda.query("drug", "event",
            search=f"patient.drug.medicinalproduct:*{drug}*+AND+serious:1",
            limit=1)
        serious_count = serious["meta"]["results"]["total"] if "meta" in serious else 0

        comparison[drug] = {
            "total_events": total,
            "serious_events": serious_count,
            "serious_rate": (serious_count/total*100) if total > 0 else 0
        }

    return comparison
パターン 4:データベース横断検索

複数のエンドポイントにまたがるデータを関連付けます。

def comprehensive_device_lookup(fda, device_name):
    """Look up device across all relevant databases."""

    return {
        "adverse_events": fda.query_device_events(device_name, limit=10),
        "510k_clearances": fda.query_device_510k(device_name=device_name),
        "recalls": fda.query("device", "enforcement",
                           search=f"product_description:*{device_name}*"),
        "udi_info": fda.query("device", "udi",
                            search=f"brand_name:*{device_name}*")
    }

結果の扱い方

レスポンス構造

すべての API レスポンスは、次の構造に従います。

{
    "meta": {
        "disclaimer": "...",
        "results": {
            "skip": 0,
            "limit": 100,
            "total": 15234
        }
    },
    "results": [
        # Array of result objects
    ]
}
エラー処理

発生する可能性のあるエラーは、必ず処理してください。

result = fda.query_drug_events("aspirin", limit=10)

if "error" in result:
    print(f"Error: {result['error']}")
elif "results" not in result or len(result["results"]) == 0:
    print("No results found")
else:
    # Process results
    for event in result["results"]:
        # Handle event data
        pass
ページネーション

大量の結果を扱う場合は、ページネーションを使用してください。

# Automatic pagination
all_results = fda.query_all(
    "drug", "event",
    search="patient.drug.medicinalproduct:aspirin",
    max_results=5000
)

# Manual pagination
for skip in range(0, 1000, 100):
    batch = fda.query("drug", "event",
                     search="...",
                     limit=100,
                     skip=skip)
    # Process batch

ベストプラクティス

1. 具体的な検索を使用する

推奨:

# Specific field search
search="patient.drug.medicinalproduct:aspirin"

非推奨:

# Overly broad wildcard
search="*aspirin*"
2. レート制限を実装する

FDAQuery クラスはレート制限を自動的に処理しますが、上限に注意してください。

  • 1 分あたり 240 リクエスト
  • 1 日あたり 120,000 リクエスト(API キー使用時)
3. 頻繁にアクセスするデータをキャッシュする

FDAQuery クラスには、組み込みのキャッシュ機能が含まれています(デフォルトで有効)。

# Caching is automatic
fda = FDAQuery(api_key=api_key, use_cache=True, cache_ttl=3600)
4. 件数の集計には完全一致を使用する

件数を数えたり集計したりする場合は、.exact サフィックスを使用してください。

# Count exact phrases
fda.count_by_field("drug", "event",
                  search="...",
                  field="patient.reaction.reactionmeddrapt",
                  exact=True)  # Adds .exact automatically
5. 入力データを検証する

検索語を整理して検証してください。

def clean_drug_name(name):
    """Clean drug name for query."""
    return name.strip().replace('"', '\\"')

drug_name = clean_drug_name(user_input)

API リファレンス

詳しい情報については、以下を参照してください。

  • 認証とレート制限 → references/api_basics.md を参照してください
  • 医薬品データベース → references/drugs.md を参照してください
  • 医療機器データベース → references/devices.md を参照してください
  • 食品データベース → references/foods.md を参照してください
  • 動物用医薬品データベース → references/animal_veterinary.md を参照してください
  • 物質データベース → references/other.md を参照してください

スクリプト

scripts/fda_query.py

FDAQuery クラスを提供するメインのクエリモジュールです。以下の機能を備えています。

  • すべての FDA エンドポイントへの統一インターフェース
  • レート制限とキャッシュの自動処理
  • エラー処理と再試行ロジック
  • 一般的なクエリパターン
scripts/fda_examples.py

次の内容を実演する包括的な例です。

  • 医薬品の安全性プロファイル分析
  • 医療機器の監視
  • 食品リコールの追跡
  • 物質の検索
  • 医薬品の比較分析
  • 動物用医薬品の分析

例を実行するには:

python scripts/fda_examples.py

追加リソース

サポートとトラブルシューティング

よくある問題

問題: レート制限を超過した

  • 解決策: API キーを使用するか、遅延を設定するか、リクエスト頻度を下げてください

問題: 結果が見つからない

  • 解決策: より広い検索語を試す、スペルを確認する、ワイルドカードを使用する

問題: クエリ構文が無効

  • 解決策: references/api_basics.md でクエリ構文を確認してください

問題: 結果にフィールドがない

  • 解決策: すべてのレコードにすべてのフィールドが含まれるわけではありません。必ずフィールドの有無を確認してください
サポートの利用

コメント