خط أنابيب R مفتوح المصدر لتنظيف ومعالجة إحصائيات حلقة المستشفى على مستوى المريض (HES) وبيانات الوفيات المرتبطة بـ ONS ، بهدف إنتاج مجموعات بيانات جاهزة للتحليل لبرنامج محدد للتحليلات.
إحصائيات حلقة المستشفيات (HES) هي قاعدة بيانات تحتوي على تفاصيل عن جميع عمليات القبول الحصرية والحضور A&E والمواعيد الخارجية في مستشفيات NHS في إنجلترا.
قبل أن يتم استخدامه للتحليل ، تتطلب بيانات HES التنظيف ومراقبة الجودة والمعالجة لاشتقاق متغيرات إضافية. إن بنية السجل المعقدة لـ HES ، والعدد الكبير من المتغيرات وحجم مجموعات البيانات يجعل هذه المهمة الصعبة من النقطة التحليلية والحسابية.
إن سير العمل شبه الآلي الذي نقوم بتطويره في عمليات المستودع هذا HES باستمرار واستنساخ ، أن جميع خطوات المعالجة موثقة ، مصممة لضمان أن كل مشاريع تحليل معتمدة تعتمد على نفس البيانات النظيفة.
نستخدم بيانات HES المرتبطة ببيانات الوفيات ONS من 2008/2009 إلى أحدث إصدار ربع سنوي. تمت الموافقة على تطبيق البيانات لدينا من قبل خدمة طلب خدمة الوصول إلى البيانات (DARS).
سيتم الوصول إلى البيانات في بيئة البيانات الآمنة لمؤسسة الصحة ؛ منشأة آمنة لتحليل البيانات (معتمدة بمعيار أمان المعلومات ISO27001 ، ومعترف به لمجموعة أدوات وحماية البيانات الرقمية NHS). لن يتم استخدام أي معلومات يمكن تحديد مريض أو فرد آخر مباشرة.
يحتوي مجلد DOC على معلومات عن:
بالإضافة إلى ذلك ، تصف الأقسام أدناه
نظرًا لأن بيانات HES المحضرة في خط الأنابيب هذا غير متوفر للجمهور ، لا يمكن استخدام الكود لتكرار نفس البيانات النظيفة وقاعدة البيانات. ومع ذلك ، يمكن استخدام الرمز على مستخلصات HES على مستوى المريض مماثلة لإعداد مجموعات البيانات للتحليل. لمزيد من المعلومات التفصيلية حول كيفية عمل خط الأنابيب ، انظر أدناه أو الرجوع إلى مستند العملية.
تصف وثيقة العملية التصميم العام لخط الأنابيب ، وتسرد المدخلات اللازمة ووصفًا عالي المستوى للخطوات في سير العمل.
يوضح المخطط الانسيابي كيفية انتقال إدخال المستخدم والبيانات من خلال وظائف خط الأنابيب المختلفة.
يمكن لخط الأنابيب تشغيل في وضعين:
update = TRUE
). تتداخل تحديثات بيانات HES خلال العام نفسه ، لذلك سيتم إسقاط بعض البيانات القديمة واستبدالها بالتحديث الجديد. يتم تحديث بيانات الوفيات ONS بالكامل مع كل تحديث للبيانات.في وضع البناء ، خط الأنابيب
في وضع التحديث ، خط الأنابيب
يلتقط سجل القرار في الهندسة المعمارية (ADR) خيارات القرار المعماري وتصميمها ، إلى جانب سياقها ، والأساس المنطقي والعواقب. بالإضافة إلى ذلك ، سجلنا بعض القرارات التحليلية.
حتى الآن ، سجلنا قرارات بشأن
تم بناء خط أنابيب HES بموجب الإصدار R 3.6.2 (2019-12-12)-"Night و Stormy Night".
مطلوب حزم R التالية ، المتوفرة على Cran ، لتشغيل خط أنابيب HES:
يحتاج الموقع الذي يتم إنشاؤه حيث يتم إنشاء قاعدة البيانات إلى مساحة تخزين كافية متوفرة ، مما يعادل تقريبًا حجم الملف المدمج لمستخلص بيانات RAW HES بالإضافة يضاف).
لا يتم تنفيذ بعض خطوات المعالجة في الذاكرة ولكن كاستفسارات SQLite. ويشمل ذلك خوارزمية الإبلاغ المكررة ، وإنشاء الإملائي ، وإنشاء جداول الإحصاءات الموجزة على البيانات النظيفة. اعتمادًا على حجم مجموعة البيانات ، تنشئ هذه الخطوات قواعد بيانات SQLite مؤقتة كبيرة (ملفات .etiqls) ، والتي يتم حذفها تلقائيًا بمجرد تنفيذ الاستعلام. بشكل افتراضي ، يتم إنشاء هذه في دليل R home ، والذي غالبًا ما يقع على محرك أقراص مع سعة تخزين مقيدة.
لقد وجدنا أن تنفيذ Pieline يفشل عندما لا يتوفر كمية كافية من التخزين المؤقت (رسالة خطأ "قاعدة البيانات أو القرص ممتلئ"). يمكن إصلاح ذلك عن طريق تغيير الموقع حيث يتم إنشاء قواعد بيانات SQLite المؤقتة. على Windows ، يتم التحكم في موقع التخزين المؤقت بواسطة المتغير البيئي "TMP". أوصينا بإنشاء ملف .renviron على مستوى المشروع لتعيين TMP على موقع بسعة تخزين كافية.
مسار data_path
إلى مستخلص بيانات HES.
يمكن لخط الأنابيب معالجة أي من مجموعات البيانات التالية على مستوى المريض: تم قبول رعاية المرضى ، وحوادث ومراجعات ، ورعاية ouptatient ، ورعاية هسوس الحرجة وسجلات الوفيات (بما في ذلك ملف الجسر الذي يربطه بـ HES). يتطلب واحد منهم على الأقل. يجب أن تكون ملفات البيانات RAW موجودة في نفس المجلد.
مسار database_path
إلى مجلد حيث سيتم بناء قاعدة بيانات SQLite.
data_set_codes
متوقعة مجموعات بيانات HES في مجلد data_path
.
يجب أن يكون هذا واحدًا أو العديد من "APC" و "AE" و "CC" و "OP". تتم مطابقة هذه المعرفات مع أسماء الملفات RAW ، والتي يجب أن تكون كذلك بالنسبة لملفات RAW HES المستلمة من NHS Digital. تتم معالجة سجلات الوفيات وملفات الجسر ONS-HES بشكل افتراضي إذا كانت موجودة. يجب أن تحتوي أسماء الملفات الخاصة بسجلات الوفيات وملفات الجسر على "ONS" و "BF" ، على التوالي.
expected_headers_file
مسار إلى ملف CSV مع أسماء الأعمدة المتوقعة لكل مجموعة بيانات.
يحتوي ملف CSV هذا على عمودين على الأقل ، يدعى colnames
و dataset
، على غرار هذا القالب. يتم رسملة رؤوس الأعمدة في البيانات تلقائيًا أثناء قراءة البيانات ، لذلك يجب أن تكون أسماء الأعمدة الموجودة في ملف CSV جميعها. سيتم استخدام هذه المعلومات للتحقق مما إذا كان كل ملف بيانات RAW يحتوي على جميع الأعمدة المتوقعة.
الوسيطات التالية لها إعداد افتراضي:
chunk_sizes
عدد الصفوف لكل قطعة لكل مجموعة بيانات.
تتم قراءة ومعالجة كل ملف بيانات في قطع من عدد من الصفوف. الحجم الافتراضي هو 1 مليون سطر لكل قطعة ولكن يمكن تعديل هذا من قبل المستخدم. أحجام قطعة أكبر ، مما يؤدي إلى عدد أقل من القطع لكل ملف ، تقلل من وقت المعالجة الكلي. ربما يرجع ذلك إلى أن كل جزء في ملف معين ، يحتاج fread()
بشكل تدريجي للانتقال إلى رقم الصف المحدد لبدء قراءة البيانات. ومع ذلك ، فإن أحجام الجزء الكبيرة تزيد أيضًا من الوقت الذي يستغرقه معالجة كل قطعة في الذاكرة. توازن حجم القطع الأمثل مع وقت القراءة ويعتمد على النظام ومجموعة البيانات ، حيث يمكن أن يكون لكل مجموعة بيانات عدد مختلف من المتغيرات ، وبالتالي يتطلب كميات مختلفة من الذاكرة لكل صف. يوصى بإجراء اختبارات على مجموعة فرعية أصغر من البيانات أولاً ، حيث يمكن لأحجام القطع الكبيرة جدًا أن تتسبب في تعطل Rstudio.
coerce
أنواع البيانات الإكراه.
بشكل افتراضي ، فإن وظيفة fread()
المستخدمة للقراءة في البيانات ستكتشف تلقائيًا أنواع الأعمدة.
بدلاً من ذلك ، يمكن إجبار أنواع البيانات على الأنواع المعرفة من قبل المستخدم عن طريق تعيين هذه الوسيطة إلى TRUE
. يتم توفير أنواع الأعمدة int العمود الثالث ، يسمى type
، في ملف CSV مع أسماء الأعمدة المتوقعة ، انظر هذا القالب. لاحظ أن SQLite ليس لديه نوع بيانات التاريخ. يجب تخزين متغيرات التاريخ كحرف ، وبالتالي يجب إدراجها كأحرف في ملف CSV.
IMD_2014_csv
و IMD_2019_csv
و CCG_xlsx
إلى الملفات التي تحتوي على بيانات مرجعية يتم دمجها.
تتضمن بيانات مرجعية إضافية يمكن دمجها لكل سجل حاليًا فهرس الحرمان المتعدد (IMD) و 2015 و/أو 2019 ومعرفات CCG. يجب توفير مسارات الملفات إلى الملفات المرجعية كوسائط وسيتم ربطها على المريض LSOA11. تحتاج ملفات CSV التي تحتوي على تعيينات LSOA11-to-IMD إلى الحصول على اسم عمود يبدأ بـ "LSOA Code" ، واسم عمود يحتوي (IMD) عشب ". يمكن تنزيل ملفات البحث الخاصة بـ IMD 2015 و IMD 2019 من Gov.uk (الملف 7: جميع الرتب ، ديلز وعشرات لمؤشرات الحرمان ، وقوائد السكان). يمكن تنزيل ملف البحث لمعرفات CCG من NHS Digital (ملف: X-التغييرات على تعيينات CCG-DCO-STP بمرور الوقت).
update
وضع خط أنابيب التبديل.
يتم تبديل وضع خط الأنابيب من البناء إلى وضع التحديث عن طريق تعيين هذه الوسيطة إلى TRUE
.
duplicate
السجلات المكررة المكررة.
سيتم إنشاء الأعمدة الإضافية في مجموعة بيانات APC و A&E و OP التي تشير إلى ما إذا كان من المحتمل أن يكون السجل نسخة مكررة أم لا إذا تم تعيين هذا Argumet على TRUE
. يمكن العثور على قواعد التعريف والاشتقاق في (derived_variables.md). تحذير: هذا سيزيد بشكل كبير من وقت تشغيل خط الأنابيب.
comorbiditees
المصاحبة للأمراض المصاحبة.
سيتم إنشاء الأعمدة الإضافية في مجموعة بيانات APC ، بما في ذلك أعلام الظروف الفردية ودرجات تشارلسون و Elixhauser المرجحة وغير المرجحة وغير المرجحة إذا تم تعيين هذه الوسيطة على TRUE
(انظر أيضًا إلى Documentaion of Railbidity Railation). بالإضافة إلى ذلك ، فإن شروط أعلام خطوط الأنابيب المتعلقة بالضعف وتحسب مؤشر الضعف المخصص (انظر؟). تحذير: هذا سيزيد بشكل كبير من وقت تشغيل خط الأنابيب.
تم تصميم خط الأنابيب حاليًا للتشغيل في جلسة RSTUDIO. من وحدة التحكم R تجمع الكود:
> source("pipeline.R")
ثم اتصل على pipeline()
، وتوفير مسار إلى دليل البيانات ، ومسارًا إلى دليل لقاعدة بيانات SQLite ، ومتجه من رموز مجموعة البيانات ، ومسار إلى CSV مع أعمدة متوقعة ، ورموز مجموعة البيانات المتوقعة ، وأنواع البيانات الاختيارية ، واختيار. متجه لعدد الصفوف المراد قراءتها في وقت لكل مجموعات بيانات ، وإذا لزم الأمر ، والطراز المنطقي لتمكين الإكراه. ستتم معالجة البيانات وكتابتها إلى قاعدة البيانات. NB هذه عملية بطيئة وتتناول قدرًا لا بأس به من الذاكرة لتشغيله.
مثال التشغيل:
> pipeline(data_path = "/home/user/raw-data/", database_path = "/home/user/database-dir/", data_set_codes = c("APC", "AE", "CC", "OP"), chunk_sizes = c(2000000, 5000000, 2000000, 3000000), expected_headers_file = "/home/user/expected_columns.csv", IMD_15_csv = "IMD_2015_LSOA.csv", IMD_19_csv = "IMD_2019_LSOA.csv", CCG_xlsx = "xchanges-to-ccg-dco-stp-mappings-over-time.xlsx", coerce = TRUE, update = FALSE, duplicates = FALSE, comorbidities = FALSE)
للحصول على أدلة حول كيفية الاستعلام عن قواعد بيانات SQLite من R ، على سبيل المثال ، راجع قواعد بيانات RSTUDIO التعليمية باستخدام R.
يمكن الاستعلام عن قاعدة البيانات:
library( tidyverse )
library( dbplyr )
library ( DBI )
con <- dbConnect( RSQLite :: SQLite(), paste0( database_path , " HES_db.sqlite " ))
# List available tables
dbListTables( con )
# List available variables in the A&E table
dbListFields( con , " AE " )
# Option 1: Query using dbplyr
# Select table
AE <- tbl( con , ' AE ' )
# Look at the first 5 rows
AE % > %
head() % > %
collect()
# Option 2: Query using SQL
dbGetQuery( con , ' SELECT * FROM AE LIMIT 5 ' )
dbDisconnect( con )
إذا كنت تستخدم DBI ، فاستخدم دالة dbGetQuery()
. تجنب استخدام الوظائف التي يمكن أن تعدل قاعدة البيانات الأساسية ، مثل dbExecute()
أو dbSendQuery()
أو dbSendStatement()
.
هذا المشروع مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.