애자일 데이터 과학 2.0

변화에 기민하게 반응하는 견고한 데이터 분석 애플리케이션 구축

연구 활동을 유용한 분석 애플리케이션으로 전환하고자 하는 데이터 과학 팀이 성공하려면 올바른 도구뿐 아니라 올바른 접근 방식이 필요하다. 개정판 《애자일 데이터 과학 2.0》에서는 애자일 데이터 과학 개발 방법론을 활용해 파이썬(Python), 아파치 스파크(Apache Spark), 카프카(Kafka) 등의 도구로 데이터 애플리케이션을 구축하는 방법을 배우게 될 것이다.

이 책에서는 아파치 카프카와 아파치 스파크, 몽고DB, 엘라스틱서치(Elasticsearch), d3.js, scikit-learn, 아파치 에어플로우(Apache Airflow)를 이용해 분석 애플리케이션을 구축, 배포, 개선하는 데이터 플랫폼을 구성하는 방법을 보여준다. 데이터가 알려주는 것이 무엇인지에 따라 현재 진행 중인 분석 작업을 빠르게 변경하고, 데이터 과학 작업을 웹 애플리케이션으로 게시하며, 조직에 의미 있는 변화를 이끌어내는 반복적인 접근법을 배울 수 있을 것이다.

★ 이 책에서 다루는 내용 ★

  • 데이터-가치 피라미드를 사용해 일련의 애자일 스프린트(agile sprint)를 거치며 데이터에서 가치를 창출
  • 여러 데이터셋으로부터 통계 모델을 위한 특징을 추출
  • 데이터를 차트로 시각화하고 대화형 리포트를 통해 다양한 측면 드러내기
  • 기존 데이터를 사용해 분류와 회귀 방식으로 미래를 예측
  • 예측을 행동으로 전환하기
  • 프로젝트가 제대로 진행될 수 있도록 각 스프린트 후에 사용자로부터 피드백 받기

러셀 저니 (Russel Jurney)

러셀 저니는 미국과 멕시코의 카지노 도박계에서 슬롯 머신의 성능을 분석하는 웹 애플리케이션을 만들면서 데이터 경험을 쌓았다. 기업, 대화형 미디어, 언론계를 거쳐 닝(Ning)과 링크드인(LinkedIn)에서 방대한 분석 애플리케이션을 구축하기 위해 실리콘 밸리로 자리를 옮겼다. 현재 데이터 신드롬(Data Syndrome)의 수석 컨설턴트로서 기업들이 분석 제품을 만들기 위해 이 책에서 소개한 원칙과 방법을 적용할 수 있도록 돕고 있다.

김정인

