استخدم R للوصول إلى معرف REGISER National National National (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 وأرجع الاستجابة باعتبارها خاتمة مع بيانات عالية القلبية منظمة في أعمدة قائمة.npi_summarize()
: طريقة لعرض نظرة عامة لطيفة على النتائج من npi_search()
.npi_flatten()
: طريقة لتسوية عمود قائمة أو أكثر من نتيجة بحث ، انضم إلى رقم NPI.npi_is_valid()
: تحقق من صحة رقم أو أكثر من أرقام NPI باستخدام معيار تعداد NPI الرسمي. تكشف npi_search()
جميع معلمات بحث API NPPES تقريبًا. دعنا نقول أننا أردنا أن نجد ما يصل إلى 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
: تفاصيل حول نقاط النهاية للمزود لتبادل المعلومات الصحيةيمكن العثور على قائمة كاملة بالحقول الممكنة داخل هذه الأعمدة القائمة على صفحة مساعدة API NPPES.
إذا كنت مرتاحًا للعمل مع أعمدة القائمة ، فقد يكون هذا كل ما تحتاجه من الحزمة. ومع ذلك ، يوفر 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 الخاص بالمزود عناوين متعددة وأرقام هواتف وتصنيفات وسمات أخرى ، وكلها تعيش في نفس الصف من إطار البيانات.
نظرًا لأن الهياكل المتداخلة يمكن أن تكون صعبة بعض الشيء للعمل معها ، فإن 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. افتراضيًا ، عندما يقدم npi
طلبًا إلى واجهة برمجة تطبيقات NPPES ، يشير رأس الطلب إلى اسم الحزمة وعنوان 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 (ج) فرانك فارخ
يتم ترخيص شعار هذه الحزمة بموجب CC BY-SA 4.0 وشارك في إنشاء فرانك فاراش وسام بارمار. يستخدم الشعار نسخة معدلة من صورة قضيب Asclepius وزجاج مكبرة يعزى إلى Evanherk ، GFDL.