開源R管道清潔和處理患者級醫院發作統計(HES)並鏈接了ONS死亡率數據,目的是生成準備分析的數據集,以進行定義的分析程序。
醫院情節統計(HES)是一個數據庫,其中包含在英格蘭NHS醫院的所有招待會,急診室和門診任命的詳細信息。
在將其用於分析之前,HES數據需要清潔,質量控制和處理才能得出其他變量。從分析和計算的角度來看,HES的複雜記錄結構,大量變量和數據集的大小使這是一個具有挑戰性的任務。
我們在此存儲庫過程中開發的半自動化工作流程始終且可重複地將所有處理步驟記錄在HES數據中,旨在確保每個批准的分析項目基於相同的清潔數據。
從2008/09到最近發布的季度發布,我們使用與ONS死亡率數據鏈接的HES數據。我們的數據應用程序已由NHS Digital [數據訪問請求服務訪問請求服務(DARS)批准。
數據將在衛生基金會的安全數據環境中訪問;安全的數據分析設施(已獲得ISO27001信息安全標準的認可,並以NHS數字數據安全和保護工具包認可)。不會使用直接識別患者或其他人的信息。
DOC文件夾包含有關:
此外,下面的部分描述了
由於本管道中準備的HES數據尚未公開,因此代碼不能用於復制相同的清潔數據和數據庫。但是,該代碼可以在類似的患者級HES提取物上使用,以準備數據集進行分析。有關管道如何工作的更多詳細信息,請參見下面或參考過程文檔。
該過程文檔描述了管道的整體設計,列出了工作流程中的步驟的必要輸入和高級描述。
流程圖顯示了用戶輸入和數據如何通過不同管道功能移動。
管道可以通過兩種模式運行:
update = TRUE
)。 HES數據更新在同一年重疊,因此一些舊數據將被刪除並替換為新更新。每個數據更新都會完全刷新ONS死亡率數據。在構建模式下,管道
在更新模式下,管道
體系結構決策記錄(ADR)捕獲了建築決策和設計選擇,以及他們的背景,理由和後果。此外,我們記錄了一些分析決策。
到目前為止,我們已經記錄了有關的決定
HES管道是根據R 3.6.2版(2019-12-12)建造的 - “黑暗而暴風雨的夜晚”。
運行hES管道需要以下r套件:
創建數據庫的位置需要具有足夠的存儲空間,大致相當於RAW HES數據提取物的組合文件大小以及APC數據集的2 x文件大小(作為住院法術的表和連續的住院咒語的表格添加)。
某些處理步驟不是在內存中執行的,而是作為SQLite查詢。這包括重複的標記算法,咒語創建和清潔數據上的摘要統計表的創建。根據數據集的大小,這些步驟會創建大型臨時SQLITE數據庫(.ETIQLS文件),一旦執行查詢,它們就會自動刪除。默認情況下,這些是在R主目錄中創建的,該目錄通常位於具有限制存儲容量的驅動器上。
我們發現,當沒有足夠的臨時存儲可用時,Pieline的執行失敗(錯誤消息“數據庫或磁盤已滿”)。可以通過更改創建臨時SQLite數據庫的位置來解決這。在Windows上,臨時存儲位置由環境變量“ TMP”控制。我們建議創建一個項目級別的.renviron文件,以將TMP設置為具有足夠存儲容量的位置。
data_path
路徑到HES數據提取。
該管道可以處理以下任何患者級數據集:HE承認患者護理,事故和緊急情況,HES OUPTATITER CARA,HES CARIVE CARE和ONS死亡率記錄(包括將其鏈接到HES的橋樑文件)。它需要其中至少一個。原始數據文件必須位於同一文件夾中。
database_path
路徑通往將構建SQLite數據庫的文件夾。
data_set_codes
預期hes hes數據data_path
數據集中的數據集。
這應該是“ APC”,“ AE”,“ CC”和“ OP”的一個或幾個。這些標識符與原始文件的名稱匹配,這對於從NHS Digital收到的RAW HES文件應該是這種情況。默認情況下,默認情況下處理了ONS死亡率記錄和ONS-HES橋樑文件。死亡率記錄和橋樑文件的文件名應分別包含“ ONS”和“ BF”。
CSV文件的expected_headers_file
路徑,每個數據集都有預期列名。
該CSV文件至少有兩個列,名為colnames
和dataset
,類似於此模板。讀取數據時,數據中的列標題會自動化,因此CSV文件中的列名應為所有CAPS。此信息將用於檢查每個原始數據文件是否包含所有預期列。
以下參數具有默認設置:
chunk_sizes
為每個數據集的每個塊的行數。
每個數據文件都會在許多行的碎片中讀取和處理。默認尺寸為每塊的100萬行,但用戶可以修改。較大的塊尺寸,每個文件的塊數量較少,減少了整體處理時間。這可能是因為對於給定文件中的每個塊, fread()
需要逐漸更長的時間才能移動到指定的行號才能開始讀取數據。但是,大塊尺寸也增加了處理記憶中每個塊的時間。最佳塊大小平衡處理時間與閱讀時間的處理時間,並且取決於系統和數據集,因為每個數據集都可以具有不同數量的變量,因此每行需要不同量的內存。建議首先在較小的數據子集上進行測試,因為很大的塊尺寸可能會導致Rstudio崩潰。
coerce
脅迫數據類型。
默認情況下,用於在數據中讀取的fread()
函數將自動檢測列類型。
另外,可以通過將此參數設置為TRUE
將數據類型脅迫到用戶定義的類型。在CSV文件中提供了帶有預期列名稱的CSV文件中的第三列,稱為type
,請參見此模板。請注意,SQLite沒有日期數據類型。日期變量需要存儲為字符,因此應將其列為CSV文件中的字符。
IMD_2014_csv
, IMD_2019_csv
和CCG_xlsx
通路通向包含要合併的參考數據的文件。
當前可以合併到每個記錄的其他參考數據包括多重剝奪的索引(IMD),2015年和/或2019年版本以及CCG標識符。應提供參考文件的文件路徑作為參數,並將在患者LSOA11上連接。包含LSOA11至IMD映射的CSV文件需要具有一個以“ LSOA代碼”開頭的列名,該名稱包含“多剝奪(IMD)等級的索引”和包含“多剝奪索引”的列名稱的列名。 (IMD )十分列。可以從gov.uk下載IMD 2015和IMD 2019的查找文件(文件7:剝奪指數的所有等級,十分位和分數以及人口分母)。可以從NHS Digital下載CCG標識符的查找文件(File:X-隨著時間的推移更改為CCG-DCO-STP映射)。
update
開關管道模式。
通過將此參數設置為TRUE
,將管道模式從構建模式切換到更新模式。
duplicate
標記重複記錄。
將在APC,A&E和OP數據集中創建其他列,該數據集指示是否將此argumet設置為TRUE
,是否有可能重複記錄。可以在(derived_variables.md)中找到定義和派生規則。警告:這將大大增加管道的運行時間。
comorbiditees
的合併症。
如果將此參數設置為TRUE
,則將在APC數據集中創建其他列,包括針對單個條件的標誌,並加權和未加權的Charlson和Elixhauser分數(另請參見R package colorbity的文檔)。此外,管道標誌條件與脆弱的條件併計算自定義脆弱指數(請參閱?)。警告:這將大大增加管道的運行時間。
目前,該管道旨在在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)
對於如何從R查詢SQLITE數據庫的指南,例如,請參見使用R的RSTUDIO教程數據庫。
可以查詢數據庫:
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()
。
該項目已根據MIT許可獲得許可。