책의 저자-리 본 (Lee Vaughan)
프로그래머이며, 열렬한 대중문화 애호자이자 교육자이고, 저자로 활약 중이다. 엑슨모빌ExxonMobil의 임원급 과학자로, 수십 년 동안 복잡한 컴퓨터 모델을 구성, 검토하고, 소프트웨어를 개발, 테스트했으며, 지질학자와 엔지니어를 교육해왔다. 독학을 하는 파이썬 프로그래머들이 자신의 파이썬 기술을 날카롭게 다듬으면서 흥미를 느낄 수 있도록 이 책과 『신비한 파이썬 프로젝트』(영진닷컴, 2020)를 저술했다.
옮긴이-오현석
비사이드소프트BSIDESOFT 이사로 일하면서 매일매일 고객의 요청에 따라 코드를 만들어내고 있는 현업 개발자다. 어릴 때 처음 컴퓨터를 접하고 매혹된 후 경기과학고, KAIST 전산학과(프로그래밍 언어 전공 석사)를 거치면서 계속 컴퓨터를 사용해왔다.
직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 빈 시간에는 번역을 하거나 공부를 하면서 즐거움을 찾는다. 시간이 아주 많이 남을 때는 시뮬레이션 게임을 하면서 머리를 식히며 놀고, 어떻게 하면 막내자식을 프로그래밍의 세계로 끌어들일 수 있을까 고민 중인 아빠이기도 하다.
『코어 파이썬 애플리케이션 프로그래밍 Core Python Applications Programming Third Edition』(에이콘출판, 2014)을 시작으로 『Kotlin in Action』(에이콘출판, 2017), 『한 권으로 읽는 컴퓨터 구조와 프로그래밍』(책만, 2021), 『파이썬으로 살펴보는 아키텍처 패턴』(한빛미디어, 2021), 『Programming in Scala 4/e』(에이콘출판, 2021) 등 30여 권의 책을 번역했다.
책의 목차
| 이 책의 구성 |
1장 베이즈 확률로 위치 예측하기 - “실종된 난파선 선원을 찾아라”
파이썬만에서 발생한 실종 사건에서 해안 경비대가 효율적으로 탐색과 구조 임무를 수행하도록, 베이즈 확률 규칙을 사용해 돕는다. OpenCV, NumPy, itertools 모듈을 활용한다.
2장 NLTK로 문서 간 유사도 측정하기 - “이 소설의 원작자는 누구일까”
자연어 처리를 통해 아서 코난 도일이나 H. G. 웰스 중 누가 『잃어버린 세계』를 썼는지를 결정한다. NLTK, matplotlib 등의 모듈은 물론이고 불용어(stop words), 품사, 어휘의 풍부함, 자카드 유사성(Jaccard similarity) 등의 스타일로메트리(stylometry) 기법을 활용한다.
3장 NLTK로 텍스트 요약하기 – “핵심 문장을 뽑아내고 단어 구름을 만들어보자”
마틴 루터의 ‘나에게는 꿈이 있습니다’와 같은 유명한 연설을 인터넷에서 긁어와서 요점을 요약한다. 그리고 소설 본문을 멋진 광고나 판촉 글로 변환한다. BeautifulSoup, Requests, regex, NLTK, Collections, wordcloud, matplotlib 등을 활용한다.
4장 암호화 기법으로 안전한 메시지 전송하기 – “해독 불가능한 암호문을 작성해보자”
켄 폴릿의 베스트셀러 스파이 소설인 『레베카의 열쇠』에 나오는 원타임 패드 방식을 디지털 방식으로 재구성해서, 아무도 깰 수 없는 암호문을 여러분의 친구와 함께 공유한다. Collections 모듈을 활용한다
5장 OpenCV로 이미지 차이 분석하기 – “천체 이미지로 명왕성을 찾아보자”
클라이드 톰보가 1930년 명왕성을 발견할 때 사용한 장치인 ‘반짝 비교정’을 복원한다. 그리고 현대적인 컴퓨터 비전 기술을 사용해 자동으로 행성이나 운석과 같이 별 시야에서 이동 중인 순간적인 천체를 찾아낸다. OpenCV와 NumPy를 활용한다.
6장 터틀 그래픽으로 궤적 그리기 – “우주 경쟁에서 승리하기 위한 아폴로 8호의 궤적 시뮬레이션”
위험한 도박에 참여해 미국의 아폴로 8호가 달 착륙 경쟁에서 승리할 수 있도록 돕는다. 미 항공우주국 나사(NASA)가 예상보다 1년이나 더 일찍 달 궤도에 도착해서 소련이 실질적으로 달 착륙 프로그램을 포기하게 만든, 똑똑한 자유 귀환 비행 궤적을 그림으로 그려서 실행해본다. turtle 모듈을 활용한다.
7장 넘파이로 통계 분석 처리하기 “- 안전한 화성 착륙 지점을 찾아라”
실제적인 미션 목표를 사용해 화성 착륙선의 잠재적인 착륙 후보지 범위를 좁힌다. 화성 지도에 후보 지점과 각 지점의 통계를 요약해 표시한다. OpenCV, 파이썬 이미징 라이브러리(Python Imaging Library), PIL, NumPy, tkinter에 대한 경험을 얻을 수 있다.
8장 OpenCV로 이미지를 처리하고 맷플롯립으로 시각화하기 – “멀리 떨어져 있는 외계행성을 찾아라”
외계행성이 항성의 앞을 통과하는 우주적 사건을 시뮬레이션하면서, 상대적인 광도 변화를 그래프로 그리고 행성의 지름을 추정한다. 새로 발사된 제임스 웹 우주 망원경이 직접 외계행성을 관찰한 결과를 시뮬레이션해서 행성의 하루 길이를 추산하면서 8장을 끝낸다. OpenCV, NumPy, matplotlib을 사용한다.
9장 OpenCV로 얼굴 형태 감지하기 – “사람과 외계인을 구별해내는 피아식별 장치를 만들라”
비전을 이용해 우주군 해병대와 적대적인 돌연변이를 구분하는 자동 포탑을 프로그래밍한다. OpenCV, NumPy, playsound, pyttsxw, datetime을 사용한다.
10장 머신러닝 알고리즘으로 개인별 얼굴 인식하기 – “외계인의 실험실 침입을 막아라”
얼굴 인식을 통해 보호된 실험실에 대한 접근을 제한한다. OpenCV, NumPy, playsound, pyttsxw, datetime을 사용한다.
11장 판다스와 시각화 도구로 지도 그리기 – “인터랙티브한 인구 밀도 지도를 만들어 좀비떼로부터 탈출하라”
TV 드라마 <워킹 데드>의 생존자들이 애틀랜타에서 탈출해 미국 서부의 안전한 지대로 대피하도록 돕는 인구 밀도 지도를 만든다. pandas, bokeh, holoviews, webbrowser 를 사용한다.
12장 프로파일러로 프로그램 실행 속도 추정하기 – “우리는 지금 현실 세계에 있는가 가상 세계에 사는가”
시뮬레이션 안의 존재(어쩌면 우리 자신일 수도 있음)가 자신이 컴퓨터 시뮬레이션 안에 살고 있음을 알 수 있는 증거를 찾는 방법을 식별한다. turtle, statistics, perf_counter를 사용한다.