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
6. 호흡기
Jane Q. Doe
ED Profile
June,1992 – Feb,1999
Reis et al., BMJ 2009
from Isaac Kohane’s slides
감염
치과
안과
정신과
비뇨기과
소화기
이비인후과
피부과
통증의학과
응급의학과
(부상)
응급의학과
(폭행)
9. 병원A
데이터 수집
병원B
데이터 수집
병원C
데이터 수집
시스템A
데이터 변환
시스템A
데이터 변환
시스템B
데이터 변환
개인별 데이터 통합
방문횟수 계산 진단명 종류 조사
특이 환자 샘플링
오프라인 조사 및
가설 수립
10. 병원A
데이터 수집
병원B
데이터 수집
병원C
데이터 수집
시스템A
데이터 변환
시스템A
데이터 변환
시스템B
데이터 변환
개인별 데이터 통합
방문횟수 계산 진단명 종류 조사
특이 환자 샘플링
오프라인 조사 및
가설 수립
모델 적용 및 예측
성능 검증 특이 환자 샘플링
오프라인 조사
특이 지표 탐색
11. 병원A
데이터 수집
병원B
데이터 수집
병원C
데이터 수집
시스템A
데이터 변환
시스템A
데이터 변환
시스템B
데이터 변환
개인별 데이터 통합
방문횟수 계산 진단명 종류 조사
특이 환자 샘플링
오프라인 조사 및
가설 수립
모델 적용 및 예측
성능 검증 특이 환자 샘플링
오프라인 조사
특이 지표 탐색
병원D
데이터 수집
시스템C
데이터 변환
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
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
프레임워크가 유연하고 성숙해야 함
데이터가 작지는 않다.
적당히 빨라야 함
37. make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화
38. make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
39. make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
40. make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
- 스크립팅이 매우 제한적임
41. make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
- 스크립팅이 매우 제한적임
- 파일이름에 와일드카드 및 패턴 못 씀
42. make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 make가 안 좋은 것
- 이상하고 못생긴 문법
- 스크립팅이 매우 제한적임
- 파일이름에 와일드카드 및 패턴 못 씀
- 부족한 병렬화, 클러스터 지원
43. make가 좋은 것
- 아주 간결한 문법
- 가볍다
- 파일 기반 의존성
- “규칙”
- 병렬화 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
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
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
프레임워크가 유연하고 성숙해야 함
데이터가 작지는 않다.
적당히 빨라야 함
87. Exploratory Data Analysis
탐색적 데이터 분석
“재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
코드는 빨리 만들어서 (거의) 한 번만 쓴다.
언제 어떤 데이터가 추가될 지 모른다.
그렇다고 재사용이 아예 없는 것도 아니다.
코드 추가/수정이 매우 간편
흐름도 슉슉 쉽게 바꿔야 함
조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것
같은 모듈화, 재현성, 확
장성 확보!
코드 추가가 매우 간편
프레임워크가 유연하고 성숙해야 함
데이터가 작지는 않다.
적당히 빨라야 함
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
90.
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
103. 탐색적으로 큰 데이터 분석하기
장혜식
기초과학연구원 RNA연구단
배경 이미지 위치:
http://4.bp.blogspot.com/-bB4jFkQ_jBk/T70ipuyFn6I/AAAAAAAAAOE/cnbxI03ve0Y/s1600/
snake_pile_2crop+by+Tracy+Langkilde.jpg