Open-Source-R-Pipeline zur Reinigung und Verarbeitung von Krankenhaus-Episoden-Statistiken auf Patientenebene (HES) und verknüpfte ONS-Mortalitätsdaten mit dem Ziel, analyse-fähige Datensätze für ein definiertes Analyseprogramm zu erstellen.
Hospital Episode Statistics (HES) ist eine Datenbank mit Details aller hosptiellen Zulassungen, A & E -Besucher und ambulanten Termine in NHS -Krankenhäusern in England.
Bevor es für die Analyse verwendet werden kann, erfordert HES -Daten Reinigung, Qualitätskontrolle und Verarbeitung, um zusätzliche Variablen abzuleiten. Die komplexe Aufzeichnungsstruktur von HES, die große Anzahl von Variablen und die Größe der Datensätze machen dies zu einer herausfordernden Aufgabe sowohl aus analytischer als auch aus rechnerischer Sicht.
Der semi-automatische Workflow, den wir in diesem Repository-Prozesse entwickeln, werden die Daten konsequent und reproduzierbar, dass alle Verarbeitungsschritte dokumentiert werden, um sicherzustellen, dass jedes zugelassene Analyseprojekt auf denselben sauberen Daten basiert.
Wir verwenden HES -Daten, die mit den ONS -Mortalitätsdaten von 2008/09 bis zur jüngsten vierteljährlichen Veröffentlichung verknüpft sind. Unsere Datenanwendung wurde vom NHS Digital [Data Access Request Service Data Access Request Service (DARS) genehmigt.
Die Daten werden in der sicheren Datenumgebung der Health Foundation zugegriffen. Eine sichere Datenanalyse -Einrichtung (akkreditiert mit dem ISO27001 -Informationssicherheitsstandard und für das NHS Digital Data Security and Protection Toolkit anerkannt). Es werden keine Informationen verwendet, die direkt einen Patienten oder eine andere Person identifizieren könnten.
Der DOC -Ordner enthält Informationen zu:
Zusätzlich beschreiben Abschnitte unten
Da die in dieser Pipeline erstellten HES -Daten nicht öffentlich verfügbar sind, kann der Code nicht verwendet werden, um dieselben sauberen Daten und Datenbank zu replizieren. Der Code kann jedoch auf ähnlichen HES-Extrakten auf Patientenebene verwendet werden, um die Datensätze zur Analyse vorzubereiten. Weitere Informationen zur Funktionsweise der Pipeline finden Sie unten oder finden Sie im Prozessdokument.
Das Prozessdokument beschreibt das Gesamtdesign der Pipeline, listet die erforderlichen Eingänge und eine hohe Beschreibung der Schritte im Workflow auf.
Das Flowdiagramm zeigt, wie Benutzereingaben und Daten durch die verschiedenen Pipeline -Funktionen bewegen.
Die Pipeline kann in zwei Modi ausgeführt werden:
update = TRUE
). Es überlappen sich die Datenaktualisierungen im selben Jahr, sodass einige der alten Daten fallen gelassen und durch das neue Update ersetzt werden. ONS -Mortalitätsdaten werden mit jedem Datenaktualisierung vollständig aktualisiert.Im Build -Modus die Pipeline
Im Update -Modus die Pipeline
Die Architekturentscheidung (ADR) erfasst Architekturentscheidungs- und Designentscheidungen sowie ihren Kontext, die Begründung und ihre Konsequenzen. Darüber hinaus haben wir einige analytische Entscheidungen aufgezeichnet.
Bisher haben wir Entscheidungen über aufgezeichnet
Die HES-Pipeline wurde unter R Version 3.6.2 (2019-12-12)-"Dark and Stormy Night" gebaut.
Die folgenden R -Pakete, die an Cran erhältlich sind, müssen die HES -Pipeline ausführen:
Der Ort, an dem die Datenbank erstellt wird hinzugefügt werden).
Einige der Verarbeitungsschritte werden nicht im Speicher, sondern als SQLite -Abfragen durchgeführt. Dies schließt den doppelten Markierungsalgorithmus, die Erstellung von Zauber und die Erstellung von zusammenfassenden Statistiktabellen für die sauberen Daten ein. Abhängig von der Größe des Datensatzes erstellen diese Schritte große temporäre SQLite -Datenbanken (.ETIQLS -Dateien), die automatisch gelöscht werden, sobald die Abfrage ausgeführt wurde. Standardmäßig werden diese im R -Heimverzeichnis erstellt, das sich häufig auf einer Fahrt mit eingeschränkter Speicherkapazität befindet.
Wir haben festgestellt, dass die Ausführung des Pielins fehlschlägt, wenn nicht genügend temporärer Speicher verfügbar ist (Fehlermeldung 'Datenbank oder Festplatte ist voll'). Dies kann behoben werden, indem der Ort geändert wird, an dem temporäre SQLite -Datenbanken erstellt werden. Unter Windows wird der temporäre Speicherort von der Umgebungsvariablen "TMP" gesteuert. Wir haben empfohlen, eine Projekt-Ren-um-Datei auf Projektebene zu erstellen, um TMP mit ausreichender Speicherkapazität auf einen Ort einzustellen.
data_path
Pfad zum HES -Datenextrakt.
Die Pipeline kann eine der folgenden Datensätze auf Patientenebene verarbeiten: Er hat die Patientenversorgung, Hes-Unfälle und Notfälle, Heso-Ouptatient-Versorgung, HES-Intensivpflege und ONS-Sterblichkeitsunterlagen (einschließlich der Bridge-Datei mit HES) zugelassen. Es erfordert mindestens eines von ihnen. Die Rohdatendateien müssen sich im selben Ordner befinden.
database_path
-Pfad zu einem Ordner, in dem die SQLite -Datenbank erstellt wird.
data_set_codes
erwartete HES -Datensätze im Ordner data_path
.
Dies sollte einer oder einige von "APC", "AE", "CC" und "OP" sein. Diese Kennungen werden mit den Namen der RAW -Dateien übereinstimmen, die für RAW -HES -Dateien von NHS Digital der Fall sein sollten. ONS-Mortalitätsakten und ONS-HES-Brückendateien werden standardmäßig verarbeitet, wenn sie vorhanden sind. Die Dateinamen für Sterblichkeitsunterlagen und Brückendateien sollten "ONS" bzw. "BF" enthalten.
expected_headers_file
Pfad zu einer CSV -Datei mit den erwarteten Spaltennamen für jeden Datensatz.
Diese CSV -Datei enthält mindestens zwei Spalten mit dem Namen colnames
und dataset
, ähnlich wie diese Vorlage. Spaltenüberschriften in den Daten werden automatisch aktiviert, während die Daten eingelesen werden, sodass die Spaltennamen in der CSV -Datei alle Kappen sein sollten. Diese Informationen werden verwendet, um zu überprüfen, ob jede Rohdatendatei alle erwarteten Spalten enthält.
Die folgenden Argumente haben eine Standardeinstellung:
chunk_sizes
Anzahl der Zeilen pro Chunk für jeden Datensatz.
Jede Datendatei wird gelesen und in Stücken mit einer Reihe von Zeilen verarbeitet. Die Standardgröße beträgt 1 Million Zeilen pro Chunk, dies kann jedoch vom Benutzer geändert werden. Größere Stückgrößen, was zu einer geringeren Anzahl von Stücken pro Datei führt, verringern die Gesamtverarbeitungszeit. Dies liegt wahrscheinlich daran, dass fread()
für jeden Chunk in einer bestimmten Datei zunehmend länger zur angegebenen Zeilennummer wechselt, um die Daten zu lesen. Große Blockgrößen erhöhen jedoch auch die Zeit, um jeden Chunk im Speicher zu verarbeiten. Die optimale Chunk -Größenbilanzabgleichszeit mit der Lesezeit und ist abhängig vom System und dem Datensatz, da jeder Datensatz eine andere Anzahl von Variablen haben kann und daher unterschiedliche Mengen an Speicher pro Zeile benötigt. Es wird empfohlen, zuerst Tests auf einer kleineren Teilmenge von Daten auszuführen, da sehr große Stückgrößen zum Absturz von RSTUDIO führen können.
coerce
von Datentypen zwingen.
Standardmäßig erfasst die fread()
-Funktion, die zum Lesen der Daten verwendet wird, automatisch Spaltentypen.
Alternativ können Datentypen zu benutzerdefinierten Typen gezwungen werden, indem dieses Argument auf TRUE
festgelegt wird. Spaltentypen werden in der dritten Spalte, genannt type
, in der CSV -Datei mit den erwarteten Spaltennamen geliefert. Siehe diese Vorlage. Beachten Sie, dass SQLite keinen Datum -Datentyp hat. Datumsvariablen müssen als Zeichen gespeichert werden und sollten daher in der CSV -Datei als Zeichen aufgeführt werden.
IMD_2014_csv
, IMD_2019_csv
und CCG_xlsx
-Pfade zu Dateien, die Referenzdaten enthalten, zu verschmelzen.
Zusätzliche Referenzdaten, die derzeit mit jedem Datensatz verschmolzen werden können, umfassen den Index der Versionen mehrerer Entbehrungen (IMD), 2015 und/oder 2019 -Versionen sowie CCG -Identifikatoren. Die Dateien Pfade zu den Referenzdateien sollten als Argumente geliefert werden und werden am Patienten LSOA11 verbunden. Die CSV-Dateien, die LSOA11-zu-IMD-Zuordnungen enthalten (IMD) Decile ". Die Lookup -Dateien für IMD 2015 und IMD 2019 können von gov.uk heruntergeladen werden (Datei 7: Alle Ränge, Dezile und Punktzahlen für die Indizes der Entbehrung und Bevölkerungsbediener). Die Suchdatei für CCG-Kennung kann von NHS Digital heruntergeladen werden (Datei: x-Änderungen an CCG-DCO-STP-Zuordnungen im Laufe der Zeit).
update
den Switch -Pipeline -Modus.
Der Pipeline -Modus wird vom Build zu Aktualisierungsmodus umgestellt, indem dieses Argument auf TRUE
festgelegt wird.
duplicate
Markierungen doppelte Datensätze.
Zusätzliche Spalten werden im Datensatz von APC, A & E und OP erstellt, in denen ein Datensatz wahrscheinlich ein Duplikat ist oder nicht, wenn dieser Argumet auf TRUE
ist. Die Definitions- und Ableitungsregeln finden Sie in (abgeleitet_variables.md). Warnung: Dies wird die Laufzeit der Pipeline erheblich erhöhen.
comorbiditees
, die Komorbiditäten kennzeichnen.
Zusätzliche Spalten werden im APC -Datensatz erstellt, einschließlich Flags für individuelle Bedingungen sowie gewichtete und ungewichtete Charlson- und Elixhauser -Ergebnisse, wenn dieses Argument auf TRUE
festgelegt ist (siehe auch die Dokumente der R -Paket -Komorbidität). Darüber hinaus werden die Pipeline -Bedingungen im Zusammenhang mit Gebrechlichkeit und berechnet einen benutzerdefinierten Gebrechlichkeitsindex (siehe?). Warnung: Dies erhöht die Laufzeit der Pipeline erheblich.
Derzeit ist die Pipeline in einer RSTUDIO -Sitzung ausgelegt. Aus der R -Konsole kompilieren Sie den Code:
> source("pipeline.R")
Dann rufen Sie pipeline()
auf, die als Argumente einen Pfad zum Datenverzeichnis, einen Pfad zu einem Verzeichnis für eine SQLITE -Datenbank, einen Vektor von Datensatzcodes, einen Pfad zu einem CSV mit erwarteten Spalten, Eingangsdatensatzcodes und Datentypen, eine optionale Vektor der Anzahl der Zeilen, die jeweils pro Datensätze gelesen werden sollen, und bei Bedarf und ein Booleschen, um Zwang zu ermöglichen. Die Daten werden in die Datenbank verarbeitet und geschrieben. NB Dies ist ein langsamer Prozess und nimmt eine ganze Menge Speicher zum Ausführen ein.
Beispiellauf:
> 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)
Anleitungen zum Abfragen von SQLite -Datenbanken von R finden Sie beispielsweise die RSTUDIO -Tutorial -Datenbanken mit R.
Die Datenbank kann abgefragt werden:
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 )
Wenn Sie DBI verwenden, verwenden Sie die Funktion dbGetQuery()
. Vermeiden Sie die Verwendung von Funktionen, die die zugrunde liegende Datenbank wie dbExecute()
, dbSendQuery()
oder dbSendStatement()
ändern könnten.
Dieses Projekt ist unter der MIT -Lizenz lizenziert.