학업까지 포함하여 약 20년을 IT 분야에 종사했다. 회사를 나오기 전 최근 7년동안 BI/BA 영역에 몸담았다. 관심 있는 분야는 데이터 과학 분야이며, 늘 이 책으로 처음 공부하는 사람처럼 번역에 임하고 싶다. 옮긴 책으로는 《러닝 스칼라》 《파이썬 데이터 사이언스 핸드북》 《구글 애널리틱스 완벽 가이드》가 있다.

  • [1부] 환경 설정
    • ▣ 01장: 이론
      • 소개
      • 정의
        • 트윗으로 표현한 방법론
        • 애자일 데이터 과학 선언
      • 폭포수 방식의 문제점
        • 연구 대 애플리케이션 개발
      • 애자일 소프트웨어의 문제점
        • 최종 품질: 기술적 부채에 자금 대기
        • 폭포수 방식으로의 견인
      • 데이터 과학 프로세스
        • 기대치 설정
        • 데이터 과학팀의 역할
        • 기회와 문제 인식
        • 변화 적응
      • 프로세스 관련 참고사항
        • 코드 리뷰와 페어 프로그래밍
        • 애자일 환경: 엔지니어링 생산성
        • 대형 인쇄로 아이디어 현실화
      •  
    • ▣ 02장: 애자일 도구
      • 확장성 = 단순성
      • 애자일 데이터 과학에서의 데이터 처리
      • 로컬 환경 설정
        • 시스템 요구사항
        • Vagrant 설정
        • 데이터 다운로드
      • EC2 환경 설정
        • 데이터 다운로드
      • 코드 가져오기 및 실행
        • 코드 가져오기
        • 코드 실행
        • 주피터 노트북
      • 도구 세트 둘러보기
        • 애자일 스택 요구사항
        • 파이썬 3
        • JSON Lines와 파케이로 이벤트 직렬화
        • 데이터 수집
        • 스파크를 이용한 데이터 처리
        • 몽고DB로 데이터 게시하기
        • 아파치 카프카를 이용한 분산 스트림
        • 파이스파크 스트리밍을 사용해 스트림 처리하기
        • scikit-learn과 스파크 MLib을 사용한 머신러닝
      • 아파치 에어플로우를 이용한 스케줄링
        • 워크플로우에 반영
        • 경량 웹 애플리케이션
        • 데이터 표현
      • 결론
      •  
    • ▣ 03장: 데이터
      • 항공 여행 데이터
        • 항공편 정시 운항 데이터
        • 데이터베이스
      • 날씨 데이터
      • 애자일 데이터 과학의 데이터 처리
        • 구조화 데이터 대 반구조화 데이터
      • SQL 대 NoSQL
        • SQL
        • NoSQL과 데이터 흐름 프로그래밍
        • 스파크: SQL + NoSQL
        • NoSQL의 스키마
        • 데이터 직렬화
        • 진화하는 스키마에서 특징을 추출하고 나타내기
      • 결론
      •  
  • [2부] 피라미드 오르기
    • ▣ 04장: 레코드 수집 및 표시
      • 종합하기
      • 운항 데이터 집계 및 직렬화
      • 운항 레코드 처리 및 게시
        • 몽고DB에 운항 레코드 게시하기
      • 브라우저에 운항 레코드 보여 주기
        • 플라스크와 pymongo를 사용해 운항 데이터 서비스하기
        • Jinja2로 HTML5 렌더링하기
      • 애자일 체크 포인트
      • 운항 데이터 목록 만들기
        • 몽고DB로 운항 데이터 목록 만들기
        • 페이지 매김 데이터
      • 운항 검색
        • 인덱스 만들기
        • 엘라스틱서치에 운항 데이터 게시하기
        • 웹에서 운항 검색하기
      • 결론
      •  
    • ▣ 05장: 차트와 표로 데이터 시각화하기
      • 차트 품질: 반복이 핵심이다
      • 게시/장식 모델에서 데이터베이스 확장시키기
        • 첫 번째 양식
        • 두 번째 양식
        • 세 번째 양식
        • 양식 선택하기
      • 계절성 탐색하기
        • 운항 편수 쿼리하고 보여 주기
      • 메탈(항공기[개체]) 추출하기
        • 꼬리 번호 추출하기
        • 항공기 데이터 평가
      • 데이터 보강
        • 웹 양식 역공학
        • 꼬리 번호 수집하기
        • 양식 제출 자동화
        • HTML에서 데이터 추출
        • 보강된 데이터 평가
      • 결론
      •  
    • ▣ 06장: 보고서로 데이터 탐색하기
      • 항공사(개체) 추출하기
        • 파이스파크를 사용해 항공기 그룹으로 항공사 정의하기
        • 몽고DB에서 항공사 데이터 쿼리하기
        • 플라스크에서 항공사 페이지 구축하기
        • 항공사 페이지로 돌아가는 링크 걸기
        • 전체 항공사 홈페이지 만들기
      • 반구조화된 데이터의 온톨로지 관리하기
      • 항공사 페이지 개선
        • 항공사 코드에 이름 추가
        • 위키피디아 내용을 포함시키기
        • 보강한 항공사 데이터를 몽고DB에 게시하기
        • 보강된 항공사 정보를 웹에서 보여 주기
      • 항공기(개체) 조사하기
        • SQL 서브 쿼리 대 데이터 흐름 프로그래밍
        • 서브 쿼리 없이 데이터 흐름 프로그래밍하기
        • 스파크 SQL의 서브 쿼리
        • 항공기 홈페이지 만들기
        • 항공기 페이지에 검색 기능 추가하기
        • 제조사 막대 차트 만들기
        • 제조사 막대 차트 반복
        • 개체 식별: 차트를 한 번 더 반복하기
        • 차트 업데이트하기
      • 결론
      •  
    • ▣ 07장: 예측
      • 예측의 역할
      • 무엇을 예측할 것인가?
      • 예측 분석 소개
        • 예측하기
      • 운항 지연 탐색
      • 파이스파크로 특징 추출하기
      • scikit-learn으로 회귀 분석하기
        • 데이터 적재
        • 데이터 표본 추출
        • 결괏값 벡터화
        • 훈련 데이터 준비
        • 특징 벡터화
        • 희박 행렬 대 조밀 행렬
        • 실험 준비
        • 모델 훈련
        • 모델 테스트
        • 결론
      • 스파크 MLib으로 분류기 구축하기
        • 훈련 데이터를 특정 스키마로 적재
        • 널 값 처리
        • 항공편 번호를 운항 경로로 대체하기
        • 분류 작업을 위해 연속 변수를 구간화하기
        • pyspark.ml.feature를 사용한 특징 벡터화
        • 스파크 ML로 분류하기
        • 모델 평가
      • 결론
      •  
    • ▣ 08장: 예측 시스템 배포
      • 웹 서비스로 scikit-learn 애플리케이션 배포하기
        • scikit-learn 모델을 저장하고 적재하기
        • 예측을 제공하기 위한 기초 작업
        • 운항 지연 회귀 모델 API 만들기
        • API 테스트하기
        • API를 제품에 가져오기
      • 에어플로우를 사용해 배치로 스파크 ML 애플리케이션 배포하기
        • 운영 환경에서 훈련 데이터 수집하기
        • 스파크 ML 모델을 훈련, 저장, 적재하기
        • 몽고DB에 예측 요청 생성하기
        • 몽고DB에서 예측 요청 가져오기
        • 스파크 ML을 사용해 배치로 예측 생성하기
        • 예측을 몽고DB에 저장하기
        • 배치로 수행된 예측 결과를 웹 애플리케이션에 표시
        • 아파치 에어플로우(인큐베이팅)로 작업 흐름 자동화하기
        • 결론
      • 스파크 스트리밍을 통한 스파크 ML 배포
        • 운영 환경에서 훈련 데이터 수집하기
        • 스파크 ML 모델 훈련, 저장, 적재하기
        • 카프카에 예측 요청을 전송
        • 스파크 스트리밍에서 예측 만들기
        • 전체 시스템 테스트하기
      • 결론
      •  
    • ▣ 09장: 예측 개선
      • 우리 예측의 문제점 해결하기
      • 예측을 개선해야 할 때
      • 예측 성능 개선
        • 탐색적 부착 방식: 무엇이 붙는지 확인하기
        • 실험을 위한 엄격한 지표를 수립하기
        • 특징으로서 시간
      • 항공기 데이터 포함
        • 항공기 특징 추출
        • 항공기 특징을 분류 모델에 포함시키기
      • 운항 시간 포함시키기
      • 결론
      •  
  • [부록] 수동 설치
    • 하둡 설치
    • 스파크 설치
    • 몽고 DB 설치
    • 몽고DB 자바 드라이버 설치
    • mongo-hadoop 설치
      • mongo-hadoop 빌드
      • pymongo_spark 설치
    • 엘라스틱서치 설치
    • Elasticsearch for Hadoop 설치
    • 스파크 환경 설정
    • 카프카 설치
    • scikit-learn 설치