독자 여러분이 지금까지 그저 파이썬 언어의 구문만 만지작거리는 수준이었다면, 이 책에서 다루는 [실습 프로젝트]를 직접 수행함으로써 프로그램을 완벽하게 작성하는 수준으로 즉시 성장할 수 있을 것이다. 이 책에서 우리는 실험을 수행하고, 통계 개념을 탐구하며, 외계 행성을 탐지하는 등 인류의 역사 속에서 천재들을 괴롭혔던 새로운 문제를 해결하면서 파이썬 기술을 연마해 나간다.
각 장은 명확히 프로젝트의 목표를 정의하면서 시작하고, 문제를 공략하는 방법을 논의한 다음, 전문 프로그래머처럼 생각하도록 고안된 16가지 실습 과제를 다뤄본다. 이 책에서 함께 해안 경비대의 수색 및 구조 작업을 돕고, 나사(NASA)의 달 비행을 계획하고 실행하며, 얼굴 인식을 사용해 보안이 필요한 실험실의 출입을 제한하는 등의 과업을 수행해보자.
이 책의 실습 프로그램은 초보자도 쉽게 이해할 수 있다. 하지만, 단계가 진행됨에 따라 점차 수준 높은 기법을 배울 수 있으며, 그에 따라 여러분의 코딩 능력도 향상될 것이다. 이 책에서 주어진 과업을 모두 달성하고 나면, 파이썬을 활용해 실생활의 여러 문제를 풀 수 있는 역량을 갖추게 될 것이다.
| 이 책에서 다루는 내용 |
- 맷플롯립(matplotlib), 넘파이(NumPy, 보케(Bokeh), 판다스(pandas), 리퀘스츠(Requests), 뷰티플 수프(Beautiful Soup) 등의 라이브러리 사용법
- NLTK와 OpenCV 같은 자연어 처리와 컴퓨터 비전 모듈을 다루는 방법
- 별 시야(star field)상에서 이동하는 천체를 감지하고 추적하는 프로그램을 작성해보는 프로젝트
- 인터넷에서 연설문을 스크레이핑해서 자동으로 요약해보는 프로젝트
- 화성 궤도 레이저 고도계(MOLA) 지도를 사용해 화성 우주선이 착륙할 지점을 선택하는 프로젝트
- 데이터 시각화와 그래프 그리기 도구의 도움을 받아서 좀비 아포칼립스 상황에서 살아남게 하는 프로젝트
| 이 책의 구성 |
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를 사용한다.
각 장의 끝에는 [실습 프로젝트]나 [도전 프로젝트]가 있다. 해답은 이 책의 부록에 실려 있다. 이 책이 제시한 답이 유일한 정답은 아니며, 어쩌면 여러분만의 더 나은 해답을 찾을 수 있을 것이다. 하지만 [도전 프로젝트]는 여러분이 직접 해결해야 한다. 직접 해보거나 아니면 포기하거나 둘 중 하나이며, 직접 해보는 것은 무언가를 배우는 아주 훌륭한 방법이다. 이 책이 여러분에게 새로운 프로젝트를 시작할 동기가 되길 바란다. 이 책의 코드와 [실습 프로젝트] 해답을 이 책의 깃허브 페이지인 https://github.com/onlybooks/python-projects에서 다운로드할 수 있다.
| 이 책의 대상 독자 |
이 책은 2년 차 개발자를 대상으로 한 파이썬 서적이다. 기본 프로그래밍 기법은 다루지 않으며, 핸즈온 프로젝트를 기반으로 하는 실전 연습을 목표로 한다. 따라서 여러분은 이미 배운 개념을 재탕한 책을 사느라 쓸데없는 돈을 들이거나 책꽂이를 채우지 않아도 된다. 이 책에서는 프로젝트의 모든 단계를 설명하며, 라이브러리나 모듈을 사용하는 자세한 절차를 제시할 것이다. 물론 라이브러리나 모듈을 설치하는 방법도 함께 설명한다.
[지은이의 글]
파이썬 코딩 기초를 배웠다면 실제 세상에서 써먹을 수 있는 완전한 프로그램을 작성할 준비가 된 것이다. 이 책에서는 아폴로 8호의 달 착륙 경쟁을 돕고, 클라이드 톰보(Clyde Tombaugh)가 명왕성을 발견하도록 도우며, 화성에서 운행될 로버(Rover)가 활동할 착륙 지점을 선택하고, 외계행성의 위치를 찾고, 친구들에게 극비 메시지를 보내며, 괴물 돌연변이들과 싸우고, 난파선 선원을 돕고, 좀비로부터 탈출하는 등의 모험을 모두 파이썬 프로그래밍 언어를 사용해 진행할 것이다. 이 과정에서 OpenCV, NLTK, NumPy, pandas, matplotlib 등의 컴퓨터 비전, 자연어 처리, 과학 계산 모듈을 사용하고 여러분의 프로그래밍 생활을 편하게 해줄 다양한 패키지들도 살펴본다.
파이썬 코딩 기초를 배웠다면 실제 세상에서 써먹을 수 있는 완전한 프로그램을 작성할 준비가 된 것이다.
[옮긴이의 글]
프로그래밍 언어를 배울 때는 보통 기본 문법을 배우고, 간단한 예제를 풀어보면서 다양한 프로그래밍 요소와 표준 라이브러리를 문제를 해결할 때 활용하는 방법을 익히게 된다. 이 정도 수준이 되면 이제부터 할 수 있는 일이 무궁무진해지지만, 오히려 할 수 있는 일이 너무 많아서 무엇을 해야 할지 정하지 못하고 주저하는 사이 시간은 가고 언어에 대해 배웠던 지식도 머릿속에서 사라져가는 경우가 흔히 있다.
이럴 때 가장 좋은 방법은 일상생활에서 해결하고 싶은 일을 찾아서 프로젝트를 시작하는 것이다. 보통 주변에서 절실히 필요한 무언가가 있을 때 생산성도 높아지고, 자기 자신에게 절실한 현실의 문제를 제대로 푸는 프로그램을 개발하면 의외로 그 프로그램이 남에게도 유용하다는 사실을 발견하고 그 자체가 큰 사업이 되거나 제품이 되는 경우도 흔히 있다.
하지만 적절한 프로젝트를 찾지 못한 사람은 이 책에서 큰 도움을 얻을 수 있다. 이 책은 천문학이나 로켓과학, 인공지능 등의 분야에서 실제로 해결해야 했던 문제나 있을 법한 문제를 파이썬으로 푸는 방법을 보여준다. 문제 자체도 흥미진진하고, 문제에 얽힌 역사적·과학적 사실도 재미 삼아 읽기에 부족함이 없으며, 문제를 해결하기 위한 아이디어를 프로그램으로 풀어나가는 방법 또한 흥미진진하다. 그리고 이런 복잡한 문제를 파이썬과 파이썬 생태계에 존재하는 편리한 라이브러리를 통해 얼마나 짧은 코드로 쉽게 풀 수 있는지를 감상하면서 감탄하는 경험도 할 수 있다.
아무쪼록 파이썬 기초를 뗀 독자들이 이 책을 통해 프로그래밍의 재미를 더 느끼고 파이썬 기술도 한층 더 갈고닦기 바란다.
추천사
초보 딱지를 떼고 실생활과 연관된 재미 있는 예제를 찾아나선 파이썬 프로그래머라면 이 책을 읽어야 한다.
- <긱 테크 스터프(Geek Tech Stuff)>
파이썬을 공부하는 모든 이에게 초강추!
- 켈리 퍼레디스(Kelly Paredes) / ‘티칭 파이썬(Teaching Python)’ 팟캐스트 운영자
머신러닝은 배웠는데 그걸로 당최 뭘 해야 할지 모른다면 이 책을 읽어라!
- 이안 마이저(Ian Mizer) / 애틀란타 파이썬 프로그래머 그룹
이 책을 읽고 바로 실행해보라. 어느 분야에서 일하든, 실세계의 문제를 해결하는 프로그램을 짜고 도전적인 과제를 해결할 준비가 된 자신을 발견하게 될 것이다.
- 샌드라 헨리스토커(Sandra Henry-Stocker) / <네트워크 월드(IDG)> 리눅스 저널리스트
프로그래밍 세상에 첫발을 내디뎠을 때가 생각나는가? 컴퓨터라는 만능 기계를 완전히 통제할 수 있다는 기쁨도 잠깐이고, 말이 통하지 않는 하인을 어떻게 활용해야 할지 난관에 부딪히면서 좌절감이 들기 시작한다. 모든 일을 할 수 있으면서, 한편 아무 일도 하지 못하는 컴퓨터를 길들이기 위해 여러 가지 시도를 한다. 프로그래밍 언어를 배우면서 표준 라이브러리를 기웃거리다가, 다양한 프레임워크와 외부 라이브러리를 활용하면서 오픈소스로 만들어진 각종 소프트웨어를 실행하고 경우에 따라 뜯어보게 된다. 여기까지 진행해왔다면 근본적인 질문이 떠오르기 마련이다. 실생활에서 부딪히는 문제를 풀기 위해 컴퓨터를 활용하려 한 건데 정작 나는 컴퓨터가 제대로 동작하게 만드는 기술만 익히고 있는 건 아닐까?
하지만 현실에서 직면한 문제를 잘 정의한 다음에 컴퓨터가 해결하도록 만드는 작업은 결코 쉽지 않다. 많은 대기업과 스타트업의 사무실에서 수많은 개발자들이 매일같이 더 나은 세상을 만들기 위한 소프트웨어 개발에 매진하고 있다는 사실이 이를 증명한다. 사람은 모호한 요구사항도 적절히 알아서 처리하는 융통성이 있지만, 컴퓨터는 한 바이트만 잘못되어도 문제 풀이를 거부한다. 아니, 이는 지극히 사람 관점으로 바라본 아쉬움이고, 컴퓨터는 사람의 명령을 거부하는 대신 잘못된 한 바이트까지 묵묵하게 수행할 뿐이다. 소프트웨어 개발이 어려운 이유를 설명하려면, 컴퓨터가 존재하는 세상과 사람이 살아가는 세상 사이에는 크나큰 간극이 존재한다는 사실에서 출발할 필요가 있다.
그렇다면 학습 목적이나 개인적인 취미 목적으로 컴퓨터에게 제대로 된 문제 풀이를 시키기 위해 어떤 연습이 필요할까? 수학이나 논리학을 공부해 엄정한 요구사항을 뽑아내면 될까? 아니면 공학적인 관점에서 접근해 미리 만들어진 라이브러리나 프레임워크를 활용해 API를 적절히 조합하면 될까? 그것도 아니면, 다양한 실험을 통해 시행착오를 거치면서 원하는 결과를 도출할 때까지 알고리즘을 개선하면 될까? 결론적으로 이 모든 연습이 필요하지만 체계적이면서도 안전하게 연습할 가상의 놀이터를 찾기란 쉽지 않다. 우리에게는 아주 쉽지도 그렇다고 어렵지도 않은 문제를 확보하고, 수학적이고 과학적인 방법으로 문제의 해법을 정리하며, 라이브러리와 프레임워크를 사용해 코드를 작성하고, 그 코드를 발전시켜가면서 점진적으로 개선하기 위한 지침이 필요하다.
이 책 『실전 파이썬 핸즈온 프로젝트』는 프로그래밍 언어나 기술 관점에서 만들어낸 ‘예제를 위한 예제’를 소개하는 선에서 그치지 않고, 현실에서 찾아볼 수 있는 문제를 해결하기 위한 기술적인 접근 방식을 소개한다. 요식 체계를 대폭 줄여 다루기 쉬운 파이썬 언어로 다양한 문제를 직접 풀어보며 그 과정에서 이론과 실전을 조합하는 방식에 대해 감을 잡고 실제 현실에 적용하는 역량을 배양하는 것이 이 책의 주요 목표다. 파이썬 기본 프로그래밍 방법만 알고 있으면, 넘파이, OpenCV, NLTK, 판다스, 맷플롯립 등의 라이브러리 설치와 사용 방법은 물론이고, 제대로 된 파이썬 프로그램을 만들기 위한 클래스와 함수 설계와 구성 방법도 실제 사례로 배울 수 있다.
이 책에서는 단순히 데이터베이스에서 값을 가져오고, 사용자 인터페이스에서 입력받은 값을 저장하는 전형적인 CRUD(Create, Read, Update, Delete) 형태의 업무용 애플리케이션이 아니라, 다양한 형태의 비정형 데이터(이미지, 텍스트 등)와 정형 데이터(CSV 형태의 표 데이터)를 활용해 원하는 문제를 통계적인 방식과 머신러닝 방식으로 해결하는 애플리케이션을 소개하기에, 어떻게 보면 미래 예비 데이터 과학자를 위한 현실적이면서도 흥미로운 파이썬 입문서로 봐도 좋을 것 같다. 이 책에서 제공하는 데이터 과학을 비롯해, 머신러닝과 인공지능 분야에서 자주 등장하는 다양한 문제는 복잡한 하드웨어나 소프트웨어 구성 없이도 부담 없이 풀 수 있다.
소설의 원작자를 찾고, 핵심 문장을 뽑아내고 단어 구름을 만들며, 나만의 해독 불가능한 암호문을 작성하고, 천체 이미지로 명왕성을 찾고, 아폴로 8호의 궤적을 시뮬레이션하고, 화성 이미지를 분석해 안전한 화성 착륙 지점을 찾고, 물리학 법칙을 응용해 멀리 떨어진 외계행성도 찾으며, 머신러닝을 활용해 얼굴 형태를 넘어서 개인별 얼굴을 인식하고, 인구 밀도 지도를 상호대화식으로 구성해 시각화를 하는 등 통계학, 물리학, 천문학 영역에 해당하는 재미있는 내용이 연이어 나오므로, 어릴 때 과학 잡지를 읽으면서 상상의 나래를 펼쳤던 과학 애호가들이라면 이 책을 무척 재미있게 읽을 수 있으리라 생각한다.
각 장에 나온 내용을 즐겁게 읽은 다음에는 기존 프로그램을 확장하는 방식으로 설계된 [실습 프로젝트]를 직접 풀어보고 [도전 프로젝트]에 나오는 고급 내용까지 해결해보자. 그러고 나서 결과물을 정리해 깃허브 저장소에 올려 자신만의 해법을 외부에 공개하면, 여느 포트폴리오도 부럽지 않을 것이다. 아무쪼록 이 책과 함께 독자 여러분들의 문제 풀이 실력이 한 단계 더 높아지면 좋겠다.
- 박재호 / ‘컴퓨터 vs 책’ 블로그 운영자, 유튜브 채널 운영자(https://youtube.com/c/박재호dev), 『클린 코드』 역자
펼쳐보기
리 본
프로그래머이며, 열렬한 대중문화 애호자이자 교육자이고, 저자로 활약 중이다. 엑슨모빌ExxonMobil의 임원급 과학자로, 수십 년 동안 복잡한 컴퓨터 모델을 구성, 검토하고, 소프트웨어를 개발, 테스트했으며, 지질학자와 엔지니어를 교육해왔다. 독학을 하는 파이썬 프로그래머들이 자신의 파이썬 기술을 날카롭게 다듬으면서 흥미를 느낄 수 있도록 이 책과 『신비한 파이썬 프로젝트』(영진닷컴, 2020)를 저술했다.
옮긴이 오현석
비사이드소프트BSIDESOFT 이사로 일하면서 매일매일 고객의 요청에 따라 코드를 만들어내고 있는 현업 개발자다. 어릴 때 처음 컴퓨터를 접하고 매혹된 후 경기과학고, KAIST 전산학과(프로그래밍 언어 전공 석사)를 거치면서 계속 컴퓨터를 사용해왔다.
직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 빈 시간에는 번역을 하거나 공부를 하면서 즐거움을 찾는다. 시간이 아주 많이 남을 때는 시뮬레이션 게임을 하면서 머리를 식히며 놀고, 어떻게 하면 막내자식을 프로그래밍의 세계로 끌어들일 수 있을까 고민 중인 아빠이기도 하다.
『코어 파이썬 애플리케이션 프로그래밍 Core Python Applications Programming Third Edition』(에이콘출판, 2014)을 시작으로 『Kotlin in Action』(에이콘출판, 2017), 『한 권으로 읽는 컴퓨터 구조와 프로그래밍』(책만, 2021), 『파이썬으로 살펴보는 아키텍처 패턴』(한빛미디어, 2021), 『Programming in Scala 4/e』(에이콘출판, 2021) 등 30여 권의 책을 번역했다.
펼쳐보기