파이썬 데이터 사이언스 핸드북

IPython, Jupyter, NumPy, Pandas, Matplotlib, Scikit-Learn 라이브러리를 활용한 데이터 과학과 머신러닝

≪파이썬 데이터 사이언스 핸드북≫은 데이터 과학에 대한 갈증을 해소하기에 좋은 입문서다. 초보자부터 전문가까지 아우르는 넓은 사용자층을 가진 매력적인 언어인 파이썬 언어가 제공하는 과학 스택을 이용해 실제 데이터 과학 분야에서 자주 만나는 상황을 해결해 나감으로써 이론부터 실전까지 적절하게 아우르고 있다.

이 책에서는 같은 데이터 타입을 가진 배열 기반의 데이터를 처리하기 위한 NumPy, 여러 가지 데이터 타입의 레이블이 붙은 데이터를 처리하는 Pandas, 보편적인 과학 계산 작업을 위한 SciPy, 게재 가능한 수준의 시각화를 위한 MatPlotlib, 대화형 코드 실행과 공유를 위한 IPython, 머신러닝을 위한 Scikit-Learn 라이브러리를 집중적으로 다루며, 특히 5장에서는 머신러닝 전체를 조망하고 각 기법을 어떻게 응용할 수 있는지 살펴볼 수 있어 실전 감각을 익히기에 부족함이 없도록 구성하고 있다.

 

추천사

“파이썬으로 데이터 과학을 배우고자 하는 독자에게 이 책은 환상적인 출발점이 될 것이다. 이 책으로 컴퓨터 과학 및 통계학 전공자들을 성공적으로 가르쳤다. 저자는 오픈소스 도구의 기본을 훨씬 넘어서는 내용을 명확한 언어와 이해하기 쉬운 설명으로 데이터 과학의 기본 개념과 패턴, 사상을 설명하고 있다.”

-- 브라이언 그레인저, 캘리포니아 폴리테크닉 주립 대학교 물리학부 교수이자 주피터 프로젝트 공동 설립자

 

도서 상세 이미지

많은 연구원에게 파이썬은 데이터를 저장, 가공하고 데이터에서 통찰력을 얻을 수 있는 라이브러리 덕분에 데이터를 다루기에 최고의 도구로 여겨진다. 여러 참고 자료에서 파이썬 라이브러리를 소개하지만, 대부분은 각 라이브러리를 개별적으로 다룬다. 하지만 ≪파이썬 데이터 사이언스 핸드북≫은 IPython, NumPy, Pandas, Matplotlib, Scikit-Learn을 비롯한 관련 도구를 모두 다룬다.

파이썬 코드를 읽고 작성하는 데 익숙한 과학자나 데이터 분석가라면 이 책이 데이터의 가공, 변환, 정제와 다른 유형의 데이터 시각화, 통계 모델이나 머신러닝 모델 구축을 위한 데이터 활용 면에서 흔히 발생하는 문제를 해결하기에 가장 이상적인 종합 참고서가 될 것이다. 간단히 말해, 이 책은 파이썬으로 과학 컴퓨팅을 하기 위해서 반드시 소장해야 할 책이다.

이 핸드북을 통해 다음 도구의 사용법을 학습할 수 있다.

  • IPython과 Jupyter: 파이썬을 이용하는 데이터 과학자를 위한 컴퓨팅 환경 제공
  • NumPy: 파이썬의 복잡한 데이터 배열을 효율적으로 저장하고 가공할 수 있는 ndarray(n 차원 배열 객체) 제공
  • Pandas: 파이썬에서 레이블이 붙거나 칼럼 형식의 데이터를 효율적으로 저장하고 가공하기 위한 DataFrame 자료구조 제공
  • Matplotlib: 파이썬을 이용한 유연한 데이터 시각화 기능 제공
  • Scikit-Learn: 기존 머신러닝 알고리즘 중 가장 중요한 것을 파이썬으로 효율적이고 깔끔하게 구현한 라이브러리

제이크 밴더플래스 (Jake VanderPlas)

제이크 밴더플래스는 파이썬 과학 스택의 장기 사용자이자 개발자다. 현재 워싱턴 대학교의 학제간 연구 부장으로 근무하면서 독자적인 천문학 연구를 수행하고 있으며 다양한 분야의 과학자와 함께 상담 및 컨설팅을 진행하고 있다.

김정인

