ใช้ R เพื่อเข้าถึงตัวระบุผู้ให้บริการแห่งชาติของสหรัฐอเมริกา (NPI) รีจิสทรี API (v2.1) โดยศูนย์บริการ Medicare และ Medicaid (CMS): https://npiregistry.cms.hhs.gov/ รับข้อมูลผู้ดูแลระบบที่หลากหลายซึ่งเชื่อมโยงกับผู้ให้บริการด้านการดูแลสุขภาพรายบุคคลหรือองค์กรเฉพาะหรือทำการค้นหาขั้นสูงตามชื่อผู้ให้บริการสถานที่ตั้งประเภทของบริการข้อมูลรับรองและคุณลักษณะอื่น ๆ อีกมากมาย npi
ให้ฟังก์ชั่นความสะดวกสบายสำหรับการสกัดข้อมูลเพื่อให้คุณสามารถใช้เวลาในการบิดข้อมูลน้อยลงและใช้เวลามากขึ้นในการใช้ข้อมูล
นักวิเคราะห์ที่ทำงานกับข้อมูลด้านการดูแลสุขภาพและการสาธารณสุขจำเป็นต้องเข้าร่วมข้อมูลจากหลายแหล่งเพื่อตอบคำถามทางธุรกิจหรือการวิจัย น่าเสียดายที่การเข้าร่วมข้อมูลในการดูแลสุขภาพเป็นเรื่องยากเพราะมีหน่วยงานจำนวนน้อยที่มีตัวระบุที่ไม่ซ้ำกันและสอดคล้องกันในขอบเขตขององค์กร อย่างไรก็ตามตัวเลข NPI ไม่ได้รับข้อ จำกัด เหล่านี้เนื่องจากผู้ให้บริการในสหรัฐอเมริกาทั้งหมดมีคุณสมบัติตรงตามเกณฑ์ทั่วไปบางประการจะต้องมีหมายเลข NPI เพื่อที่จะได้รับการชำระคืนสำหรับบริการที่พวกเขาให้ สิ่งนี้ทำให้หมายเลข NPI มีประโยชน์อย่างไม่น่าเชื่อสำหรับการเข้าร่วมชุดข้อมูลหลายชุดโดยผู้ให้บริการซึ่งเป็นแรงจูงใจหลักสำหรับการพัฒนาแพ็คเกจนี้
มีสามวิธีในการติดตั้งแพ็คเกจ 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
ส่งออกสี่ฟังก์ชั่นซึ่งทั้งหมดนี้ตรงกับรูปแบบ“ NPI_*”::
npi_search()
: ค้นหารีจิสทรี NPI และส่งคืนการตอบกลับเป็น tibble ด้วยข้อมูลที่มีความสามารถสูงที่จัดอยู่ในคอลัมน์รายการnpi_summarize()
: วิธีการแสดงภาพรวมที่ดีของผลลัพธ์จาก npi_search()
npi_flatten()
: วิธีการแบนคอลัมน์รายการหนึ่งรายการขึ้นไปจากผลการค้นหาซึ่งเข้าร่วมโดยหมายเลข NPInpi_is_valid()
: ตรวจสอบความถูกต้องของหมายเลข NPI หนึ่งหมายเลขหรือมากกว่าโดยใช้มาตรฐานการแจงนับ 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
ผลการค้นหาแบบเต็มมีคอลัมน์เวกเตอร์ทั่วไปสี่คอลัมน์ npi
, enumeration_type
, created_date
และ last_updated_date
และคอลัมน์เจ็ดรายการ แต่ละคอลัมน์รายการคือการรวบรวมข้อมูลที่เกี่ยวข้อง:
basic
: ข้อมูลโปรไฟล์พื้นฐานเกี่ยวกับผู้ให้บริการother_names
: ชื่ออื่น ๆ ที่ผู้ให้บริการใช้identifiers
: ตัวระบุผู้ให้บริการรายอื่นและข้อมูลข้อมูลรับรองtaxonomies
: การจำแนกประเภทบริการและข้อมูลใบอนุญาตaddresses
: ข้อมูลที่อยู่และที่อยู่ทางไปรษณีย์practice_locations
: สถานที่ปฏิบัติของผู้ให้บริการendpoints
: รายละเอียดเกี่ยวกับจุดสิ้นสุดของผู้ให้บริการสำหรับการแลกเปลี่ยนข้อมูลสุขภาพรายการทั้งหมดของฟิลด์ที่เป็นไปได้ภายในคอลัมน์รายการเหล่านี้สามารถพบได้ในหน้าวิธีใช้ NPPES API
หากคุณสะดวกสบายในการทำงานกับคอลัมน์รายการนี่อาจเป็นสิ่งที่คุณต้องการจากแพ็คเกจ อย่างไรก็ตาม npi
ยังมีฟังก์ชั่นที่สามารถช่วยคุณสรุปและแปลงผลการค้นหาของคุณ
npi
มีฟังก์ชั่นผู้ช่วยหลักสองฟังก์ชั่นสำหรับการทำงานกับผลการค้นหา: 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()
มีโครงสร้างซ้อนกัน แม้ว่าข้อมูลทั้งหมดในแถวเดียวจะเกี่ยวข้องกับหนึ่ง NPI แต่แต่ละคอลัมน์รายการมีรายการของค่าหนึ่งค่าหรือมากกว่าที่สอดคล้องกับ NPI สำหรับแถวนั้น ตัวอย่างเช่นบันทึก NPI ของผู้ให้บริการอาจมีที่อยู่ที่เกี่ยวข้องหมายเลขโทรศัพท์ taxonomies และแอตทริบิวต์อื่น ๆ หลายรายการซึ่งทั้งหมดอยู่ในแถวเดียวกันของกรอบข้อมูล
เนื่องจากโครงสร้างที่ซ้อนกันอาจเป็นเรื่องยุ่งยากเล็กน้อยที่จะทำงานด้วย npi
รวมถึง npi_flatten()
ฟังก์ชั่นที่เปลี่ยนกรอบข้อมูลให้เป็นโครงสร้างที่ไม่ได้รับการปล้น (เช่นไม่ได้ถูกทดสอบและรวม) ซึ่งใช้งานง่ายกว่า npi_flatten()
ดำเนินการเปลี่ยนแปลงต่อไปนี้:
npi_flatten()
รองรับวิธีการที่หลากหลายในการทำให้ผลลัพธ์แบนจาก npi_search()
สุดขั้วอย่างหนึ่งคือการทำให้ทุกอย่างแบนขึ้นในครั้งเดียว:
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>, …
อย่างไรก็ตามเนื่องจากจำนวนฟิลด์และการรวมกันของค่าที่เป็นไปได้จำนวนมากวิธีการนี้เหมาะที่สุดสำหรับชุดข้อมูลขนาดเล็ก มีโอกาสมากขึ้นที่คุณจะต้องแบนคอลัมน์รายการจำนวนเล็กน้อยจากกรอบข้อมูลต้นฉบับในหนึ่งผ่านการทำซ้ำกระบวนการด้วยคอลัมน์รายการอื่น ๆ ที่คุณต้องการและรวมกันหลังจากข้อเท็จจริง ตัวอย่างเช่นในการแบนข้อมูลผู้ให้บริการขั้นพื้นฐานและข้อมูลอนุกรมวิธานของผู้ให้บริการให้จัดหาคอลัมน์รายการที่เกี่ยวข้องเป็นเวกเตอร์ของชื่อไปยังอาร์กิวเมนต์ 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
ตัวอย่างเช่นสำหรับเวอร์ชัน 1.0.0 ของแอพที่เรียกว่า "my_app" คุณสามารถเรียกใช้รหัสต่อไปนี้:
options( npi_user_agent = " my_app/1.0.0 " )
npi
มีเว็บไซต์ที่มีบันทึกย่อการเปิดตัวเอกสารเกี่ยวกับฟังก์ชั่นผู้ใช้ทั้งหมดและตัวอย่างที่แสดงวิธีการใช้แพ็คเกจ
คุณเห็นข้อผิดพลาดหรือไม่? ฉันชอบที่จะได้ยินเกี่ยวกับเรื่องนี้ในหน้าปัญหา
โปรดทราบว่าแพ็คเกจนี้ได้รับการปล่อยตัวพร้อมกับจรรยาบรรณของผู้สนับสนุน โดยการมีส่วนร่วมในโครงการนี้คุณตกลงที่จะปฏิบัติตามข้อกำหนดของมัน
สนใจเรียนรู้ว่าคุณจะมีส่วนร่วมใน NPI ได้อย่างไร? ตรงไปที่คู่มือผู้สนับสนุน - และขอบคุณที่พิจารณา!
สำหรับการอ้างอิงล่าสุดดูหน้าผู้เขียนและการอ้างอิงบนเว็บไซต์แพ็คเกจ
MIT (C) Frank Farach
โลโก้ของแพ็คเกจนี้ได้รับใบอนุญาตภายใต้ CC BY-SA 4.0 และสร้างร่วมโดย Frank Farach และ Sam Parmar โลโก้ใช้ภาพที่แก้ไขของก้านของ Asclepius และแว่นขยายที่มีสาเหตุมาจาก Evanherk, GFDL