ݺߣ

ݺߣShare a Scribd company logo
탐색적으로 큰 데이터 분석하기
장혜식
기초과학연구원 RNA연구단
배경 이미지 위치:
http://4.bp.blogspot.com/-bB4jFkQ_jBk/T70ipuyFn6I/AAAAAAAAAOE/cnbxI03ve0Y/s1600/
snake_pile_2crop+by+Tracy+Langkilde.jpg
Electronic Health Records
(EHR)
배경 이미지 위치:
http://www.trbimg.com/img-552d5b6b/turbine/la-sci-sn-medical-records-breaches-20150414-001/800/800x450
from Wikimedia Commons
from Wikimedia Commons
병리학적 측정 결과
새로운 증상
증상의 변화
약 처방
상세한 내원 이력
약 부작용
알레르기 이력
환자 본인 측정 결과
유전자 검사 결과
가족력
인구학적 정보
하버드 의대 Isaac Kohane 그룹
그룹 단체 사진
호흡기
Jane Q. Doe
ED Profile
June,1992 – Feb,1999
Reis et al., BMJ 2009
from Isaac Kohane’s slides
감염
치과
안과
정신과
비뇨기과
소화기
이비인후과
피부과
통증의학과
응급의학과
(부상)
응급의학과
(폭행)
6
가정폭력
domestic violence
배경 이미지 위치:
https://garyullah.files.wordpress.com/2015/01/man-with-clenched-fist-an-014.jpg
병원A
데이터 수집
병원B
데이터 수집
병원C
데이터 수집
시스템A
데이터 변환
시스템A
데이터 변환
시스템B
데이터 변환
개인별 데이터 통합
방문횟수 계산 진단명 종류 조사
병원A
데이터 수집
병원B
데이터 수집
병원C
데이터 수집
시스템A
데이터 변환
시스템A
데이터 변환
시스템B
데이터 변환
개인별 데이터 통합
방문횟수 계산 진단명 종류 조사
특이 환자 샘플링
오프라인 조사 및
가설 수립
병원A
데이터 수집
병원B
데이터 수집
병원C
데이터 수집
시스템A
데이터 변환
시스템A
데이터 변환
시스템B
데이터 변환
개인별 데이터 통합
방문횟수 계산 진단명 종류 조사
특이 환자 샘플링
오프라인 조사 및
가설 수립
모델 적용 및 예측
성능 검증 특이 환자 샘플링
오프라인 조사
특이 지표 탐색
병원A
데이터 수집
병원B
데이터 수집
병원C
데이터 수집
시스템A
데이터 변환
시스템A
데이터 변환
시스템B
데이터 변환
개인별 데이터 통합
방문횟수 계산 진단명 종류 조사
특이 환자 샘플링
오프라인 조사 및
가설 수립
모델 적용 및 예측
성능 검증 특이 환자 샘플링
오프라인 조사
특이 지표 탐색
병원D
데이터 수집
시스템C
데이터 변환
Exploratory Data Analysis
탐색적 데이터 분석
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
언제 어떤 데이터가 추가될 지 모른다.
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
프레임워크가 유연하고 성숙해야 함
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
프레임워크가 유연하고 성숙해야 함
데이터가 작지는 않다.
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
프레임워크가 유연하고 성숙해야 함
데이터가 작지는 않다.
적당히 빨라야 함
Jupyter Notebook
이미지 위치:
https://attachment.namu.wiki/%EC
%B9%B4%ED%8F%AC%EC
%A0%84__mcvslotte.png
이미지 위치:
https://attachment.namu.wiki/%EC
%B9%B4%ED%8F%AC%EC
%A0%84__mcvslotte.png
인생
인생
Jupyter 쓰기 전
😂😑😖😥😨
인생
Jupyter와 함께
😁😄😀😋😍
Jupyter 쓰기 전
😂😑😖😥😨
인생
pandas와 함께
😁😄😀😋😍
pandas 쓰기 전
😂😑😖😥😨
Snakemake
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
make가 좋은 것
make가 좋은 것
- 아주 간결한 문법
make가 좋은 것
- 아주 간결한 문법
- 가볍다
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
- 스크립팅이 매우 제한적임
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
- 스크립팅이 매우 제한적임
- 파일이름에 와일드카드 및 패턴 못 씀
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
- 스크립팅이 매우 제한적임
- 파일이름에 와일드카드 및 패턴 못 씀
- 부족한 병렬화, 클러스터 지원
make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
- 스크립팅이 매우 제한적임
- 파일이름에 와일드카드 및 패턴 못 씀
- 부족한 병렬화, 클러스터 지원
- 현대과학의 혜택을 받지 못함
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
map
sample: 503
all
map
sample: 501
index
map
sample: 502
map
sample: 500
make와 마찬가지로
make와 마찬가지로
- 의존성이 없는 작업은 병렬로 실행됨
make와 마찬가지로
- 의존성이 없는 작업은 병렬로 실행됨
- 이미 있는 새 파일은 무시하고 지나감
make와 마찬가지로
- 의존성이 없는 작업은 병렬로 실행됨
- 이미 있는 새 파일은 무시하고 지나감
# 예비 실행
$ snakemake -n
make와 마찬가지로
- 의존성이 없는 작업은 병렬로 실행됨
- 이미 있는 새 파일은 무시하고 지나감
# 예비 실행
$ snakemake -n
# 최대 8코어까지 사용해서 병렬로 돌림
$ snakemake --cores 8
make와 마찬가지로
- 의존성이 없는 작업은 병렬로 실행됨
- 이미 있는 새 파일은 무시하고 지나감
# 예비 실행
$ snakemake -n
# 최대 8코어까지 사용해서 병렬로 돌림
$ snakemake --cores 8
# 클러스터에서 최대 20개 작업까지 큐에 넣고 돌림
$ snakemake --jobs 20 --cluster “qsub -pe threaded {threads}”
make와 마찬가지로
- 의존성이 없는 작업은 병렬로 실행됨
- 이미 있는 새 파일은 무시하고 지나감
# 예비 실행
$ snakemake -n
# 최대 8코어까지 사용해서 병렬로 돌림
$ snakemake --cores 8
# 클러스터에서 최대 20개 작업까지 큐에 넣고 돌림
$ snakemake --jobs 20 --cluster “qsub -pe threaded {threads}”
# DRMAA를 지원하는 클러스터에 넣고 돌림
$ snakemake --jobs 20 --drmaa
File-driven programming?
“보일러판이 필요 없는”
프로그램 내장형
병렬화 이벤트 루프
snakemake
GUI
resource quota
task priority
code/data versions
audit trailconfigurations
HTML reporting
R embedding
benchmarking
modularization
version tracking
텍스트 파일 병렬처리
d1 d2 area population density lat lon
경기도 가평군 843.04 5854069.43917251850446 37.8315403 127.5098827
서울특별시 강남구 39.5 569499 14417.696202531646 37.5172363 127.0473248
서울특별시 강동구 24.6 489655 19904.674796747968 37.5301251 127.123762
강원도 강릉시 1040.07 219067 210.62716932514158 37.751853 128.8760574
서울특별시 강북구 23.6 343912 14572.542372881355 37.6396099 127.0256575
부산광역시 강서구 179.05 63753356.06255235967603 35.2122157 128.9805666
서울특별시 강서구 41.4 579196 13990.241545893721 37.5509786 126.8495382
전라남도 강진군 495.98 4142883.5275615952256 34.6420774 126.767261
인천광역시 강화군 411.267597164.38959143968873 37.7467263 126.4878731
탭으로 구분된 텍스트 (tsv)
C행정구역별(읍면동),행정구역별(읍면동),C연령별,연령별,시점,인구(내국인),남자,여자,성비
'00,전국,'000,합계,2010,47990761,23840896,24149865,98.7
'00,전국,'005,0~4세,2010,2219084,1142220,1076864,106.1
'00,전국,'005001, 0세,2010,437452,225242,212210,106.1
'00,전국,'005002, 1세,2010,426807,219728,207079,106.1
'00,전국,'005003, 2세,2010,456798,234291,222507,105.3
'00,전국,'005004, 3세,2010,467426,240482,226944,106.0
'00,전국,'005005, 4세,2010,430601,222477,208124,106.9
'00,전국,'010,5~9세,2010,2394663,1243294,1151369,108.0
'00,전국,'010001, 5세,2010,423102,218356,204746,106.6
쉼표로 구분된 텍스트 (csv)
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
프레임워크가 유연하고 성숙해야 함
데이터가 작지는 않다.
적당히 빨라야 함
hyeshik@adenine /g/h/h/o/t/h/sequences> ls -al *.txt.gz
-rw-r--r-- 1 hyeshik 251455559343 Sep 16 2014 ts00.txt.gz
-rw-r--r-- 1 hyeshik 243815859961 Sep 16 2014 ts01.txt.gz
-rw-r--r-- 1 hyeshik 333505252185 Sep 16 2014 ts02.txt.gz
-rw-r--r-- 1 hyeshik 251077215174 Sep 16 2014 ts03.txt.gz
-rw-r--r-- 1 hyeshik 344801600522 Sep 16 2014 ts04.txt.gz
-rw-r--r-- 1 hyeshik 263449133340 Sep 16 2014 ts05.txt.gz
hyeshik@adenine /g/h/h/o/t/h/sequences> ls -al *.txt.gz
-rw-r--r-- 1 hyeshik 251455559343 Sep 16 2014 ts00.txt.gz
-rw-r--r-- 1 hyeshik 243815859961 Sep 16 2014 ts01.txt.gz
-rw-r--r-- 1 hyeshik 333505252185 Sep 16 2014 ts02.txt.gz
-rw-r--r-- 1 hyeshik 251077215174 Sep 16 2014 ts03.txt.gz
-rw-r--r-- 1 hyeshik 344801600522 Sep 16 2014 ts04.txt.gz
-rw-r--r-- 1 hyeshik 263449133340 Sep 16 2014 ts05.txt.gz
큰 텍스트 파일들을
“엄청 쉽게” 병렬처리 하려면?
hyeshik@adenine /g/h/h/o/t/h/sequences> ls -al *.txt.gz
-rw-r--r-- 1 hyeshik 251455559343 Sep 16 2014 ts00.txt.gz
-rw-r--r-- 1 hyeshik 243815859961 Sep 16 2014 ts01.txt.gz
-rw-r--r-- 1 hyeshik 333505252185 Sep 16 2014 ts02.txt.gz
-rw-r--r-- 1 hyeshik 251077215174 Sep 16 2014 ts03.txt.gz
-rw-r--r-- 1 hyeshik 344801600522 Sep 16 2014 ts04.txt.gz
-rw-r--r-- 1 hyeshik 263449133340 Sep 16 2014 ts05.txt.gz
큰 텍스트 파일들을
“엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
큰 텍스트 파일들을
“엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
큰 텍스트 파일들을
“엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
압축을 안 한다.
큰 텍스트 파일들을
“엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
압축을 안 한다.
파일을 쪼갠다.
큰 텍스트 파일들을
“엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
압축을 안 한다.
파일을 쪼갠다.
tabix를 쓴다.
gzip
압축 파일
gzip
압축 파일
gz block 1
gz block 2
gz block 3
gz block 4
gz block 5
gz block 6
gz block 7
gz block 8
gz block 9
gz block 10
bgzf
gzip
압축 파일
gz block 1
gz block 2
gz block 3
gz block 4
gz block 5
gz block 6
gz block 7
gz block 8
gz block 9
gz block 10
bgzf
100%
하위호환
tabix 쓰기
# 인덱스를 만든다.
$ tabix -0 -s1 -b2 ts02.txt.gz
tabix 쓰기
# 인덱스를 만든다.
$ tabix -0 -s1 -b2 ts02.txt.gz
# 염색체 목록을 본다. (염색체=레벨1 인덱스)
$ tabix ——list-chroms ts02.txt.gz
tabix 쓰기
# 인덱스를 만든다.
$ tabix -0 -s1 -b2 ts02.txt.gz
# 염색체 목록을 본다. (염색체=레벨1 인덱스)
$ tabix ——list-chroms ts02.txt.gz
# 염색체 1101 데이터 전체를 출력한다.
$ tabix ts02.txt.gz 1101
tabix 쓰기
# 인덱스를 만든다.
$ tabix -0 -s1 -b2 ts02.txt.gz
# 염색체 목록을 본다. (염색체=레벨1 인덱스)
$ tabix ——list-chroms ts02.txt.gz
# 염색체 1101 데이터 전체를 출력한다.
$ tabix ts02.txt.gz 1101
# 염색체 1101의 10000부터 10100 자리까지 출력한다.
$ tabix ts02.txt.gz 1101:10000-10100
tabix 쓰기
tabix 한계점
tabix 한계점
초기 인덱싱은 병렬화되지 않는다.
tabix 한계점
반드시 2레벨 인덱스로 정렬돼 있어야 한다.
초기 인덱싱은 병렬화되지 않는다.
tabix 한계점
반드시 2레벨 인덱스로 정렬돼 있어야 한다.
레벨 1 인덱스는 범위지정이 안 된다.
초기 인덱싱은 병렬화되지 않는다.
파이썬이 답답하면?
Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
프레임워크가 유연하고 성숙해야 함
데이터가 작지는 않다.
적당히 빨라야 함
Dynamic
programming
Monte Carlo
simulation
Permutation tests
배경 이미지 위치:
http://i.imgur.com/pSyG4xJ.jpg
def water(seq1, seq2):
m, n = len(seq1), len(seq2) # length of two sequences
# Generate DP table and traceback path pointer matrix
score = zeros((m+1, n+1)) # the DP table
pointer = zeros((m+1, n+1)) # to store the traceback path
max_score = 0 # initial maximum score in DP table
# Calculate DP table and mark pointers
for i in range(1, m + 1):
for j in range(1, n + 1):
score_diagonal = score[i-1][j-1] + match_score(seq1[i-1], seq2[j-1])
score_up = score[i][j-1] + gap_penalty
score_left = score[i-1][j] + gap_penalty
score[i][j] = max(0,score_left, score_up, score_diagonal)
if score[i][j] == 0:
pointer[i][j] = 0 # 0 means end of the path
if score[i][j] == score_left:
pointer[i][j] = 1 # 1 means trace up
if score[i][j] == score_up:
pointer[i][j] = 2 # 2 means trace left
if score[i][j] == score_diagonal:
pointer[i][j] = 3 # 3 means trace diagonal
if score[i][j] >= max_score:
max_i = i
max_j = j
max_score = score[i][j];
https://github.com/alevchuk/pairwise-alignment-in-python
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.11 (2015-07-27 06:18 UTC)
_/ |__'_|_|_|__'_| |
|__/ | x86_64-linux-gnu
julia> f(x, y) = x * y
f (generic function with 1 method)
julia> code_native(f, (Float64, Float64))
.text
Filename: none
Source line: 1
push RBP
mov RBP, RSP
Source line: 1
vmulsd XMM0, XMM0, XMM1
pop RBP
ret
http://julialang.org/benchmarks/
C Java Python R Julia
배우기 쉬운가? X X O O O
유지보수와 재활용이 쉬운 코드를 만
들기 좋은가?
X △ O △ O
잘 짜면 빠르게 도는가? O O X X O
행렬, 벡터 연산이 쉬운가? X X O △ O
매우 큰 프로그램을 만들기 편한가? △ O O X △
# precell
precell(::Void) = PreCell([][:,:], 0, 0)
function precell(el::AbstractString)
if contains(el, "n")
a = map(split(el, "n")) do x
width = strwidth(x)
string(x, repeat(" ", width-length(x)))
end[:, :]
m,n = size(a)
PreCell(a, maximum(map(length, a)), m)
else
width = strwidth(el)
PreCell([string(el, repeat(" ", width-length(el)))][:,:], width, 1)
end
end
part of Millboard.jl by wookay
찰떡궁합 Julia❤Python
찰떡궁합 Julia❤Python
요약
요약
• Jupyter notebook 쓰면 똑똑해집니다.
요약
• Jupyter notebook 쓰면 똑똑해집니다.
• Snakemake 쓰면 수명이 늘어납니다.
요약
• Jupyter notebook 쓰면 똑똑해집니다.
• Snakemake 쓰면 수명이 늘어납니다.
• 큰 텍스트 파일을 나눠서 처리하려면 tabix!
요약
• Jupyter notebook 쓰면 똑똑해집니다.
• Snakemake 쓰면 수명이 늘어납니다.
• 큰 텍스트 파일을 나눠서 처리하려면 tabix!
• 속도가 필요할 땐 파이썬과 줄리아를 같이 쓰세요!
Acknowledgements
Johannes Köster Dana-Farber Cancer Institute
Heng Li Broad Institute
Bezanson, Karpinski, Shah, and Edelman MIT
노우경 줄리아 한국 사용자 그룹
탐색적으로 큰 데이터 분석하기
장혜식
기초과학연구원 RNA연구단
배경 이미지 위치:
http://4.bp.blogspot.com/-bB4jFkQ_jBk/T70ipuyFn6I/AAAAAAAAAOE/cnbxI03ve0Y/s1600/
snake_pile_2crop+by+Tracy+Langkilde.jpg

