Gunakan R untuk mengakses API Registri Penyedia Nasional AS (NPI) oleh Pusat Layanan Medicare dan Medicaid (CMS): https://npiregistry.cms.hhhs.gov/. Dapatkan data administratif yang kaya terkait dengan penyedia layanan kesehatan individu atau organisasi tertentu, atau lakukan pencarian lanjutan berdasarkan nama penyedia, lokasi, jenis layanan, kredensial, dan banyak atribut lainnya. npi
menyediakan fungsi kenyamanan untuk ekstraksi data sehingga Anda dapat menghabiskan lebih sedikit waktu menulis data dan lebih banyak waktu menempatkan data untuk bekerja.
Analis yang bekerja dengan data kesehatan dan kesehatan masyarakat sering perlu bergabung dengan data dari berbagai sumber untuk menjawab pertanyaan bisnis atau penelitian mereka. Sayangnya, bergabung dengan data dalam perawatan kesehatan itu sulit karena sangat sedikit entitas yang memiliki pengidentifikasi yang unik dan konsisten di seluruh batas organisasi. Nomor NPI, bagaimanapun, tidak menderita dari keterbatasan ini, karena semua penyedia AS yang memenuhi kriteria umum tertentu harus memiliki nomor NPI untuk diganti untuk layanan yang mereka berikan. Ini membuat nomor NPI sangat berguna untuk bergabung dengan beberapa set data oleh Penyedia, yang merupakan motivasi utama untuk mengembangkan paket ini.
Ada tiga cara untuk menginstal paket 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
mengekspor empat fungsi, yang semuanya cocok dengan pola "npi_*":
npi_search()
: Cari registri NPI dan kembalikan responsnya sebagai Tibble dengan data kardinalitas tinggi yang disusun ke dalam kolom daftar.npi_summarize()
: Metode untuk menampilkan gambaran yang bagus tentang hasil dari npi_search()
.npi_flatten()
: Metode untuk meratakan satu atau lebih kolom daftar dari hasil pencarian, bergabung dengan nomor NPI.npi_is_valid()
: Periksa validitas satu atau lebih nomor NPI menggunakan standar enumerasi NPI resmi. npi_search()
memaparkan hampir semua parameter pencarian NPPES API. Katakanlah kami ingin menemukan hingga 10 penyedia dengan lokasi utama di New York City:
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
Hasil pencarian lengkap memiliki empat kolom vektor reguler, npi
, enumeration_type
, created_date
, dan last_updated_date
dan tujuh kolom daftar. Setiap kolom daftar adalah kumpulan data terkait:
basic
: Informasi Profil Dasar tentang Penyediaother_names
: Nama lain yang digunakan oleh penyediaidentifiers
: Pengidentifikasi Penyedia Lain dan Informasi Kredensialtaxonomies
: Klasifikasi Layanan dan Informasi Lisensiaddresses
: Informasi Lokasi dan Alamat Suratpractice_locations
: Lokasi Praktik Penyediaendpoints
: Detail tentang titik akhir penyedia untuk pertukaran informasi kesehatanDaftar lengkap bidang yang mungkin terjadi dalam kolom daftar ini dapat ditemukan di halaman bantuan NPPES API.
Jika Anda nyaman bekerja dengan kolom daftar, ini mungkin yang Anda butuhkan dari paket. Namun, npi
juga menyediakan fungsi yang dapat membantu Anda meringkas dan mengubah hasil pencarian Anda.
npi
memiliki dua fungsi pembantu utama untuk bekerja dengan hasil pencarian: npi_summarize()
dan npi_flatten()
.
Jalankan npi_summarize()
pada hasil Anda untuk melihat gambaran yang lebih dapat dibaca manusia dari hasil pencarian Anda. Secara khusus, fungsi mengembalikan nomor NPI, nama penyedia, jenis enumerasi (penyedia individu atau organisasi), alamat utama, nomor telepon, dan taksonomi primer (Area Praktik):
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
Seperti yang terlihat di atas, bingkai data yang dikembalikan oleh npi_search()
memiliki struktur bersarang. Meskipun semua data dalam satu baris terkait dengan satu NPI, setiap kolom daftar berisi daftar satu atau lebih nilai yang sesuai dengan NPI untuk baris itu. Misalnya, catatan NPI penyedia mungkin memiliki beberapa alamat terkait, nomor telepon, taksonomi, dan atribut lainnya, yang semuanya hidup di baris yang sama dari bingkai data.
Karena struktur bersarang bisa sedikit rumit untuk dikerjakan, npi
menyertakan npi_flatten()
, suatu fungsi yang mengubah bingkai data menjadi struktur yang lebih datar (yaitu, tidak diperlukan dan digabungkan) yang lebih mudah digunakan. npi_flatten()
melakukan transformasi berikut:
npi_flatten()
mendukung berbagai pendekatan untuk meratakan hasil dari npi_search()
. Satu ekstrem adalah meratakan semuanya sekaligus:
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>, …
Namun, karena jumlah bidang dan sejumlah besar kombinasi nilai potensial, pendekatan ini paling cocok untuk dataset kecil. Lebih mungkin, Anda ingin meratakan sejumlah kecil kolom daftar dari bingkai data asli dalam satu umpan, mengulangi proses dengan kolom daftar lain yang Anda inginkan dan gabungkan setelah fakta. Misalnya, untuk meratakan informasi taksonomi penyedia dasar dan penyedia, menyediakan kolom daftar yang sesuai sebagai vektor nama untuk argumen 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>, …
Sama seperti nomor kartu kredit, nomor NPI dapat disatukan atau rusak dalam perjalanan. Demikian juga, nomor NPI yang dikeluarkan secara resmi memiliki digit cek untuk tujuan pengecekan kesalahan. Gunakan npi_is_valid()
untuk memeriksa apakah nomor NPI yang Anda temui dibangun secara sah:
# Validate NPIs
npi_is_valid( 1234567893 )
# > [1] TRUE
npi_is_valid( 1234567898 )
# > [1] FALSE
Perhatikan bahwa fungsi ini tidak memeriksa apakah nomor NPI diaktifkan atau dinonaktifkan (lihat #22). Ini hanya memeriksa konsistensi angka dengan spesifikasi NPI. Dengan demikian, ini dapat membantu Anda mendeteksi dan menangani masalah kualitas data lebih awal.
Agen pengguna adalah cara bagi perangkat lunak yang berinteraksi dengan API untuk memberi tahu siapa atau apa yang membuat permintaan. Ini membantu pengelola API memahami sistem apa yang menggunakan API. Secara default, ketika npi
mengajukan permintaan ke API NPPES, header permintaan merujuk nama paket dan URL untuk repositori (misalnya, 'NPI/0.2.0 (https://github.com/ropensci/npi) '). Jika Anda ingin mengatur agen pengguna khusus, perbarui nilai opsi npi_user_agent
. Misalnya, untuk versi 1.0.0 dari sebuah aplikasi yang disebut "my_app", Anda dapat menjalankan kode berikut:
options( npi_user_agent = " my_app/1.0.0 " )
npi
memiliki situs web dengan catatan rilis, dokumentasi pada semua fungsi pengguna, dan contoh yang menunjukkan bagaimana paket dapat digunakan.
Apakah Anda melihat bug? Saya ingin sekali mendengarnya di halaman masalah.
Harap dicatat bahwa paket ini dirilis dengan kode perilaku kontributor. Dengan berkontribusi pada proyek ini, Anda setuju untuk mematuhi persyaratannya.
Tertarik mempelajari bagaimana Anda dapat berkontribusi pada NPI? Pergilah ke Panduan Kontributor - dan terima kasih telah mempertimbangkan!
Untuk kutipan terbaru, lihat halaman penulis dan kutipan di situs web paket.
MIT (c) Frank Farach
Logo paket ini dilisensikan di bawah CC BY-SA 4.0 dan diciptakan bersama oleh Frank Farach dan Sam Parmar. Logo menggunakan versi modifikasi dari gambar batang Asclepius dan kaca pembesar yang dikaitkan dengan Evanherk, GFDL.