Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,054 views

Published on

2015년 8월 30일에 PyCon Korea에서 발표한 "탐색적으로 큰 데이터 분석하기" 발표자료입니다. 분자생물학에서 많이 쓰이는 큰 데이터 분석도구들을 소개합니다.

Published in: Data & Analytics

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

  1. 1. 탐색적으로 큰 데이터 분석하기 장혜식 기초과학연구원 RNA연구단 배경 이미지 위치: http://4.bp.blogspot.com/-bB4jFkQ_jBk/T70ipuyFn6I/AAAAAAAAAOE/cnbxI03ve0Y/s1600/ snake_pile_2crop+by+Tracy+Langkilde.jpg
  2. 2. Electronic Health Records (EHR) 배경 이미지 위치: http://www.trbimg.com/img-552d5b6b/turbine/la-sci-sn-medical-records-breaches-20150414-001/800/800x450
  3. 3. from Wikimedia Commons
  4. 4. from Wikimedia Commons 병리학적 측정 결과 새로운 증상 증상의 변화 약 처방 상세한 내원 이력 약 부작용 알레르기 이력 환자 본인 측정 결과 유전자 검사 결과 가족력 인구학적 정보
  5. 5. 하버드 의대 Isaac Kohane 그룹 그룹 단체 사진
  6. 6. 호흡기 Jane Q. Doe ED Profile June,1992 – Feb,1999 Reis et al., BMJ 2009 from Isaac Kohane’s slides 감염 치과 안과 정신과 비뇨기과 소화기 이비인후과 피부과 통증의학과 응급의학과 (부상) 응급의학과 (폭행)
  7. 7. 6 가정폭력 domestic violence 배경 이미지 위치: https://garyullah.files.wordpress.com/2015/01/man-with-clenched-fist-an-014.jpg
  8. 8. 병원A 데이터 수집 병원B 데이터 수집 병원C 데이터 수집 시스템A 데이터 변환 시스템A 데이터 변환 시스템B 데이터 변환 개인별 데이터 통합 방문횟수 계산 진단명 종류 조사
  9. 9. 병원A 데이터 수집 병원B 데이터 수집 병원C 데이터 수집 시스템A 데이터 변환 시스템A 데이터 변환 시스템B 데이터 변환 개인별 데이터 통합 방문횟수 계산 진단명 종류 조사 특이 환자 샘플링 오프라인 조사 및 가설 수립
  10. 10. 병원A 데이터 수집 병원B 데이터 수집 병원C 데이터 수집 시스템A 데이터 변환 시스템A 데이터 변환 시스템B 데이터 변환 개인별 데이터 통합 방문횟수 계산 진단명 종류 조사 특이 환자 샘플링 오프라인 조사 및 가설 수립 모델 적용 및 예측 성능 검증 특이 환자 샘플링 오프라인 조사 특이 지표 탐색
  11. 11. 병원A 데이터 수집 병원B 데이터 수집 병원C 데이터 수집 시스템A 데이터 변환 시스템A 데이터 변환 시스템B 데이터 변환 개인별 데이터 통합 방문횟수 계산 진단명 종류 조사 특이 환자 샘플링 오프라인 조사 및 가설 수립 모델 적용 및 예측 성능 검증 특이 환자 샘플링 오프라인 조사 특이 지표 탐색 병원D 데이터 수집 시스템C 데이터 변환
  12. 12. Exploratory Data Analysis 탐색적 데이터 분석
  13. 13. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다).
  14. 14. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 언제 어떤 데이터가 추가될 지 모른다.
  15. 15. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다.
  16. 16. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다.
  17. 17. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함
  18. 18. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보!
  19. 19. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편
  20. 20. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함
  21. 21. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함 데이터가 작지는 않다.
  22. 22. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함 데이터가 작지는 않다. 적당히 빨라야 함
  23. 23. Jupyter Notebook
  24. 24. 이미지 위치: https://attachment.namu.wiki/%EC %B9%B4%ED%8F%AC%EC %A0%84__mcvslotte.png
  25. 25. 이미지 위치: https://attachment.namu.wiki/%EC %B9%B4%ED%8F%AC%EC %A0%84__mcvslotte.png
  26. 26. 인생
  27. 27. 인생 Jupyter 쓰기 전 😂😑😖😥😨
  28. 28. 인생 Jupyter와 함께 😁😄😀😋😍 Jupyter 쓰기 전 😂😑😖😥😨
  29. 29. 인생 pandas와 함께 😁😄😀😋😍 pandas 쓰기 전 😂😑😖😥😨
  30. 30. Snakemake
  31. 31. make가 좋은 것
  32. 32. make가 좋은 것 - 아주 간결한 문법
  33. 33. make가 좋은 것 - 아주 간결한 문법 - 가볍다
  34. 34. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성
  35. 35. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙”
  36. 36. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화
  37. 37. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것
  38. 38. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법
  39. 39. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법 - 스크립팅이 매우 제한적임
  40. 40. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법 - 스크립팅이 매우 제한적임 - 파일이름에 와일드카드 및 패턴 못 씀
  41. 41. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법 - 스크립팅이 매우 제한적임 - 파일이름에 와일드카드 및 패턴 못 씀 - 부족한 병렬화, 클러스터 지원
  42. 42. make가 좋은 것 - 아주 간결한 문법 - 가볍다 - 파일 기반 의존성 - “규칙” - 병렬화 make가 안 좋은 것 - 이상하고 못생긴 문법 - 스크립팅이 매우 제한적임 - 파일이름에 와일드카드 및 패턴 못 씀 - 부족한 병렬화, 클러스터 지원 - 현대과학의 혜택을 받지 못함
  43. 43. map sample: 503 all map sample: 501 index map sample: 502 map sample: 500
  44. 44. make와 마찬가지로
  45. 45. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨
  46. 46. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감
  47. 47. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감 # 예비 실행 $ snakemake -n
  48. 48. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감 # 예비 실행 $ snakemake -n # 최대 8코어까지 사용해서 병렬로 돌림 $ snakemake --cores 8
  49. 49. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감 # 예비 실행 $ snakemake -n # 최대 8코어까지 사용해서 병렬로 돌림 $ snakemake --cores 8 # 클러스터에서 최대 20개 작업까지 큐에 넣고 돌림 $ snakemake --jobs 20 --cluster “qsub -pe threaded {threads}”
  50. 50. make와 마찬가지로 - 의존성이 없는 작업은 병렬로 실행됨 - 이미 있는 새 파일은 무시하고 지나감 # 예비 실행 $ snakemake -n # 최대 8코어까지 사용해서 병렬로 돌림 $ snakemake --cores 8 # 클러스터에서 최대 20개 작업까지 큐에 넣고 돌림 $ snakemake --jobs 20 --cluster “qsub -pe threaded {threads}” # DRMAA를 지원하는 클러스터에 넣고 돌림 $ snakemake --jobs 20 --drmaa
  51. 51. File-driven programming? “보일러판이 필요 없는” 프로그램 내장형 병렬화 이벤트 루프
  52. 52. snakemake GUI resource quota task priority code/data versions audit trailconfigurations HTML reporting R embedding benchmarking modularization version tracking
  53. 53. 텍스트 파일 병렬처리
  54. 54. 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)
  55. 55. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함 데이터가 작지는 않다. 적당히 빨라야 함
  56. 56. 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
  57. 57. 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 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?
  58. 58. 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 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
  59. 59. 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게”
  60. 60. 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게” 압축을 안 한다.
  61. 61. 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게” 압축을 안 한다. 파일을 쪼갠다.
  62. 62. 큰 텍스트 파일들을 “엄청 쉽게” 병렬처리 하려면?“엄청 쉽게” 압축을 안 한다. 파일을 쪼갠다. tabix를 쓴다.
  63. 63. gzip 압축 파일
  64. 64. 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
  65. 65. 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% 하위호환
  66. 66. tabix 쓰기
  67. 67. # 인덱스를 만든다. $ tabix -0 -s1 -b2 ts02.txt.gz tabix 쓰기
  68. 68. # 인덱스를 만든다. $ tabix -0 -s1 -b2 ts02.txt.gz # 염색체 목록을 본다. (염색체=레벨1 인덱스) $ tabix ——list-chroms ts02.txt.gz tabix 쓰기
  69. 69. # 인덱스를 만든다. $ tabix -0 -s1 -b2 ts02.txt.gz # 염색체 목록을 본다. (염색체=레벨1 인덱스) $ tabix ——list-chroms ts02.txt.gz # 염색체 1101 데이터 전체를 출력한다. $ tabix ts02.txt.gz 1101 tabix 쓰기
  70. 70. # 인덱스를 만든다. $ 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 쓰기
  71. 71. tabix 한계점
  72. 72. tabix 한계점 초기 인덱싱은 병렬화되지 않는다.
  73. 73. tabix 한계점 반드시 2레벨 인덱스로 정렬돼 있어야 한다. 초기 인덱싱은 병렬화되지 않는다.
  74. 74. tabix 한계점 반드시 2레벨 인덱스로 정렬돼 있어야 한다. 레벨 1 인덱스는 범위지정이 안 된다. 초기 인덱싱은 병렬화되지 않는다.
  75. 75. 파이썬이 답답하면?
  76. 76. Exploratory Data Analysis 탐색적 데이터 분석 “재미있는 것”을 찾아야 한다 (= 앞으로 뭘 할지 모른다). 코드는 빨리 만들어서 (거의) 한 번만 쓴다. 언제 어떤 데이터가 추가될 지 모른다. 그렇다고 재사용이 아예 없는 것도 아니다. 코드 추가/수정이 매우 간편 흐름도 슉슉 쉽게 바꿔야 함 조금씩 조금씩 실행할 수 있어야 함 무엇이든 할 수 있을 것 같은 모듈화, 재현성, 확 장성 확보! 코드 추가가 매우 간편 프레임워크가 유연하고 성숙해야 함 데이터가 작지는 않다. 적당히 빨라야 함
  77. 77. Dynamic programming Monte Carlo simulation Permutation tests 배경 이미지 위치: http://i.imgur.com/pSyG4xJ.jpg
  78. 78. 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
  79. 79. _ _ _ _(_)_ | 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
  80. 80. http://julialang.org/benchmarks/
  81. 81. 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 △
  82. 82. # 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
  83. 83. 찰떡궁합 Julia❤Python
  84. 84. 찰떡궁합 Julia❤Python
  85. 85. 요약
  86. 86. 요약 • Jupyter notebook 쓰면 똑똑해집니다.
  87. 87. 요약 • Jupyter notebook 쓰면 똑똑해집니다. • Snakemake 쓰면 수명이 늘어납니다.
  88. 88. 요약 • Jupyter notebook 쓰면 똑똑해집니다. • Snakemake 쓰면 수명이 늘어납니다. • 큰 텍스트 파일을 나눠서 처리하려면 tabix!
  89. 89. 요약 • Jupyter notebook 쓰면 똑똑해집니다. • Snakemake 쓰면 수명이 늘어납니다. • 큰 텍스트 파일을 나눠서 처리하려면 tabix! • 속도가 필요할 땐 파이썬과 줄리아를 같이 쓰세요!
  90. 90. Acknowledgements Johannes Köster Dana-Farber Cancer Institute Heng Li Broad Institute Bezanson, Karpinski, Shah, and Edelman MIT 노우경 줄리아 한국 사용자 그룹
  91. 91. 탐색적으로 큰 데이터 분석하기 장혜식 기초과학연구원 RNA연구단 배경 이미지 위치: http://4.bp.blogspot.com/-bB4jFkQ_jBk/T70ipuyFn6I/AAAAAAAAAOE/cnbxI03ve0Y/s1600/ snake_pile_2crop+by+Tracy+Langkilde.jpg

×