파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문 (개정판)

웹 크롤링과 스크레이핑부터 머신러닝ㆍ딥러닝까지 체계적으로 배우기

BeautifulSoup, scikit-learn, TensorFlow를 사용하여 실무에 머신러닝/딥러닝을 적용해 보자!

인공지능, 머신러닝, 딥러닝은 바둑, 의료, 자동차 등 이미 다양한 분야에서 성공적인 성과를 보여주고 있습니다. 이러한 머신러닝, 딥러닝과 관련된 성공 사례를 듣고 나면 실제 업무에서도 활용해보고 싶을 것입니다. 사실 머신러닝이라고 하면 어려운 수학과 관련된 지식이 필요하다고 생각하는 경우가 많지만, 그렇게까지 어려운 수학을 사용하는 경우는 거의 없습니다. 활용할 데이터만 가지고 있다면 자신이 원하는 것을 만들어낼 수 있습니다.

『파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문』에서는 머신러닝의 바탕이 되는 데이터를 수집하고, 수집된 데이터를 기반으로 머신러닝을 수행하는 방법을 설명합니다. 인터넷에서 데이터를 어떻게 효율적으로 수집하는지 알아보고, 머신러닝을 원활하게 할 수 있게끔 데이터를 가공하는 방법을 살펴봅니다. 나아가 가공된 데이터를 이용해 챗봇 제작, 규동 메뉴 이미지 판정, 얼굴 인식 등 머신러닝에 활용하는 과정까지 실질적인 파이썬 예제 코드로 소개합니다.

이번 개정판에서는 Selenium 라이브러리 사용 방법의 변경, Scrapy 프레임워크 관련 내용의 추가, 일부 예제의 수정 등의 내용이 보강되었습니다.

 

동영상 강의

쿠지라 히코우즈쿠에

중학교 시절부터 취미로 하던 프로그래밍이 재미있어 다양한 것들을 만들다가 프로그래머가 되었다. 현재는 소프트웨어 기획 획사 '쿠지라한도'에서 '재미있고 도움되는 도구'를 주제로 윈도우, 안드로이드 등에서 동작하는 앱을 공개하고 있다. 대표작은 도레미로 작곡할 수 있는 음악 소프트웨어 '텍스트 음악 사쿠라'와 '일본어 기반 프로그래밍 언어 나데시코' 등이다. 2001년에는 온라인 소프트웨어 대상을 받았으며, 2004년 IPA 청소년부에서 슈퍼크리에이터로 인정을 받았고, 2010년에 OSS 공헌자 상을 수상했다. 프로그래밍의 즐거움을 전달하기 위해 매일 분투하고 있다.

윤인성

