데이터 분석을 위한 파이썬 철저 입문

기초 문법부터 실무에 필요한 데이터 분석 기술까지 한 번에 배우는

파이썬 기초 문법부터, 데이터 분석을 위한 다양한 실무예제까지 설명합니다!

이 책은 다양한 예제를 바탕으로 기본적인 파이썬 문법에서부터 실무에 필요한 데이터 분석 기법까지 상세히 설명하고 있습니다. 파이썬을 처음 배우는 분들, 파이썬의 기본 문법은 익혔으나 활용 방법을 모르는 분들, 실무에 바로 적용할 수 있는 데이터 처리 방법을 익히고 싶은 분들에게 좋은 기본서가 될 것입니다.

★ 이 책에서 다루는 내용 ★

  • 아나콘다(Anaconda)를 활용한 파이썬 개발 환경 설치 및 기본 문법
  • 문자열 데이터 처리(분리, 삭제, 연결, 찾기, 바꾸기)
  • 객체와 클래스, 자주 사용하는 내장 모듈(난수, 날짜, 달력)
  • NumPy와 Pandas를 이용한 구조적 데이터 처리 및 분석
  • Matplotlib을 이용한 데이터 시각화(다양한 그래프 출력, 꾸미기, 한글 폰트 사용)
  • 엑셀 파일 다루기(데이터 읽기, 쓰기, 통합, 계산, 시각화)
  • Requests와 Beautiful Soup를 이용한 웹 데이터(HTML 파일) 수집 및 처리(웹 스크레이핑)
  • 웹 API를 이용한 데이터 요청 및 응답 데이터(JSON 및 XML 형식) 처리
  • 트위터에 트윗을 작성하고 메시지 가져오기, 정부의 공개 데이터 획득을 위한 Open API 활용

 

도서 상세 이미지

최은석

