생물정보학을 위한 파이썬 : 유연한 파이썬 코드 작성, 테스트, 리팩토링 - 에이콘 프로그래밍 언어 시리즈

생물정보학을 위한 파이썬 : 유연한 파이썬 코드 작성, 테스트, 리팩토링 - 에이콘 프로그래밍 언어 시리즈

$45.00
저자

켄유엔스클락

저자:켄유엔스클락(KenYouens-Clark)
약25년동안프로그래밍을해왔다.노스텍사스대학교(UniversityofNorthTexas)에서음악으로시작해서영문학으로끝난방황하는학부교육을받은후,직장에서다양하고잡다한언어를사용해서프로그래밍을배웠다.결국생물정보학실험실에들어갔고,생물정보학이전에했던프로그래밍들보다훨씬더멋져보인다고생각했으며,그래서생물정보학을고수했다.미국애리조나주투싼(Tucson)에살고있으며,애리조나대학교(UniversityofArizona)에서2019년에바이오시스템공학석사학위를취득했다.

역자:황태웅
고등학교때생물이재밌어서경희대학교유전공학과에입학했고,2학년때'생물정보학을위한파이썬'이라는전공과목을듣고생물과코딩의조합에빠져생물정보학을공부하게됐다.더깊게공부하고싶어서식물유전체학연구실에서벼를키우며생물정보학을배웠다.실험실에서는리눅스시스템내에서파이썬과R로분석해연구를진행했다.생물정보학을배우다보니유전자에관한지식보다는소프트웨어코딩에조금더관심을갖게됐고,웹프로그래머가되고자독학을해서웹개발자로취직했다.현재는롯데정보통신회사에서소프트웨어개발자로일하는중이며,앱개발도배워여러개발을해보고싶다는생각을하고있다.

목차


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장.FASTXgrep:염기서열을선택하기위한유틸리티프로그램만들기
__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이해하고커맨드라인프로그램설치하기

출판사 서평

이책에서다루는내용

-매개변수를문서화하고검증할커맨드라인파이썬프로그램생성
-리팩토링프로그램을확인하고올바른지확인하기위한테스트작성
-바이오파이썬과같은파이썬데이터구조와모듈을사용한생물정보학아이디어해결
-makefile을사용해서재현가능한바로가기와워크플로제작
-FASTA,FASTQ와같은필수생물정보학파일형식구문분석
-정규식을사용해서문자패턴찾기
-파이썬에서filter(),map(),reduce()와같은고차함수사용

이책의대상독자

프로그래밍기술에관심이있고,문서를생성하고,매개변수를검증하고,우아하게실패하고,안정적으로작동하는프로그램을작성하는방법을배우고싶다면이책을읽어야한다.테스트는코드를이해하고코드의정확성을확인하는데중요한기술이다.이책에서는저자가작성한테스트사용방법과프로그램에대한테스트작성방법을소개할것이다.내용을최대한활용하기위해서는파이썬에대한확실한이해가있어야한다.『21개의작고재미난파이썬프로젝트』(제이펍,2021)에서가르친기술을바탕으로문자열,리스트,튜플,딕셔너리,집합,명명된튜플과같은파이썬데이터구조를사용하는방법을보여줄것이다.파이썬전문가가될필요는없지만,타입,정규표현식,고차함수에대한아이디어,테스트와스타일,구문,정확성체크를위한pylint,flake8,yapf,pytest도구사용방법과같은몇가지고급개념을이해하도록확실히밀어줄것이다.한가지주목할만한차이점은이책의모든코드에서일관되게타입주석을사용하고,mypy개발툴을사용해서올바른타입사용을보장한다는것이다.

이책의구성