어쩌다가 책을 집필/번역하기 시작해서, 지금까지 계속해서 집필/번역하고 있다. 현재 직업 특성상 집에서 나갈 이유가 별로 없다는 것에 굉장히 만족하고 있다. 오전에는 커피, 오후에는 홍차를 마신다. 요리, 피아노, 기타, 작곡, 그림, 스컬핑 등의 취미를 갖고 있다. 《파이썬을 활용한 크롤러 개발과 스크레이핑 입문》 《파이썬을 이용한 머신러닝, 딥러닝 실전 앱 개발》 《텐서플로로 시작하는 딥러닝 입문》 《크롤링 핵심 가이드》 《파이썬을 이용한 웹 크롤링과 스크레이핑》 등을 번역했다. 이 책의 역자 소개를 작성하는 시점을 기준으로 50번째 책이다.

  • ▣ 00장: 머신러닝을 위한 데이터 처리
    • 0-1. 크롤링, 스크레이핑, 머신러닝
      • 인터넷의 빅데이터
      • 스크레이핑, 크롤링, 데이터 가공
      • 머신러닝에 사용할 수 있는 데이터의 구조
    •  
  • ▣ 01장: 크롤링과 스크레이핑
    • 1-1. 데이터 다운로드하기
      • 웹상의 정보를 추출하는 방법
      • urllib.request를 이용한 다운로드
      • 웹에서 데이터 추출하기
      • BeautifulSoup로 스크레이핑하기
    • 1-2. BeautifulSoup로 스크레이핑하기
      • 네이버 금융에서 환율 정보 추출하기
      • 웹 브라우저로 HTML 구조 확인하기
    • 1-3. CSS 선택자
      • 위키 문헌에 공개돼 있는 윤동주 작가의 작품 목록 가져오기
      • CSS 선택자 자세히 알아보기
      • CSS 선택자로 추출 연습하기
      • 정규 표현식과 함께 조합하기
    • 1-4. 링크에 있는 것을 한꺼번에 내려받기
      • 한꺼번에 다운받는 데 필요한 처리 내용
      • 상대 경로를 전개하는 방법
      • 재귀적으로 HTML 페이지를 처리하는 방법
    •  
  • ▣ 02장: 고급 스크레이핑
    • 2-1. 로그인이 필요한 사이트에서 다운받기
      • HTTP 통신
      • requests 사용해보기
    • 2-2. 웹 브라우저를 이용한 스크레이핑
      • 웹 브라우저 원격 조작에 사용하는 Selenium
      • 웹 사이트를 이미지로 캡처해보기
      • 네이버에 로그인해서 구매한 물건 목록 가져오기
      • Selenium으로 스크레이핑하는 방법
      • 자바스크립트 실행해보기
    • 2-3. 웹 API로 데이터 추출하기
      • 웹 API
      • 웹 API를 제공하는 이유
      • 웹 API 사용해보기 - OpenWeatherMap의 날씨 정보
      • 국내에서 사용할 수 있는 웹 API
    • 2-4. cron을 이용한 정기적인 크롤링
      • 정기적인 크롤링
      • 매일 환율 정보 저장하기
      • cron으로 매일 한 번 실행하기
      • crontab 설정 방법
    • 2-5. Scrapy를 이용한 스크레이핑
      • Scrapy란?
      • Scrapy 설치
      • Scrapy 시작하기
      • Scrapy를 셸로 실행해서 테스트해보기
    • 2-6. Scrapy를 이용한 위키북스의 도서 표지 다운로드
      • 위키북스의 전체 도서 목록 다운로드
      • 이미지 파일을 다운로드하려면?
    • 2-7. Scrapy와 Selenium을 이용한 동적 웹 사이트 다운로드
    •  
  • ▣ 03장: 데이터 소스의 서식과 가공
    • 3-1. 웹의 다양한 데이터 형식
      • 텍스트 데이터와 바이너리 데이터
      • XML 분석
      • JSON 분석
      • YAML 분석
      • CSV/TSV 분석
      • 엑셀 파일 분석
    • 3-2. 데이터베이스
      • 데이터베이스
      • 데이터 저장에는 어떤 데이터베이스를 사용해야 할까?
      • SQLite - 가볍게 파일 하나로 사용할 수 있는 데이터베이스
      • MySQL 사용하기
      • TinyDB 사용하기
    •  
  • ▣ 04장: 머신러닝
    • 4-1. 머신러닝이란?
      • 머신러닝 개요
      • 머신러닝의 종류
      • 머신러닝의 흐름
      • 머신러닝의 응용 분야
      • 초과 학습(초과 적합)
    • 4-2. 머신러닝 첫걸음
      • 머신러닝 프레임워크 scikit-learn
      • XOR 연산 학습해보기
      • 붓꽃의 품종 분류하기
    • 4-3. 이미지 내부의 문자 인식
      • 손글씨 숫자 인식하기
      • 이미지 데이터 학습시키기
    • 4-4. 외국어 문장 판별하기
      • 외국어 판정
      • 판정 방법
      • 샘플 데이터 수집
      • 언어 판별 프로그램
      • 웹 인터페이스 추가하기
    • 4-5. 서포트 벡터 머신(SVM)
      • SVM이란?
      • SVM을 실제로 사용해보기
      • SVM의 종류
    • 4-6. 랜덤 포레스트
      • 랜덤 포레스트란?
      • 랜덤 포레스트 사용하기
    • 4-7. 데이터를 검증하는 방법
      • 크로스 밸리데이션
      • 그리드 서치
    •  
  • ▣ 05장: 딥러닝
    • 5-1. 딥러닝 개요
      • 딥러닝
    • 5-2. TensorFlow 설치하기
      • TensorFlow
      • 설치 방법
      • 설치가 제대로 됐는지 확인하기
      • TensorFlow로 간단한 계산해보기
    • 5-3. Jupyter Notebook
      • Jupyter Notebook 설치하고 실행하기
      • 새 노트 만들기
      • 데이터 시각화
      • TensorFlow와 함께 사용하기
    • 5-4. TensorFlow 기본
      • TensorFlow 기본
      • 머신러닝 해보기
    • 5-5. TensorBoard로 시각화하기
      • TensorBoard의 사용법
    • 5-6. TensorBoard로 딥러닝하기
      • 딥러닝의 구조
      • 딥러닝 해보기 - MNIST 손글씨 데이터
    • 5-7. Keras로 다양한 딥러닝 해보기
      • Keras
      • Keras로 MNIST 테스트해보기
      • Keras로 비만도 판정해보기
    • 5-8. Pandas/NumPy 다루기
      • Pandas/NumPy
      • 데이터 조작
      • Pandas/Numpy 정리
    •  
  • ▣ 06장: 텍스트 분석과 챗봇 만들기
    • 6-1. 한국어 분석(형태소 분석)
      • 형태소 분석
      • 한국어 형태소 분석 라이브러리
      • 출현 빈도 분석
    • 6-2. Word2Vec으로 문장을 벡터로 변환하기
      • Word2Vec
      • Gensim 설치
      • Gensim의 Word2Vec으로 “토지”를 읽어보기
      • 위키피디아 한국어 버전을 사전으로 사용해보기
      • 위키피디아 데이터로 놀아보기
    • 6-3. 베이즈 정리로 텍스트 분류하기
      • 텍스트 분류
      • 베이즈 정리
      • 나이브 베이즈 분류
      • 베이지안 필터 사용해보기
    • 6-4. MLP로 텍스트 분류하기
      • MLP로 텍스트 분류하기
    • 6-5. 문장의 유사도를 N-gram으로 분석하기
      • 문장의 유사도 분석
      • 레벤슈타인 거리
      • 파이썬으로 레벤슈타인 거리를 계산하는 프로그램
      • N-gram으로 유사도 구하기
    • 6-6. 마르코프 체인과 LSTM으로 문장 생성하기
      • 마르코프 체인과 LSTM/RNN
      • 마르코프 체인이란?
      • 마르코프 체인 구현하기
      • LSTM/RNN
    • 6-7. 챗봇 만들기
      • 챗봇(회화 봇)
      • 챗봇의 구조
    •  
  • ▣ 07장: 이미지와 딥러닝
    • 7-1. 유사 이미지 검출하기
      • 간단한 형태 인식 - Average Hash
    • 7-2. CNN으로 Caltech 101의 이미지 분류하기
      • CNN으로 색상 있는 이미지 분류해보기
    • 7-3. 규동 메뉴 이미지 판정하기
      • 규동을 판정할 수 있는 PC가 좋은 PC
      • 스크레이핑부터 시작하기
    • 7-4. OpenCV로 얼굴 인식하기
      • OpenCV
      • 얼굴을 인식하는 프로그램 만들어보기
      • 얼굴에 모자이크 걸기
    • 7-5. 이미지 OCR - 연속된 문자 인식하기
      • OpenCV로 텍스트 영역 확인하기
      • 문자 인식 데이터 만들기
      • 다양한 숫자 폰트 학습시키기
    •  
  • ▣ 부록: 개발 환경 구축
    • 부록-1. VirtualBox/Vagrant 사용법
      • VirtualBox 설치하기
      • Ubuntu 설치하기
      • Docker란?
      • Docker 설치
    • 부록-2. Docker로 개발 환경 구축하기
      • macOS에서 Docker for Mac 설치하기
      • Docker에 Ubuntu 설치하기
    • 부록-3. 파이썬 + Anaconda 환경 준비
      • 기타 설치

