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

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

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 환경 준비
      • 기타 설치

예제코드 다운로드

파일 압축 해제 시 주의사항

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


  • 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'
    
  • 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] # 레이블
    
  • 176쪽, 페이지 상단 예제 코드의 2번째 줄

    data = csv[i][0:4]
    

    ==>

    data = csv[i][0:3]
    
  • 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