ClinicalTrials.gov API

世界最大の臨床試験データベースのClinicalTrials.govのAPI利用法についてまとめました。

ClinicalTrials.govとは

わかりやすい説明があったので引用します。

ClinicalTrials.govは、米国国立公衆衛生研究所 (NIH)と米国医薬食品局 (FDA) が共同で、米国国立医学図書館 (NLM) を通じて、現在行われている治験及び臨床研究に関する情報を提供しているデータベースです。

2000年2月に開設され、その後、FDAに医薬品を申請するために該当する臨床試験を事前登録することが義務化されました。2009年には日本を含む172か国で実施された76,000件以上の試験が登録されており、世界最大級の臨床試験登録サイトを構成してます。

がん情報サイト「オンコロ」

2019年9月現在209カ国, 318,025件の試験が登録されています。引用元の情報からだいぶ増えていますね。

Registered Studies Over Time Graph
https://clinicaltrials.gov/ct2/resources/trends

簡単にどんなサービスか紹介します。

疾患名やその他のキーワード、国などの条件を入力して検索します。

https://clinicaltrials.gov/

するとこのように検索結果のリストが表示されます。

https://clinicaltrials.gov/ct2/results?cond=cancer&term=&cntry=&state=&city=&dist=

個別のStudy Titleを開くと詳細説明だったり、試験のデザインだったり、要するに細かい情報が盛りだくさんです。

https://clinicaltrials.gov/ct2/show/NCT03752268?cond=cancer&rank=1
https://clinicaltrials.gov/ct2/show/NCT03752268?cond=cancer&rank=1

これがClinicalTrials.govです。製薬企業の開発部門の方達が治験をデザインする際によく使うそうです。僕は基礎研究系だったのでこれまで使ったことはありませんでした。

ClinicalTrials.gov API

さてClinicalTrials.govには2種類のAPIがあります。簡単にいうと古いのと新しいのです。古い方は設計がかなり謎で、規格化するために新しい方を作っているみたいですが、ベータ版なのでバグがあるかもしれません。

ここでは古い方をcurrent API、新しい方をBETA APIと呼称します。

利用規約についてはこちらを参照ください。

current API

取得できる内容は2つです。

  • 検索結果
  • 報告書

検索結果

先ほどの検索結果のURLは以下の形になっています。

  • https://clinicaltrials.gov/ct2/results?<CONDITION>

この「results?」を「results/download_fields?」にすることで検索条件を使い回しつつ、その検索結果をダウンロードすることができます。

(希少疾患のモヤモヤ病=moyamoyaはヒット数が少なくて確認しやすいの以後moyamoyaを例に使います)

このAPIだけオプションが豊富で、以下の4つが指定できます(細かい条件はこちら)。

  • down_count: 最大ダウンロード数(10, 100, 1000, 10000)
  • down_flds: 検索画面のShow/Hideで選択できるフィールドの名前
  • down_fmt: ファイル形式
  • fown_chunk: チャンク(down_countと合わせて小分けに取得できる)

例えば以下のように指定することで、ダウンロード数を最大10、全てのフィールドをXML形式で取得することができます。

報告書

一方、報告書のURLは以下の形です。

  • https://clinicaltrials.gov/ct2/show/<ID>

こちらは末尾に「displayxml=true」というパラメータをつければXMLで表示できます。これをお好きな方法でダウンロードすればよろし、です。(APIではなく単にウェブの表示オプションな気もします)

https://clinicaltrials.gov/ct2/show/NCT03478891?displayxml=true

検索結果に出てきた報告書をまとめて

上記の組み合わせで検索結果と個別の報告書を取得することができるようになりました。かといって検索→ID取得→報告書ダウンロードというのはまだるっこしいです。

実は検索結果をまとめてダウンロードという方法もあります。検索結果の取得の時は「results/download_fields?」としましたが、それを「results/download_studies?」にすると検索結果のリストに含まれる試験の報告書が取得できます。

こちらのAPIはdown_chunkオプションしか設定できないようでした。10,000件ずつXMLをzipファイルでダウンロードするようです。

(公式は説明とExampleが一致していないようなのでわかりやすい表記をしました。どちらでも動きます)

まとめるとこんな感じ。

目的にもよりますが、以下のフィールド情報なら検索結果のリストで取得できるのでこれで十分かもしれません。resutls/download_studiesは多少使い勝手が悪そうです。

https://clinicaltrials.gov/ct2/results

全ての報告書

ちなみに全ての報告書(XML)のzipファイルをダウンロードするエンドポイントも用意されています。

超巨大ファイルとのことなのでうっかりクリックしないようにリンクは無効にしておきます。ヘッダー情報によると圧縮ファイルの大きさは1.45GBほどですが、展開したらどれほどになるかわかりません。ご利用は計画的に。

  • https://clinicaltrials.gov/AllPublicXML.zip

BETA API

繰り返しになりますが、BETA版ということに留意ください。開発が済んだらcurrent APIを置き換えるそうです(いつになるかは不明)。