예제코드 다운로드

파일 압축 해제 시 주의사항

윈도우 운영체제에서 제공하는 기본 압축 프로그램을 이용해 아래의 데이터 파일의 압축을 풀 때 문제가 생길 경우 번거로우시더라도 반디집 등의 전문 압축 프로그램을 이용해 압축을 해제해 보시기 바랍니다.


  • 26쪽, 페이지 하단 네이버 금융의 시장 지표 페이지

    http://info.finance.naver.com/marketindex/
    

    ==>

    http://finance.naver.com/marketindex/
    
  • 27쪽, 예제 코드의 5번째 줄

    url = "http://info.finance.naver.com/marketindex/"
    

    ==>

    url = "http://finance.naver.com/marketindex/"
    
  • 35쪽, 페이지 중간의 명령줄 실행 결과

    $ python3
    

    ==>

    $ python3 sel-dongju.py
    
  • 40쪽, 페이지 상단 예제 코드의 2번째 줄

    print(soup.select_one("li:nth-of-type(8)").string)   #(※1)
    

    ==>

    print(soup.select_one("ul:nth-of-type(2) > li:nth-of-type(4)").string)   #(※1)
    
  • 40쪽, 본문 2번째 줄

    일단 (※1) 방법에서는 모든 <li> 태그 중에서 8번째 요소를 추출하는 것입니다.

    ==>

    일단 (※1) 방법은 2번째 <ul> 태그 내부의 4번째 <li> 태그를 선택하는 것입니다.

  • 62쪽, 예제 코드의 15번째 줄

    url_login = "http://www.hanbit.co.kr/member/login_proc.php"
    

    ==>

    url_login = "https://www.hanbit.co.kr/member/login_proc.php"
    
  • 72쪽, 페이지 상단 예제 코드의 2번째 줄

    products = browser.find_elements_by_css_selector(".p_info span")
    

    ==>

    products = browser.find_elements_by_css_selector(".name")
    
  • 72쪽, 본문 첫째 줄에 각주 추가

    명령줄에서 실행해봅시다.

    ==>

    명령줄에서 실행해봅시다.각주


    각주 (엮은이) 네이버 로그인 시 자동입력 방지문자를 입력하는 단계가 추가되어 이 예제를 헤드리스 모드로 실행하면 결과를 얻지 못하게 되었습니다. headless 옵션을 해제하고, 파이썬 셸 또는 5장에서 소개하는 주피터 노트북을 이용해 실습하세요.

    단, 도커나 vagrant로 리눅스 가상 머신을 구성해 실습하는 경우 시스템 구성에 따라 ‘헤드 있는’ 모드로 실습이 불가할 수 있습니다.

  • 112쪽, 페이지 하단의 예제 코드 파일명

    src/ch2/coupang/selenium_middleware.py

    ==>

    src/ch2/coupang/coupang/selenium_middleware.py

  • 114쪽, 페이지 상단 명령어

    $ scrapy genspider coupang coupang.com
    

    ==>

    $scrapy genspider coupang1 coupang.com
    
  • 114쪽, 예제 코드의 10번째 줄

    name = 'coupang'
    

    ==>

    name = 'coupang1'
    
  • 115쪽, 본문 첫 번째 줄 아래의 명령줄

    $ scrapy crawl coupang -o coupang.json
    

    ==>

    $ scrapy crawl coupang1 -o coupang.json
    
  • 124쪽, 본문 첫 번째 줄 아래의 명령줄

    $ python download-png1.py
    

    ==>

    $ python3 xml-forecast.py
    
  • 131쪽, 페이지 상단 예제 코드의 9번째 줄

    data = yaml.load(yaml_str)
    

    ==>

    data = yaml.safe_load(yaml_str)
    
  • 131쪽, 본문 밑에서 2번째 줄

    이처럼 yaml.load() 함수를 사용하면

    ==>

    이처럼 yaml.safe_load() 함수를 사용하면

  • 132쪽, 페이지 상단 예제 코드의 9번째 줄

    data = yaml.load(yaml_str)
    

    ==>

    data = yaml.safe_load(yaml_str)
    
  • 136쪽, 페이지 상단 예제 코드의 6번째 줄

    data = yaml.load(yaml_str)
    

    ==>

    data = yaml.safe_load(yaml_str)
    
  • 145쪽, 본문 밑에서 2번째 줄

    프로그램을 실행하면 "population-total.xlsx"라는 파일이

    ==>

    프로그램을 실행하면 "population.xlsx"라는 파일이

  • 146쪽, 페이지 하단 예제 코드의 6번째 줄

    book = pd.read_excel(filename, sheet_name=sheet_name, header=1) # 첫 번째 줄부터 헤더
    

    ==>

    book = pd.read_excel(filename, sheet_name=sheet_name, header=1, engine='openpyxl')
    
  • 152쪽, 페이지 하단 예제 코드의 파일명

    file: src/ch3/sqlite-test2.py
    

    ==>

    file: src/ch3/sqlite3-test2.py
    
  • 153쪽, 페이지 하단 명령줄

    $ python3 sqlite-test2.py
    

    ==>

    $ python3 sqlite3-test2.py
    
  • 155쪽, 본문 2번째 줄에 각주를 추가

    "test-password"라고 입력하겠습니다.

    ==>

    "test-password"라고 입력하겠습니다.각주


    각주 (엮은이) sudo mysql_secure_installation 명령을 실행해 패스워드를 설정합니다.

  • 155쪽, 본문 밑에서 2번째 줄에 각주를 추가

    "test-password"를 입력합니다.

    ==>

    "test-password"를 입력합니다.각주


    각주 (엮은이) sudo mysql 명령으로도 로그인할 수 있습니다.

  • 156쪽, 예제 코드의 15번째 줄

    cur.execute('DROP TABLE items')
    

    ==>

    cur.execute('DROP TABLE IF EXISTS items')    
    
  • 158쪽, 예제 코드의 9번째 줄

    db.purge_table('fruits')
    

    ==>

    db.drop_table('fruits')
    
  • 159쪽, 본문 4번째 줄

    데이터를 제거하는 purge_table()을 사용해

    ==>

    데이터를 제거하는 drop_table()을 사용해

  • 172쪽, 페이지 하단 예제 코드의 13~14번째 줄

    xor_data = xor_df.ix[:,0:1] # 데이터
    xor_label = xor_df.ix[:,2] # 레이블
    

    ==>

    xor_data = xor_df.loc[:,0:1] # 데이터
    xor_label = xor_df.loc[:,2] # 레이블
    
  • 174쪽, 페이지 중간의 iris.csv 파일의 URL을 아래 URL로 교체

    https://github.com/pandas-dev/pandas/blob/master/pandas/tests/io/data/csv/iris.csv
    
  • 176쪽, 페이지 상단 예제 코드의 2번째 줄

    data = csv[i][0:4]
    

    ==>

    data = csv[i][0:3]
    
  • 181쪽, 본문 첫 번째 줄에 각주를 추가

    프로그램을 만들어봅시다.

    ==>

    프로그램을 만들어봅시다.각주


    각주 (엮은이) 데이터셋을 내려받을 수 있는 주소가 변경되었습니다. 수정한 코드는 https://wikibook.co.kr/pyml-rev/의 예제 코드 링크를 참조하세요.

  • 197쪽, 본문 첫 번째 줄에 각주를 추가

    저장하는 프로그램입니다.

    ==>

    저장하는 프로그램입니다.각주


    각주 (엮은이) 매개변수 파일(freq.pkl)을 생성할 때 사용한 사이킷런 버전과 웹 서버를 실행할 때 사용하는 사이킷런 버전이 일치하지 않으면 오류가 발생할 수 있으므로 매개변수 파일을 생성해서 복사하는 과정을 건너뛰지 말고 수행하는 것이 좋습니다.

    또한 joblib을 임포트하는 구문이 import joblib으로 변경되었습니다. 수정한 코드는 https://wikibook.co.kr/pyml-rev/의 예제 코드 링크를 참조하세요.

  • 213쪽, 본문 밑에서 첫 번째 줄에 각주를 추가

    분류하는 프로그램입니다.

    ==>

    분류하는 프로그램입니다.각주


    각주 (엮은이) for 문에 사용한 .ix는 .loc로 바뀌었습니다. 수정한 코드는 https://wikibook.co.kr/pyml-rev/의 예제 코드 링크를 참조하세요.

  • 222쪽, 본문 밑에서 첫 번째 줄에 각주를 추가

    사용한 프로그램입니다.

    ==>

    사용한 프로그램입니다.각주


    각주 (엮은이) GridSearchCV는 sklearn.model_selection로 이동했습니다. 수정한 코드는 https://wikibook.co.kr/pyml-rev/의 예제 코드 링크를 참조하세요.

  • 232쪽, 페이지 상단 명령줄

    # pip 업데이트
    $ sudo pip install -U pip
    # Tensorflow(CPU 버전) 설치
    $ pip install -U tensorflow==1.10.1
    # Keras 설치
    $ pip install keras==2.2.2
    # 추가 라이브러리
    $ pip install -U h5py graphviz pydot
    

    ==>

    # pip 업데이트
    $ sudo pip install -U pip
    # Tensorflow(CPU 버전) 설치
    $ pip install -U tensorflow
    # 추가 라이브러리
    $ pip install -U h5py graphviz pydot
    
  • 233쪽, 페이지 상단 명령줄

    # pip 업데이트
    $ pip install -U pip
    # Tensorflow(CPU 버전) 설치
    $ pip install -U tensorflow==1.10.1
    # Keras 설치
    $ pip install keras==2.2.2
    # 추가 라이브러리
    $ pip install -U h5py graphviz pydot
    

    ==>

    # pip 업데이트
    $ pip install -U pip
    # Tensorflow(CPU 버전) 설치
    $ pip install -U tensorflow
    # 추가 라이브러리
    $ pip install -U h5py graphviz pydot
    
  • 233쪽, 본문 4번째 줄과 하단의 명령줄(1번 각주도 삭제)

    ">>>"라고 표시된 부분에 소스코드를 입력합니다. 다음은 TensorFlow로 "Hello"라고 출력하는 프로그램입니다.

    >>> import tensorflow as tf
    >>> sess = tf.Session()
    >>> hello = tf.constant('Hello')
    >>> sess.run(hello)
    b'Hello'¹
    

    ==>

    ">>>"라고 표시된 부분에 소스코드를 입력합니다. 다음 코드는 설치된 TensorFlow의 버전을 화면에 출력합니다.

    >>> import tensorflow as tf
    >>> tf.__version__
    
  • 233쪽, 본문 밑에서 첫 번째 줄에 각주를 추가

    덧셈을 하는 프로그램입니다.

    ==>

    덧셈을 하는 프로그램입니다.각주


    각주 (엮은이) 텐서플로 2.x 코드는 https://wikibook.co.kr/pyml-rev/의 예제 코드 링크를 참고하세요.

  • 256쪽, 본문 5번째 줄에 각주를 추

    세션 그래프 설정을 한다는 것입니다.

    ==>

    세션 그래프 설정을 한다는 것입니다.각주


    각주 (엮은이) tf.train.SummaryWriter는 tf.summary.FileWriter로 변경되었습니다.

  • 266쪽, 본문 맨 마지막 줄에 각주를 추가

    데이터베이스를 내려받습니다.

    ==>

    데이터베이스를 내려받습니다.각주


    각주 (엮은이) tensorflow.examples.tutorials.mnist는 텐서플로 2.0에서 삭제되었습니다. 이 코드는 텐서플로 1.x에서만 실행됩니다.

  • 269쪽, 페이지 중간의 pd-test-norm.py 예제를 다음 코드로 교체

    import pandas as pd
    # 키, 체중, 유형 데이터프레임 생성하기
    tbl = pd.DataFrame({
        "weight": [ 80.0, 70.4, 65.5, 45.9, 51.2, 72.5 ],
        "height": [ 170,  180,  155,  143,  154,  160  ],
        "gender": [ "f",  "m",  "m",  "f",  "f",  "m"  ]
    })
    
    # 키와 몸무게 정규화하기
    tbl["weight"] /= 100
    tbl["height"] /= 200
    print(tbl)
    
  • 269쪽, 페이지 하단의 pd-test-norm.py 예제의 실행 결과를 다음 내용으로 교체

    $ python3 pd-test-norm.py
       weight  height gender
    0   0.800   0.850      f
    1   0.704   0.900      m
    2   0.655   0.775      m
    3   0.459   0.715      f
    4   0.512   0.770      f
    5   0.725   0.800      m
    
  • 270쪽, 페이지 하단의 pd-test-norm2.py 예제의 실행 결과를 다음 내용으로 교체

    $ python3 pd-test-norm2.py
    weight = 45.9 - 80.0
    height = 143 - 180
         weight    height gender
    0  1.000000  0.729730      f
    1  0.718475  1.000000      m
    2  0.574780  0.324324      m
    3  0.000000  0.000000      f
    4  0.155425  0.297297      f
    5  0.780059  0.459459      m
    
  • 287쪽, 페이지 중간의 예제 코드에 파일명을 추가

    file: src/ch5/pd-test-slice.py
    
  • 287쪽, 페이지 하단 명령줄

    $ python3 pd-test-slice.py
    tbl[2:4]
       height type weight
    2    155    n   65.5
    3    143    t   45.9
    tbl[2:]
       height type weight
    3    143    t   45.9
    4    154    t   51.2
    5    160    f   72.5
    

    ==>

    $ python3 pd-test-slice.py
    tbl[2:4]
        weight  height type
    2    65.5     155    n
    3    45.9     143    t
    tbl[3:]
        weight  height type
    3    45.9     143    t
    4    51.2     154    t
    5    72.5     160    f
    
  • 288쪽, 페이지 중간 명령줄

    $ python3 pd-test-filter.py
    --- height가 160 이상인 것
      gender height weight
    0     f    170   80.0
    1     m    180   70.4
    5     m    160   72.5
    --- gender가 m인 것
      gender height weight
    1     m    180   70.4
    2     m    155   65.5
    5     m    160   72.5
    

    ==>

    $ python3 pd-test-filter.py
    --- height가 160 이상인 것
       weight  height gender
    0    80.0     170      f
    1    70.4     180      m
    5    72.5     160      m
    --- gender가 m 인 것
       weight  height gender
    1    70.4     180      m
    2    65.5     155      m
    5    72.5     160      m
    
  • 289쪽, 페이지 중간 명령줄

    $ python3 pd-test-sort.py
    --- 키로 정렬
      gender height weight
    3     f    143   45.9
    4     f    154   51.2
    2     m    155   65.5
    5     m    160   72.5
    0     f    170   80.0
    1     m    180   70.4
    --- 몸무게로 정렬
      gender height weight
    0     f    170   80.0
    5     m    160   72.5
    1     m    180   70.4
    2     m    155   65.5
    4     f    154   51.2
    3     f    143   45.9
    

    ==>

    $ python3 pd-test-sort.py
    --- 키로 정렬
       weight  height gender
    3    45.9     143      f
    4    51.2     154      f
    2    65.5     155      m
    5    72.5     160      m
    0    80.0     170      f
    1    70.4     180      m
    --- 몸무게로 정렬
       weight  height gender
    0    80.0     170      f
    5    72.5     160      m
    1    70.4     180      m
    2    65.5     155      m
    4    51.2     154      f
    3    45.9     143      f
    
  • 291쪽, 페이지 하단 명령줄

    $ python3 pd-test-norm.py
      gender height weight
    0     f  0.850  0.800
    1     m  0.900  0.704
    2     m  0.775  0.655
    3     f  0.715  0.459
    4     f  0.770  0.512
    5     m  0.800  0.725
    

    ==>

    $ python3 pd-test-norm.py
       weight  height gender
    0   0.800   0.850      f
    1   0.704   0.900      m
    2   0.655   0.775      m
    3   0.459   0.715      f
    4   0.512   0.770      f
    5   0.725   0.800      m
    
  • 292쪽, 페이지 하단 명령줄

    $ python3 pd-test-norm2.py
    weight = 45.9 - 80.0
    height = 143 - 180
      gender    height   weight
    0     f  0.729730  1.000000
    1     m  1.000000  0.718475
    2     m  0.324324  0.574780
    3     f  0.000000  0.000000
    4     f  0.297297  0.155425
    5     m  0.459459  0.780059    
    

    ==>

    $ python3 pd-test-norm2.py
    weight = 45.9 - 80.0
    height = 143 - 180
         weight    height gender
    0  1.000000  0.729730      f
    1  0.718475  1.000000      m
    2  0.574780  0.324324      m
    3  0.000000  0.000000      f
    4  0.155425  0.297297      f
    5  0.780059  0.459459      m
    
  • 294쪽, 'Keras와 TensorFlow의 버전과 관련된 주의 사항' 칼럼 삭제

  • 298쪽, 페이지 하단 아래 내용의 각주를 삭제

    1 (옮긴이) 라이선스 문제로 텍스트 파일을 곧바로 제공하지 못하는 부분에 사과드립니다. 참고로 내려받을 때 “붙임자료를 내려받기 하시려면 들어가기를 해 주세요”라는 말이 나오는데, 여기서 “들어가기”란 로그인을 말합니다. 로그인하고 내려받아 주세요.

    ==>

    (삭제)

  • 305쪽, 페이지 상단 예제 코드의 3번째 줄

    size=200, window=10, hs=1, min_count=2, sg=1)
    

    ==>

    vector_size=200, window=10, hs=1, min_count=2, sg=1)
    
  • 306쪽, 두 번째 명령줄의 첫 번째 줄

    >>> model.most_similar(positive=["땅"])
    

    ==>

    >>> model.wv.most_similar(positive=["땅"])
    
  • 398쪽, 예제 코드의 마지막 줄

    download_all(" ", "./image/gyudon") # --- (※4)
    

    ==>

    download_all("牛丼", "./image/gyudon") # --- (※4)
    
  • 409쪽, 예제 코드의 밑에서 3번째 줄

    cv2.imwrite("facedetect-output.PNG", image)
    

    ==>

    cv2.imwrite("./pakutas/photo1-facedetect.PNG", image)
    
  • 410쪽, 본문 첫 번째 줄

    같은 폴더에 "facedetect-output.PNG"라는 이름의

    ==>

    같은 폴더에 "photo1-facedetect.PNG"라는 이름의

  • 411쪽, 페이지 하단 예제 코드의 10번째 줄

    output_file = re.sub(r'\,jpg|jpeg|PNG$', '-mosaic.jpg', image_file)
    

    ==>

    output_file = re.sub(r'\.jpg|jpeg|PNG$', '-mosaic.jpg', image_file)