데이터 분석을 위한 파이썬 철저 입문 (개정증보판)

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

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

파이썬은 문법이 간결해서 프로그래밍을 처음 시작하는 초보자가 배우기 쉬운 언어입니다. 이 책은 다양한 예제를 바탕으로 기본적인 파이썬 문법에서부터 실무에 필요한 데이터 분석 기법까지 상세히 설명하고 있어서 파이썬을 처음 배우는 초보자뿐만 아니라 실무에 바로 적용할 수 있는 데이터 처리 방법을 찾고 있는 분들에게 좋은 기본서가 될 것입니다.

이 책에서 배운 내용을 각자의 업무에 적용하면 복잡한 데이터 처리 과정은 단순해지고, 지루하고 반복적인 작업은 자동화할 수 있습니다.

특히, 이번 개정판에서는 마지막 장에 '실전 데이터 분석 프로젝트'를 추가하여 데이터 분석 프로세스 및 심화 분석 기법을 배우고 서울시 업무추진비 데이터를 통해 데이터 수집, 결측치 처리, 데이터 요약/재구성 등 실제 데이터를 분석하는 전체 과정을 학습해 볼 수 있게 구성하였습니다.

★ 이 책에서 다루는 내용 ★

  • 아나콘다(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 정리
    •  
  • ▣ 16장: 실전 데이터 분석 프로젝트
    • 16.1 데이터 분석 프로세스
    • 16.2 데이터 획득, 처리, 시각화 심화
      • 깃허브에서 파일 내려받기
      • 데이터에서 결측치 확인 및 처리
      • 데이터의 요약 및 재구성
      • 워드 클라우드를 이용한 데이터 시각화
    • 16.3 실전 데이터(서울시 업무추진비) 분석
      • 데이터 분석의 주제 선정
      • 데이터 수집
      • 데이터 처리
      • 데이터 분석
    • 16.4 정리

3쇄 수정사항

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

    연산을 수행하는데 결과는 Ture입니다.

    ==>

    연산을 수행하는데 결과는 True입니다.

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

    In: html_image = requests.get(pixabay_image_url)
    

    ==>

    In: html_image = requests.get(reshot_image_url)
    
  • 450쪽, 본문 2번째 줄

    'num_of_download_image = len(pixabay_image_urls)'를 실행하면

    ==>

    'num_of_download_image = len(reshot_image_urls)'를 실행하면


2쇄 수정사항

14장, 15장 , 16장 관련 참고 사항

  • 421쪽에 나오는 알렉사의 홈페이지가 변경되어 관련 코드를 변경했습니다. 이 부분은 깃허브에 있는 3쇄용 노트북 파일을 참조하세요.

  • 443쪽에 나오는 pixabay 사이트를 이용한 웹 스크레이핑은 더 이상 동작하지 않아서 3쇄에서는 reshot(https://www.reshot.com)을 이용합니다. 이 부분은 깃허브에 있는 3쇄용 노트북 파일을 참조하세요.

  • 494쪽에 나오는 공공 데이터 포털이 개편되어 데이터를 가져오는 코드가 변경됐습니다. 이 부분은 깃허브에 있는 3쇄용 노트북 파일을 참조하세요.

  • 558쪽 이후의 코드에서 서울시 업무추진비를 내려받을 연도를 지정할 때는 서울시 정보소통광장 행정정보 공개 깃허브 저장소를 확인해서 공개된 연도를 지정합니다.

본문 수정사항

  • 10쪽, 본문 밑에서 2번째 줄

    입력하고 Enter 키를 누릅니다(그림 2-15).

    ==>

    입력합니다(그림 2-15).

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

    연산을 수행하는데 결과는 Ture입니다.

    ==>

    연산을 수행하는데 결과는 True입니다.

  • 156쪽, 본문 4번째 줄

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

    ==>

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

  • 166쪽, 본문 2번째 줄

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

    ==>

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

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

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

    ==>

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

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

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

    ==>

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

  • 230쪽, '배열의 인덱싱과 슬라이싱' 항의 3번째 줄

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

    ==>

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

  • 231쪽, 본문 4번째 줄

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

    ==>

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

  • 243쪽, 표 11-3의 4번째 행, 2번째 열

    일요일 시작 기준 일주일 주기

    ==>

    요일 시작 기준 일주일 주기

  • 244쪽, 본문 첫 번째 줄

    다음으로 달력 기준으로

    ==>

    다음으로 달력의 요일을 기준으로

  • 309쪽, 9번째 줄

    기본 값(s=40, c='b', marker='o', alpha=1)으로 지정됩니다.

    ==>

    기본 값(s=36, c='b', marker='o', alpha=1)으로 지정됩니다.

  • 319쪽, 페이지 상단 표의 4번째 행, 1번째 열

    95~100

    ==>

    95~100(이하)

  • 323쪽, 본문 첫 번째 문장 끝에 각주 추가

    위에 생성한 파이 그래프는 원이 아니라 타원처럼 보입니다.

    ==>

    위에 생성한 파이 그래프는 원이 아니라 타원처럼 보입니다1.

    1 파이 그래프를 그릴 때 matplotlib v3.0부터는 특별한 설정 없이도 기본적으로 원으로 파이 그래프를 그립니다.

  • 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>]
    
  • 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쪽, 예제 코드의 밑에서 5번째 줄

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

    ==>

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

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

    ==>

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

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

    ==>

    chunk_size = 1000000 # 이미지 데이터를 1000000바이트씩 나눠서 저장
    
  • 541쪽, 본문 3번째 줄

    다음과 같이 method=bfill

    ==>

    다음과 같이 method='bfill'

  • 541쪽, 본문 밑에서 2번째 줄

    다음과 같이 method=ffill

    ==>

    다음과 같이 method='ffill'