Utilisez R pour accéder à l'API de registre du fournisseur national (NPI) américain (v2.1) par le Center for Medicare et Medicaid Services (CMS): https://npiregistry.cms.hhs.gov/. Obtenez des données administratives riches liées à un fournisseur de soins de santé individuel ou organisationnel spécifique, ou effectuez des recherches avancées en fonction du nom du fournisseur, de l'emplacement, du type de service, des informations d'identification et de nombreux autres attributs. npi
fournit des fonctions de commodité pour l'extraction des données afin que vous puissiez passer moins de temps à se débattre des données et plus de temps à mettre des données au travail.
Les analystes travaillant avec des données sur les soins de santé et la santé publique doivent fréquemment rejoindre des données provenant de plusieurs sources pour répondre à leur entreprise ou à leurs questions de recherche. Malheureusement, rejoindre les données dans les soins de santé est difficile car si peu d'entités ont des identificateurs uniques et cohérents à travers les frontières organisationnelles. Les chiffres du NPI, cependant, ne souffrent pas de ces limitations, car tous les fournisseurs américains répondant à certains critères communs doivent avoir un numéro NPI afin d'être remboursé pour les services qu'ils fournissent. Cela rend les numéros NPI incroyablement utiles pour rejoindre plusieurs ensembles de données par Provider, qui est la principale motivation pour développer ce package.
Il existe trois façons d'installer le package npi
:
install.packages( " npi " )
library( npi )
install.packages( " npi " , repos = " https://ropensci.r-universe.dev " )
library( npi )
devtools
: devtools :: install_github( " ropensci/npi " )
library( npi )
npi
exporte quatre fonctions, qui correspondent toutes au modèle «npi_ *»:
npi_search()
: Recherchez le registre NPI et renvoyez la réponse en tant que Tibble avec des données à haute cardinalité organisées en colonnes de liste.npi_summarize()
: une méthode pour afficher une belle vue d'ensemble des résultats de npi_search()
.npi_flatten()
: une méthode pour aplatir une ou plusieurs colonnes de liste à partir d'un résultat de recherche, rejointe par numéro NPI.npi_is_valid()
: Vérifiez la validité d'un ou plusieurs numéros NPI en utilisant la norme d'énumération officielle du NPI. npi_search()
expose presque tous les paramètres de recherche de l'API NPPES. Disons que nous voulions trouver jusqu'à 10 fournisseurs avec des emplacements principaux à New York:
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
Les résultats de recherche complets ont quatre colonnes vectorielles régulières, npi
, enumeration_type
, created_date
et last_updated_date
et Seven List Colonnes. Chaque colonne de liste est une collection de données connexes:
basic
: informations de profil de base sur le fournisseurother_names
: Autres noms utilisés par le fournisseuridentifiers
: autres identifiants des fournisseurs et informations d'identificationtaxonomies
: Classification des services et informations sur les licencesaddresses
: Informations sur l'emplacement et l'adresse postalepractice_locations
: les emplacements de pratique du fournisseurendpoints
: détails sur les points de terminaison du fournisseur pour l'échange d'informations sur la santéUne liste complète des champs possibles dans ces colonnes de liste se trouve sur la page d'aide de l'API NPPES.
Si vous êtes à l'aise de travailler avec des colonnes de liste, c'est peut-être tout ce dont vous avez besoin dans le package. Cependant, npi
fournit également des fonctions qui peuvent vous aider à résumer et à transformer vos résultats de recherche.
npi
possède deux fonctions d'assistance principales pour travailler avec les résultats de recherche: npi_summarize()
et npi_flatten()
.
Exécutez npi_summarize()
sur vos résultats pour voir un aperçu plus lisible par l'homme de vos résultats de recherche. Plus précisément, la fonction renvoie le numéro NPI, le nom du fournisseur, le type d'énumération (fournisseur individuel ou organisationnel), l'adresse principale, le numéro de téléphone et la taxonomie principale (domaine de pratique):
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
Comme vu ci-dessus, le cadre de données renvoyé par npi_search()
a une structure imbriquée. Bien que toutes les données d'une seule ligne se rapportent à un NPI, chaque colonne de liste contient une liste d'une ou plusieurs valeurs correspondant au NPI pour cette ligne. Par exemple, l'enregistrement NPI d'un fournisseur peut avoir plusieurs adresses associées, numéros de téléphone, taxonomies et autres attributs, qui vivent tous dans la même ligne de la trame de données.
Étant donné que les structures imbriquées peuvent être un peu difficiles à travailler, le npi
comprend npi_flatten()
, une fonction qui transforme le cadre de données en une structure plus plate (c'est-à-dire non négligée et fusionnée) qui est plus facile à utiliser. npi_flatten()
effectue les transformations suivantes:
npi_flatten()
prend en charge une variété d'approches pour aplatir les résultats de npi_search()
. Un extrême est de tout aplatir à la fois:
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>, …
Cependant, en raison du nombre de champs et du grand nombre de combinaisons potentielles de valeurs, cette approche est mieux adaptée aux petits ensembles de données. Plus probablement, vous voudrez aplatir un petit nombre de colonnes de liste à partir de la trame de données d'origine en une seule passe, répétant le processus avec d'autres colonnes de liste que vous souhaitez et fusionnant après coup. Par exemple, pour aplatir les informations de base de la taxonomie des fournisseurs et des fournisseurs, fournissez les colonnes de liste correspondantes en tant que vecteur de noms à l'argument 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>, …
Tout comme les numéros de carte de crédit, les numéros NPI peuvent être malpérés ou corrompus en transit. De même, les numéros NPI émis officiellement ont un chiffre de contrôle à des fins de vérification des erreurs. Utilisez npi_is_valid()
pour vérifier si un numéro NPI que vous avez rencontré est valablement construit:
# Validate NPIs
npi_is_valid( 1234567893 )
# > [1] TRUE
npi_is_valid( 1234567898 )
# > [1] FALSE
Notez que cette fonction ne vérifie pas si les numéros NPI sont activés ou désactivés (voir # 22). Il vérifie simplement la cohérence du nombre avec la spécification NPI. En tant que tel, il peut vous aider à détecter et à gérer tôt les problèmes de qualité des données.
Un agent utilisateur est un moyen pour le logiciel d'interagir avec une API pour lui dire qui ou ce qui fait la demande. Cela aide les responsables de l'API à comprendre quels systèmes utilisent l'API. Par défaut, lorsque npi
fait une demande à l'API NPPES, l'en-tête de demande fait référence au nom du package et à l'URL du référentiel (par exemple, 'npi / 0.2.0 (https://github.com/ropensci/npi) '). Si vous souhaitez définir un agent utilisateur personnalisé, mettez à jour la valeur de l'option npi_user_agent
. Par exemple, pour la version 1.0.0 d'une application appelée «my_app», vous pouvez exécuter le code suivant:
options( npi_user_agent = " my_app/1.0.0 " )
npi
a un site Web avec des notes de publication, une documentation sur toutes les fonctions utilisateur et des exemples montrant comment le package peut être utilisé.
Avez-vous repéré un bug? J'adorerais en entendre parler sur la page des problèmes.
Veuillez noter que ce package est publié avec un code de conduite de contributeur. En contribuant à ce projet, vous acceptez de respecter ses conditions.
Vous souhaitez apprendre comment vous pouvez contribuer à NPI? Rendez-vous au Guide des contributeurs - et merci de l'examen!
Pour la dernière citation, consultez la page des auteurs et de la citation sur le site Web du package.
MIT (c) Frank Farach
Le logo de ce package est sous licence CC BY-SA 4.0 et co-créé par Frank Farach et Sam Parmar. Le logo utilise une version modifiée d'une image de la tige d'Asclepius et d'une loupe attribuée à Evanherk, GFDL.