Use R para acessar a API do Registro de Identificador do Provedor Nacional dos EUA (NPI) (v2.1) pelo Center for Medicare e Medicaid Services (CMS): https://npiregistry.cms.hhs.gov/. Obtenha dados administrativos ricos vinculados a um profissional de saúde individual ou organizacional específico ou realize pesquisas avançadas com base no nome do provedor, localização, tipo de serviço, credenciais e muitos outros atributos. npi
fornece funções de conveniência para extração de dados para que você possa gastar menos tempo disputando dados e mais tempo colocando dados para funcionar.
Analistas que trabalham com os dados de saúde e saúde pública freqüentemente precisam ingressar em dados de várias fontes para responder a suas perguntas de negócios ou pesquisa. Infelizmente, ingressar em dados em assistência médica é difícil, porque tão poucas entidades têm identificadores únicos e consistentes entre as fronteiras organizacionais. Os números do NPI, no entanto, não sofrem com essas limitações, pois todos os fornecedores dos EUA que atendem a certos critérios comuns devem ter um número de NPI para serem reembolsados pelos serviços que prestam. Isso torna os números do NPI incrivelmente úteis para ingressar em vários conjuntos de dados pelo provedor, que é a principal motivação para o desenvolvimento deste pacote.
Existem três maneiras de instalar o pacote 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
exporta quatro funções, todas correspondentes ao padrão "npi_*":
npi_search()
: Pesquise o registro do NPI e retorne a resposta como um Tibble com dados de alta cardinalidade organizados em colunas de lista.npi_summarize()
: um método para exibir uma boa visão geral dos resultados de npi_search()
.npi_flatten()
: um método para achatar uma ou mais colunas de lista de um resultado de pesquisa, acompanhado pelo número NPI.npi_is_valid()
: verifique a validade de um ou mais números de NPI usando o padrão oficial de enumeração NPI. npi_search()
expõe quase todos os parâmetros de pesquisa da API da NPPES. Digamos que queríamos encontrar até 10 fornecedores com locais primários na cidade de Nova 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
Os resultados completos da pesquisa possuem quatro colunas de vetor regulares, npi
, enumeration_type
, created_date
e last_updated_date
e sete colunas da lista. Cada coluna da lista é uma coleção de dados relacionados:
basic
: Informações básicas sobre o perfil sobre o provedorother_names
: outros nomes usados pelo provedoridentifiers
: outros identificadores de provedores e informações de credenciaistaxonomies
: Classificação de Serviço e Informações de Licençaaddresses
: Informações de localização e endereço de correspondênciapractice_locations
: Locais de prática do provedorendpoints
: detalhes sobre os pontos de extremidade do provedor para troca de informações de saúdeUma lista completa dos campos possíveis nessas colunas de lista pode ser encontrada na página de ajuda da API NPPES.
Se você estiver confortável trabalhando com colunas de lista, isso pode ser tudo o que você precisa no pacote. No entanto, npi
também fornece funções que podem ajudá -lo a resumir e transformar seus resultados de pesquisa.
npi
possui duas funções auxiliares principais para trabalhar com os resultados da pesquisa: npi_summarize()
e npi_flatten()
.
Execute npi_summarize()
em seus resultados para ver uma visão geral mais legível pelo homem dos seus resultados de pesquisa. Especificamente, a função retorna o número do NPI, o nome do provedor, o tipo de enumeração (provedor individual ou organizacional), endereço primário, número de telefone e taxonomia primária (área de prática):
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
Como visto acima, o quadro de dados retornado por npi_search()
possui uma estrutura aninhada. Embora todos os dados em uma única linha se relacionem com um NPI, cada coluna de lista contém uma lista de um ou mais valores correspondentes ao NPI para essa linha. Por exemplo, o registro NPI de um provedor pode ter vários endereços associados, números de telefone, taxonomias e outros atributos, que vivem na mesma linha do quadro de dados.
Como as estruturas aninhadas podem ser um pouco complicadas de se trabalhar, o npi
inclui npi_flatten()
, uma função que transforma o quadro de dados em uma estrutura mais plana (ou seja, injeitada e mesclada) que é mais fácil de usar. npi_flatten()
executa as seguintes transformações:
npi_flatten()
suporta uma variedade de abordagens para achatar os resultados de npi_search()
. Um extremo é achatar tudo de uma vez:
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>, …
No entanto, devido ao número de campos e ao grande número de possíveis combinações de valores, essa abordagem é mais adequada a pequenos conjuntos de dados. É mais provável que você queira acumular um pequeno número de colunas da lista do quadro de dados original em uma passagem, repetindo o processo com outras colunas da lista que você deseja e se fundir após o fato. Por exemplo, para achatar informações de taxonomia do fornecedor básico e provedor, forneça as colunas da lista correspondente como um vetor de nomes ao argumento 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>, …
Assim como os números de cartão de crédito, os números do NPI podem ser elogiados ou corrompidos em trânsito. Da mesma forma, os números NPI emitidos oficialmente têm um dígito de cheque para fins de verificação de erros. Use npi_is_valid()
para verificar se um número NPI que você encontrou foi construído validamente:
# Validate NPIs
npi_is_valid( 1234567893 )
# > [1] TRUE
npi_is_valid( 1234567898 )
# > [1] FALSE
Observe que esta função não verifica se os números do NPI são ativados ou desativados (consulte #22). Ele apenas verifica a consistência do número com a especificação NPI. Como tal, pode ajudá -lo a detectar e lidar com problemas de qualidade de dados mais cedo.
Um agente do usuário é uma maneira de o software interagir com uma API dizer quem ou o que está fazendo a solicitação. Isso ajuda os mantenedores da API a entender quais sistemas estão usando a API. Por padrão, quando npi
faz uma solicitação à API NPPES, o cabeçalho da solicitação faz referência ao nome do pacote e ao URL do repositório (por exemplo, 'npi/0.2.0 (https://github.com/ropensci/npi) '). Se você deseja definir um agente de usuário personalizado, atualize o valor da opção npi_user_agent
. Por exemplo, para a versão 1.0.0 de um aplicativo chamado "My_App", você pode executar o seguinte código:
options( npi_user_agent = " my_app/1.0.0 " )
npi
possui um site com notas de lançamento, documentação sobre todas as funções do usuário e exemplos mostrando como o pacote pode ser usado.
Você viu um bug? Eu adoraria ouvir sobre isso na página de questões.
Observe que este pacote foi lançado com um código de conduta contribuinte. Ao contribuir para este projeto, você concorda em cumprir seus termos.
Interessado em aprender como você pode contribuir para o NPI? Vá para o guia colaborador - e obrigado por considerar!
Para a última citação, consulte a página de autores e citação no site do pacote.
MIT (c) Frank Farach
O logotipo deste pacote é licenciado no CC BY-SA 4.0 e co-criado por Frank Farach e Sam Parmar. O logotipo usa uma versão modificada de uma imagem da haste de Asclepius e uma lupa que é atribuída a EvaNherk, GFDL.