GIST에서 박사학위를 받고 삼성전자에서 센서 기반 인터랙션 설계, 센서 신호 처리, 임베디드 시스템 S/W 관련 업무를 하고 있다. 항상 좀 더 좋은 방법이 없을까 고민하며 새로운 아이디어를 제시하고 구현하는 과정을 즐긴다. 파이썬을 이용한 업무 자동화, 데이터 처리 및 분석, 마이크로컨트롤러 응용에 관심이 많으며 주변 사람들에게 파이썬의 편리함을 알리고 있다.

  • ▣ 01장: 파이썬 프로그래밍 언어
    • 1.1 왜 프로그래밍 언어를 배워야 하나요?
    • 1.2 프로그래밍 언어란?
    • 1.3 왜 파이썬인가요?
    •  
  • ▣ 02장: 파이썬 시작하기
    • 2.1 파이썬 개발 환경 설치
      • 아나콘다 배포판 내려받기
      • 아나콘다 설치
    • 2.2 첫 번째 코드 작성하기
    • 2.3 코드 저장 및 실행
      • 파이썬 코드 저장
      • 파이썬 코드 실행
    • 2.4 통합 개발 환경에서 코딩하기
      • 통합 개발 환경의 필요성
      • Spyder 실행 및 설정
      • Spyder 에디터에서 코드 작성
    • 2.5 주피터 노트북에서 코딩하기
      • 주피터 노트북 실행
      • 주피터 노트북 사용법
      • 주피터 노트북에서 코드 작성
    • 2.6 정리
    •  
  • ▣ 03장: 파이썬을 계산기처럼 이용하기
    • 3.1 간단한 사칙 연산
    • 3.2 거듭 제곱과 나머지
    • 3.3 과학적 표기법
    • 3.4 진수 표현과 변환
    • 3.5 논리 연산 및 비교 연산
    • 3.6 정리
    •  
  • ▣ 04장: 변수와 자료형
    • 4.1 변수
    • 4.2 문자열
      • 문자열 만들기
      • 문자열 다루기
    • 4.3 리스트
      • 리스트 만들기
      • 리스트 다루기
    • 4.4 튜플
      • 튜플 만들기
      • 튜플 다루기
    • 4.5 세트
      • 세트 만들기
      • 세트의 교집합, 합집합, 차집합 구하기
      • 리스트, 튜플, 세트 간 타입 변환
    • 4.6 딕셔너리
      • 딕셔너리 만들기
      • 딕셔너리 다루기
    • 4.7 정리
    •  
  • ▣ 05장: 제어문
    • 5.1 조건에 따라 분기하는 if 문
      • 단일 조건에 따른 분기(if)
      • 단일 조건 및 그 외 조건에 따른 분기(i f ~ else)
      • 여러 조건에 따른 분기(if ~ elif ~ else)
      • 중첩 조건에 따른 분기
    • 5.2 지정된 범위만큼 반복하는 for 문
      • 반복문의 필요성
      • for 문의 구조
      • 반복 범위 지정
      • 중첩 for 문
      • 여러 개의 리스트 다루기
    • 5.3 조건에 따라 반복하는 while 문
      • while 문의 구조
      • 무한 반복 while 문
    • 5.4 반복문을 제어하는 break와 continue
      • 반복문을 빠져나오는 break
      • 다음 반복을 실행하는 continue
    • 5.5 간단하게 반복하는 한 줄 for 문
      • 리스트 컴프리헨션의 기본 구조
      • 조건문을 포함한 리스트 컴프리헨션
    • 5.6 정리
    •  
  • ▣ 06장: 입력과 출력
    • 6.1 화면 출력
      • 기본 출력
      • 형식 지정 출력
    • 6.2 키보드 입력
    • 6.3 파일 읽고 쓰기
      • 파일 열기
      • 파일 쓰기
      • 파일 읽기
    • 6.4 반복문을 이용해 파일 읽고 쓰기
      • 파일에 문자열 한 줄씩 쓰기
      • 파일에서 문자열 한 줄씩 읽기
    • 6.5 with 문을 활용해 파일 읽고 쓰기
      • with 문의 구조
      • with 문의 활용
    • 6.6 정리
    •  
  • ▣ 07장: 함수
    • 7.1 함수 정의와 호출
      • 함수의 기본 구조
      • 인자도 반환 값도 없는 함수
      • 인자는 있으나 반환 값이 없는 함수
      • 인자도 있고 반환 값도 있는 함수
    • 7.2 변수의 유효 범위
    • 7.3 람다(lambda) 함수
    • 7.4 유용한 내장 함수
      • 형 변환 함수
      • bool 함수
      • 최솟값과 최댓값을 구하는 함수
      • 절댓값과 전체 합을 구하는 함수
      • 항목의 개수를 구하는 함수
      • 내장 함수의 활용
    • 7.5 정리
    •  
  • ▣ 08장: 객체와 클래스
    • 8.1 클래스 선언과 객체 생성
      • 객체란?
      • 클래스 선언
      • 객체 생성 및 활용
      • 객체 초기화
    • 8.2 클래스를 구성하는 변수와 함수
      • 클래스에서 사용하는 변수
      • 클래스에서 사용하는 함수
    • 8.3 객체와 클래스를 사용하는 이유
    • 8.4 클래스 상속
    • 8.5 정리
    •  
  • ▣ 09장: 문자열과 텍스트 파일 데이터 다루기
    • 9.1 문자열 다루기
      • 문자열 분리하기
      • 필요없는 문자열 삭제하기
      • 문자열 연결하기
      • 문자열 찾기
      • 문자열 바꾸기
      • 문자열의 구성 확인하기
      • 대소문자로 변경하기
      • 데이터 파일 준비 및 읽기
    • 9.2 텍스트 파일의 데이터를 읽고 처리하기
      • 파일에서 읽은 문자열 데이터 처리
    • 9.3 정리
    •  
  • ▣ 10장: 모듈
    • 10.1 모듈을 사용하는 이유
    • 10.2 모듈 생성 및 호출
      • 모듈 만들기
      • 모듈 불러오기
      • 모듈을 불러오는 다른 형식
    • 10.3 모듈을 직접 실행하는 경우와 임포트한 후 실행하는 경우 구분하기
    • 10.4 내장 모듈
      • 난수 발생 모듈
      • 날짜 및 시간 관련 처리 모듈
      • 달력 생성 및 처리 모듈
    • 10.5 패키지
      • 패키지의 구조
      • 패키지 만들기
      • 패키지 사용하기
    • 10.6 정리
    •  
  • ▣ 11장: 데이터 분석을 위한 패키지
    • 11.1 배열 데이터를 효과적으로 다루는 NumPy
      • 배열 생성하기
      • 배열의 연산
      • 배열의 인덱싱과 슬라이싱
    • 11.2 구조적 데이터 표시와 처리에 강한 pandas
      • 구조적 데이터 생성하기
      • 데이터 연산
      • 데이터를 원하는 대로 출력하기
      • 데이터 통합하기
      • 데이터 파일을 읽고 쓰기
    • 11.3 정리
    •  
  • ▣ 12장: 데이터 시각화
    • 12.1 matplotlib로 그래프 그리기
      • 선 그래프
      • 그래프 꾸미기
      • 산점도
      • 막대 그래프
      • 히스토그램
      • 파이 그래프
      • 그래프 저장하기
    • 12.2 pandas로 그래프 그리기
      • pandas의 그래프 구조
      • pandas의 선 그래프
      • pandas의 산점도
      • pandas의 막대 그래프
      • pandas의 히스토그램
      • pandas의 파이 그래프
    • 12.3 정리
    •  
  • ▣ 13장: 엑셀 파일 다루기
    • 13.1 엑셀 파일을 읽고 쓰기
      • 엑셀 파일의 데이터 읽기
      • 데이터를 엑셀 파일로 쓰기
    • 13.2 엑셀 파일 통합하기
      • 효율적인 데이터 처리를 위한 엑셀 데이터 구조
      • 여러 개의 엑셀 파일 데이터를 통합하기
      • 통합 결과를 엑셀 파일로 저장하기
    • 13.3 엑셀 파일로 읽어온 데이터 다루기
      • 데이터를 추가하고 변경하기
      • 여러 개의 엑셀 파일에서 데이터 수정하기
      • 엑셀의 필터 기능 수행하기
      • 조건을 설정해 원하는 행만 선택하기
      • 원하는 열만 선택하기
      • 엑셀 데이터 계산하기
    • 13.4 엑셀 데이터의 시각화
      • 그래프를 엑셀 파일에 넣기
      • 엑셀 차트 만들기
    • 13.5 정리
    •  
  • ▣ 14장: 웹 스크레이핑
    • 14.1 웹 브라우저로 웹 사이트 접속하기
      • 하나의 웹 사이트에 접속하기
      • 여러 개의 웹 사이트에 접속하기
    • 14.2 웹 스크레이핑을 위한 기본 지식
      • 데이터의 요청과 응답 과정
      • HTML의 기본 구조
      • 웹 페이지의 HTML 소스 갖고 오기
      • HTML 소스코드를 분석하고 처리하기
    • 14.3 웹 사이트에서 데이터 가져오기
      • 웹 스크레이핑 시 주의 사항
      • 순위 데이터를 가져오기
      • 웹 페이지에서 이미지 가져오기
    • 14.4 정리
    •  
  • ▣ 15장: 웹 API
    • 15.1 웹 API의 이해
      • 웹 API의 데이터 획득 과정
      • 웹 API의 인증 방식
      • 응답 데이터의 형식 및 처리
      • 웹 사이트 주소에 부가 정보 추가하기
    • 15.2 API 키를 사용하지 않고 데이터 가져오기
      • 국제 우주 정거장의 정보 가져오기
      • 국가 정보 가져오기
    • 15.3 트위터에 메시지 작성하고 가져오기
      • API 키 및 접속 토큰 생성
      • Tweepy 설치 및 인증
      • 트윗 작성하기
      • 타임라인에서 메시지 가져오기
      • 키워드를 지정해 데이터 가져오기
    • 15.4 정부의 공공 데이터 가져오기
      • 회원 가입 및 서비스 신청
      • 주소 및 우편번호 가져오기
      • 날씨 정보 가져오기
      • 대기 오염 정보 가져오기
    • 15.5 정리
