생물정보학을 위한 파이썬 [유연한 파이썬 코드 작성, 테스트, 리팩토링]
- 원서명Mastering Python for Bioinformatics: How to Write Flexible, Documented, Tested Python Code for Research Computing (ISBN 9781098100889)
- 지은이켄 유엔스 클락(Ken Youens-Clark)
- 옮긴이황태웅
- ISBN : 9791161758022
- 45,000원
- 2023년 11월 29일 펴냄
- 페이퍼백 | 576쪽 | 188*235mm
- 시리즈 : 프로그래밍 언어
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/robust-python
요약
파이썬으로 생물정보학 데이터를 분석하는 법을 배운다. 생물정보학에서 중요한 계산, 즉 뉴클레오티드 빈도 계산, mRNA 번역, DNA 역상보체 구하기, GC함량 계산, DNA의 모티프 찾기, ORF 프레임 찾기 등을 파이썬 코드로 구현하는 방법을 알아본다. 파이썬 코드를 다루면서 결과를 테스트하고, 문서화해서 작성하는 방법까지 살펴본다. 또한, 여러 솔루션을 제시하면서 독자가 직접 계산해볼 수 있게 하고, 여러 방면으로 생각할 수 있게끔 도와준다. 이후 Seqmagique, FASTX, BLAST 등을 소개하며 파이썬 외의 다른 분석법을 소개하며 지식의 범위를 넓혀준다.
추천의 글
저자의 광범위한 교육 배경과 생물정보학 및 파이썬에 대한 전문 지식은 이런 복잡한 주제를 접근 가능하고 재미있게 만든다. 파이썬에 대한 경험이 있든 처음이든, 생물정보학 문제를 해결하기 위한 모범 사례를 배울 것이다. 강력히 추천한다.
이 책에서 다루는 내용
◆ 매개 변수를 문서화하고 검증할 커맨드 라인 파이썬 프로그램 생성
◆ 리팩토링 프로그램을 확인하고 올바른지 확인하기 위한 테스트 작성
◆ 바이오파이썬과 같은 파이썬 데이터 구조와 모듈을 사용한 생물정보학 아이디어 해결
◆ makefile을 사용해서 재현 가능한 바로 가기와 워크플로 제작
◆ FASTA, FASTQ와 같은 필수 생물정보학 파일 형식 구문 분석
◆ 정규식을 사용해서 문자 패턴 찾기
◆ 파이썬에서 filter(), map(), reduce()와 같은 고차 함수 사용
이 책의 대상 독자
프로그래밍 기술에 관심이 있고, 문서를 생성하고, 매개 변수를 검증하고, 우아하게 실패하고, 안정적으로 작동하는 프로그램을 작성하는 방법을 배우고 싶다면 이 책을 읽어야 한다. 테스트는 코드를 이해하고 코드의 정확성을 확인하는 데 중요한 기술이다. 이 책에서는 저자가 작성한 테스트 사용 방법과 프로그램에 대한 테스트 작성 방법을 소개할 것이다.
내용을 최대한 활용하기 위해서는 파이썬에 대한 확실한 이해가 있어야 한다. 『21개의 작고 재미난 파이썬 프로젝트』(제이펍, 2021)에서 가르친 기술을 바탕으로 문자열, 리스트, 튜플, 딕셔너리, 집합, 명명된 튜플과 같은 파이썬 데이터 구조를 사용하는 방법을 보여줄 것이다. 파이썬 전문가가 될 필요는 없지만, 타입, 정규 표현식, 고차 함수에 대한 아이디어, 테스트와 스타일, 구문, 정확성 체크를 위한 pylint, flake8, yapf, pytest 도구 사용 방법과 같은 몇 가지 고급 개념을 이해하도록 확실히 밀어줄 것이다. 한 가지 주목할 만한 차이점은 이 책의 모든 코드에서 일관되게 타입 주석을 사용하고, mypy 개발 툴을 사용해서 올바른 타입 사용을 보장한다는 것이다.
이 책의 구성
이 책은 크게 두 부분으로 나뉜다. 1부는 Rosalind.info 웹사이트에서 발견된 프로그래밍 문제 중 14개를 다룬다(http://rosalind.info/about). 2부는 생물정보학에서 내가 중요하다고 생각하는 다른 패턴이나 개념을 보여 주는 더 복잡한 프로그램을 다룬다. 모든 장에서는 작성해야 할 코딩 과제를 설명하고 작업 프로그램을 언제 작성했는지 확인할 수 있는 테스트 모음을 제공한다.
비록 ‘Zen of Python(https://oreil.ly/20PSy)’은 “프로그램을 수행하는 분명한 방법이 하나 있어야 하며, 가급적이면 하나만 있어야 한다”라고 말하지만, 나는 문제에 대해 다양한 접근 방식을 시도함으로써 상당히 많은 것을 배울 수 있다고 생각한다. 펄(Perl)은 생물정보학으로 들어가는 관문이었고, 펄 커뮤니티의 ‘시도하기 위한 한 가지 이상의 방법이 있다(TMTOWTDI, There’s More Than One Way To Do It)’ 정신은 여전히 나에게 공감을 일으킨다. 일반적으로 각 장의 주제와 변형 접근 방식을 따르며, 파이썬 구문과 데이터 구조의 다양한 측면을 탐색하기 위한 많은 솔루션을 보여준다.
목차
목차
- 1부. Rosalind.info 챌린지
- 1장. 테트라뉴클레오타이드 빈도: 빈도수 계산
- 시작하기
- new.py를 사용해 새 프로그램 만들기
- argparse 사용하기
- 코드의 오류를 찾기 위한 개발 툴
- 명명된 튜플 소개
- 명명된 튜플에 타입 추가하기
- NamedTuple로 인수 표현하기
- 커맨드 라인 또는 파일에서 입력값 읽기
- 프로그램 테스트하기
- 출력 테스트하기 위해 프로그램 실행하기
- 솔루션
- 솔루션 1: 문자열의 문자 반복과 계산
- 뉴클레오타이드 계산하기
- 솔루션 작성 및 검증
- 추가적인 솔루션
- 솔루션 2: count() 함수 생성과 단위 테스트 추가하기
- 솔루션 3: str.count() 사용하기
- 솔루션 4: 딕셔너리를 사용해 모든 문자 계산하기
- 솔루션 5: 원하는 염기만 계산하기
- 솔루션 6: collections.defaultdict() 사용하기
- 솔루션 7: collections.Counter() 사용하기
- 더 나아가기
- 요점 정리
- 시작하기
- 2장. DNA를 mRNA로 변환: 문자열 변경, 파일 읽기와 쓰기
- 시작하기
- 프로그램의 매개 변수 정의
- 선택적 매개 변수 정의
- 하나 이상의 필수 위치 매개 변수 정의하기
- nargs를 사용해 인수의 수 정의하기
- argparse.FileType()을 사용해 파일 인수의 유효성 검사하기
- Args 클래스 정의하기
- 의사 코드를 사용한 프로그램 개요
- 입력 파일 반복
- 출력 파일 이름 생성하기
- 출력 파일 열기
- 출력 염기 서열 쓰기
- 상태 보고서 출력하기
- 테스트 모음 사용하기
- 솔루션
- 솔루션 1: str.replace() 사용하기
- 솔루션 2: re.sub() 사용하기
- 벤치마킹하기
- 더 나아가기
- 요점 정리
- 시작하기
- 3장. DNA 역상보체: 문자열 조작
- 시작하기
- 역문자열을 반복하기
- 의사결정 트리 만들기
- 리팩토링하기
- 솔루션
- 솔루션 1: for 루프와 의사결정 트리 사용하기
- 솔루션 2: 딕셔너리 검색 사용하기
- 솔루션 3: 리스트 컴프리헨션 사용하기
- 솔루션 4: str.translate() 사용하기
- 솔루션 5: Bio.Seq 사용하기
- 요점 정리
- 시작하기
- 4장. 피보나치 수열 만들기: 알고리듬 작성, 테스트, 벤치마킹하기
- 시작하기
- 명령적 접근법
- 솔루션
- 솔루션 1: 리스트를 스택으로 사용하는 명령적 솔루션
- 솔루션 2: 생성자 함수 만들기
- 솔루션 3: 재귀 및 메모이제이션 사용하기
- 솔루션 벤치마킹하기
- 좋은 테스트, 나쁜 테스트, 못생긴 테스트
- 모든 솔루션에서 테스트 모음집 실행하기
- 더 나아가기
- 요점 정리
- 5장. GC 함량 계산하기: FASTA 파싱하고 염기 서열 분석하기
- 시작하기
- 바이오파이썬을 사용해 FASTA 구문 분석하기
- 루프를 사용해 염기 서열 반복하기
- 솔루션
- 솔루션 1: 리스트 사용하기
- 솔루션 2: 타입 주석과 단위 테스트
- 솔루션 3: 실행 중인 최대 변수 유지하기
- 솔루션 4: 리스트 컴프리헨션인 Guard를 사용하기
- 솔루션 5: filter() 함수 사용하기
- 솔루션 6: map() 함수와 합산 부울 사용하기
- 솔루션 7: 정규식을 사용해서 패턴 찾기
- 솔루션 8: 더 복잡한 find_gc() 함수
- 벤치마킹하기
- 더 나아가기
- 요점 정리
- 시작하기
- 6장. 해밍 거리 찾기: 점 돌연변이 계산하기
- 시작하기
- 두 문자열의 문자 반복
- 솔루션
- 솔루션 1: 반복과 계산
- 솔루션 2: 단위 테스트 작성하기
- 솔루션 3: zip() 함수 사용하기
- 솔루션 4: zip_longest() 함수 사용하기
- 솔루션 5: 리스트 컴프리헨션 사용하기
- 솔루션 6: filter() 함수 사용하기
- 솔루션 7: zip_longest()와 map() 함수 사용하기
- 솔루션 8: starmap() 함수와 operator.ne() 함수 사용하기
- 더 나아가기
- 요점 정리
- 시작하기
- 7장. mRNA를 단백질로 변환하기: 더 많은 함수형 프로그래밍
- 시작하기
- K-mer와 코돈
- 코돈 번역
- 솔루션
- 솔루션 1: for 루프 사용하기
- 솔루션 2: 단위 테스트 추가하기
- 솔루션 3: 또 다른 함수와 리스트 컴프리헨션
- 솔루션 4: map(), partial(), takewhile() 함수를 사용한 함수형 프로그래밍
- 솔루션 5: Bio.Seq.translate() 사용하기
- 벤치마킹하기
- 더 나아가기
- 요점 정리
- 시작하기
- 8장. DNA에서 모티프 찾기: 염기 서열 유사성 탐색하기
- 시작하기
- 부분 염기 서열 찾기
- 솔루션
- 솔루션 1: str.find() 메서드 사용하기
- 솔루션 2: str.index() 메서드 사용하기
- 솔루션 3: 순수한 기능적 접근 방식
- 솔루션 4: k-mer 사용하기
- 솔루션 5: 정규식을 사용해 겹치는 패턴 찾기
- 벤치마킹하기
- 더 나아가기
- 요점 정리
- 시작하기
- 9장. 중첩 그래프: 공유 K-mer를 사용한 염기 서열 조립
- 시작하기
- STDOUT, STDERR, 로깅을 사용한 런타임 메시지 관리하기
- 중첩 찾기
- 중첩된 염기 서열 그룹화하기
- 솔루션
- 솔루션 1: 교차로 설정을 사용해 중복 찾기
- 솔루션 2: 그래프를 사용해서 모든 경로 찾기
- 더 나아가기
- 요점 정리
- 시작하기
- 10장. 가장 긴 공유 부분 염기 서열 찾기: k-mer 찾기, 함수 작성, 이진 탐색 사용
- 시작하기
- FASTA 파일에서 가장 짧은 염기 서열 찾기
- 염기 서열에서 k-mer 추출하기
- 솔루션
- 솔루션 1: k-mer의 빈도수 세기
- 솔루션 2: 이진 탐색으로 속도 향상시키기
- 더 나아가기
- 요점 정리
- 시작하기
- 11장. 단백질 모티프 찾기: 데이터 가져오기 및 정규식 사용하기
- 시작하기
- 커맨드 라인에서 염기 서열 파일 다운로드
- 파이썬으로 염기 서열 파일 다운로드하기
- 모티프를 찾기 위한 정규 표현식 작성하기
- 솔루션
- 솔루션 1: 정규식 사용
- 솔루션 2: 수동 솔루션 작성하기
- 더 나아가기
- 요점 정리
- 시작하기
- 12장. 단백질에서 mRNA 유추하기: 리스트의 곱셈과 리스트 줄이기
- 시작하기
- 리스트의 곱 만들기
- 나머지 연산 곱셈으로 오버플로 방지하기
- 솔루션
- 솔루션 1: RNA 코돈 테이블 딕셔너리 사용하기
- 솔루션 2: 비트 전환
- 솔루션 3: 최소 정보 인코딩하기
- 더 나아가기
- 요점 정리
- 시작하기
- 13장. 위치 제한 부위: 코드 사용, 코드 테스트, 코드 공유
- 시작하기
- k-mer를 사용한 모든 부분 염기 서열 찾기
- 모든 역상보체 찾기
- 모든 것을 합치기
- 솔루션
- 솔루션 1: zip()과 enumerate() 함수 사용하기
- 솔루션 2: operator.eq() 함수를 사용하기
- 솔루션 3: revp() 함수 작성하기
- 프로그램 테스트하기
- 더 나아가기
- 요점 정리
- 시작하기
- 14장. 열린 번역 프레임 찾기
- 시작하기
- 각 프레임 내부의 단백질 번역
- 단백질 서열에서 ORF 찾기
- 솔루션
- 솔루션 1: str.index() 함수 사용하기
- 솔루션 2: str.partition() 함수 사용하기
- 솔루션 3: 정규식 사용하기
- 더 나아가기
- 요점 정리
- 시작하기
- 2부. 다른 프로그램
- 15장. Seqmagique: 보고서 생성과 형식 지정
- Seqmagick을 사용해서 염기 서열 파일 분석하기
- MD5 해시를 사용해서 파일 확인하기
- 시작하기
- tabulate()를 사용해서 텍스트 테이블 서식 지정하기
- 솔루션
- 솔루션 1: tabulate()로 형식 지정하기
- 솔루션 2: rich로 형식 지정하기
- 더 나아가기
- 요점 정리
- 16장. FASTX grep: 염기 서열을 선택하기 위한 유틸리티 프로그램 만들기
- grep을 사용해서 파일에서 줄 찾기
- FASTQ 레코드의 구조
- 시작하기
- 파일 형식 추측하기
- 솔루션
- 파일 확장명에서 파일 형식 추측하기
- 계획이 함께 올 때가 좋다
- 정규식 검색 플래그 결합하기
- 부울 값 줄이기
- 더 나아가기
- 요점 정리
- 17장. DNA 합성기: 마르코프 체인으로 합성 데이터 생성하기
- 마르코프 체인의 이해
- 시작하기
- 무작위 시드 이해하기
- 훈련 파일 읽기
- 염기 서열 생성하기
- 프로그램 구조화
- 솔루션
- 더 나아가기
- 요점 정리
- 18장. FASTX 샘플러: 염기 서열 파일 무작위 서브샘플링
- 시작하기
- 프로그램 매개 변수 검토하기
- 매개 변수 정의하기
- 비결정적 샘플링하기
- 프로그램 구성하기
- 솔루션
- 솔루션 1: 일반 파일 읽기
- 솔루션 2: 많은 압축 파일 읽기
- 더 나아가기
- 요점 정리
- 시작하기
- 19장. Blastomatic: 구분된 텍스트 파일 구문 분석
- BLAST 소개
- csvkit과 csvchk 사용하기
- 시작하기
- 인수 정의
- csv 모듈을 사용해서 구분된 텍스트 파일 구문 분석
- pandas 모듈을 사용해서 구분된 텍스트 파일 구문 분석
- 솔루션
- 솔루션 1: 딕셔너리를 사용해서 수동으로 테이블 조인하기
- 솔루션 2: csv.DictWriter()를 사용해서 출력 파일 쓰기
- 솔루션 3: pandas를 사용해서 파일 읽기와 쓰기
- 솔루션 4: pandas를 사용해서 파일 조인하기
- 더 나아가기
- 요점 정리
- 부록 A. make를 사용해서 명령 문서화와 워크플로 생성하기
- 부록 B. $PATH 이해하고 커맨드 라인 프로그램 설치하기