이책은크게두부분으로나뉜다.1부는Rosalind.info웹사이트에서발견된프로그래밍문제중14개를다룬다(http://rosalind.info/about).2부는생물정보학에서내가중요하다고생각하는다른패턴이나개념을보여주는더복잡한프로그램을다룬다.모든장에서는작성해야할코딩과제를설명하고작업프로그램을언제작성했는지확인할수있는테스트모음을제공한다.비록‘ZenofPython(https://oreil.ly/20PSy)’은“프로그램을수행하는분명한방법이하나있어야하며,가급적이면하나만있어야한다”라고말하지만,나는문제에대해다양한접근방식을시도함으로써상당히많은것을배울수있다고생각한다.펄(Perl)은생물정보학으로들어가는관문이었고,펄커뮤니티의‘시도하기위한한가지이상의방법이있다(TMTOWTDI,There’sMoreThanOneWayToDoIt)’정신은여전히나에게공감을일으킨다.일반적으로각장의주제와변형접근방식을따르며,파이썬구문과데이터구조의다양한측면을탐색하기위한많은솔루션을보여준다.

지은이의말

리처드해밍(RichardHamming)은벨(Bell)연구소에서수학자와연구원으로수십년을보냈다.그는자신이모르는사람들을찾아내고그들의연구에대해묻는것으로유명했다.그런다음그는그들에게자신의분야에서답이없는가장크고시급한질문이무엇이라고생각하는지물었다.이두가지에대한답변이동일하지않은경우그는“그럼왜그작업을하지않습니까?”라고물었다.생물정보학에서가장시급한문제중하나는많은소프트웨어가제대로작성되지않았고적절한문서와테스트가부족하다는것이다.시간이지남에따라새로운기능을추가하고더좋고더나은소프트웨어를출시하는것이더쉬워질것이기때문에타입,테스트,린터(linter)를사용하는것이덜어렵다는것을보여주고싶었다.최소한어느정도의정확성을위해프로그램이정확할때확실하게알수있는자신감을갖게될것이다.이를위해소프트웨어개발의모범사례를소개하고자한다.나는파이썬을매개체로사용하고있지만원칙은C에서R,자바스크립트(JavaScript)에이르기까지모든언어에적용된다.이책에서배울수있는가장중요한것은우리모두가함께과학연구컴퓨팅을발전시킬수있도록소프트웨어를개발하고,테스트하고,문서화하고,출시하고,지원하는기술이다.

옮긴이의말

생물정보학은생명공학과컴퓨터공학두가지지식을모두갖고있어야제대로이해할수있다고생각한다.특히컴퓨터공학지식을더많이갖고있다면더이해하기쉬운학문인것같다.왜냐하면내가생물정보학을처음배울때이해를하나도못했었기때문이다.그러나이책을번역하면서생명공학에대한지식이부족해서가아니라,컴퓨터지식이없어서였다는사실을깨달았다.소프트웨어개발자가된지금은컴퓨터용어에대한지식을통해파이썬로직이왜그렇게진행되는지이해할수있게됐다.그렇기때문에컴퓨터코딩지식,특히파이썬과알고리듬을배웠다면이책을이해하기수월할것이다.특히,문서화하고테스트하는과정은생명공학도로서는이해하기힘들수있다.테스트는테스트주도개발론TDD적으로꼭필요한과정이고,문서화하는과정도개발자가소통하기위해꼭필요한과정이다.그렇기때문에,개발자의입장에서쓴생물정보학책이라고볼수있다.

그렇지만생명공학도가봐도좋은책이다.코드로분석하는방법을정말자세히설명하고있어서초보자도차근차근따라하기쉽다.물론파이썬에대한기초지식은있어야이해하기쉽다.생명공학도든개발자든생물정보학을기초부터시작해서깊이있게배우고싶다면이책이큰도움이될것이라고확신한다.이책은나의첫번째번역책으로서툴게진행했다.그렇지만책을번역하면서많이배웠으며,아직도개발적으로지식이부족하다는생각을자주했다.독자들은책을차근차근읽으며나보다더많이얻어갔으면좋겠다.책을읽으며표현이어색하거나해석이이상한부분이있다면언제든피드백을주길바란다.