Open-Source R 파이프 라인은 정의 된 분석 프로그램을위한 분석 준비 데이터 세트를 생성하기 위해 환자 수준의 병원 에피소드 통계 (HES) 및 연결된 ONS 사망률 데이터를 링크하기위한 오픈 소스 R 파이프 라인.
병원 에피소드 통계 (HES)는 영국의 NHS 병원에서 모든 hosptial 입학, A & E 출석 및 외래 환자 약속에 대한 세부 정보가 포함 된 데이터베이스입니다.
분석에 사용하기 전에 HES 데이터는 추가 변수를 도출하기 위해 청소, 품질 관리 및 처리가 필요합니다. HES의 복잡한 레코드 구조, 많은 변수 및 데이터 세트의 크기는 분석 및 계산 관점에서 어려운 작업이됩니다.
이 저장소 프로세스에서 개발중인 반자동 워크 플로우는 모든 처리 단계가 문서화되어 각 승인 된 분석 프로젝트가 동일한 청정 데이터를 기반으로하는지 확인하도록 설계되도록 데이터를 일관되고 재현 가능하게합니다.
우리는 2008/09에서 가장 최근의 분기 별 릴리스까지 ONS 사망률 데이터에 연결된 HES 데이터를 사용합니다. 당사의 데이터 응용 프로그램은 NHS Digital [Data Access Request Service Data Access Request Service (DARS)의 승인을 받았습니다.
데이터는 Health Foundation의 안전한 데이터 환경에서 액세스 할 것입니다. 안전한 데이터 분석 시설 (ISO27001 정보 보안 표준으로 공인되어 NHS 디지털 데이터 보안 및 보호 툴킷으로 인정). 환자 또는 다른 개인을 직접 식별 할 수있는 정보는 사용되지 않습니다.
DOC 폴더에는 다음에 대한 정보가 포함되어 있습니다.
또한 아래 섹션에서는 설명합니다
이 파이프 라인에서 준비된 HES 데이터는 공개적으로 사용할 수 없으므로 코드를 사용하여 동일한 청정 데이터 및 데이터베이스를 복제 할 수 없습니다. 그러나이 코드는 유사한 환자 수준의 HES 추출물에서 분석을 위해 데이터 세트를 준비 할 수 있습니다. 파이프 라인의 작동 방식에 대한 자세한 정보는 아래를 참조하거나 프로세스 문서를 참조하십시오.
프로세스 문서는 파이프 라인의 전체 설계를 설명하고 필요한 입력과 워크 플로의 단계에 대한 높은 수준의 설명을 나열합니다.
흐름도는 사용자 입력 및 데이터가 다른 파이프 라인 기능을 통해 어떻게 이동하는지 보여줍니다.
파이프 라인은 두 가지 모드로 실행할 수 있습니다.
update = TRUE
인 경우). 같은 해 내에 데이터 업데이트가 겹치므로 이전 데이터 중 일부가 삭제되어 새 업데이트로 대체됩니다. ONS 사망률 데이터는 각 데이터 업데이트마다 완전히 새로 고침됩니다.빌드 모드 에서 파이프 라인
업데이트 모드 에서는 파이프 라인입니다
ADR (Architecture Decision Record)은 아키텍처 결정 및 디자인 선택과 상황, 이론적 근거 및 결과를 포착합니다. 또한 몇 가지 분석 결정을 기록했습니다.
지금까지 우리는에 관한 결정을 기록했습니다
HES 파이프 라인은 R 버전 3.6.2 (2019-12-12)-"어둡고 폭풍우가 치는 밤"에 따라 구축되었습니다.
CRAN에서 사용할 수있는 다음 R 패키지는 HES 파이프 라인을 실행해야합니다.
데이터베이스가 생성 된 위치는 Raw HES 데이터 추출물의 결합 파일 크기와 APC 데이터 세트의 2 x 파일 크기와 거의 동일하게 사용 가능한 충분한 저장 공간을 가질 필요가 있어야합니다 (입원 환자 주문 및 연속 입원 환자 주문의 테이블로 추가).
처리 단계 중 일부는 메모리에서 수행되지 않고 SQLITE 쿼리로 수행됩니다. 여기에는 중복 플래그 알고리즘, 철자 생성 및 청정 데이터에 대한 요약 통계 테이블의 생성이 포함됩니다. 데이터 세트의 크기에 따라 이러한 단계는 쿼리가 실행되면 자동으로 삭제되는 큰 임시 SQLITE 데이터베이스 (.etiqls 파일)를 생성합니다. 기본적으로 이들은 R 홈 디렉토리에 생성되며, 종종 저장 용량이 제한된 드라이브에 위치합니다.
임시 스토리지가 충분하지 않은 경우 Pieline의 실행이 실패한다는 것을 발견했습니다 (오류 메시지 '데이터베이스 또는 디스크가 가득 찼습니다'). 임시 SQLITE 데이터베이스가 생성되는 위치를 변경하여 고정 될 수 있습니다. Windows에서 임시 저장소 위치는 환경 변수 "TMP"에 의해 제어됩니다. TMP를 충분한 저장 용량을 가진 위치로 설정하기 위해 프로젝트 수준 .Renviron 파일을 만들 것을 권장했습니다.
HES 데이터 추출물에 대한 data_path
경로.
파이프 라인은 다음과 같은 환자 수준 데이터 세트 중 하나를 처리 할 수 있습니다. 그는 환자 치료, 사고 및 비상 사태, ouptatient Care, HES Critical Care 및 ONS 사망률 기록 (HES와 연결하는 교량 파일 포함)을 인정했습니다. 그들 중 적어도 하나가 필요합니다. 원시 데이터 파일은 동일한 폴더에 위치해야합니다.
database_path
SQLITE 데이터베이스가 구축 될 폴더로의 경로.
data_set_codes
data_path
폴더의 HES 데이터 세트를 기대합니다.
이것은 "APC", "AE", "CC"및 "OP"중 하나 또는 몇 개 여야합니다. 이 식별자는 원시 파일의 이름과 일치하며 NHS Digital에서받은 RAW HES 파일의 경우입니다. ONS 사망률 기록 및 ONS-HES 브리지 파일은 기본적으로 현재 존재하는 경우 처리됩니다. 사망률 기록 및 브리지 파일의 파일 이름에는 각각 "ONS"및 "BF"가 포함되어야합니다.
expected_headers_file
각 데이터 세트에 대해 예상 열 이름이있는 CSV 파일로 경로.
이 CSV 파일에는이 템플릿과 유사한 colnames
와 dataset
이라는 두 개의 열이 있습니다. 데이터의 열 헤더는 데이터를 읽는 동안 자동 자본화되므로 CSV 파일의 열 이름은 모든 캡이어야합니다. 이 정보는 각 원시 데이터 파일에 모든 예상 열이 포함되어 있는지 확인하는 데 사용됩니다.
다음 인수는 기본 설정이 있습니다.
chunk_sizes
각 데이터 세트에 대해 청크 당 행 수.
각 데이터 파일은 다수의 행을 무시한 덩어리로 읽고 처리합니다. 기본 크기는 청크 당 백만 줄이지만 사용자가 수정할 수 있습니다. 청크 크기가 커서 파일 당 청크 수가 적 으면 전체 처리 시간이 줄어 듭니다. 주어진 파일의 각 청크에 대해 fread()
지정된 행 번호로 이동하여 데이터를 읽기 시작하는 데 점점 더 오래 필요하기 때문일 수 있습니다. 그러나 큰 청크 크기는 메모리에서 각 청크를 처리하는 데 시간이 증가합니다. 최적의 청크 크기는 읽기 시간과의 처리 시간을 균형을 유지하며 각 데이터 세트마다 다른 수의 변수를 가질 수 있으므로 행당 다른 양의 메모리가 필요하므로 시스템 및 데이터 세트에 따라 다릅니다. 매우 큰 청크 크기로 인해 Rstudio가 충돌 할 수 있으므로 먼저 더 작은 데이터의 데이터 세트에서 테스트를 실행하는 것이 좋습니다.
coerce
데이터 유형.
기본적으로 데이터에서 읽는 데 사용되는 fread()
함수는 자동으로 열 유형을 감지합니다.
또는이 인수를 TRUE
로 설정하여 데이터 유형을 사용자 정의 유형으로 강요 할 수 있습니다. 열 유형은 예상 열 이름이있는 CSV 파일에서 type
이라고하는 세 번째 열에 제공됩니다.이 템플릿을 참조하십시오. SQLITE에는 날짜 데이터 유형이 없습니다. 날짜 변수는 문자로 저장되어야하므로 CSV 파일에 문자로 표시되어야합니다.
IMD_2014_csv
, IMD_2019_csv
및 CCG_xlsx
병합을 포함하는 파일에 대한 CCG_XLSX 경로.
각 레코드에 병합 될 수있는 추가 참조 데이터는 다중 박탈 (IMD), 2015 및/또는 2019 버전의 인덱스 및 CCG 식별자를 포함합니다. 참조 파일에 대한 파일 경로는 인수로 제공되어야하며 환자 LSOA11에 연결됩니다. lsoa11-to-imd mappings를 포함하는 CSV 파일에는 "lsoa code"로 시작하는 열 이름, "다중 박탈 (IMD) 순위의 인덱스 (IMD) 순위"및 "다중 박탈의 색인을 포함하는 열 이름을 포함하는 열 이름이 있어야합니다. (IMD) Decile ". IMD 2015 및 IMD 2019의 조회 파일은 Gov.uk에서 다운로드 할 수 있습니다 (파일 7 : 박탈 지수 및 인구 분모에 대한 모든 순위, 데시 및 점수). CCG 식별자의 조회 파일은 NHS Digital에서 다운로드 할 수 있습니다 (파일 : X- 시간이 지남에 따라 CCG-DCO-STP 매핑 변경).
스위치 파이프 라인 모드 update
.
파이프 라인 모드는이 인수를 TRUE
로 설정하여 빌드에서 업데이트 모드로 전환됩니다.
duplicate
플래그를 중복 레코드.
이 Argumet이 TRUE
로 설정된 경우 레코드가 복제 될 수 있는지 여부를 나타내는 APC, A & E 및 OP 데이터 세트에서 추가 열이 생성됩니다. 정의 및 파생 규칙은 (devived_variables.md)에서 찾을 수 있습니다. 경고 : 파이프 라인의 실행 시간이 크게 증가합니다.
comorbiditees
동반 질환을 표시합니다.
이 인수가 TRUE
로 설정된 경우 개별 조건 및 가중 및 비가 중 샬슨 및 엘릭 하우저 점수를 포함하여 추가 열이 APC 데이터 세트에서 생성됩니다 (또한 R 패키지 동반 질환의 문서를 참조하십시오). 또한 파이프 라인은 연약함과 관련된 조건을 플래그하고 사용자 정의 연약한 지수를 계산합니다 (참조) 경고 : 파이프 라인의 실행 시간이 크게 증가합니다.
현재 파이프 라인은 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 라이센스에 따라 라이센스가 부여됩니다.