Pipa Sumber Terbuka untuk membersihkan dan memproses statistik episode rumah sakit tingkat pasien (HES) dan menghubungkan data kematian ONS, dengan tujuan untuk menghasilkan kumpulan data siap analisis untuk program analisis yang ditentukan.
Statistik Episode Rumah Sakit (HES) adalah database yang berisi rincian semua penerimaan hosptial, kehadiran A&E dan janji rawat jalan di rumah sakit NHS di Inggris.
Sebelum dapat digunakan untuk analisis, data HES memerlukan pembersihan, kontrol kualitas dan pemrosesan untuk memperoleh variabel tambahan. Struktur catatan kompleks HES, sejumlah besar variabel dan ukuran set data menjadikan ini tugas yang menantang baik dari sudut pandang analitik dan komputasi.
Alur kerja semi-otomatis yang kami kembangkan dalam proses repositori ini HES Data secara konsisten dan direproduksi, bahwa semua langkah pemrosesan didokumentasikan, dirancang untuk memastikan bahwa setiap proyek analisis yang disetujui didasarkan pada data bersih yang sama.
Kami menggunakan data HES yang terhubung ke data kematian ONS dari 2008/09 hingga rilis triwulanan terbaru. Aplikasi data kami telah disetujui oleh NHS Digital [Layanan Permintaan Data Akses Data Permintaan Data (DARS).
Data akan diakses di lingkungan data yang aman Yayasan Kesehatan; Fasilitas analisis data yang aman (diakreditasi dengan standar keamanan informasi ISO27001, dan diakui untuk toolkit keamanan dan perlindungan data digital NHS). Tidak ada informasi yang dapat secara langsung mengidentifikasi pasien atau individu lain yang akan digunakan.
Folder DOC berisi informasi tentang:
Selain itu, bagian di bawah ini menjelaskan
Karena data HES yang disiapkan dalam pipa ini tidak tersedia untuk umum, kode tersebut tidak dapat digunakan untuk mereplikasi data dan basis data bersih yang sama. Namun, kode tersebut dapat digunakan pada ekstrak HES tingkat pasien yang serupa untuk menyiapkan kumpulan data untuk analisis. Untuk informasi lebih rinci tentang cara kerja pipa yang berfungsi lihat di bawah atau lihat dokumen proses.
Dokumen proses menjelaskan keseluruhan desain pipa, mencantumkan input yang diperlukan dan deskripsi tingkat tinggi dari langkah-langkah dalam alur kerja.
Flowchart menunjukkan bagaimana input pengguna dan data bergerak melalui fungsi pipa yang berbeda.
Pipa dapat dijalankan dalam dua mode:
update = TRUE
). Pembaruan data HES dalam tahun yang sama tumpang tindih, sehingga beberapa data lama akan dijatuhkan dan diganti dengan pembaruan baru. Data kematian ONS sepenuhnya disegarkan dengan setiap pembaruan data.Dalam mode build , pipa
Dalam mode pembaruan , pipa
Catatan Keputusan Arsitektur (ADR) menangkap keputusan arsitektur dan pilihan desain, bersama dengan konteks, alasan, dan konsekuensi mereka. Selain itu, kami mencatat beberapa keputusan analitis.
Sejauh ini, kami telah mencatat keputusan tentang
HES Pipeline dibangun di bawah R versi 3.6.2 (2019-12-12)-"Dark and Stormy Night".
Paket R berikut, yang tersedia di CRAN, diharuskan menjalankan Pipeline HES:
Lokasi di mana database dibuat perlu memiliki ruang penyimpanan yang cukup, kira -kira setara dengan ukuran file gabungan dari ekstrak data HES mentah ditambah 2 x ukuran file dari set data APC (sebagai tabel untuk mantra rawat inap dan mantra rawat inap kontinu akan akan ditambahkan).
Beberapa langkah pemrosesan tidak dilakukan dalam memori tetapi sebagai permintaan SQLite. Ini termasuk algoritma penandaan duplikat, penciptaan mantra dan tabel creationg ringkasan statistik pada data bersih. Bergantung pada ukuran dataset, langkah -langkah ini membuat database SQLite sementara yang besar (file .etiQLS), yang secara otomatis dihapus setelah kueri dijalankan. Secara default, ini dibuat di direktori r home, yang sering terletak di drive dengan kapasitas penyimpanan terbatas.
Kami telah menemukan bahwa eksekusi pieline gagal ketika penyimpanan sementara yang tidak cukup tersedia (database atau disk pesan kesalahan penuh '). Ini dapat diperbaiki dengan mengubah lokasi di mana database SQLite sementara dibuat. Pada Windows, lokasi penyimpanan sementara dikendalikan oleh variabel lingkungan "TMP". Kami merekomendasikan untuk membuat file .verviron tingkat proyek untuk mengatur TMP ke lokasi dengan kapasitas penyimpanan yang cukup.
data_path
Path ke Ekstrak Data HES.
Pipa dapat memproses salah satu dari kumpulan data tingkat pasien berikut: dia menerima perawatan pasien, dia kecelakaan & keadaan darurat, perawatan oeptatient, dia perawatan kritis dan catatan kematian ONS (termasuk file jembatan yang menautkannya ke HES). Itu membutuhkan setidaknya satu dari mereka. File data mentah harus ditempatkan di folder yang sama.
Jalur database_path
ke folder di mana database SQLite akan dibangun.
data_set_codes
diharapkan dataset HES di folder data_path
.
Ini harus satu atau beberapa dari "APC", "AE", "CC" dan "OP". Pengidentifikasi ini dicocokkan dengan nama -nama file mentah, yang seharusnya menjadi kasus untuk file HES RAW yang diterima dari NHS Digital. Catatan kematian ONS dan file jembatan ONS-HES diproses secara default jika ada. Nama file untuk catatan kematian dan file jembatan harus berisi "ons" dan "bf", masing -masing.
Path expected_headers_file
ke file CSV dengan nama kolom yang diharapkan untuk setiap set data.
File CSV ini memiliki setidaknya dua kolom, bernama colnames
dan dataset
, mirip dengan templat ini. Header kolom dalam data dikapitalisasi secara otomatis saat data dibaca, sehingga nama kolom dalam file CSV harus semua topi. Informasi ini akan digunakan untuk memeriksa apakah setiap file data mentah berisi semua kolom yang diharapkan.
Argumen berikut memiliki pengaturan default:
chunk_sizes
Jumlah baris per chunk untuk setiap set data.
Setiap file data dibaca dan diproses dalam potongan -potongan menantang sejumlah baris. Ukuran default adalah 1 juta baris per potongan tetapi ini dapat dimodifikasi oleh pengguna. Ukuran chunk yang lebih besar, menghasilkan sejumlah kecil potongan per file, mengurangi keseluruhan waktu pemrosesan. Ini mungkin karena untuk setiap potongan dalam file tertentu, fread()
membutuhkan lebih lama untuk pindah ke nomor baris yang ditentukan untuk mulai membaca data. Namun, ukuran chunk besar juga meningkatkan waktu untuk memproses setiap potongan dalam memori. Ukuran chunk yang optimal menyeimbangkan waktu pemrosesan dengan waktu membaca dan tergantung pada sistem dan dataset, karena setiap dataset dapat memiliki jumlah variabel yang berbeda, dan karenanya membutuhkan jumlah memori per baris yang berbeda. Dianjurkan untuk menjalankan tes pada subset data yang lebih kecil terlebih dahulu, karena ukuran chunk yang sangat besar dapat menyebabkan rStudio macet.
coerce
POCECING TYPE DATA.
Secara default, fungsi fread()
yang digunakan untuk membaca dalam data akan secara otomatis mendeteksi jenis kolom.
Atau, tipe data dapat dipaksa untuk tipe yang ditentukan pengguna dengan mengatur argumen ini ke TRUE
. Jenis kolom disuplai int kolom ketiga, yang disebut type
, dalam file CSV dengan nama kolom yang diharapkan, lihat templat ini. Perhatikan bahwa SQLite tidak memiliki tipe data tanggal. Variabel tanggal perlu disimpan sebagai karakter dan karenanya harus terdaftar sebagai karakter dalam file CSV.
IMD_2014_csv
, IMD_2019_csv
dan jalur CCG_xlsx
ke file yang berisi data referensi untuk digabungkan.
Data referensi tambahan yang dapat digabungkan ke setiap catatan saat ini termasuk indeks perampasan ganda (IMD), 2015 dan/atau 2019 versi, dan pengidentifikasi CCG. Jalur file ke file referensi harus disuplai sebagai argumen dan akan bergabung dengan pasien LSOA11. File CSV yang berisi pemetaan LSOA11-to-IMD perlu memiliki nama kolom yang dimulai dengan "kode LSOA", nama kolom yang berisi "peringkat indeks perampasan ganda (IMD) dan nama kolom yang berisi" indeks kekurangan ganda kekurangan ganda kekurangan (IMD) Desile ". File pencarian untuk IMD 2015 dan IMD 2019 dapat diunduh dari Gov.uk (file 7: semua peringkat, desil dan skor untuk indeks perampasan, dan penyebut populasi). File pencarian untuk pengidentifikasi CCG dapat diunduh dari NHS Digital (File: X-Perubahan pada pemetaan CCG-DCO-STP dari waktu ke waktu).
update
mode pipa sakelar.
Mode pipa dialihkan dari mode build ke update dengan mengatur argumen ini ke TRUE
.
Rekaman duplicate
duplikat duplikat.
Kolom tambahan akan dibuat di APC, A&E dan OP Dataset yang menginsitis apakah catatan cenderung menjadi duplikat jika argumet ini diatur ke TRUE
. Definisi dan aturan derivasi dapat ditemukan di (Demived_variables.md). PERINGATAN: Ini akan secara signifikan meningkatkan waktu berjalan dari pipa.
comorbiditees
menandai komorbiditas.
Kolom tambahan akan dibuat dalam dataset APC, termasuk bendera untuk kondisi individual dan skor Charlson dan ElixhaUser yang tertimbang dan tidak tertimbang jika argumen ini diatur ke TRUE
(juga lihat dokumentasi komorbiditas paket R). Selain itu, kondisi bendera pipa yang terkait dengan kelemahan dan menghitung indeks kelemahan khusus (lihat?) Peringatan: Ini akan secara signifikan meningkatkan waktu berjalan dari pipa.
Saat ini pipa dirancang untuk dijalankan dalam sesi RStudio. Dari konsol R mengkompilasi kode:
> source("pipeline.R")
Kemudian hubungi pipeline()
, memberikan sebagai argumen jalur ke direktori data, jalur ke direktori untuk database SQLite, vektor kode dataset, jalur ke CSV dengan kolom yang diharapkan, memasukkan kode data dan tipe data, opsional Vektor jumlah baris yang akan dibaca pada waktu per set data, dan, jika diperlukan, dan boolean untuk memungkinkan paksaan. Data akan diproses dan ditulis ke database. NB Ini adalah proses yang lambat dan mengambil cukup banyak memori untuk dijalankan.
Contoh Jalankan:
> 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)
Untuk pemandu tentang cara menanyakan database SQLite dari R, misalnya lihat database tutorial RStudio menggunakan R.
Basis data dapat ditanya:
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 )
Jika Anda menggunakan DBI, gunakan fungsi dbGetQuery()
. Hindari menggunakan fungsi yang dapat memodifikasi database yang mendasarinya, seperti dbExecute()
, dbSendQuery()
atau dbSendStatement()
.
Proyek ini dilisensikan di bawah lisensi MIT.