💉

NDBオープンデータの分析を手軽に行えるpythonライブラリ「jp-ndb-medicine」の紹介

2025/01/08に公開

NDBオープンデータとは、厚生労働省が提供している医療データベース「NDB」のうち、誰でも二次利用できるよう一般向けに公開されている統計資料のことです。
利用までにかなり手間と時間がかかるNDBと比べて、NDBオープンデータは申請不要ですぐに利用できるため、医療データの分析をやってみたい個人や業務に役立てたい企業にとってはとても有用な資料となっています。(詳細は厚生労働省HP

しかしながら、NDBオープンデータはExcelの表形式で提供されていて、人間には理解できてもプログラムでは処理しづらい形式となっています。そのため、pythonやRで分析する時は前処理が必要になります。

jp-ndb-medicineは、その前処理を手軽に行うためのPythonライブラリです。このライブラリを使うことで、日本全国の薬剤の処方量を簡単に分析できるようになります。

jp-ndb-medicineの特徴

  • Excel形式のデータを簡単に読み込み
    Excelの表特有の、セル結合や罫線による表現を自動で処理することができます。
    読み込んだデータは処理しやすい 縦持ち形式(tidy data) に変換されます。

  • 複数年のデータも一括で利用可能
    厚生労働省HP公式の分析サイトではデータが年度ごとに分かれていますが、jp-ndb-medicineでは複数年にわたるデータを1行のコードでダウンロードすることができます。

  • 最新データに対応
    前処理済みデータのリポジトリ公開ではなく、公式HPから都度ダウンロードする形式を取っているため、最新回のデータもすぐに利用可能*です。

インストール

jp-ndb-medicineはPyPIでインストール可能です。

pip install jp-ndb-medicine

基本的な使い方

以下はjp-ndb-medicineを使った簡単な例です。

ライブラリのインポート

from jp_ndb_medicine import NDBMedicine
ndbm = NDBMedicine()

性年齢別のデータの読み込み

抽出条件は単一の値、または複数の値の配列で指定可能です。

  • dosage
    内服 / 外用 / 注射 / 歯科用薬剤
  • medical_class_values
    外来(院内) / 外来(院外) / 入院
df = ndbm.load_age()                            # 利用可能なすべてのデータ
df = ndbm.load_age(nth=[1, 2])                  # 第1,2回
df = ndbm.load_age(year=2014)                   # 2014年度
df = ndbm.load_age(dosage=['内服', '外用'])     # 内服または外用
df = ndbm.load_age(medical_class='入院')        # 入院分
df = ndbm.load_age(nth=1, dosage=['内服', '外用'], medical_class='入院')  # 条件の組み合わせ(AND検索)

読み込み例

実施回 年度 剤形 診療区分 薬効分類 薬効分類名称 医薬品コード 医薬品名 単位 薬価基準収載医薬品コード 薬価 後発品区分 性別 年齢 年齢区間
1 2014 内服 外来(院内) 112 催眠鎮静剤,抗不安剤 611170508 ソラナックス0.4mg錠 1124023F1037 9.2 0 男性 10 10~14歳 4757.2
1 2014 内服 外来(院内) 112 催眠鎮静剤,抗不安剤 611170508 ソラナックス0.4mg錠 1124023F1037 9.2 0 男性 15 15~19歳 46466

都道府県別のデータの読み込み

抽出条件の指定は性年齢別の場合と同様です。

df = ndbm.load_pref()                            # 利用可能なすべてのデータ
df = ndbm.load_pref(nth=[1, 2])                  # 第1,2回
df = ndbm.load_pref(year=2014)                   # 2014年度
df = ndbm.load_pref(dosage=['内服', '外用'])     # 内服または外用
df = ndbm.load_pref(medical_class='入院')        # 入院分
df = ndbm.load_pref(nth=1, dosage=['内服', '外用'], medical_class='入院')  # 条件の組み合わせ(AND検索)

読み込み例

実施回 年度 剤形 診療区分 薬効分類 薬効分類名称 医薬品コード 医薬品名 単位 薬価基準収載医薬品コード 薬価 後発品区分 都道府県コード 都道府県名
1 2014 内服 外来(院内) 112 催眠鎮静剤,抗不安剤 611170508 ソラナックス0.4mg錠 1124023F1037 9.2 0 01 北海道 2411514
1 2014 内服 外来(院内) 112 催眠鎮静剤,抗不安剤 611170508 ソラナックス0.4mg錠 1124023F1037 9.2 0 02 青森県 746303.5

まとめ

jp-ndb-medicineは、日本国内の医薬品データを効率的に扱うための強力なツールです。医療業界で働く方々や医薬品に関心のある研究者にとって、大いに役立つライブラリとなることを願っています。

オープンソースで提供されており、MITライセンスで自由に使用できます。
ソースコードはGitHubで公開されていますので、詳細や最新の情報はこちらをご確認ください。

GitHubリポジトリ: https://github.com/shiro46mt/jp-ndb-medicine
PyPIページ: https://pypi.org/project/jp-ndb-medicine

バグやご意見・ご要望などがありましたら、本記事のコメントやGitHubでのissueなどでお知らせいただけると非常に光栄です。

PR

医薬品マスタを簡単に取得・利用するためのライブラリを公開しています。
興味のある方はこちらも合わせてチェックしてみてください。
https://zenn.dev/shiro46/articles/666011fe1c8ea4

Discussion