아나콘다 다운로드 안내

본문에서 안내하는 아나콘다 다운로드 페이지 URL(http://continuum.io/downloads)이 아래 URL로 변경됐습니다. 또한 현재(2019년 2월) 아나콘다를 내려받으면 파이썬 3.7 버전이 설치됩니다.


  • 5쪽, 본문 밑에서 4번째 줄

    아나콘다 다운로드 페이지(http://continuum.io/downloads)를

    ==>

    아나콘다 다운로드 페이지(https://www.anaconda.com/distribution/#download-section)를

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

    count = 0; # 클래스 변수 생성 및 초기화
    

    ==>

    count = 0 # 클래스 변수 생성 및 초기화
    
  • 148쪽, 4번째 줄

    클래스나 클래스 변수에

    ==>

    인스턴스 메서드나 인스턴스 변수에

  • 156쪽, 본문 4번째 줄

    초기화 함수인 'Bicycle.init(self, size, numWheel, color)'를 이용했고

    ==>

    초기화 함수인 'Bicycle.init(self, wheel_size, color)'를 이용했고

  • 166쪽, 본문 2번째 줄

    여기서 시퀀스는 리스트, 튜플, 세트와 같이 여러 데이터를 담고 있는 나열형 데이터입니다.

    ==>

    여기서 시퀀스는 리스트나 튜플과 같이 여러 데이터를 순서대로 담고 있는 나열형 데이터입니다.

  • 196쪽, 본문 밑에서 8번째 줄

    다음은 시퀀스(리스트, 튜플, 세트) 데이터에서

    ==>

    다음은 시퀀스(리스트, 튜플) 데이터에서

  • 196쪽, 본문 밑에서 3번째 줄

    이 함수는 시퀀스(리스트, 튜플, 세트)로

    ==>

    이 함수는 시퀀스(리스트, 튜플)로

  • 197쪽, 본문 6번째 줄

    먼저 'import datatime'으로 datatime 모듈을 불러와야 합니다.

    ==>

    먼저 'import datetime'으로 datetime 모듈을 불러와야 합니다.

  • 197쪽, 본문 7번째 줄

    datatime 모듈을 불러온 후에는

    ==>

    datetime 모듈을 불러온 후에는

  • 197쪽, 하단 예제 코드

    import datatime
    ...
    datetime_obj = datetime.datatime(year, month, day, hour, minute, second)
    

    ==>

    import datetime
    ...
    datetime_obj = datetime.datetime(year, month, day, hour, minute, second)
    
  • 198쪽, 상단 예제 첫 번째 줄

    import datatime
    

    ==>

    import datetime
    
  • 199쪽, 본문 밑에서 4번째 줄

    datatime 모듈의 date 클래스에는

    ==>

    datetime 모듈의 date 클래스에는

  • 202쪽, 본문 2번째 줄

    앞에서는 datatime 모듈의 객체를

    ==>

    앞에서는 datetime 모듈의 객체를

  • 220쪽, 10번째 줄

    모두 1을 갖는 1차원 배열을 만들려면 np.zeros(n)을, 모든 원소가 1

    ==>

    모두 0을 갖는 1차원 배열을 만들려면 np.zeros(n)을, 모든 원소가 0

  • 223쪽, 페이지 하단 마지막 예제(맨 마지막 줄 변경)

    In: num_f1 = np.array([10, 21, 0.549, 4.75, 5.98])
        num_i1 = num_f1.astype(int)
        num_f1
    

    ==>

    In: num_f1 = np.array([10, 21, 0.549, 4.75, 5.98])
        num_i1 = num_f1.astype(int)
        num_i1
    
  • 230쪽, '배열의 인덱싱과 슬라이싱' 항의 3번째 줄

    배열의 위치나 조건을 지정해 배열의 원소 선택하는 것을

    ==>

    배열의 위치나 조건을 지정해 배열의 원소를 선택하는 것을

  • 231쪽, 본문 4번째 줄

    1차원 배열에서 여려 개의 원소를

    ==>

    1차원 배열에서 여러 개의 원소를

  • 239쪽, 페이지 하단 마지막 예제(들여쓰기 수정)

    In: import numpy as np
    
        s3 = pd.Series([np.nan,10,30])
    s3
    

    ==>

    In: import numpy as np
    
        s3 = pd.Series([np.nan,10,30])
        s3
    
  • 267쪽, 페이지 중간 두 번째 예제(들여쓰기 수정)

    In: df2 = pd.DataFrame({'Class1': [87, 89],
                            'Class2': [85, 90]})
    df2
    

    ==>

    In: df2 = pd.DataFrame({'Class1': [87, 89],
                            'Class2': [85, 90]})
        df2
    
  • 280쪽, 두 번째 예제(들여쓰기 수정)

    In: df_WH['BMI'] = bmi
    df_WH
    

    ==>

    In: df_WH['BMI'] = bmi
        df_WH
    
  • 303쪽, 페이지 중간 예제(들여쓰기 수정)

    In: plt.plot(x,y)
    plt.xlabel('X-axis')
    plt.ylabel('Y-axis')
    plt.title('Graph title')
    plt.grid(True) # 'plt.grid()'도 가능
    

    ==>

    In: plt.plot(x,y)
        plt.xlabel('X-axis')
        plt.ylabel('Y-axis')
        plt.title('Graph title')
        plt.grid(True) # 'plt.grid()'도 가능
    
  • 304쪽, 페이지 중간 예제(들여쓰기 수정)

    In: import numpy as np
    x = np.arange(0, 5, 1)
    y1 = x
    y2 = x + 1
    y3 = x + 2
    y4 = x + 3
    
    plt.plot(x, y1, '>--r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc')
    plt.legend(['data1', 'data2', 'data3', 'data4'])
    plt.show()
    

    ==>

    In: import numpy as np
        x = np.arange(0, 5, 1)
        y1 = x
        y2 = x + 1
        y3 = x + 2
        y4 = x + 3
    
        plt.plot(x, y1, '>--r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc')
        plt.legend(['data1', 'data2', 'data3', 'data4'])
        plt.show()
    
  • 400쪽, 페이지 중간 예제(들여쓰기 수정)

    In: %%writefile C:/myPyCode/HTML_example2.html
        <!doctype html>
        <html>
         <head>
          <meta charset="utf-8">
          <title>이것은 HTML 예제</title>
         </head>
         <body>
          <h1>출간된 책 정보</h1>
          <p>이해가 쏙쏙 되는 파이썬</p>
          <p>홍길동</p>
          <p>위키북스 출판사</p>
          <p>2018</p>
          </body>
        </html>
    

    ==>

    In: %%writefile C:/myPyCode/HTML_example2.html
        <!doctype html>
        <html>
         <head>
          <meta charset="utf-8">
          <title>이것은 HTML 예제</title>
         </head>
         <body>
          <h1>출간된 책 정보</h1>
          <p>이해가 쏙쏙 되는 파이썬</p>
          <p>홍길동</p>
          <p>위키북스 출판사</p>
          <p>2018</p>
         </body>
        </html>
    
  • 406쪽, 페이지 하단 예제(들여쓰기 수정)

    In: from bs4 import BeautifulSoup
    
        # 테스트용 HTML 코드
        html2 = """
        <html>
         <head>
          <title>작품과 작가 모음</title>
         </head>
         <body>
          <h1>책 정보</h1>
          <p id="book_title">토지</p>
          <p id="author">박경리</p>
    
          <p id="book_title">태백산맥</p>
          <p id="author">조정래</p>
    
          <p id="book_title">감옥으로부터의 사색</p>
          <p id="author">신영복</p>
          </body>
    

    ==>

    In: from bs4 import BeautifulSoup
    
        # 테스트용 HTML 코드
        html2 = """
        <html>
         <head>
          <title>작품과 작가 모음</title>
         </head>
         <body>
          <h1>책 정보</h1>
          <p id="book_title">토지</p>
          <p id="author">박경리</p>
    
          <p id="book_title">태백산맥</p>
          <p id="author">조정래</p>
    
          <p id="book_title">감옥으로부터의 사색</p>
          <p id="author">신영복</p>
         </body>
    
  • 411쪽, 페이지 중앙 예제 코드의 밑에서 4번째 줄

    <a href="http://www.daum.net" class="portal" id="danum">다음</a> <br>
    

    ==>

    <a href="http://www.daum.net" class="portal" id="daum">다음</a> <br>
    
  • 412쪽, 첫 번째 예제 코드 출력 결과의 3번째 줄

    <a class="portal" href="http://www.daum.net" id="danum">다음</a>,
    

    ==>

    <a class="portal" href="http://www.daum.net" id="daum">다음</a>,
    
  • 412쪽, 두 번째 예제 코드 출력 결과의 2번째 줄

    <a class="portal" href="http://www.daum.net" id="danum">다음</a>]
    

    ==>

    <a class="portal" href="http://www.daum.net" id="daum">다음</a>]
    
  • 414쪽, 첫 번째 예제 코드 출력 결과의 3번째 줄

    <a class="portal" href="http://www.daum.net" id="danum">다음</a>,
    

    ==>

    <a class="portal" href="http://www.daum.net" id="daum">다음</a>,
    
  • 414쪽, 두 번째 예제 코드 출력 결과의 2번째 줄

    <a class="portal" href="http://www.daum.net" id="danum">다음</a>]
    

    ==>

    <a class="portal" href="http://www.daum.net" id="daum">다음</a>]
    
  • 415쪽, 페이지 하단 예제(들여쓰기 수정)

    In: %%writefile C:/myPyCode/br_example_constitution.html
        <!doctype html>
        <html>
          <head>
            <meta charset="utf-8">
            <title>줄 바꿈 테스트 예제</title>
          </head>
          <body>
          <p id="title"><b>대한민국헌법</b></p>
          <p id="content">제1조 <br/>①대한민국은 민주공화국이다.<br/>②대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.</p>
          <p id="content">제2조 <br/>①대한민국의 국민이 되는 요건은 법률로 정한다.<br/>②국가는 법률이 정하는 바에 의하여 재외국민을 보호할 의무를 진다.</p>
        </body>
    </html>
    

    ==>

    In: %%writefile C:/myPyCode/br_example_constitution.html
        <!doctype html>
        <html>
          <head>
            <meta charset="utf-8">
            <title>줄 바꿈 테스트 예제</title>
          </head>
          <body>
            <p id="title"><b>대한민국헌법</b></p>
            <p id="content">제1조 <br/>①대한민국은 민주공화국이다.<br/>②대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.</p>
            <p id="content">제2조 <br/>①대한민국의 국민이 되는 요건은 법률로 정한다.<br/>②국가는 법률이 정하는 바에 의하여 재외국민을 보호할 의무를 진다.</p>
          </body>
        </html>
    
  • 437쪽, 페이지 상단 예제 코드를 다음 코드로 수정

        return music_titles, music_artists
    
    # 노래 제목과 아티스트를 저장할 파일 이름을 폴더와 함께 지정
    file_name = 'C:/myPyCode/data/NaverMusicTop100.txt'
    
    f = open(file_name,'w') # 파일 열기
    
    # 각 page에는 50개의 노래 제목과 아티스트가 추출됨
    for page in range(2):
        naver_music_url_page = naver_music_url + str(page+1) # page URL
        naver_music_titles, naver_music_artists = naver_music(naver_music_url_page)
    
        # 추출된 노래 제목과 아티스트를 파일에 저장
        for k in range(len(naver_music_titles)):
            f.write("{0:2d}: {1}/{2}\n".format(page*50 + k+1, naver_music_titles[k], naver_music_artists[k]))
    
    f.close() # 파일 닫기
    
    glob.glob(file_name) # 생성된 파일 확인
    
  • 442쪽, 페이지 상단 예제 코드의 1번째 줄

    In: # 이미지 데이터를 100000바이트씩 나눠서 내려받고 파일에 순차적으로 저장
    

    ==>

    In: # 이미지 데이터를 1000000바이트씩 나눠서 내려받고 파일에 순차적으로 저장
    
  • 443쪽, 예제 코드의 1~2번째 줄

    url = 'https://www.python.org/static/img/python-logo.png'
    image_file_name = os.path.basename(url)
    

    ==>

    url = 'https://www.python.org/static/img/python-logo.png'
    html_image = requests.get(url)
    image_file_name = os.path.basename(url)
    
  • 443쪽, 예제 코드의 밑에서 5번째 줄

    # 이미지 데이터를 100000 바이트씩 나눠서 저장
    

    ==>

    # 이미지 데이터를 1000000 바이트씩 나눠서 저장
    
  • 447쪽, 페이지 상단 예제 코드의 밑에서 5번째 줄

    # 이미지 데이터를 100000 바이트씩 나눠서 저장하는 방법
    

    ==>

    # 이미지 데이터를 1000000 바이트씩 나눠서 저장하는 방법
    
  • 448쪽, 예제 코드의 19번째 줄

    chunk_size = 1000000 # 이미지 데이터를 100000바이트씩 나눠서 저장
    

    ==>

    chunk_size = 1000000 # 이미지 데이터를 1000000바이트씩 나눠서 저장
    
  • 450쪽, 페이지 상단 예제(들여쓰기 수정)

    In: num_of_download_image = len(pixabay_image_urls)
    num_of_download_image
    

    ==>

    In: num_of_download_image = len(pixabay_image_urls)
        num_of_download_image