More Related Content

What's hot (20)

PDF
딥러닝 세계에 입문하기 위반 분투
Ubuntu Korea Community
PPTX
Java와 Python의 만남: Jython과 Sikuli
용 최
PDF
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
NAVER D2
PPTX
머신러닝 + 주식 삽질기
HoChul Shin
PDF
Tensorflow service & Machine Learning
JEEHYUN PAIK
PDF
[131]chromium binging 기술을 node.js에 적용해보자
NAVER D2
PDF
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
Wonha Ryu
PDF
파이썬 데이터 분석 (18년)
SK(주) C&C - 강병호
PDF
파이썬으로 익히는 딥러닝 기본 (18년)
SK(주) C&C - 강병호
PDF
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
Taehoon Kim
PDF
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
Tae Young Lee
PDF
[221] 딥러닝을 이용한 지역 컨텍스트 검색 김진호
NAVER D2
PPTX
딥러닝(Deep Learing) using DeepDetect
Junyi Song
PDF
[2D4]Python에서의 동시성_병렬성
NAVER D2
PDF
Workshop 210417 dhlee
Dongheon Lee
PDF
Tensorflow for Deep Learning(SK Planet)
Tae Young Lee
PDF
H3 2011 파이썬으로 클라우드 하고 싶어요
KTH
PDF
Python 게임서버 안녕하십니까 : RPC framework 편
준철 박
PDF
ᅦᅩᅮᅥᅵᅡᆨᄒơƳᆫᅩᅳᆫᄉƩᄉƳ
Mario Cho
PPTX
ML + 주식 phase 2
HoChul Shin
딥러닝 세계에 입문하기 위반 분투
Ubuntu Korea Community
Java와 Python의 만남: Jython과 Sikuli
용 최
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
NAVER D2
머신러닝 + 주식 삽질기
HoChul Shin
Tensorflow service & Machine Learning
JEEHYUN PAIK
[131]chromium binging 기술을 node.js에 적용해보자
NAVER D2
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
Wonha Ryu
파이썬 데이터 분석 (18년)
SK(주) C&C - 강병호
파이썬으로 익히는 딥러닝 기본 (18년)
SK(주) C&C - 강병호
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
Taehoon Kim
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
Tae Young Lee
[221] 딥러닝을 이용한 지역 컨텍스트 검색 김진호
NAVER D2
딥러닝(Deep Learing) using DeepDetect
Junyi Song
[2D4]Python에서의 동시성_병렬성
NAVER D2
Workshop 210417 dhlee
Dongheon Lee
Tensorflow for Deep Learning(SK Planet)
Tae Young Lee
H3 2011 파이썬으로 클라우드 하고 싶어요
KTH
Python 게임서버 안녕하십니까 : RPC framework 편
준철 박
ᅦᅩᅮᅥᅵᅡᆨᄒơƳᆫᅩᅳᆫᄉƩᄉƳ
Mario Cho
ML + 주식 phase 2
HoChul Shin