학업까지 포함하면 약 20년을 IT 분야에 몸담고 있다. 최근 7년 동안 BI/BA 분야에서 일했다. 데이터 과학 분야에 관심이 많으며, 이 책으로 처음 공부하는 사람들처럼 늘 배우는 자세로 번역에 임하려고 노력한다. 옮긴 책으로는 ≪러닝 스칼라≫가 있다.

  • ▣ 01장: IPython - 파이썬에 날개를 달자
    • 셸과 노트북, 어느 것을 사용할까?
      • IPython 셸 실행하기
      • Jupyter 노트북 실행하기
    • IPython의 도움말과 문서
      • ?로 문서 확인하기
      • ??로 소스코드에 접근하기
      • 탭 자동 완성으로 모듈 탐색하기
    • IPython 셸에서 사용할 수 있는 키보드 단축키
      • 탐색 단축키
      • 텍스트 입력 단축키
      • 명령어 이력 단축키
      • 기타 단축키
    • IPython 매직 명령어
      • 코드 블록 붙여넣기: %paste와 %cpaste
      • 외부 코드 실행: %run
      • 코드 실행 시간 측정: %timeit
      • 매직 함수에 관한 도움말: ?, %magic, %lsmagic
    • 입력/출력 이력
      • IPython의 In과 Out 객체
      • 밑줄 표시 단축키와 이전 출력값
      • 출력값 숨기기
      • 관련 매직 명령어
    • IPython과 셸 명령어
      • 셸이란?
      • IPython에서의 셸 명령어
      • 셸에 값 전달하기 및 셸의 값 전달받기
    • 셸 관련 매직 명령어
    • 에러와 디버깅
      • 예외 제어: %xmode
      • 디버깅: 역추적 내용을 확인하는 것으로 충분하지 않을 경우
    • 코드 프로파일링 및 시간 측정
      • 코드 조각의 실행 시간 측정하기: %timeit과 %time
      • 전체 스크립트 프로파일링하기: %prun
      • %lprun으로 라인 단위 프로파일링하기
    • 메모리 사용 프로파일링: %memit과 %mprun
    • IPython 추가 참고 자료
      • 웹 자료
    •  
  • ▣ 02장: NumPy 소개
    • 파이썬의 데이터 타입 이해하기
      • 파이썬 정수는 정수 이상이다
      • 파이썬 리스트는 리스트 이상이다
      • 파이썬의 고정 타입 배열
      • 파이썬 리스트에서 배열 만들기
      • 처음부터 배열 만들기
      • NumPy 표준 데이터 타입
    • NumPy 배열의 기초
      • NumPy 배열 속성 지정
      • 배열 인덱싱: 단일 요소에 접근하기
      • 배열 슬라이싱: 하위 배열에 접근하기
      • 배열 재구조화
      • 배열 연결 및 분할
    • NumPy 배열 연산: 유니버설 함수
      • 루프는 느리다
      • UFuncs 소개
      • NumPy 유니버설 함수(UFuncs)
      • 고급 Ufunc 기능
      • Ufuncs: 더 알아보기
    • 집계: 최솟값, 최댓값, 그리고 그사이의 모든 것
      • 배열의 값의 합 구하기
      • 최솟값과 최댓값
      • 예제: 미국 대통령의 평균 신장은 얼마일까?
    • 배열 연산: 브로드캐스팅
      • 브로드캐스팅 소개
      • 브로드캐스팅 규칙
      • 실전 브로드캐스팅
    • 비교, 마스크, 부울 로직
      • 예제: 비온 날 세기
      • ufunc으로서의 비교 연산자
      • 부울 배열로 작업하기
      • 마스크로서의 부울 배열
    • 팬시 인덱싱
      • 팬시 인덱싱 알아보기
      • 결합 인덱싱
      • 예제: 임의의 점 선택하기
      • 팬시 인덱싱으로 값 변경하기
      • 예제: 데이터 구간화
      • 배열 정렬
      • NumPy의 빠른 정렬: np.sort와 np.argsort
      • 부분 정렬: 파티션 나누기
      • 예제: k 최근접 이웃 알고리즘
    • 구조화된 데이터: NumPy의 구조화된 배열
      • 구조화된 배열 만들기
      • 고급 복합 타입
      • 레코드 배열: 트위스트를 가진 구조화된 배열
      • Pandas로 넘어가며
    •  
  • ▣ 03장: Pandas로 데이터 가공하기
    • Pandas 설치 및 사용
    • Pandas 객체 소개
      • Pandas Series 객체
      • Pandas DataFrame 객체
      • Pandas Index 객체
    • 데이터 인덱싱과 선택
      • Series에서 데이터 선택
      • DataFrame에서 데이터 선택
      • Pandas에서 데이터 연산하기
      • 유니버설 함수: 인덱스 보존
      • 유니버설 함수: 인덱스 정렬
      • 유니버설 함수: DataFrame과 Series 간의 연산
    • 누락된 데이터 처리하기
      • 누락된 데이터 처리 방식의 트레이드오프
      • Pandas에서 누락된 데이터
      • 널 값 연산하기
    • 계층적 인덱싱
      • 다중 인덱스된 Series
      • MultiIndex 생성 메서드
      • MultiIndex 인덱싱 및 슬라이싱
      • 다중 인덱스 재정렬하기
      • 다중 인덱스에서 데이터 집계
    • 데이터세트 결합: Concat과 Append
      • 복습: NumPy 배열 연결
      • pd.concat을 이용한 간단한 연결
    • 데이터세트 결합하기: 병합과 조인
      • 관계 대수
      • 조인 작업의 분류
      • 병합 키 지정
      • 조인을 위한 집합 연산 지정하기
      • 열 이름이 겹치는 경우: suffixes 키워드
      • 예제: 미국 주 데이터
    • 집계와 분류
      • 행성 데이터
      • Pandas의 간단한 집계 연산
      • GroupBy: 분할, 적용, 결합
    • 피벗 테이블
      • 피벗 테이블 시작
      • 피벗 테이블 등장 배경
      • 피벗 테이블 구문
      • 예제: 출생률 데이터
    • 벡터화된 문자열 연산
      • Pandas 문자열 연산 소개
      • Pandas 문자열 메서드 목록
      • 예제: 조리법 데이터베이스
    • 시계열 다루기
      • 파이썬에서의 날짜와 시간
    • Pandas 시계열: 시간으로 인덱싱하기
      • Pandas 시계열 데이터 구조
      • 주기와 오프셋
      • 리샘플링, 시프팅, 윈도잉
      • 추가 학습 자료
      • 예제: 시애틀 자전거 수 시각화
    • 고성능 Pandas: eval()과 query()
      • query()와 eval()의 등장 배경: 복합 표현식
      • 효율적인 연산을 위한 pandas.eval()
      • 열 단위의 연산을 위한 DataFrame.eval()
      • DataFrame.query() 메서드
      • 성능: 이 함수를 사용해야 하는 경우
    • 추가 자료
    •  
  • ▣ 04장: Matplotlib을 활용한 시각화
    • 일반적인 Matplotlib 사용법
      • matplotlib 임포트하기
      • 스타일 설정하기
      • show()를 사용할 것인가, 말 것인가 - 플롯 표현 방법
      • 그림을 파일로 저장하기
    • 하나 가격에 인터페이스 두 개
    • 간단한 라인 플롯
      • 플롯 수정하기: 선 색상과 스타일
      • 플롯 조정하기: 축 경계
      • 플롯에 레이블 붙이기
    • 간단한 산점도
      • plt.plot을 사용한 산점도
      • plt.scatter를 활용한 산점도
      • plot과 scatter의 차이: 효율성 측면에서 유의할 점
    • 오차 시각화하기
      • 기본 오차 막대
      • 연속 오차
    • 밀도 플롯과 등고선 플롯
      • 3차원 함수 시각화하기
    • 히스토그램, 구간화, 밀도
      • 2차원 히스토그램과 구간화
    • 플롯 범례 맞춤 변경하기
      • 범례에 사용할 요소 선택하기
      • 점 크기에 대한 범례
      • 다중 범례
      • 색상 막대 맞춤 변경하기
      • 색상 막대 맞춤 변경하기
      • 예제: 손으로 쓴 숫자
    • 다중 서브플롯
      • plt.axes: 직접 만든 서브플롯
      • plt.subplot: 간단한 서브플롯의 그리드
      • plt.subplots: 한 번에 전체 그리드 만들기
      • plt.GridSpec: 복잡한 배치
    • 텍스트와 주석
      • 예제: 미국 출생률에 휴일이 미치는 영향
      • 변환 및 텍스트 위치
      • 화살표와 주석
    • 눈금 맞춤 변경하기
      • 주 눈금과 보조 눈금
      • 눈금 또는 레이블 숨기기
      • 눈금 개수 줄이기와 늘리기
      • 팬시 눈금 포맷
    • 포맷 지시자와 위치 지시자 요약
    • Matplotlib 맞춤변경하기: 설정과 스타일시트
      • 직접 플롯 변경하기
      • 기본값 변경하기: rcParams
      • 스타일시트
    • Matplotlib에서 3차원 플로팅하기
    • 3차원 점과 선
      • 3차원 등고선 플롯
      • 와이어프레임과 표면도
      • 표면 삼각측량법
    • Basemap을 활용한 지리 데이터
      • 지도 투영법(Map Projections)
      • 지도 배경 그리기
      • 지도상에 데이터 플로팅하기
      • 예제: 캘리포니아 도시
      • 예제: 표면 온도 데이터
    • Seaborn을 활용한 시각화
      • Seaborn과 Matplotlib의 차이
      • Seaborn 플롯 탐색하기
      • 예제: 마라톤 완주 시간 탐색
    • 기타 자료
      • Matplotlib 자료
      • 기타 파이썬 그래픽 라이브러리
    •  
  • ▣ 05장: 머신러닝
    • 머신러닝이란 무엇인가?
      • 머신러닝의 범주
      • 머신러닝 응용의 정성적 사례
      • 정리
    • Scikit-Learn 소개
      • Scikit-Learn에서의 데이터 표현 방식
      • Scikit-Learn의 Estimator API
      • 응용: 손으로 쓴 숫자 탐색
    • 초모수와 모델 검증
      • 모델 검증에 대한 고려사항
      • 최적의 모델 선택하기
      • 학습 곡선
      • 실제 검증: 그리드 검색
    • 특징 공학
      • 범주 특징
      • 텍스트 특징
      • 이미지 특징
      • 유도 특징
      • 누락 데이터의 대체
      • 특징 파이프라인
    • 심화 학습: 나이브 베이즈 분류
      • 베이즈 분류
      • 가우스 나이브 베이즈
      • 다항분포 나이브 베이즈
      • 언제 나이브 베이즈 모델을 사용할 것인가
    • 심화학습: 선형 회귀
      • 단순 선형 회귀
      • 기저 함수 회귀
      • 예제: 자전거 통행량 예측
    • 심화 학습: 서포트 벡터 머신
      • 서포트 백터 머신의 동기
      • 서포트 벡터 머신: 마진 최대화
      • 예제: 안면 인식
      • 서포트 벡터 머신 정리
    • 심화 학습: 의사결정 트리와 랜덤 포레스트
      • 랜덤 포레스트 등장 배경: 의사결정 트리
      • 추정 모델의 앙상블: 랜덤 포레스트
      • 랜덤 포레스트 회귀
      • 예제: 랜덤 포레스트를 사용한 숫자 분류
    • 랜덤 포레스트 정리
    • 심화 학습: 주성분 분석
      • 주성분 분석 소개
      • PCA 응용: 노이즈 필터링
      • 예제: 고유얼굴
      • 주성분 분석 정리
    • 심화 학습: 다양체 학습
      • 다양체 학습: ‘HELLO’
      • 다차원 척도법(MDS, Multidimensional Sacling)
      • 다양체 학습으로서의 MDS
      • 비선형 임베딩: MDS가 실패한 경우
      • 비선형 다양체 학습: 국소 선형 임베딩
      • 다양체 방식에 대한 몇 가지 생각
      • 예제: 얼굴 데이터에 아이소맵 적용
      • 예제: 숫자 데이터의 구조 시각화
    • 심화 학습: k-평균 군집화
      • k-평균 소개
      • 예제
    • 심화 학습: 가우스 혼합 모델
      • GMM 등장 배경: k-평균의 약점
      • E-M 단계 일반화하기: 가우스 혼합 모델
      • 밀도 추정에 GMM 사용하기
      • 예제: 새로운 데이터를 생성하는 GMM
    • 심화 학습: 커널 밀도 추정
      • KDE 등장 배경: 히스토그램
      • 커널 밀도 추정의 실제 적용
      • 예제: 구(球)에 KDE 적용하기
      • 예제: 나이브하지 않은 베이즈(Not-So-Naive Bayes)
    • 응용: 안면 인식 파이프라인
      • HOG 특징
      • 실제 HOG: 간단한 안면 인식기
      • 주의사항 및 개선사항
    • 머신러닝 관련 추가 자료
      • 파이썬에서의 머신러닝
      • 일반적인 머신러닝

예제코드 관련 GitHub 페이지

  • 448쪽, 밑에서 4번째 줄 수식을 아래 수식으로 대체

    $ y= a_0+ a_1 x+ a_2 x^2+ a_3 x^3+⋯ $