Rを使用して、メディケアおよびメディケイドサービスセンター(CMS)による米国国立プロバイダー識別子(NPI)レジストリAPI(v2.1)にアクセス:https://npiregistry.cms.hhs.gov/。特定の個人または組織のヘルスケアプロバイダーにリンクされた豊富な管理データを取得するか、プロバイダー名、場所、サービスの種類、資格情報、およびその他の多くの属性に基づいて高度な検索を実行します。 npi
データ抽出のための利便性関数を提供しているため、データのゆとりに時間を費やし、データを動作させる時間を増やすことができます。
ヘルスケアと公衆衛生データを扱うアナリストは、多くの場合、複数のソースからのデータに参加して、ビジネスや研究の質問に答える必要があります。残念ながら、ヘルスケアにデータを結合することは困難です。なぜなら、組織の境界を越えてユニークで一貫した識別子を持っているエンティティはほとんどないためです。ただし、NPIの数値は、これらの制限に苦しむことはありません。特定の一般的な基準を満たすすべての米国プロバイダーが、提供するサービスに払い戻されるためにNPI番号を持たなければならないためです。これにより、NPI番号は、プロバイダーによる複数のデータセットに参加するのに非常に便利になります。これは、このパッケージを開発するための主な動機です。
npi
パッケージをインストールするには3つの方法があります。
install.packages( " npi " )
library( npi )
install.packages( " npi " , repos = " https://ropensci.r-universe.dev " )
library( npi )
devtools
パッケージを使用してGitHubからインストールしてください。 devtools :: install_github( " ropensci/npi " )
library( npi )
npi
4つの関数をエクスポートします。これらはすべてパターン「npi_*」と一致します。
npi_search()
:npiレジストリを検索し、リスト列に編成された高筋肉性データを使用してTibbleとして応答を返します。npi_summarize()
: npi_search()
の結果の素晴らしい概要を表示する方法。npi_flatten()
:NPI番号で結合された検索結果から1つ以上のリスト列を平坦化する方法。npi_is_valid()
:公式NPI列挙標準を使用して、1つ以上のNPI番号の有効性を確認します。npi_search()
NPPES APIの検索パラメーターのほぼすべてを公開します。ニューヨーク市の主要な場所を持つ最大10人のプロバイダーを見つけたかったとしましょう。
nyc <- npi_search( city = " New York City " )
# Your results may differ since the data in the NPPES database changes over time
nyc
# > # A tibble: 10 × 11
# > npi enume…¹ basic other_…² identi…³ taxono…⁴ addres…⁵ practi…⁶ endpoi…⁷
# > * <int> <chr> <list> <list> <list> <list> <list> <list> <list>
# > 1 1.19e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 2 1.31e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 3 1.64e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 4 1.35e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 5 1.56e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 6 1.79e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 7 1.56e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 8 1.96e9 Organi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 9 1.43e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 10 1.33e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > # … with 2 more variables: created_date <dttm>, last_updated_date <dttm>, and
# > # abbreviated variable names ¹enumeration_type, ²other_names, ³identifiers,
# > # ⁴taxonomies, ⁵addresses, ⁶practice_locations, ⁷endpoints
完全な検索結果には、4つの通常のベクトル列、 npi
、 enumeration_type
、 created_date
、およびlast_updated_date
と7つのリスト列があります。各リスト列は、関連するデータのコレクションです。
basic
:プロバイダーに関する基本的なプロファイル情報other_names
:プロバイダーが使用するその他の名前identifiers
:他のプロバイダー識別子と資格情報taxonomies
:サービス分類とライセンス情報addresses
:場所と郵送先住所情報practice_locations
:プロバイダーの練習場所endpoints
:健康情報交換のためのプロバイダーのエンドポイントの詳細これらのリスト列内の可能なフィールドの完全なリストは、NPPES APIヘルプページにあります。
リスト列を使用して快適に作業する場合は、これがパッケージから必要なものすべてかもしれません。ただし、 npi
検索結果を要約および変換するのに役立つ機能も提供します。
npi
検索結果を操作するための2つの主要なヘルパー関数があります: npi_summarize()
とnpi_flatten()
。
結果でnpi_summarize()
実行して、検索結果のより人間が読みやすい概要を確認します。具体的には、関数は、NPI番号、プロバイダーの名前、列挙タイプ(個人または組織プロバイダー)、プライマリアドレス、電話番号、および一次分類法(実践分野)を返します。
npi_summarize( nyc )
# > # A tibble: 10 × 6
# > npi name enume…¹ prima…² phone prima…³
# > <int> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN Indivi… 5 E 98… 212-… Physic…
# > 2 1306849641 MARK MOHRMANN Indivi… 16 PAR… 212-… Orthop…
# > 3 1639173065 SAKSHI DUA Indivi… 10 E 1… 212-… Nurse …
# > 4 1346604592 SARAH LOWRY Indivi… 1335 D… 614-… Occupa…
# > 5 1558362566 AMY TIERSTEN Indivi… 1176 5… 212-… Psychi…
# > 6 1790786416 NOAH GOLDMAN Indivi… 140 BE… 973-… Intern…
# > 7 1558713628 ROBYN NOHLING Indivi… 9 HOPE… 781-… Nurse …
# > 8 1962983775 LENOX HILL MEDICAL ANESTHESIOLOGY, … Organi… 100 E … 212-… Intern…
# > 9 1427454529 YONGHONG TAN Indivi… 34 MAP… 203-… Obstet…
# > 10 1326403213 RAJEE KRAUSE Indivi… 12401 … 347-… Nurse …
# > # … with abbreviated variable names ¹enumeration_type,
# > # ²primary_practice_address, ³primary_taxonomy
上記のように、 npi_search()
によって返されるデータフレームには、ネストされた構造があります。 1つの行のすべてのデータは1つのNPIに関連していますが、各リスト列には、その行のNPIに対応する1つ以上の値のリストが含まれています。たとえば、プロバイダーのNPIレコードには、複数の関連するアドレス、電話番号、分類、およびその他の属性があり、そのすべてがデータフレームの同じ行に存在します。
ネストされた構造は作業が少し難しい場合があるため、 npi
にはnpi_flatten()
が含まれます。これは、データフレームをより簡単に使用しやすい構造に変換する関数です。 npi_flatten()
次の変換を実行します。
npi_flatten()
npi_search()
の結果を平坦化するためのさまざまなアプローチをサポートしています。極端な1つは、すべてを一度に平らにすることです。
npi_flatten( nyc )
# > # A tibble: 48 × 42
# > npi basic_fi…¹ basic…² basic…³ basic…⁴ basic…⁵ basic…⁶ basic…⁷ basic…⁸
# > <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 2 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 3 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 4 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 5 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 6 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 7 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 8 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 9 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 10 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > # … with 38 more rows, 33 more variables: basic_name <chr>,
# > # basic_name_prefix <chr>, basic_middle_name <chr>,
# > # basic_organization_name <chr>, basic_organizational_subpart <chr>,
# > # basic_authorized_official_credential <chr>,
# > # basic_authorized_official_first_name <chr>,
# > # basic_authorized_official_last_name <chr>,
# > # basic_authorized_official_middle_name <chr>, …
ただし、フィールドの数と多数の値の潜在的な組み合わせにより、このアプローチは小さなデータセットに最適です。おそらく、元のデータフレームから少数のリスト列を1つのパスで平らにし、必要な他のリスト列でプロセスを繰り返し、事後に合併することをお勧めします。たとえば、基本プロバイダーとプロバイダーの分類情報をフラット化するには、 cols
引数の名前のベクトルとして対応するリスト列を供給します。
# Flatten basic provider info and provider taxonomy, preserving the relationship
# of each to NPI number and discarding other list columns.
npi_flatten( nyc , cols = c( " basic " , " taxonomies " ))
# > # A tibble: 20 × 26
# > npi basic_fi…¹ basic…² basic…³ basic…⁴ basic…⁵ basic…⁶ basic…⁷ basic…⁸
# > <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 2 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 3 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 4 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 5 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 6 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 7 1346604592 SARAH LOWRY OTR/L YES F 2016-0… 2018-0… A
# > 8 1346604592 SARAH LOWRY OTR/L YES F 2016-0… 2018-0… A
# > 9 1427454529 YONGHONG TAN <NA> NO F 2014-1… 2018-1… A
# > 10 1558362566 AMY TIERST… M.D. YES F 2005-0… 2019-0… A
# > 11 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 12 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 13 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 14 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 15 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 16 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 17 1639173065 SAKSHI DUA M.D. YES F 2005-0… 2019-0… A
# > 18 1639173065 SAKSHI DUA M.D. YES F 2005-0… 2019-0… A
# > 19 1790786416 NOAH GOLDMAN M.D. NO M 2005-0… 2018-0… A
# > 20 1962983775 <NA> <NA> <NA> <NA> <NA> 2018-0… 2018-0… A
# > # … with 17 more variables: basic_name <chr>, basic_name_prefix <chr>,
# > # basic_middle_name <chr>, basic_organization_name <chr>,
# > # basic_organizational_subpart <chr>,
# > # basic_authorized_official_credential <chr>,
# > # basic_authorized_official_first_name <chr>,
# > # basic_authorized_official_last_name <chr>,
# > # basic_authorized_official_middle_name <chr>, …
クレジットカード番号と同様に、NPI番号を輸送中に誤って誤って行ったり破損したりすることがあります。同様に、公式に発行されたNPI番号には、エラーチェックの目的でチェック桁があります。 npi_is_valid()
使用して、遭遇したNPI番号が有効に構築されているかどうかを確認します。
# Validate NPIs
npi_is_valid( 1234567893 )
# > [1] TRUE
npi_is_valid( 1234567898 )
# > [1] FALSE
この関数は、NPI数値がアクティブ化されているか無効になっているかを確認しないことに注意してください(#22を参照)。 NPI仕様との数値の一貫性を確認するだけです。そのため、データ品質の問題を早期に検出および処理するのに役立ちます。
ユーザーエージェントは、ソフトウェアがAPIと対話して、誰または何がリクエストを行っているかを伝える方法です。これにより、APIのメンテナーは、APIを使用しているシステムを理解するのに役立ちます。デフォルトでは、 npi
NPPES APIにリクエストを行うと、リクエストヘッダーはパッケージの名前とリポジトリのURLを参照します( 'npi/0.2.0(https://github.com/ropensci/npi) ')。カスタムユーザーエージェントを設定する場合は、 npi_user_agent
オプションの値を更新します。たとえば、「my_app」と呼ばれるアプリのバージョン1.0.0の場合、次のコードを実行できます。
options( npi_user_agent = " my_app/1.0.0 " )
npi
には、リリースノート、すべてのユーザー機能に関するドキュメント、およびパッケージの使用方法を示す例があるWebサイトがあります。
バグを見つけましたか?問題ページでそれについて聞いてみたいです。
このパッケージは、貢献者の行動規範とともにリリースされていることに注意してください。このプロジェクトに貢献することにより、お客様はその条件を順守することに同意します。
NPIにどのように貢献できるかを学ぶことに興味がありますか? Contributor Guideにアクセスしてください。
最新の引用については、パッケージWebサイトの著者と引用ページを参照してください。
MIT(c)フランク・ファーハ
このパッケージのロゴは、CC by-sa 4.0の下でライセンスされ、フランクファーハとサムパーマーが共同で作成しています。このロゴは、アスクレピウスの棒の画像の修正バージョンと、エヴァンヘルクgfdlに起因する虫眼鏡を使用します。