데이터 제품
통계학 전공자와 데이터 공유 방법
학습 목표
- 통계전문가와 데이터 공유 방법을 살펴본다.
- 데이터 공유 방법과 효과에 대해서 이해한다.
- 구글 번역기와 번역품질을 비교한다. (2016.11.21. 기준)
구글에서 구글번역기 기능을 한층 강화했다는 기사가 나와 직접 번역해 봤습니다. 1 직접 영어원문과 구글 번역본, 그리고 사람이 한땀한땀 번역한 번역의 차이를 확인해 보기시 바랍니다.
1. 통계학 전공자와 데이터 공유 방법 2
통계학자 또는 데이터 과학자와 데이터를 공유해야하는 모든 사람들을 위한 안내서입니다. 저자가 염두에 두고 있는 대상 잠재 고객은 다음과 같습니다.
- 데이터를 분석해야 하는데 통계 분석가 또는 데이터 과학자를 필요로하는 공동 작업자.
- 컨설팅 서비스를 원하는 다양한 분야의 학생 또는 박사후 과정 연구원.
- 데이터셋을 교정/정제/랭글링하는 작업을 갖는 주니어 통계학과 학생.
본 지침서의 목표는 데이터 수집에서 데이터 분석으로의 전환과정에서 지연의 원인과 저지르기 쉬운 함정을 회피하는데 있어 데이터를 공유하는 가장 좋은 방법에 대한 지침을 제공하는 것입니다. Leek group은 다수 공동 작업자와 작업을 수행하였고, Leek 그룹에 도착했을 때 데이터의 상태가 가장 큰 변동성 원인이라는 것을 파악했다. 다른 통계 학자들과의 대화를 통해서 거의 보편적으로 사실이라는 것을 파악되었따.
저자가 갖는 주관적 생각은 통계학자는 데이터를 입수한 상태에 관계없이, 데이터를 처리할 수 있어야 한다는 것이다. 원 데이터를 살펴보고, 데이터 처리 파이프라인 단계를 이해하고, 숨겨진 변동 원인을 데이터 분석에 녹여낼 수 있어야 합니다. 다른 한편으로, 다수 데이터 자료형에 대해 데이터 처리 단계는 잘 문서화 되어 있고, 표준화도 잘 되어 있다. 따라서 통계전공자를 호출하기 전에, 원시 데이터에서 직접 분석 가능한 형태로 데이터를 변환하는 작업을 수월하게 진행할 수 있다. 그렇게 되면, 통계 전문가의 데이터 처리 시간을 단축하기 때문에, 전체적인 데이터 처리 시간을 크게 단축 할 수 있습니다. 왜냐하면, 먼저 모든 데이터 전처리 단계를 통계학자가 다시 수행할 필요가 없기 때문이다.
2. 통계 전문가에게 전달해야 할 사항
가장 효율적이고 시기적절한 데이터 분석을 용이하게 수행하도록, 통계전문가에게 전달해야하는 정보는 다음과 같습니다.
- 원데이터(Raw data)
- 깔끔한 Tidy 데이터셋
- 깔끔한 데이터셋에 기재된 각 변수와 그 값을 설명하는 코드일람표(코드북, codebook).
- 1에서 2,3까지 수행했던 명시적이고 꼼꼼한 기술서
전달할 데이터 패키지의 각 부분을 살펴보자.
2.1. 원데이터
손에 넣을 수 있는 가장 원시 형식의 데이터를 전달항목에 포함시키는 것이 중요합니다. 이렇게 하면 데이터 출처(data provenance)는 작업흐름 전체적으로 유지관리가 가능하다. 다음에 원데이터 형식에 대한 사례가 나와 있다:
- 컴퓨터가 뱉어낸 기묘한 이진(binary) 파일.
- 계약을 맺은 회사가 통계전문가에게 보낸 워크시트 10개가 포함된 제대로 형태가 잡히지 않은 엑셀 파일.
- Twitter API를 통해 스크랩하여 얻은 복잡한 JSON 데이터.
- 현미경을 통해 채집하여 수작업으로 입력한 숫자로 가득찬 데이터.
다음과 같은 경우 원데이터가 올바른 형태라고 판단할 수 있다:
- 데이터에 소프트웨어를 돌린 흔적적이 없다.
- 데이터 값을 전혀 변경하지 않았다.
- 데이터셋에서 어떤 데이터도 제거하지 않았다.
- 어떤 방식으로든 데이터를 요약정리하지 않았다.
원데이터를 수정한 경우, 더 이상 원시 데이터 형태는 아니다. 변경된 데이터를 원시 데이터로 간주하고 나서, 보고서 작업을 수행하게 되면 분석 프로세스의 속도를 늦추게 되는 매우 흔한 방법이 된다. 왜냐하면, 분석가는 시간을 들여서 왜 원시 데이터가 기묘한지도 파악해야 하는 법의학 연구(forensic study)도 수행해야 되기 때문이다. (또한, 새로운 데이터가 도착하면 어떻게 될지 상상해 보십시오.)
2.2. 깔끔한 데이터셋
깔끔한 데이터의 일반적인 원칙은 Hadley Wickham의 Tidy Data 논문과 Tidy Data 동영상에 잘 정리되어 있다.
논문과 비디오에 R을 사용한, 깔끔한 데이터를 잘 설명하고 있지만, 동일한 원칙을 더 일반적으로 적용하는 것도 가능하다:
- 측정하는 각 변수는 하나의 열에 있어야 한다.
- 해당 변수의 관측점은 서로 다른 행에 있어야 한다.
- 변수의 “유형”마다 테이블 하나에 있어야 한다.
- 여러 테이블이 있는 경우, 테이블을 조인(join) 또는 병합할 수 있는 열이 포함되어야 한다.
상기 규칙들이 변경이 허락되지 않는 엄중한 규칙이지만, 데이터셋을 훨씬 더 쉽게 다루는 방법도 많다. 첫 번째는 전체 행 이름을 포함하도록 각 데이터 테이블/스프레드시트의 맨 위에 추가로 행을 포함하는 것이다. 따라서 환자 진단을 위해 나이를 측정한다면 다른 사람이 이해하기 어려울 수 있는 ’ADx’또는 다른 약어 대신에, AgeAtDiagnosis
라는 명칭을 갖는 칼럼을 맨 위에 추가한다.
다음에 유전체학에서 어떻게 작동하는지 예가 나와있다. 20명을 대상으로 RNA-염기서열(RNA-sequencing)을 포함한 유전자 발현 측정값을 수집했다고 가정하자. 환자에 대한 임상정보 뿐만 아니라 인구통계학적 정보를 수집했는데, 나이, 치료 및 진단 정보가 포함되어 있고, 임상/인구통계가 포함된 표/스프레드시트 하나로 구성되어 있다. 데이터는 4 개의 열(환자 ID, 나이, 치료, 진단)과 21 개의 행 (변수 이름이 있는 행, 그리고 모든 환자에 대해 정보가 행별로 저장). 또한, 스프레드시트가 하나에 요약정리된 게놈 데이터가 있다. 일반적으로 이러한 유형의 데이터는 엑손(exon) 당 카운트 수의 레벨로 요약된다. 100,000 개의 엑손이 있다고 가정하면, 표/스프레드시트에 21 개의 행(유전자 이름에 대해 하나, 각 환자별 행 정보)과 100,001 개의 열 (환자 id를 갖는 열 하나, 각 데이터 유형마다 하나의 행).
공동작업자와 엑셀로 공유하게 되면, 테이블 당 하나의 엑셀 파일이 깔끔한 데이터 형태가 된다. 엑셀 파일은 다수 워크쉬트로 구성되거나, 데이터에 어떤 매크로 프로그램도 적용되면 안되고, 어떤 칼럼/셀도 강조서식 적용되면 안된다. 다른 방법으로 CSV 파일 또는 TAB 구분자 파일로 텍스트 형태로 데이터를 공유한다. (CSV 파일을 엑셀로 읽어들일 경우 흔히 날짜와 시간 변수를 처리함에 있어 재현성에 문제가 생길 수도 있다.)
2.3. 코드일람표(code book)
거의 모든 데이터셋에 대해, 계산된 측정값은 스프레드쉬트에 슬며시 껴넣은 것보다 훨씬더 상세히 기술되어야 된다. 코드일람포에 이런 유형의 정보가 담겨진다. 최소한 다음 내용은 포함되야 한다:
- 깔끔한 데이터에 포함되지 않은 데이터셋 변수(단위 포함!)에 대한 정보
- 선정하여 고른 요약 사항에 대한 정보
- 사용한 실험연구설계에 대한 정보
앞선 유전체 예제에서, 데이터 분석가는 임상/인구통계학적 변수별로 측정단위가 무엇인지 알고 싶어한다. (년으로 표현된 나이, 명칭/용량에 대한 치료정보, 진단수준과 이질적 성질). 데이터분석가는 게놈 데이터를 요약(UCSC/Ensembl 등)하는데 사용된 엑손을 어떻게 골랐는지도 알고 싶어한다. 또한, 데이터 수집/연구설계를 어떻게 했는지에 대한 다른 정보도 알고 싶을 것이다. 예를 들어, 데이터에 포함된 환자가 병원에 들어선 첫 20 명의 환자인지? 혹은, 나이같은 특정 요인을 고려하여 신중히 선택된 환자인지? 혹은 치료에 대해 무작위로 선택된 환자인지?
이런 목적으로 일반적인 데이터 형식은 워드파일이 된다. “조사설계(study design)”라고 불리는 문단이 별도 절로 구분되어 있어서 데이터 수집방법에 대한 상세한 설명이 담겨있다. “코드일람표(code book)”라는 문단이 별도 절로 구분되어 있어, 각 변수와 변수 단위에 대한 정보가 기술되어 있다.
2.4. 변수 코딩 방법
변수를 스프레드시트에 넣을 때, 자료형(data type)에 따라 마주하게 되는 몇가지 자료형이 있다.
- 연속형
- 순서형
- 명목형(범주형)
- 결측값
- 중도절단(Censored)
연속형 변수는 소수점을 갖을 수 있는 정량적으로 측정되는 것이다. 예제로 kg 으로 측정되는 체중같은 사례를 들 수 있다. 순서형 데이터(Ordial data)는 정해진 작은 수준(<100)을 갖지만 서열이 있는 데이터다. 예로 설문조사 응답을 들 수 있다; 나쁨, 보통, 좋음.
명목형(범주형) 데이터는 범주가 다수 있지만, 서열은 없는 데이터다. 예로 성별을 들 수 있다; 남성 혹은 여성. 이런 코딩이 매력적인 이유는 그 자체로 문서가 되기 때문이다. 결측 데이터는 관측되지 않은 데이터로 메커니즘도 알지 못한다. 결측값은 NA
로 코딩한다. 중도절단 데이터는 특정 수준에서 결측 메커니즘을 알고 있는 데이터다. 흔한 예제로 탐지한계를 벗어난 측정값이나 추적조사에서 빠진 환자를 들 수 있다. 데이터가 없는 경우 NA
로 코딩한다. 하지만, 깔끔한 데이터에 “VariableNameCensored” 칼럼을 새로 추가해서, 중도절단이 있는 경우 TRUE
, 그렇지 않는 경우 FALSE
로 표기한다. 코드일람표에 이러한 값이 누락된 이유를 설명해야 한다. 데이터 일부가 결측된 이유를 알고 있다면 데이터 분석가에게 알려주는 것이 정말 중요하다. 결측값을 대체(impute)/분장(makeup)/버림 등의 행위는 절대로 해서는 안된다.
일반적으로, 범주형 혹은 순서형 변수를 숫자로 코딩하지 않도록 한다. 깔끔한 데이터에 성별에 대한 값을 입력할 때, “남성” 또는 “여성”으로 한다. 혹은 영어로 “male”, “female”로 코딩한다. 데이터셋에 순서형 값은 1, 2, 3 이 아닌 “poor”, “fair”, “good” 혹은, “나쁨”, “보통”, “좋음”으로 코딩한다. 이렇게 하면 효과의 방향에 대한 잠재적인 혼란을 피하고, 코딩 오류를 식별하는 데 도움이 된다.
항상 텍스트를 사용하여 관찰에 대한 모든 정보를 인코딩하십시오. 예를 들어 엑셀에 데이터를 저장하고, 관찰에 대한 정보를 나타내기 위해 색이 지정된 텍스트 또는 셀 배경 형식을 사용하는 경우 (“실험 1에 관측된 변수 항목은 빨간색”), 텍스트로 내보내기 할 때 이런 색상이 활용된 정보는 파일로 전달되지 않는다(손실된다!). 모든 데이터는 내보낼 수 있는 실제 텍스트로 인코딩되어야 한다.
2.5. 명령어 목록/스크립트
전에 들어 봤을지 모르겠지만, 재현성은 컴퓨팅 과학에서 대단히 중요하다(reproducibility is a big deal in computational science). 즉, 논문을 제출할 때, 논문검토자와 전세계 사람들이 원데이터에서 최종 결과까지 분석결과를 정확하게 복제할 수 있어야 된다. 효율적으로 작업하려고 하는 경우, 데이터가 까끔하게 정비되었다고 간주되기 전에 요약단계와 데이터 분석 단계를 수행할 수도 있다.
요약작업을 수행할 때 가장 이상적인 작업은 컴퓨터 스크립트(R
,파이썬
또는 다른 언어)를 작성하여, 원데이터를 입력으로 받아, 출력으로 공유하는 깔끔한 데이터를 생성시키는 것이다. 스크립트를 수차례 실행해 보고, 코드가 동일한 출력을 생성하는지 확인한다.
많은 경우, 데이터를 수집한 사람이 통계전문가와 협업속도를 높이고자 하는 동인을 갖게 된다. 하지만, 스크립팅 언어로 코딩을 하는 방법은 모른 경우가 있다. 이런 경우, 통계전문가에게 제공해야 되는 정보는 의사코드(pseudocode)라는 것이 된다. 다음과 같이 생겼다:
- 1 단계 - 원시 파일을 가져와서, 매개변수 a = 1, b = 2, c = 3 을 넘겨 소프트웨어 버전 3.1.2에서 요약함수(summary function)를 실행한다.
- 2 단계 - 각 표본에 대해 소프트웨어를 별도로 실행한다.
- 3 단계 - 각 표본에 대해
outputfile.out
의 3 열을 가져오고, 이는 출력 데이터 세트에서 행에 해당된다.
소프트웨어를 사용하는데 어떤 운영체제(맥/윈도우/리눅스)를 활용했는지, 동일한 결과를 얻었다는 확신을 갖기까지 한번 이상 시도를 했는지도 정보에 포함시킨다. 이상적으로, 동료학생/연구소 동료가 작업을 수행하고, 자신이 수행한 것과 동일한 출력 파일을 얻을 수 있는지 확인과정을 거친다.
3. 분석가로부터 기대하는 것.
제대로 정리된 데이터셋을 넘겨 주면 통계전문가의 작업량이 크게 줄어든다. 그렇게 되면, 훨씬 더 일찍 작업결과를 회신줄 것이다. 하지만 신중한 통계전문가는 전달받은 작업과정을 점검하고, 수행한 작업단계들에 대해 질문하고, 전달받은 것과 동일한 결과를 얻을 수 있는지 확인하고, 최소한 임의 표본추출하여 작업을 돌려본다.
그리고 나서, 통계전문가로부터 기대해야 하는 것은 다음과 같다:
- 각 분석작업(명령문뿐만 아니라)을 수행하는 분석 스크립트
- 분석을 실행하는데 사용된 바로 그 컴퓨터 코드
- 코드가 생성시킨 모든 출력파일/그래프
작업결과의 재현성과 정확도를 보증하는데 보충자료로 사용될 정보가 된다. 분석 각 단계는 명확히 설명되어 있어야 하고, 데이터 분석전문가가 수행한 작업을 이해하지 못할 때는 질문을 해서 풀어놔야 된다. 통계적 분석을 이해하는 것은 통계전문가 뿐만 아니라 과학자 모두의 책무이기도 하다. 통계전문가가 작성한 코드 없이 똑같은 분석을 수행할 수 없을지도 모르지만, 연구실 동료/수석 연구원에게 통계전문가가 수행한 각 단계별 이유를 설명할 수 있어야 된다.
기여하신 분
- Jeff Leek - 초안 작성
- L. Collado-Torres - 오탈자 감수 및 링크 추가
- Nick Reich - 텍스트로 데이터를 저장하는 방식에 대해 조언
- Nick Horton - 부드러운 문맥이 되도록 제안.