Viewers also liked (8)

PDF
탐색적 데이터분석(국민건강보험)
Hyoseup_Kwon
PPTX
데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁
datasciencekorea
PDF
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
정주 김
PDF
Dm ml study_roadmap
Kang Pilsung
PDF
한국 PyCon 2014 - 개회사
Hyeshik Chang
PPTX
헬로 데이터 과학: 삶과 업무를 개선하는 데이터 과학 이야기 (스타트업 얼라이언스 강연)
Jin Young Kim
PDF
Evolutionary (deep) neural network
Soo-Yong Shin
PDF
ISO 20428 Intro
Soo-Yong Shin
탐색적 데이터분석(국민건강보험)
Hyoseup_Kwon
데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁
datasciencekorea
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
정주 김
Dm ml study_roadmap
Kang Pilsung
한국 PyCon 2014 - 개회사
Hyeshik Chang
헬로 데이터 과학: 삶과 업무를 개선하는 데이터 과학 이야기 (스타트업 얼라이언스 강연)
Jin Young Kim
Evolutionary (deep) neural network
Soo-Yong Shin
ISO 20428 Intro
Soo-Yong Shin
Ad

Similar to PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기 (20)

PDF
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
Joeun Park
PDF
Reproducible research(2)
건웅 문
PDF
RUCK 2017 권재명 효율적 데이터 과학과 데이터 조직을 위한 7가지 요인
r-kor
PDF
효율적 데이터 과학을 위한 7가지 팁
Jaimie Kwon (권재명)
PPTX
Jupyter notebook 이해하기
Yong Joon Moon
PPTX
An introduction to hadoop
MinJae Kang
PDF
[NDC08] 최적화와 프로파일링 - 송창규
ChangKyu Song
PPTX
[자바카페] 람다 일괄처리 계층
용호 최
PPTX
Python 활용: 이미지 처리와 데이터 분석
용 최
PDF
R 스터디 첫번째
Jaeseok Park
PDF
WzDat과 Pandas를 통한 로그 데이터 분석
정주 김
PPSX
데이터 분석 프로세스
Lee Seungeun
PDF
R을 이용한 데이터 분석
simon park
PPTX
Vectorized processing in_a_nutshell_DeView2014
Gruter
PPTX
데이터분석의 길 5: “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)
Jaimie Kwon (권재명)
PPTX
Intro to r & hadoop
Seong-Bok Lee
PDF
(OkdevTV) 2024년 9월 2일 개발 이야기 - 좋은 리팩토링 vs 나쁜 리팩토링
Jay Park
PDF
Python
SKKU Library
PDF
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
Tae Young Lee
PPTX
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
Gruter
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
Joeun Park
Reproducible research(2)
건웅 문
RUCK 2017 권재명 효율적 데이터 과학과 데이터 조직을 위한 7가지 요인
r-kor
효율적 데이터 과학을 위한 7가지 팁
Jaimie Kwon (권재명)
Jupyter notebook 이해하기
Yong Joon Moon
An introduction to hadoop
MinJae Kang
[NDC08] 최적화와 프로파일링 - 송창규
ChangKyu Song
[자바카페] 람다 일괄처리 계층
용호 최
Python 활용: 이미지 처리와 데이터 분석
용 최
R 스터디 첫번째
Jaeseok Park
WzDat과 Pandas를 통한 로그 데이터 분석
정주 김
데이터 분석 프로세스
Lee Seungeun
R을 이용한 데이터 분석
simon park
Vectorized processing in_a_nutshell_DeView2014
Gruter
데이터분석의 길 5: “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)
Jaimie Kwon (권재명)
Intro to r & hadoop
Seong-Bok Lee
(OkdevTV) 2024년 9월 2일 개발 이야기 - 좋은 리팩토링 vs 나쁜 리팩토링
Jay Park
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
Tae Young Lee
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
Gruter
Ad

PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기

  • 1. 탐색적으로 큰 데이터 분석하기 장혜식 기초과학연구원 RNA연구단 배경 이미지 위치: http://4.bp.blogspot.com/-bB4jFkQ_jBk/T70ipuyFn6I/AAAAAAAAAOE/cnbxI03ve0Y/s1600/ snake_pile_2crop+by+Tracy+Langkilde.jpg
  • 2. Electronic Health Records (EHR) 배경 이미지 위치: http://www.trbimg.com/img-552d5b6b/turbine/la-sci-sn-medical-records-breaches-20150414-001/800/800x450
  • 4. from Wikimedia Commons 병리학적 측정 결과 새로운 증상 증상의 변화 약 처방 상세한 내원 이력 약 부작용 알레르기 이력 환자 본인 측정 결과 유전자 검사 결과 가족력 인구학적 정보
  • 5. 하버드 의대 Isaac Kohane 그룹 그룹 단체 사진
  • 6. 호흡기 Jane Q. Doe ED Profile June,1992 – Feb,1999 Reis et al., BMJ 2009 from Isaac Kohane’s slides 감염 치과 안과 정신과 비뇨기과 소화기 이비인후과 피부과 통증의학과 응급의학과 (부상) 응급의학과 (폭행)
  • 7. 6 가정폭력 domestic violence 배경 이미지 위치: https://garyullah.files.wordpress.com/2015/01/man-with-clenched-fist-an-014.jpg
  • 8. 병원A 데이터 수집 병원B 데이터 수집 병원C 데이터 수집 시스템A 데이터 변환 시스템A 데이터 변환 시스템B 데이터 변환 개인별 데이터 통합 방문횟수 계산 진단명 종류 조사
  • 9. 병원A 데이터 수집 병원B 데이터 수집 병원C 데이터 수집 시스템A 데이터 변환 시스템A 데이터 변환 시스템B 데이터 변환 개인별 데이터 통합 방문횟수 계산 진단명 종류 조사 특이 환자 샘플링 오프라인 조사 및 가설 수립
  • 10. 병원A 데이터 수집 병원B 데이터 수집 병원C 데이터 수집 시스템A 데이터 변환 시스템A 데이터 변환 시스템B 데이터 변환 개인별 데이터 통합 방문횟수 계산 진단명 종류 조사 특이 환자 샘플링 오프라인 조사 및 가설 수립 모델 적용 및 예측 성능 검증 특이 환자 샘플링 오프라인 조사 특이 지표 탐색
  • 11. 병원A 데이터 수집 병원B 데이터 수집 병원C 데이터 수집 시스템A 데이터 변환 시스템A 데이터 변환 시스템B 데이터 변환 개인별 데이터 통합 방문횟수 계산 진단명 종류 조사 특이 환자 샘플링 오프라인 조사 및 가설 수립 모델 적용 및 예측 성능 검증 특이 환자 샘플링 오프라인 조사 특이 지표 탐색 병원D 데이터 수집 시스템C 데이터 변환
  • 13. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
  • 14. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 언제 어떤 데이터가 추가될 지 모른다.
  • 15. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다.
  • 16. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다.
  • 17. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함
  • 18. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보!
  • 19. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편
  • 20. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함
  • 21. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함 데이터가 작지는 않다.
  • 22. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함 데이터가 작지는 않다. 적당히 빨라야 함
  • 33. make가 좋은 것 - 아주 간결한 문법
  • 34. make가 좋은 것 - 아주 간결한 문법 - 가볍다
  • 35. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성
  • 36. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙”
  • 37. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화
  • 38. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것
  • 39. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법
  • 40. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법 - 스크립팅이 매우 제한적임
  • 41. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법 - 스크립팅이 매우 제한적임 - 파일이름에 와일드카드 및 패턴 못 씀
  • 42. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법 - 스크립팅이 매우 제한적임 - 파일이름에 와일드카드 및 패턴 못 씀 - 부족한 병렬화, 클러스터 지원
  • 43. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법 - 스크립팅이 매우 제한적임 - 파일이름에 와일드카드 및 패턴 못 씀 - 부족한 병렬화, 클러스터 지원 - 현대과학의 혜택을 받지 못함
  • 56. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨
  • 57. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감
  • 58. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감 # 예비 실행 $ snakemake -n
  • 59. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감 # 예비 실행 $ snakemake -n # 최대 8코어까지 사용해서 병렬로 돌림 $ snakemake --cores 8
  • 60. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감 # 예비 실행 $ snakemake -n # 최대 8코어까지 사용해서 병렬로 돌림 $ snakemake --cores 8 # 클러스터에서 최대 20개 작업까지 큐에 넣고 돌림 $ snakemake --jobs 20 --cluster “qsub -pe threaded {threads}”
  • 61. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감 # 예비 실행 $ snakemake -n # 최대 8코어까지 사용해서 병렬로 돌림 $ snakemake --cores 8 # 클러스터에서 최대 20개 작업까지 큐에 넣고 돌림 $ snakemake --jobs 20 --cluster “qsub -pe threaded {threads}” # DRMAA를 지원하는 클러스터에 넣고 돌림 $ snakemake --jobs 20 --drmaa
  • 62. File-driven programming? “보일러판이 필요 없는” 프로그램 내장형 병렬화 이벤트 루프
  • 63. snakemake GUI resource quota task priority code/data versions audit trailconfigurations HTML reporting R embedding benchmarking modularization version tracking
  • 65. d1 d2 area population density lat lon 경기도 가평군 843.04 5854069.43917251850446 37.8315403 127.5098827 서울특별시 강남구 39.5 569499 14417.696202531646 37.5172363 127.0473248 서울특별시 강동구 24.6 489655 19904.674796747968 37.5301251 127.123762 강원도 강릉시 1040.07 219067 210.62716932514158 37.751853 128.8760574 서울특별시 강북구 23.6 343912 14572.542372881355 37.6396099 127.0256575 부산광역시 강서구 179.05 63753356.06255235967603 35.2122157 128.9805666 서울특별시 강서구 41.4 579196 13990.241545893721 37.5509786 126.8495382 전라남도 강진군 495.98 4142883.5275615952256 34.6420774 126.767261 인천광역시 강화군 411.267597164.38959143968873 37.7467263 126.4878731 탭으로 구분된 텍스트 (tsv) C행정구역별(읍면동),행정구역별(읍면동),C연령별,연령별,시점,인구(내국인),남자,여자,성비 '00,전국,'000,합계,2010,47990761,23840896,24149865,98.7 '00,전국,'005,0~4세,2010,2219084,1142220,1076864,106.1 '00,전국,'005001, 0세,2010,437452,225242,212210,106.1 '00,전국,'005002, 1세,2010,426807,219728,207079,106.1 '00,전국,'005003, 2세,2010,456798,234291,222507,105.3 '00,전국,'005004, 3세,2010,467426,240482,226944,106.0 '00,전국,'005005, 4세,2010,430601,222477,208124,106.9 '00,전국,'010,5~9세,2010,2394663,1243294,1151369,108.0 '00,전국,'010001, 5세,2010,423102,218356,204746,106.6 쉼표로 구분된 텍스트 (csv)
  • 66. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함 데이터가 작지는 않다. 적당히 빨라야 함
  • 67. hyeshik@adenine /g/h/h/o/t/h/sequences> ls -al *.txt.gz -rw-r--r-- 1 hyeshik 251455559343 Sep 16 2014 ts00.txt.gz -rw-r--r-- 1 hyeshik 243815859961 Sep 16 2014 ts01.txt.gz -rw-r--r-- 1 hyeshik 333505252185 Sep 16 2014 ts02.txt.gz -rw-r--r-- 1 hyeshik 251077215174 Sep 16 2014 ts03.txt.gz -rw-r--r-- 1 hyeshik 344801600522 Sep 16 2014 ts04.txt.gz -rw-r--r-- 1 hyeshik 263449133340 Sep 16 2014 ts05.txt.gz
  • 68. hyeshik@adenine /g/h/h/o/t/h/sequences> ls -al *.txt.gz -rw-r--r-- 1 hyeshik 251455559343 Sep 16 2014 ts00.txt.gz -rw-r--r-- 1 hyeshik 243815859961 Sep 16 2014 ts01.txt.gz -rw-r--r-- 1 hyeshik 333505252185 Sep 16 2014 ts02.txt.gz -rw-r--r-- 1 hyeshik 251077215174 Sep 16 2014 ts03.txt.gz -rw-r--r-- 1 hyeshik 344801600522 Sep 16 2014 ts04.txt.gz -rw-r--r-- 1 hyeshik 263449133340 Sep 16 2014 ts05.txt.gz 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?
  • 69. hyeshik@adenine /g/h/h/o/t/h/sequences> ls -al *.txt.gz -rw-r--r-- 1 hyeshik 251455559343 Sep 16 2014 ts00.txt.gz -rw-r--r-- 1 hyeshik 243815859961 Sep 16 2014 ts01.txt.gz -rw-r--r-- 1 hyeshik 333505252185 Sep 16 2014 ts02.txt.gz -rw-r--r-- 1 hyeshik 251077215174 Sep 16 2014 ts03.txt.gz -rw-r--r-- 1 hyeshik 344801600522 Sep 16 2014 ts04.txt.gz -rw-r--r-- 1 hyeshik 263449133340 Sep 16 2014 ts05.txt.gz 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
  • 70. 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
  • 71. 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게” 압축을 안 한다.
  • 72. 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게” 압축을 안 한다. 파일을 쪼갠다.
  • 73. 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게” 압축을 안 한다. 파일을 쪼갠다. tabix를 쓴다.
  • 75. gzip 압축 파일 gz block 1 gz block 2 gz block 3 gz block 4 gz block 5 gz block 6 gz block 7 gz block 8 gz block 9 gz block 10 bgzf
  • 76. gzip 압축 파일 gz block 1 gz block 2 gz block 3 gz block 4 gz block 5 gz block 6 gz block 7 gz block 8 gz block 9 gz block 10 bgzf 100% 하위호환
  • 78. # 인덱스를 만든다. $ tabix -0 -s1 -b2 ts02.txt.gz tabix 쓰기
  • 79. # 인덱스를 만든다. $ tabix -0 -s1 -b2 ts02.txt.gz # 염색체 목록을 본다. (염색체=레벨1 인덱스) $ tabix ——list-chroms ts02.txt.gz tabix 쓰기
  • 80. # 인덱스를 만든다. $ tabix -0 -s1 -b2 ts02.txt.gz # 염색체 목록을 본다. (염색체=레벨1 인덱스) $ tabix ——list-chroms ts02.txt.gz # 염색체 1101 데이터 전체를 출력한다. $ tabix ts02.txt.gz 1101 tabix 쓰기
  • 81. # 인덱스를 만든다. $ tabix -0 -s1 -b2 ts02.txt.gz # 염색체 목록을 본다. (염색체=레벨1 인덱스) $ tabix ——list-chroms ts02.txt.gz # 염색체 1101 데이터 전체를 출력한다. $ tabix ts02.txt.gz 1101 # 염색체 1101의 10000부터 10100 자리까지 출력한다. $ tabix ts02.txt.gz 1101:10000-10100 tabix 쓰기
  • 83. tabix 한계점 초기 인덱싱은 병렬화되지 않는다.
  • 84. tabix 한계점 반드시 2레벨 인덱스로 정렬돼 있어야 한다. 초기 인덱싱은 병렬화되지 않는다.
  • 85. tabix 한계점 반드시 2레벨 인덱스로 정렬돼 있어야 한다. 레벨 1 인덱스는 범위지정이 안 된다. 초기 인덱싱은 병렬화되지 않는다.
  • 87. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함 데이터가 작지는 않다. 적당히 빨라야 함
  • 88. Dynamic programming Monte Carlo simulation Permutation tests 배경 이미지 위치: http://i.imgur.com/pSyG4xJ.jpg
  • 89. def water(seq1, seq2): m, n = len(seq1), len(seq2) # length of two sequences # Generate DP table and traceback path pointer matrix score = zeros((m+1, n+1)) # the DP table pointer = zeros((m+1, n+1)) # to store the traceback path max_score = 0 # initial maximum score in DP table # Calculate DP table and mark pointers for i in range(1, m + 1): for j in range(1, n + 1): score_diagonal = score[i-1][j-1] + match_score(seq1[i-1], seq2[j-1]) score_up = score[i][j-1] + gap_penalty score_left = score[i-1][j] + gap_penalty score[i][j] = max(0,score_left, score_up, score_diagonal) if score[i][j] == 0: pointer[i][j] = 0 # 0 means end of the path if score[i][j] == score_left: pointer[i][j] = 1 # 1 means trace up if score[i][j] == score_up: pointer[i][j] = 2 # 2 means trace left if score[i][j] == score_diagonal: pointer[i][j] = 3 # 3 means trace diagonal if score[i][j] >= max_score: max_i = i max_j = j max_score = score[i][j]; https://github.com/alevchuk/pairwise-alignment-in-python
  • 91. _ _ _ _(_)_ | A fresh approach to technical computing (_) | (_) (_) | Documentation: http://docs.julialang.org _ _ _| |_ __ _ | Type "help()" for help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 0.3.11 (2015-07-27 06:18 UTC) _/ |__'_|_|_|__'_| | |__/ | x86_64-linux-gnu julia> f(x, y) = x * y f (generic function with 1 method) julia> code_native(f, (Float64, Float64)) .text Filename: none Source line: 1 push RBP mov RBP, RSP Source line: 1 vmulsd XMM0, XMM0, XMM1 pop RBP ret
  • 93. C Java Python R Julia 배우기 쉬운가? X X O O O 유지보수와 재활용이 쉬운 코드를 만 들기 좋은가? X △ O △ O 잘 짜면 빠르게 도는가? O O X X O 행렬, 벡터 연산이 쉬운가? X X O △ O 매우 큰 프로그램을 만들기 편한가? △ O O X △
  • 94. # precell precell(::Void) = PreCell([][:,:], 0, 0) function precell(el::AbstractString) if contains(el, "n") a = map(split(el, "n")) do x width = strwidth(x) string(x, repeat(" ", width-length(x))) end[:, :] m,n = size(a) PreCell(a, maximum(map(length, a)), m) else width = strwidth(el) PreCell([string(el, repeat(" ", width-length(el)))][:,:], width, 1) end end part of Millboard.jl by wookay
  • 98. 요약 • Jupyter notebook 쓰면 똑똑해집니다.
  • 99. 요약 • Jupyter notebook 쓰면 똑똑해집니다. • Snakemake 쓰면 수명이 늘어납니다.
  • 100. 요약 • Jupyter notebook 쓰면 똑똑해집니다. • Snakemake 쓰면 수명이 늘어납니다. • 큰 텍스트 파일을 나눠서 처리하려면 tabix!
  • 101. 요약 • Jupyter notebook 쓰면 똑똑해집니다. • Snakemake 쓰면 수명이 늘어납니다. • 큰 텍스트 파일을 나눠서 처리하려면 tabix! • 속도가 필요할 땐 파이썬과 줄리아를 같이 쓰세요!
  • 102. Acknowledgements Johannes Köster Dana-Farber Cancer Institute Heng Li Broad Institute Bezanson, Karpinski, Shah, and Edelman MIT 노우경 줄리아 한국 사용자 그룹
  • 103. 탐색적으로 큰 데이터 분석하기 장혜식 기초과학연구원 RNA연구단 배경 이미지 위치: http://4.bp.blogspot.com/-bB4jFkQ_jBk/T70ipuyFn6I/AAAAAAAAAOE/cnbxI03ve0Y/s1600/ snake_pile_2crop+by+Tracy+Langkilde.jpg