APIには以下の2つの種類があります。

  • Info URLs: API自体の情報
  • Query URLs: 試験データ
    • Full Studies: 全ての情報(ちょっとずつしか取得できない)
    • Study Fields: 一部fieldsの情報(一気に大量に取得できる)
    • Field Values: 一つのfiledの情報(一気に全データを取得できる)

ここでは3種類のQueryを解説します。

オプションは検索式(search expression)と取得範囲の指定が基本です。いずれのQueryも検索式で条件を指定し、それにヒットしたもののうち一部を範囲指定で取ってくるのが共通の流れです。

スペース区切りの単語(lung cancerなど)を検索式に使いたい場合は「+」で繋ぐようにしましょう(lung+cancer)。

具体的に見ていきます。

Full Studies Query

Full Studies Queryは以下のようにexprで検索式を指定します。

デフォルトでは1件だけXML形式で返ってきます。以下のようにNStudiesFoundに検索ヒット数が、FullSyudyListの子要素に1件ごとのデータが格納されています。

https://clinicaltrials.gov/api/query/full_studies?expr=moyamoya

FullStudy/Structの中身は主にProtocolSectionとDerivedSectionに2分されます。DerivedSectionは疾患の親要素や子要素などが書かれています。関心を注ぎたいのはProtocolSectionで、こちらには治験の詳細情報が記載されています。例えば実施団体, 実施地, 対象の年齢・性別, 治験のフェーズなど。

https://clinicaltrials.gov/api/query/full_studies?expr=moyamoya

構造の定義はこちらにあります。

min_rnk, max_rnkを指定することで範囲指定で複数の結果を取得(最大100件)、fmtを指定することでJSONで取得することができます。

1~3件を取得。

https://clinicaltrials.gov/api/query/full_studies?expr=moyamoya&min_rnk=1&max_rnk=3

1~3件をJSONで取得。

https://clinicaltrials.gov/api/query/full_studies?expr=moyamoya&min_rnk=1&max_rnk=3&fmt=json

Study Fields Query

Study Fields Queryは一部のfieldsが必要な時に使います。デフォルトで20件、範囲指定で最大1,000件同時に取得できます。フォーマットはXML, JSON以外にCSVを選択できます。

こんな感じです先ほどのFullSyudyListの代わりにStudyFieldsListに個別のデータが格納されています。

https://clinicaltrials.gov/api/query/study_fields?expr=moyamoya&fields=NCTId,Condition,BriefTitle

それぞれのStudyFieldsは指定したfieldsのみ含まれるのでだいぶスッキリしました。欲しい情報が決まっている時にはこれで十分そうです。

https://clinicaltrials.gov/api/query/study_fields?expr=moyamoya&fields=NCTId,Condition,BriefTitle

指定できるfieldのリストはこちらをご確認ください。全部で300超のfieldがあります。

Field Values Query

最後にField Values Queryは1つのfieldだけを指定します。こんな感じ。

https://clinicaltrials.gov/api/query/field_values?expr=moyamoya&field=NCTId

返ってくるデータの数に限度はなくて、範囲を指定しないと全て返ってきます。試しにcancerで検索したら70,000件返ってきました。

ところで検索式

そんな感じ。しかしスルーしていたけど実はQueryよりも大事なのはsearch expression(検索式)の方かもしれません。

たとえばPMID(pubmed id)31280967の論文はClinicalTrials.govにリンクを持ちます。

https://www.ncbi.nlm.nih.gov/pubmed/31280967

リンクをクリックするとClinicalTrials.govはOther termsを使ってPUBMED-IDSで絞り込み検索できることがわかります。

https://clinicaltrials.gov/search/term=31280967%20%5BPUBMED-IDS%5D#

以下の記述を見るに他にも対象を指定する形での検索が可能のようです。

Use Other terms for additional words or terms you want to search by. You can use this to search for a specific NCT number, drug name, an investigator’s name, or other term.

https://clinicaltrials.gov/ct2/help/how-find/basic

「term [area]」の形で特定のフィールドに対して検索をかけることができます。

search expressionのareaに使えるのは以下のページのAPI Field Nameのようです。ClinicalTrials.govの登録データ名との紐付けがされています。

https://clinicaltrials.gov/api/gui/ref/crosswalks

ただしareaとして「Female [Gender]」を入力した時と、Advanced Searchで「Studies with Female Participants」を選んだ時でヒット数が異なるのが気になります。

https://clinicaltrials.gov/ct2/results?term=Female+%5BGender%5D
https://clinicaltrials.gov/ct2/results?cond=&term=&cntry=&state=&city=&dist=&Search=Search&gndr=Female

適当なareaを入力するとエラーが出るんですが、正しいareaリストを教えてくれるわけでは無い。上記のAPI Field NameにPUBMED-IDS無い以上、あれは完全に網羅してないものってことなんでしょうが、ちょっともやもやが残る。

所感

ベータ版だけあって、新しい方もそこまで使いやすくはない。。。

areaへの案内がなかったり、Other termsの活用方法がよくわからない。

参考

コメントを残す