샌디 라이자, 유리 레이저슨, 션 오언, 조시 윌스 지음 | 박상은, 권한철, 서양주 옮김 | 한빛미디어 | 2016년 07월 | 26,000원
예스24 링크: http://www.yes24.com/24/goods/29081416
★ 스파크 실전편! 실무와 가장 가까운 경험을 제공한다.
이 책은 기능과 API를 단조롭게 나열하지 않는다. 현실과 동떨어진, 예제를 위한 예제를 따라 하지도 않는다. 대신 우리 주변에서 찾을 수 있고 우리 삶과 밀접한 실제 데이터를 가져와 함께 분석하고 다듬어본다. 그것도 하나가 아니라 9가지다. 음악 추천부터 이상 감지, 교통, 금융, 영상 데이터 등. 관심 가는 장을 먼저 봐도 좋고, 차례대로 천천히 따라 해봐도 좋다. 그럼 가장 진보한 분석 도구인 스파크로 다 함께 데이터의 바다를 항해해보자!
★ 현실 세계 데이터셋과 스파크의 만남
1. 오디오스크로블러(AudioScrobbler) 데이터셋으로 음악 추천하기
2. 의사 결정 나무로 산림 식생 분포 예측하기
3. K 평균 군집화로 네트워크 이상 감지하기
4. 숨은 의미 분석으로 위키백과 이해하기
5. 그래프엑스(GraphX)로 동시발생 네트워크 분석하기
6. 뉴욕 택시 운행 데이터로 위치 및 시간 데이터 분석하기
7. 몬테카를로 시뮬레이션으로 금융 리스크 추정하기
8. BDG 프로젝트와 유전체학 데이터 분석하기
9. 파이스파크(PySpark)와 썬더(Thunder)로 신경 영상 데이터 분석하기
"파이썬 성능 잠재력을 끌어내는 실용적인 개발 전략서"
미샤 고렐릭,이안 오스발트 지음 / 김영근,오현석 옮김 | 한빛미디어 | 2016년 8월 | 30,000원
★ 파이썬 3 대응
★ 프로토타이핑에서 실무 운영까지 살아가는 파이썬 코드의 비밀
아이디어 무한경쟁이 펼쳐지는 대(大)스타트업 시대! 높은 생산성으로 유명한 파이썬은 최우선 고려사항이다. 한 가지, 컴파일 언어 대비 느린 성능 때문에 성공한 서비스나 성능이 중요한 기능은 컴파일 언어로 다시 작성하곤 한다. 하지만 실무 운영까지 파이썬 코드를 계속 이어가는 방법이 있다면?
이 책은 파이썬을 둘러싼 설계와 작동 원리를 설명하고 이에 기반한 실용적인 구현 전략을 소개한다. 멀티코어 아키텍처와 클러스터의 이점을 활용하려면 어떻게 해야 하는가? 안정성을 잃지 않고 확장하는 방법은 무엇인가? 여러분은 이에 대한 명확한 해법을 찾고 방대한 소셜 데이터까지도 눈부신 속도로 처리해내는 파이썬 코드를 얻게 될 것이다.
★ 주요 내용
● numpy, Cython, 프로파일러 활용하기
● 파이썬의 시선으로 바라보는 컴퓨터 아키텍처 이해하기
● CPU 시간과 메모리 사용량을 프로파일링하여 병목 지점 찾기
● 상황에 맞는 컬렉션으로 효율적인 프로그램 작성하기
● 행렬과 벡터 연산 가속하기
● 네이티브 코드로 컴파일하기
● 대량의 I/O와 연산 동시 수행하기
● 원격 클러스터로 병렬 처리하기
● 적은 메모리로 대규모 데이터 처리하기
사이토 고키 지음 | 개앞맵시(이복연) 옮김 | 24,000원 | 한빛미디어 | 2017.01.03
"직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서 "
이 책은 라이브러리나 프레임워크에 의존하지 않고, 딥러닝의 핵심을 ‘밑바닥부터’ 직접 만들어보며 즐겁게 배울 수 있는 본격 딥러닝 입문서입니다. 술술 읽힐 만큼 쉽게 설명하였고, 역전파처럼 어려운 내용은 ‘계산 그래프’ 기법으로 시각적으로 풀이했습니다. 무엇보다 작동하는 코드가 있어 직접 돌려보고 요리조리 수정해보면 어려운 이론도 명확하게 이해할 수 있습니다. 딥러닝에 새롭게 입문하려는 분과 기초를 다시금 정리하고 싶은 현업 연구자와 개발자에게 최고의 책이 될 것입니다.
임백준 지음 | 16,000원 | 한빛미디어 | 2016.11.20
세상 모든 프로그래머에게 전하는 행복 보따리 이제는 유명해진 임백준 저자는 2003년, 그의 인생 첫 책인 『행복한 프로그래밍』을 출간한다. 그로부터 십여 년이 훌쩍 지난 2016년, 마침내 개정판이 탄생했다.
(주로 4대강과 골프장 때문이지만) 확실히 강산도 변한 오늘, 저자가 말하고자 하는 ‘행복한’ 프로그래밍은 무엇이 달라졌을까? 놀랍게도 사실 많은 것이 변하진 않았다. 행복의 본질, 프로그래머의 본능인 뜨거운 도전 정신, 그 열기에 기름을 붓고 중독되게 하는 성취감은 해를 거듭해도 변하지 않기 때문이다.
프로그래밍은 재미있는 놀이요, 상상을 현실로 만드는 마법이다. 세상을 창조한 신도 분명 우리와 같은 프로그래머일 것이다. 우리도 이 책과 함께 미래를 프로그래밍하는 행복한 프로그래머가 되어보자.
★ 누구를 위한 책인가
- 젊은 시절의 끓어오르던 열정을 그리워하며 수년 뒤 미래를 걱정하는 중년 개발자
- 연이은 야근에 지쳐 어느덧 쳇바퀴 도는 신세가 된 것 같은 젊은 직장인
- 멋진 프로그래머가 되기를 꿈꾸는 파릇한 학생
- 나만의 세상을 창조하는 신이 되어보기를 꿈꾸는 자
- 『누워서 읽는 알고리즘』의 팬
박상은, 권한철, 서양주 옮김 | 한빛미디어 | 26,000원
다양한 현실 세계 예제로 스파크 2의 진면목을 경험한다.
이 책은 독자에게 대량의 데이터셋을 가지고 스파크 2를 활용해 복잡한 분석과 머신러닝 학습을 실제로 해보는 생생한 느낌을 전달한다. 단순히 모델을 구축하고 평가하는 데 그치지 않고, 데이터 정제부터 전처리, 데이터 조사, 실제 제품을 만들기까지의 전체 파이프라인을 보여준다. 이러한 과정을 다양한 분야에서 가져온 현실 예제에 맞게 교차 최소 제곱 추천 알고리즘, 의사 결정 나무, K-평균 군집화, 숨은 의미 분석, 세션화, 몬테카를로 시뮬레이션 등의 기법을 동원해 풀어본다.
안드레아스 뮐러, 세라 가이도 지음 | 박해선 옮김 | 한빛미디어 | 30,000원
사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현
현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(scikit-learn)과 같은 훌륭한 머신러닝 라이브러리가 복잡하고 난해한 작업을 직관적인 인터페이스로 감싸주는 덕분이죠. 이 책에서는 사이킷런의 핵심 개발자가 복잡한 수학을 동원하지 않고 실용적으로 머신러닝을 구축하는 모든 단계를 설명합니다. 미적분, 선형대수, 확률 이론을 공부하지 않았어도 이 책을 통해 머신러닝을 활용할 수 있게 될 것입니다.
골빈해커(김진중) 지음 | 한빛미디어 | 22,000원
텐서플로 코드로 맛보는 딥러닝 핵심 개념!
이 책은 신경망 기초부터 CNN, Autoencoder, GAN, RNN, DQN까지 딥러닝의 가장 기본이 되는 모델들을 직접 구현하며 몸으로 익히도록 구성했습니다. 이론을 깊이 파헤치기보다는 다양한 딥러닝 모델의 기초 개념과 기본적인 텐서플로 사용법을 학습하는 데 초점을 두고, 각 모델의 논문에 수록된 복잡한 코드들을 그 핵심이 잘 드러나도록 재구현했습니다. 간결해진 예제들이 여러분을 딥러닝과 텐서플로의 세계로 즐겁고 편안히 모실 것입니다.
이 책은 본격적인 알고리즘 공부보다는 알고리즘을 소재로 풀어가는 재미난 이야기를 담았다. 새로운 알고리즘 이론을 소개하는 것도, 독자에게 알고리즘을 ‘강의’하는 것도 아니다. 오히려 알고리즘은 맛있는 읽을거리의 ‘재료’로 쓰였을 뿐이다. 현실 세계와 유사한 재미있는 퀴즈로 독자의 흥미를 유도하기도 하고 때로는 딱딱한 수학 문제로 긴장감을 고조시킨다. 어떤 곳에서는 지저분한 펄 코드가 등장하기도 하며 깔끔하고 읽기 쉬운 C 코드 또한 자주 등장한다. 정렬이나 탐색 리스트 등의 정통 알고리즘도 책의 곳곳에 녹아 있다. 익살스럽고 특이한 그림을 보는 재미 또한 쏠쏠하다는 점도 이 책의 부수적인 장점이다.
“소프트웨어를 개발하는 사람에게 알고리즘은 취업이나 승진을 위해서 억지로 공부하는 대상이 아니라 퍼즐이나 수수께끼처럼 자체로 재미있고 신나는 놀이가 되어야 한다. 내 책 중에서 이 책이 가장 많은 사랑을 받은 배경에는 알고리즘을 딱딱한 공부가 아니라 말랑말랑한 놀이로 다루었다는 측면이 놓여 있을 것이다. 그런 의미에서 나는 이 책이 이미 개발자인 사람은 물론이고, 이제 막 소프트웨어 개발과 코딩을 배우려는 사람들에게 많이 읽히기를 희망한다.”
-- 지은이의 말 중에서
★ 대상 독자
- 휴식과 상식 쌓기와 공부를 동시에 원하는 바쁜 직장인
- 학문으로서가 아닌, 개발자의 삶에 녹아든 알고리즘 이야기가 궁금한 개발자
- 알고리즘이 재미있는 개발자
스티븐 블랙히스, 앤서니 존스 지음 | 오현석 옮김 | 한빛미디어
함수형 반응형 프로그래밍에 관한 최초의 종합 안내서
프로그램은 ‘어떻게’가 아니라 ‘무엇’을 기술하는 선언적인 문서여야 한다는 주장을 받아들이는 사람이 점점 늘고 있다. 이런 흐름은 함수형 언어의 부흥으로 이어졌다. 함수형 언어로는 프로그램을 더 선언적인 방식으로 작성할 수 있고, 이를 이벤트 처리에 결합한 것이 함수형 반응형 프로그래밍(FRP)이다. 지난 수십 년 동안 이벤트 처리 인프라를 책임진 관찰자 패턴은, 한편으로는 버그의 온상이 되기도 했다. FRP는 관찰자 패턴의 잠재적 버그 원인을 근본적으로 차단하여 더 복잡한 시스템으로 쉽게 확장할 수 있도록 해준다.
이 책의 저자는 FRP 프레임워크인 소듐(Sodium)의 창시자로서, FRP의 기초부터 기존 프로젝트를 점진적으로 FRP 시스템으로 탈바꿈시키는 방법까지 친절히 안내한다.
"파이썬 성능 잠재력을 끌어내는 실용적인 개발 전략서"
미샤 고렐릭,이안 오스발트 지음 / 김영근,오현석 옮김 | 한빛미디어 | 2016년 8월 | 30,000원
★ 파이썬 3 대응
★ 프로토타이핑에서 실무 운영까지 살아가는 파이썬 코드의 비밀
아이디어 무한경쟁이 펼쳐지는 대(大)스타트업 시대! 높은 생산성으로 유명한 파이썬은 최우선 고려사항이다. 한 가지, 컴파일 언어 대비 느린 성능 때문에 성공한 서비스나 성능이 중요한 기능은 컴파일 언어로 다시 작성하곤 한다. 하지만 실무 운영까지 파이썬 코드를 계속 이어가는 방법이 있다면?
이 책은 파이썬을 둘러싼 설계와 작동 원리를 설명하고 이에 기반한 실용적인 구현 전략을 소개한다. 멀티코어 아키텍처와 클러스터의 이점을 활용하려면 어떻게 해야 하는가? 안정성을 잃지 않고 확장하는 방법은 무엇인가? 여러분은 이에 대한 명확한 해법을 찾고 방대한 소셜 데이터까지도 눈부신 속도로 처리해내는 파이썬 코드를 얻게 될 것이다.
★ 주요 내용
● numpy, Cython, 프로파일러 활용하기
● 파이썬의 시선으로 바라보는 컴퓨터 아키텍처 이해하기
● CPU 시간과 메모리 사용량을 프로파일링하여 병목 지점 찾기
● 상황에 맞는 컬렉션으로 효율적인 프로그램 작성하기
● 행렬과 벡터 연산 가속하기
● 네이티브 코드로 컴파일하기
● 대량의 I/O와 연산 동시 수행하기
● 원격 클러스터로 병렬 처리하기
● 적은 메모리로 대규모 데이터 처리하기
사이토 고키 지음 | 개앞맵시(이복연) 옮김 | 24,000원 | 한빛미디어 | 2017.01.03
"직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서 "
이 책은 라이브러리나 프레임워크에 의존하지 않고, 딥러닝의 핵심을 ‘밑바닥부터’ 직접 만들어보며 즐겁게 배울 수 있는 본격 딥러닝 입문서입니다. 술술 읽힐 만큼 쉽게 설명하였고, 역전파처럼 어려운 내용은 ‘계산 그래프’ 기법으로 시각적으로 풀이했습니다. 무엇보다 작동하는 코드가 있어 직접 돌려보고 요리조리 수정해보면 어려운 이론도 명확하게 이해할 수 있습니다. 딥러닝에 새롭게 입문하려는 분과 기초를 다시금 정리하고 싶은 현업 연구자와 개발자에게 최고의 책이 될 것입니다.
임백준 지음 | 16,000원 | 한빛미디어 | 2016.11.20
세상 모든 프로그래머에게 전하는 행복 보따리 이제는 유명해진 임백준 저자는 2003년, 그의 인생 첫 책인 『행복한 프로그래밍』을 출간한다. 그로부터 십여 년이 훌쩍 지난 2016년, 마침내 개정판이 탄생했다.
(주로 4대강과 골프장 때문이지만) 확실히 강산도 변한 오늘, 저자가 말하고자 하는 ‘행복한’ 프로그래밍은 무엇이 달라졌을까? 놀랍게도 사실 많은 것이 변하진 않았다. 행복의 본질, 프로그래머의 본능인 뜨거운 도전 정신, 그 열기에 기름을 붓고 중독되게 하는 성취감은 해를 거듭해도 변하지 않기 때문이다.
프로그래밍은 재미있는 놀이요, 상상을 현실로 만드는 마법이다. 세상을 창조한 신도 분명 우리와 같은 프로그래머일 것이다. 우리도 이 책과 함께 미래를 프로그래밍하는 행복한 프로그래머가 되어보자.
★ 누구를 위한 책인가
- 젊은 시절의 끓어오르던 열정을 그리워하며 수년 뒤 미래를 걱정하는 중년 개발자
- 연이은 야근에 지쳐 어느덧 쳇바퀴 도는 신세가 된 것 같은 젊은 직장인
- 멋진 프로그래머가 되기를 꿈꾸는 파릇한 학생
- 나만의 세상을 창조하는 신이 되어보기를 꿈꾸는 자
- 『누워서 읽는 알고리즘』의 팬
박상은, 권한철, 서양주 옮김 | 한빛미디어 | 26,000원
다양한 현실 세계 예제로 스파크 2의 진면목을 경험한다.
이 책은 독자에게 대량의 데이터셋을 가지고 스파크 2를 활용해 복잡한 분석과 머신러닝 학습을 실제로 해보는 생생한 느낌을 전달한다. 단순히 모델을 구축하고 평가하는 데 그치지 않고, 데이터 정제부터 전처리, 데이터 조사, 실제 제품을 만들기까지의 전체 파이프라인을 보여준다. 이러한 과정을 다양한 분야에서 가져온 현실 예제에 맞게 교차 최소 제곱 추천 알고리즘, 의사 결정 나무, K-평균 군집화, 숨은 의미 분석, 세션화, 몬테카를로 시뮬레이션 등의 기법을 동원해 풀어본다.
안드레아스 뮐러, 세라 가이도 지음 | 박해선 옮김 | 한빛미디어 | 30,000원
사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현
현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(scikit-learn)과 같은 훌륭한 머신러닝 라이브러리가 복잡하고 난해한 작업을 직관적인 인터페이스로 감싸주는 덕분이죠. 이 책에서는 사이킷런의 핵심 개발자가 복잡한 수학을 동원하지 않고 실용적으로 머신러닝을 구축하는 모든 단계를 설명합니다. 미적분, 선형대수, 확률 이론을 공부하지 않았어도 이 책을 통해 머신러닝을 활용할 수 있게 될 것입니다.
골빈해커(김진중) 지음 | 한빛미디어 | 22,000원
텐서플로 코드로 맛보는 딥러닝 핵심 개념!
이 책은 신경망 기초부터 CNN, Autoencoder, GAN, RNN, DQN까지 딥러닝의 가장 기본이 되는 모델들을 직접 구현하며 몸으로 익히도록 구성했습니다. 이론을 깊이 파헤치기보다는 다양한 딥러닝 모델의 기초 개념과 기본적인 텐서플로 사용법을 학습하는 데 초점을 두고, 각 모델의 논문에 수록된 복잡한 코드들을 그 핵심이 잘 드러나도록 재구현했습니다. 간결해진 예제들이 여러분을 딥러닝과 텐서플로의 세계로 즐겁고 편안히 모실 것입니다.
이 책은 본격적인 알고리즘 공부보다는 알고리즘을 소재로 풀어가는 재미난 이야기를 담았다. 새로운 알고리즘 이론을 소개하는 것도, 독자에게 알고리즘을 ‘강의’하는 것도 아니다. 오히려 알고리즘은 맛있는 읽을거리의 ‘재료’로 쓰였을 뿐이다. 현실 세계와 유사한 재미있는 퀴즈로 독자의 흥미를 유도하기도 하고 때로는 딱딱한 수학 문제로 긴장감을 고조시킨다. 어떤 곳에서는 지저분한 펄 코드가 등장하기도 하며 깔끔하고 읽기 쉬운 C 코드 또한 자주 등장한다. 정렬이나 탐색 리스트 등의 정통 알고리즘도 책의 곳곳에 녹아 있다. 익살스럽고 특이한 그림을 보는 재미 또한 쏠쏠하다는 점도 이 책의 부수적인 장점이다.
“소프트웨어를 개발하는 사람에게 알고리즘은 취업이나 승진을 위해서 억지로 공부하는 대상이 아니라 퍼즐이나 수수께끼처럼 자체로 재미있고 신나는 놀이가 되어야 한다. 내 책 중에서 이 책이 가장 많은 사랑을 받은 배경에는 알고리즘을 딱딱한 공부가 아니라 말랑말랑한 놀이로 다루었다는 측면이 놓여 있을 것이다. 그런 의미에서 나는 이 책이 이미 개발자인 사람은 물론이고, 이제 막 소프트웨어 개발과 코딩을 배우려는 사람들에게 많이 읽히기를 희망한다.”
-- 지은이의 말 중에서
★ 대상 독자
- 휴식과 상식 쌓기와 공부를 동시에 원하는 바쁜 직장인
- 학문으로서가 아닌, 개발자의 삶에 녹아든 알고리즘 이야기가 궁금한 개발자
- 알고리즘이 재미있는 개발자
스티븐 블랙히스, 앤서니 존스 지음 | 오현석 옮김 | 한빛미디어
함수형 반응형 프로그래밍에 관한 최초의 종합 안내서
프로그램은 ‘어떻게’가 아니라 ‘무엇’을 기술하는 선언적인 문서여야 한다는 주장을 받아들이는 사람이 점점 늘고 있다. 이런 흐름은 함수형 언어의 부흥으로 이어졌다. 함수형 언어로는 프로그램을 더 선언적인 방식으로 작성할 수 있고, 이를 이벤트 처리에 결합한 것이 함수형 반응형 프로그래밍(FRP)이다. 지난 수십 년 동안 이벤트 처리 인프라를 책임진 관찰자 패턴은, 한편으로는 버그의 온상이 되기도 했다. FRP는 관찰자 패턴의 잠재적 버그 원인을 근본적으로 차단하여 더 복잡한 시스템으로 쉽게 확장할 수 있도록 해준다.
이 책의 저자는 FRP 프레임워크인 소듐(Sodium)의 창시자로서, FRP의 기초부터 기존 프로젝트를 점진적으로 FRP 시스템으로 탈바꿈시키는 방법까지 친절히 안내한다.
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
안드레아스 비티히, 미하엘 비티히 지음 | 모파상(백영상) 옮김 | 한빛미디어 | 2017. 05. 01
AWS 입문자를 위한 시원시원한 실습서 -
이 책은 AWS를 클라우드 인프라의 핵심인 컴퓨팅, 저장소, 네트워킹을 중심으로 소개한다. 구체적으로는 클라우드 컴퓨팅 개론과 계정 생성 같은 기초, AWS API로 AWS의 모든 기능을 프로그램적으로 제어하는 인프라 자동화, 데이터를 안전하게 보관하는 다양한 기법, 사설 네트워크로 시스템을 격리하는 방법, 고가용성과 장애허용 설계 기법 등을 설명한다.
『데이터 분석을 통한 네트워크 보안』 - 맛보기복연 이
마이클 콜린스 지음 | 문성건 옮김 | 한빛미디어 | 2016년 04월 | 30,000원
예스24: http://www.yes24.com/24/Goods/25411084
진화하는 네트워크에 대처하는 진보된 보안 기술을 익힌다.
모바일 기기의 범람에 IoT까지, 오늘날의 복잡한 네트워크를 보호하려면 전통적인 침입 탐지와 로그 분석만으로는 충분하지 않다. 이 책에서 보안 전문가인 마이클 콜린스는 점점 더 거대해지는 네트워크에서 트래픽 데이터를 수집, 정리, 분석하는 여러 기법과 도구를 선보인다. 네트워크가 어떻게 이용되는지 이해하고 이를 보호하고 개선하기 위한 조치가 무엇인지 배울 수 있다.
- 네트워크, 호스트, 서비스 센서에서 보안 데이터 얻기
- RDB, 그래프DB, 레디스, 하둡에 트래픽 데이터 저장하기
- SiLK, R 등의 도구로 분석 및 시각화하기
- 탐구적 데이터 분석으로 이상 현상 탐지하기
- 그래프 분석으로 경보와 포렌식 개선하기
- 트래픽 양과 행위를 살펴 DDoS와 데이터베이스 급습 검진하기
- 네트워크 지도와 장비 목록의 단계별 활용 방법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
프랭크 D. 루나 지음 | 류광 옮김 | 한빛미디어
3D 그래픽 프로그래밍의 기초부터 최신 기법까지
이 책은 DirectX 12로 게임을 개발해가며 대화식 컴퓨터 그래픽 프로그래밍을 익히는 입문서다. 1부는 기본적인 수학적 도구들을, 2부는 Direct3D의 기본 과제들을 수행하는 방법을, 그리고 3부는 여러 응용 기법과 특수 효과를 설명한다. 그 과정에서 명령 목록, 파이프라인 상태 객체, 서술자 힙과 테이블, CPU 추가부담 감소 및 다중 CPU 코어를 효율적으로 사용하기 위한 명시적 자원 관리 같은 DirectX 12의 새 기능을 활용하는 방법을 보여준다. 하드웨어 테셀레이션, 계산 셰이더, 주변광 차폐, 실시간 반사, 법선 매핑과 변위 매핑, 그림자 렌더링, 캐릭터 애니메이션 같은 현대적인 특수 효과와 기법도 이 책으로 배울 수 있다.
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
안드레아스 비티히, 미하엘 비티히 지음 | 모파상(백영상) 옮김 | 한빛미디어 | 2017. 05. 01
AWS 입문자를 위한 시원시원한 실습서 -
이 책은 AWS를 클라우드 인프라의 핵심인 컴퓨팅, 저장소, 네트워킹을 중심으로 소개한다. 구체적으로는 클라우드 컴퓨팅 개론과 계정 생성 같은 기초, AWS API로 AWS의 모든 기능을 프로그램적으로 제어하는 인프라 자동화, 데이터를 안전하게 보관하는 다양한 기법, 사설 네트워크로 시스템을 격리하는 방법, 고가용성과 장애허용 설계 기법 등을 설명한다.
『데이터 분석을 통한 네트워크 보안』 - 맛보기복연 이
마이클 콜린스 지음 | 문성건 옮김 | 한빛미디어 | 2016년 04월 | 30,000원
예스24: http://www.yes24.com/24/Goods/25411084
진화하는 네트워크에 대처하는 진보된 보안 기술을 익힌다.
모바일 기기의 범람에 IoT까지, 오늘날의 복잡한 네트워크를 보호하려면 전통적인 침입 탐지와 로그 분석만으로는 충분하지 않다. 이 책에서 보안 전문가인 마이클 콜린스는 점점 더 거대해지는 네트워크에서 트래픽 데이터를 수집, 정리, 분석하는 여러 기법과 도구를 선보인다. 네트워크가 어떻게 이용되는지 이해하고 이를 보호하고 개선하기 위한 조치가 무엇인지 배울 수 있다.
- 네트워크, 호스트, 서비스 센서에서 보안 데이터 얻기
- RDB, 그래프DB, 레디스, 하둡에 트래픽 데이터 저장하기
- SiLK, R 등의 도구로 분석 및 시각화하기
- 탐구적 데이터 분석으로 이상 현상 탐지하기
- 그래프 분석으로 경보와 포렌식 개선하기
- 트래픽 양과 행위를 살펴 DDoS와 데이터베이스 급습 검진하기
- 네트워크 지도와 장비 목록의 단계별 활용 방법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
프랭크 D. 루나 지음 | 류광 옮김 | 한빛미디어
3D 그래픽 프로그래밍의 기초부터 최신 기법까지
이 책은 DirectX 12로 게임을 개발해가며 대화식 컴퓨터 그래픽 프로그래밍을 익히는 입문서다. 1부는 기본적인 수학적 도구들을, 2부는 Direct3D의 기본 과제들을 수행하는 방법을, 그리고 3부는 여러 응용 기법과 특수 효과를 설명한다. 그 과정에서 명령 목록, 파이프라인 상태 객체, 서술자 힙과 테이블, CPU 추가부담 감소 및 다중 CPU 코어를 효율적으로 사용하기 위한 명시적 자원 관리 같은 DirectX 12의 새 기능을 활용하는 방법을 보여준다. 하드웨어 테셀레이션, 계산 셰이더, 주변광 차폐, 실시간 반사, 법선 매핑과 변위 매핑, 그림자 렌더링, 캐릭터 애니메이션 같은 현대적인 특수 효과와 기법도 이 책으로 배울 수 있다.
Source code: https://github.com/uosdmlab/tensorflow-tutorial
2016년 11월 14일에 서울시립대학교 대학원 수업에서 진행한 텐서플로 걸음마 슬라이드입니다. 한국에서 출판된 "텐서플로 첫걸음"이라는 책을 바탕으로 만들었습니다. TensorFlow에 대한 간략한 설명과 5가지 예제 코드를 다룹니다. 특히 그 중 MNIST 데이터셋을 CNN으로 분류하는 과정을 자세히 설명했습니다 ^^
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
요즘 Hadoop 보다 더 뜨고 있는 Spark.
그 Spark의 핵심을 이해하기 위해서는 핵심 자료구조인 Resilient Distributed Datasets (RDD)를 이해하는 것이 필요합니다.
RDD가 어떻게 동작하는지, 원 논문을 리뷰하며 살펴보도록 합시다.
http://www.cs.berkeley.edu/~matei/papers/2012/sigmod_shark_demo.pdf
코디 범가드너 지음 | 강재준, 신원석, 오성근, 이준섭, 조영준 옮김 | 32,000원 | 한빛미디어 | 2016.10.01
★ 오픈스택 핵심 구성요소의 기능과 상호작용을 철저히 파헤친다.
오픈스택의 가장 큰 장점은 모듈성이다. 컴퓨트, 스토리지, 네트워크, 대시보드, 오케스트레이션 등 다양한 구성요소를 조합하여 각자가 제공하려는 서비스를 위한 최상의 맞춤형 인프라를 구축할 수 있다. 하지만 단순한 따라 하기식 설치 경험만으로는 실제 운영 시에 마주하는 복잡 다양한 요구에 제대로 대처할 수 없다. 이 책은 오픈스택 핵심 구성요소들을 다양한 방식으로 배포해보며 응용력을 키우고, 상용 환경에 필요한 구성과 오케스트레이션까지 살펴볼 수 있도록 구성했다. 이를 통해 독자들은 오픈스택 핵심 구성요소가 제공하는 기능과 설치 옵션의 의미와 효과, 다른 구성요소와 상호작용하는 방식을 확실히 이해하게 될 것이다.
『클라우드 시스템을 관리하는 기술』 - 맛보기복연 이
토머스 리몬첼리 외 공저 / 류광 옮김 | 한빛미디어 | 2016년 2월 | 36,000원
예스24: http://www.yes24.com/24/goods/24557610
“클라우드 규모 서비스를 실현하는 이론과 실전 노하우를 정리한 지침서”
이 책은 대규모 클라우드 인프라와 서비스의 구조와 설계 패턴, 그리고 이를 운영하는 방법까지, 시스템과 팀이 유기적으로 움직이는 비법을 제시한다.
저자들의 구글, 엣시(Etsy), 트위터, 페이스북, 넷플릭스, 아마존 등 거대 기업에서의 사례와 경험에서 시기를 타지 않는 근본적인 원리(principle)와 관행(practice), 특정 제품이나 시스템을 선택할 때 독자가 반드시 살펴봐야 할 품질 요소들을 이 책에 담았다. 이러한 접근법 덕분에 시간이 흘러 기술이 변해도 독자는 이 업계에서 여전히 준비된 전문가로 남게 될 것이다.
아래의 9권 책 리뷰를 포함하고 있습니다.
리팩토링 코드 품질을 개선하는 객체지향 사고법
빅데이터의 충격 (거대한 데이터의 파도가 사업 전략을 바꾼다)
헤드 퍼스트 데이터 분석 (당신을 최고의 데이터 분석가로 이끌어줄 마법 같은 학습서)
왓슨 인간의 사고를 시작하다
소프트웨어 누가 이렇게 개떡같이 만든 거야
앱만장자 (부를 거머쥔 인디 개발자들의 성공 비법)
애자일 마스터 (프로젝트 인셉션 추정과 계획 그리고 실행)
읽기 좋은 코드가 좋은 코드다 (더 나은 코드를 작성하는 간단하고 실전적인 테크닉)
프로그래머, 열정을 말하다
Spark machine learning & deep learninghoondong kim
Spark Machine Learning and Deep Learning Deep Dive.
Scenarios that use Spark hybrid with other data analytics tools (MS R on Spark, Tensorflow(keras) with Spark, Scikit-learn with Spark, etc)
데이터베이스 수업도 듣고 선임자가 건네준 모델대로 구현해본 경험이 제법 있더라도, 막상 자신이 책임자가 되어 백지 위에 엔터티 박스와 관계선을 그려야 한다면 막막함이 앞을 가린다. 이전에 본 듯한 패턴을 흉내 내 그림을 그려보지만 수백, 수천의 엔터티 홍수 속에서 제대로 가고 있다는 확신이 서지 않는다.
저자는 이처럼 너무도 거대한 현업의 복잡함에 압도되어 길을 잃고 고생하는 후임들의 안타까운 모습에 직접 멘토가 되어주고자 이 책을 쓰기 시작했다. 내공이 깊어야 연공이 자유롭듯, 그 본질을 꿰고 있다면 어떤 업무가 주어지든 막힘없이 헤쳐나갈 수 있다. 짧은 호흡으로 경쾌하게 풀어낸 이야기들을 통해 따스한 온기가 묻어 있는 저자의 노하우를 내 것으로 만들자.
인터넷에는 수없이 많은 PHP 튜토리얼이 있다. 이들 대부분은 이미 낡고 쓸모없어진 지 오래지만 불행히도 구글 검색 결과에 살아남아 여전히 참조자료로 활용된다. 이런 낡은 정보를 무분별하게 받아들인 PHP 프로그래머는 자신도 모르는 사이에 느리고 보안에 취약한 PHP 애플리케이션을 만들게 된다.
이 책에서는 슬림(Slim) 프레임워크의 제작자이자 ‘PHP The Right Way’의 창안자인 조시 록하트가 최신 PHP 기술을 소개하는 한편, 자신의 오픈소스 프로젝트와 일상 업무에서 매일 사용하는 최신 기술을 보여준다. 독자 여러분도 이 책을 통해 PHP의 짜릿한 변화의 순간에 동참하고 진보된 PHP를 온전히 활용할 수 있게 될 것이다.
- 네임스페이스, 트레이트, 제너레이터, 클로저 등의 모던 PHP 기능
- PHP 컴포넌트를 검색, 사용, 작성하는 방법
- 보안, 데이터베이스 작업, 문자열, 스트림, 에러와 예외 등에 대한 모범 사례
- 프로비저닝, 배포, 튜닝, 테스팅, 프로파일링에 필요한 도구와 기술
- 페이스북이 선보인 HHVM과 Hack이 최신 PHP에 미친 영향
- 프로덕션 서버에 대응하는 로컬 개발 환경 구축
★ 대상 독자
- PHP에 대한 기본적인 이해가 있으며 자신의 기량을 강화하고 싶은 모든 개발자
- 수년 전부터 같은 패턴으로 개발하고 있는 PHP 개발자
- PHP의 최신 변화가 궁금하고 미래를 적극적으로 준비하고 싶은 개발자
- 호환되지 않는 여러 PHP 버전의 설명이 혼재된 인터넷 자료에 고생하고 있는 개발자
★ 추천사
나는 PHP 언어와 커뮤니티의 현 상황을 제대로 반영한 서적을 찾느라 수년을 보냈다. 이제 주저하지 않고 『Modern PHP』를 추천한다.
─ 에드 핀클러, 개발자 겸 블로거(funkatron.com)
프로그래밍에서 절대 변하지 않는 진리는 ‘프로그래밍은 변한다’는 사실뿐이다. PHP는 변하고 있고 여러분의 개발 방법 역시 변해야만 한다. 조시는 최신 PHP로 작성하기 위해 알아야 할 도구와 개념을 제시한다.
─ 캘 에번스, E.I.C.C. CEO
SK Planet에서 주최한 TechPlanet 2012에서 발표했던 자료입니다. 소셜 큐레이션 서비스에 대한 간략한 소개와 관련 기술, 향후 전망 등을 담고 있습니다.
! 정정합니다. 32페이지의 pypi install ... 은 pip install 이 올바른 코드입니다.
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기복연 이
조대협, 최명근, 최유석, 윤성재, 김영균 지음 | 한빛미디어 | 2016.09.10
구글 클라우드 플랫폼을 처음 사용하는 사람을 위한 실습형 입문서.
이 책은 구글 클라우드를 처음 사용하는 사람이 가상 머신(VM) 기반의 클라우드 서비스 기능들을 빠르게 사용할 수 있도록 도울 목적으로, 실습 위주로 속도감 있게 구성하였다.
구글 클라우드의 가상 머신 서비스인 컴퓨트 엔진을 사용하기 위해 가입부터 VM 설정, 네트워크 설정, 오토 스케일링(자동 확장)과 모니터링, 그리고 MySQL 매지니드 서비스인 Cloud SQL의 사용법을 소개한다. 마지막으로 구글 클라우드만의 장점인 빅데이터 서비스, 전 세계를 덮는 전용 네트워크망, 합리적인 가격 정책을 소개한다.
라쎄 코스켈라 지음 | 이복연 옮김 | 한빛미디어 | 2013년 11월 | 25,000원
예스24: http://www.yes24.com/24/goods/1136108
테스트 라이브러리 사용법에서 나아가 ‘좋은 테스트란 무엇인가’, ‘좋은 테스트를 작성하려면 어떻게 해야 하는가’에 관한 현장의 물음에 해답을 제시한다. 테스트가 갖춰야 할 요건에 따라 나눈 테스트 카탈로그가 수록되어, 필요할 때마다 원하는 목록을 참고하여 자신이 작성한 테스트에서 문제를 발견하고 수정해 나갈 수 있으며 더욱 응용력 높은 학습을 할 수 있다.
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기복연 이
크리스 크로퍼드 저/최향숙 역 | 한빛미디어 | 2015년 11월 | 22,000원
게임 개발자 회의(GDC) 창립자가 들려주는 인터랙티브 스토리텔링
1980년대부터 다양한 게임을 제작해온 크리스 크로퍼드는 스토리의 중요성에 매료되어 20년 넘게 인터랙티브 스토리텔링을 연구하며 대중화에 앞장서왔다. 이 책은 그의 모든 노하우와 가장 최근의 성과를 집대성한 것으로, 진정한 인터랙티브 스토리텔링에 대한 고찰부터, 이를 위한 사고의 전환, 올바로 구현하기 위한 추상화와 수학적 설계 기법, 플레이어의 자유의지와 작가가 의도한 운명 사이의 균형잡기 등에 관한 실용적 지침을 담았다.
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기복연 이
MEAN 스택, 서버와 클라이언트를 넘나드는 풀스택 엔지니어의 선택
MEAN은 서버와 클라이언트 양쪽을 모두 다루는 풀스택 엔지니어를 위한 기술이며, 한번 익혀두면 여러 상황에서 돌파구를 발견할 가능성을 높여준다. 그만큼 개발자의 경쟁력을 높일 수 있음을 의미한다. 스택의 모든 구성 요소가 자바스크립트를 사용하므로 진입 장벽이 낮고 팀 내 협업, 노하우 공유, 의사소통에 큰 도움을 준다.
이 책은 오랜 개발과 번역 경험을 두루 갖춘 베테랑 역자가 원서의 예제를 완결된 형태로 재구성해서 독자의 시간을 절약해주고 아쉬운 설명을 보강해 완성도를 높였다. 책의 흐름에 발맞춰 예제를 조금씩 확장해 나가다 보면 어느 순간 자신만의 멋진 풀스택 앱을 만들 수 있을 것이다.
- 지은이 : 애덤 브레츠, 콜린 J. 이릭
- 옮긴이 : 박재호
- ISBN : 978-89-6848-218-2 93000
- 발행일 : 2015년 9월 1일
- 페이지수 : 348
- 정가 : 28,000원
- 구매(예스24) : http://goo.gl/KNlRGg
『게임 매니악스 액션 게임 알고리즘』 - 미리보기복연 이
액션 게임 기술을 총망라한 알고리즘 백과사전
게임의 백미는 역시 액션 게임! 이 책은 100개 이상의 상용 게임을 분석하여 이동, 점프, 공격, 무기, 지형 이용, 아이템 등 화끈하고 박진감 넘치는 액션을 선사하는 알고리즘 94가지를 총정리하였다.
『게임 매니악스 액션 게임 알고리즘』, 『게임 매니악스 퍼즐 게임 알고리즘』, 『게임 매니악스 슈팅 게임 알고리즘』, 『게임 매니악스 탄막 게임 알고리즘』으로 구성된 <게임> 시리즈는 게임 장르별 핵심 알고리즘을 일목요연하게 정리하여 이제 막 게임 개발에 뛰어든 이에게는 좋은 입문서가, 경력 많은 개발자에게는 옆에 두고 필요할 때 바로 찾아볼 수 있는 훌륭한 레퍼런스가 되어줄 것이다.
- 지은이 : 마츠우라 켄이치로, 츠카사 유키
- 옮긴이: Wisdom Teeth
- ISBN : 978-89-6848-206-9 93000
- 발행일 : 2015년 7월 1일
- 기타 : <게임> 시리즈
- 페이지수 : 564
- 정가 : 34,000원
안드로이드 앱/플랫폼 개발자가 알아야 할 종합 보안 안내서
안드로이드는 전 세계에서 가장 인기 있는 모바일 플랫폼으로 거의 모든 개인 정보의 허브가 되었다. 이미 해커들의 제1 공격대상이 된 안드로이드에서 신뢰받는 서비스로 성공하려면 플랫폼뿐 아니라 앱 개발자도 보안에 대해 적극적으로 배우고 대처해야 한다.
이 책은 안드로이드의 '앱 권한'과 '샌드박스 모델', '보안 강화 안드로이드'는 물론이고 좀처럼 정보를 얻기 힘든 dm-verity와 같은 기능까지 훌륭히 설명한, 안드로이드 개발자에게 꼭 필요한 지침서다.
- 지은이 : 니콜라이 옐렌코프
- 옮긴이: 강권학
- ISBN : 978-89-6848-197-0 93000
- 발행일 : 2015년 6월 1일
- 페이지수 : 488
- 정가 : 38,000원
이 책은 안드로이드를 임베디드 기기에 포팅, 확장, 커스터마이징하는 데 필요한 각종 기술적 궁금증을 해소해 주는 안내서다. 다가오는 사물인터넷 시대의 핵심 플랫폼이 될 안드로이드의 구조와 동작 원리를 이해하여 나만의 안드로이드 기반 제품을 만들 수 있는 지식과 기술을 습득하게 도와준다.
- 저자 : 카림 야크무르
- 역자 : 이성주
- ISBN : 978-89-6848-177-2 93000
- 발행일 : 2015년 4월 1일
- 페이지수 : 460
- 정가 : 27,000원
<철권> 개발자가 전하는 쉽고 재미난 게임의 원리
‘CEDEC AWARDS 2013 특별상 수상도서’
이 책은 게임기의 구조부터 애니메이션, 3D 그래픽, 수학과 물리까지, 게임 개발에 필요한 기본 기술과 원리를 가장 쉽게 설명한 개론서이다. 2000년부터 매년 열리고 있는 일본 최대의 개발자 콘퍼런스 CEDEC에서 2013년 특별상을 수상했다.
- 저자 : 도마에 요시키
- 역자 : 고승희
- ISBN : 978-89-6848-154-3 93000
- 발행일 : 2015년 1월 2일
- 페이지수 : 336
- 정가 : 25,000원
2. 9가지 사례로 익히는 고급 스파크 분석 :
현실 세계 빅데이터로 배우는 가장 실용적인 스파크 활용서
초판발행 2016년 7월 1일
지은이 샌디 라이자, 유리 레이저슨, 션 오언, 조시 윌스 / 옮긴이 박상은, 권한철, 서양주 / 펴낸이 김태헌
펴낸곳 한빛미디어(주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부
전화 02–325–5544 / 팩스 02–336–7124
등록 1999년 6월 24일 제10–1779호 / ISBN 978–89–6848–289–2 93000
총괄 전태호 / 책임편집 김창수 / 기획・편집 이복연
디자인 표지・내지 여동일, 조판 백지선
영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 변지영 / 제작 박성우, 김정우
이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로
알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다.
한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
2016 HANBIT Media Inc.
Authorized Korean translation of the English edition of Advanced Analytics with Spark, ISBN
9781491912768 2015 Sandy Ryza, Uri Laserson, Sean Owen, and Josh Wills
This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls
all rights to publish and sell the same.
이 책의 저작권은 오라일리와 한빛미디어(주)에 있습니다.
저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다.
책으로 펴내고 싶은 아이디어나 원고를 메일(writer@hanbit.co.kr)로 보내주세요.
한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
표지 동물은 송골매다. 이 매는 세상에서 가장 흔한 맹금류 중 하나로 남극을 제외한 모든 대륙에 서식한다.
또한, 도시, 열대 지역, 사막, 툰드라 등 다양한 환경에서 생존할 수 있다. 일부는 겨울과 여름 서식지 간
의 머나먼 여행을 한다.
송골매는 세상에서 가장 빨리 나는 새로, 시속 약 320km로 급강하할 수 있다. 참새나 오리와
같은 다른 새와 박쥐를 먹이로 하는데, 공중에서도 먹이를 낚아챌 수 있다.
다 자란 송골매의 날개는 푸른 잿빛을, 등은 어두운 갈색을 띠며, 담황색 배에는 갈색
점이, 하얀 얼굴에는 검은색 눈물점이 있다. 그리고 갈고리 모양의 부리와 강
한 발톱도 있다. 송골매의 영어 이름인 peregrine falcon은 라틴어의
peregrinus에서 온 말인데, 그 뜻은 방랑자다. 송골매는 매조련사들
의 사랑을 받아왔으며, 여러 세기에 걸쳐 사냥에 동원되었다.
오라일리 책의 표지에 등장하는 동물 중 상당수는 멸종 위기에 처해 있다. 이들 모두가 우리 세상에 소중한 존재다. 이 동
물들을 돕고 싶다면 animals.oreilly.com으로 가보자.
표지 그림은 라이데커의 『Royal Natural History』에서 가져왔다.
| 표지 설명 |
4. 4
샌디 라이자 Sandy Ryza
클라우데라의 선임 데이터 과학자이자 아파치 스파크 프로젝트의 활동적인 컨트리뷰터다. 최근에
클라우데라에서 스파크 개발을 이끌었으며 지금은 고객들이 스파크를 사용해 다양한 형태의 분석을
구현하는 데 도움을 주고 있다. 또한 하둡 프로젝트의 관리 위원회 멤버이기도 하다.
유리 레이저슨 Uri Laserson
클라우데라의 선임 데이터 과학자이며, 하둡 생태계에서의 파이썬 활용에 주력하고 있다. 또한 고
객들이 다양한 문제에 하둡을 사용할 수 있도록 지원하고 있는데, 특히 생명 과학과 헬스 케어에 집
중하고 있다. 이전에는 MIT에서 생의공학biomedical engineering 박사 과정 중에 Good Start Genetics
라는 차세대 검진 회사를 공동 창업했다.
션 오언 Sean Owen
클라우데라의 유럽/중동/아프리카 대상 데이터 과학팀의 디렉터다. 아파치 머하웃Apache Mahout 기계
학습 프로젝트의 커미터이자 중요한 컨트리뷰터로, 머하웃의 Taste 추천 프레임워크를 개발했다.
션은 아파치 스파크의 커미터이기도 하다. 스파크, 스파크 스트리밍, 그리고 카프카로 개발한 하둡
에서 동작하는 실시간 대규모 학습을 위한 Oryx 프로젝트(예전에는 Myrrix라고 불렸던)를 만들
었다.
조시 윌스 Josh Wills
슬랙Slack 데이터 엔지니어링팀의 디렉터다. 전에는 클라우데라의 데이터 과학팀의 선임 디렉터로써
고객들과 함께 다양한 업계의 하둡 기반 솔루션을 개발했다. 자바로 최적화된 맵리듀스와 스파크 파
이프라인을 만드는 아파치 크런치Apache Crunch 프로젝트의 창설자이며 커미터를 맡고 있다. 클라우데
라에 합류하기 전에는 구글에서 광고 경매 시스템을 개발했고, Google+에서 사용하는 분석 인프
라의 개발을 이끌었다.
지은이 소개
5. 5
박상은
컴퓨터에 붙은 그림을 보고 애플이라는 단어의 뜻을 알게 된 이 땅의 흔한 개발자 중 한 사람이다.
포항공과대학교에서 전산학을, 한국과학기술원에서 인공지능을 공부했으며, 그 덕분에 알파고와
스카이넷을 구분할 줄 아는 지혜를 갖추게 되었다. 메일, 브라우저, CMS, 도서 관리 시스템 등 일
관성을 찾기 어려운 다양한 프로젝트에 참여했으며 그 덕에 물에 물 탄 듯한 경력이 완성되는 듯했
으나, 최근 몇 년은 데이터 처리와 하둡과 관련한 연구 개발에 집중하고 있다. 현재 에스코어에서 하
둡 생태계를 이용한 데이터 플랫폼인 BigPodTM 개발에 참여하고 있으며, 특히 실시간으로 처리되
는 데이터의 수집과 시각화 사이의 시간 간격을 줄이는 데 관심이 있다.
권한철
에스코어의 빅데이터 플랫폼인 BigPodTM 개발자로 빅데이터 분석에 스파크를 활용하는 데 주력하
고 있다. 특히 실시간 스트리밍 데이터 분석과 통계 및 기계 학습 알고리즘을 활용한 데이터 분석에
관심이 많으며, 인간 생활을 이롭게 하는 기술과 제품을 만드는 것을 개발자로서의 삶의 목표로 하
고 있다.
서양주
한국과학기술원 학부에서 수학을, 서울대학교에서 석사과정으로 통계학을 전공하였으며, 티맥스소
프트를 시작으로 개발자로서 일하게 되었다. 그 후 에스코어에서 2013년 하둡과 스파크를 접한 이
후로 빅데이터 분석 업무를 주 업무로 수행하게 되었다. 현재는 카카오 RUBICS TF에서 실시간 콘
텐츠 추천 업무를 하고 있다.
옮긴이 소개
6. 6
버클리에서 스파크 프로젝트를 시작한 이래로, 나는 단순히 빠른 병렬 시스템을 구축한다는 사
실보다는 점점 더 많은 사람이 대규모 컴퓨팅을 사용할 수 있게 돕는다는 점에 흥분해왔다. 데
이터 과학 전문가 네 명이 스파크 기반의 고급 분석에 대해서 쓴 이 책을 읽는 것이 즐거운 이
유가 바로 여기에 있다. 샌디, 유리, 션 그리고 조시는 오랫동안 스파크로 작업해왔으며, 그만
큼 충실한 설명과 예제를 이 책에 담아냈다.
이 책에서 가장 마음에 드는 부분은 실제 응용 사례와 현실 세계의 데이터셋을 가져와 예제 중
심으로 설명하는 점이다. 독자의 PC에서 직접 실행해볼 수 있는 아홉 개의 개별 빅데이터 예제
를 제공한 책은 흔치 않은데, 저자들은 이런 예제들을 모아서 스파크로 실습할 수 있도록 모든
것을 세팅해두었다. 게다가, 핵심 알고리즘만 다룬 것이 아니라, 정말로 좋은 결과를 얻는 데
필요한 데이터 준비와 모듈 튜닝의 복잡한 사항까지 다루고 있다. 독자는 이들 예제에서 터득
한 개념을 자신의 문제를 푸는 데 곧바로 적용할 수 있을 것이다.
오늘날 빅데이터 처리는 의심할 여지 없이 컴퓨터로 할 수 있는 가장 흥미로운 분야이며, 빠르
게 진화하고 새로운 아이디어들이 도입되는 분야이기도 하다. 나는 독자들이 이 흥미로운 새로
운 분야로 들어서는 데 이 책이 도움이 될 거라 기대한다.
마테이 자하리아
스파크 창시자, 『러닝 스파크』 저자
아파치 스파크는 빅데이터 영역에서 가장 핫한 기술로, 범용적이면서 빠른 대용량 분산 처리를
지원한다. 또한 기초 데이터 분석부터 기계 학습 등의 기능까지 지원하게 되면서 개발자만의
오픈 소스에서 분석가를 위한 오픈 소스로 주목받고 있다. 이 책은 스파크로 빅데이터를 분석
하기 위한 가장 실용적인 데이터와 분석 방법을 설명하고 있다. 빅데이터에 관심 있거나 종사
하는 개발자와 분석가 모두에게 추천한다.
이상훈
한국 스파크 사용자 모임 운영자, 『실시간 분석의 모든 것』 역자
추천의 글
7. 7
교통, 금융 분야 등의 실제 데이터로 데이터 획득, 전처리, 가중치 결정, 실행, 평가 그리고 시
각화까지 해볼 수 있는 스파크 활용서다. 스파크 입문을 넘어 실무에 적용하려 할 때 좋은 참고
서다. 자신의 관심 도메인에 맞는 부분만 찾아서 읽어도 좋을 것 같다.
최홍용
현대오토에버
8. 8
학교를 졸업하고 몇 군데의 회사를 거쳐 2008년에 지금의 회사에 입사했다. 처음에는 콘텐츠
관리 시스템 개발로 시작했지만, 몇 번의 굴곡을 거쳐 회사는 이름이 바뀌었고 내가 하는 개발
업무도 바뀌게 되었다. 2011년, 데이터를 집계, 분석하여 실시간으로 시각화하는 과제를 수행
하게 되었다. 지금은 다른 회사에서 잘나가고 계신 배병우 씨와 함께 이를 위한 시스템을 설계
하면서 아파치 스톰Apache Storm을 알게 되었다. 그 후 몇 년간, 우리 회사의 개발팀은 스톰의 끝
을 보고 왔다. 그리고 스톰의 몇 가지 한계를 실감하게 되었다. 스톰은 스트림을 처리하는 훌륭
한 도구지만, 딱 거기까지였다(물론 이번에 릴리스된 스톰 1.0에서는 많은 부분이 개선되긴 했
다). 상태를 저장할 방법이 없는 탓에 완전한 분산 컴퓨팅 환경이라 말할 수 없다든지, 오류가
났을 시에 원래 상태를 복원할 수 없는 등 스톰이 할 수 없는 일이 꽤 있었다.
그러던 어느 날, 공역자인 권한철 씨와 서양주 씨가 아파치 스파크를 만났다. 당시 약간 모자라
보이던 스파크는, 맵리듀스MapReduce 로직을 인메모리로 처리하여 성능을 확장할 수 있다는 점
외에도, 일반적인 프로그래밍 환경에 데이터 분산 처리의 거의 모든 것을 가져올 수 있다는 특
징을 가지고 있었다. 여기에 분산 환경마저도 추상화하여 설치 이외에는 별다른 고민 없이 분
산 데이터 처리가 가능하다는 매력도 지녔다. 그리고 스톰의 강점인 스트림 처리마저도 스파크
스트리밍Spark Streaming이 마이크로 배치 형태로 처리할 수 있었다. 데이터 처리의 팔방미인이라
고 해도 과언이 아니었고, 우리는 그때부터 스파크에 집중하게 되었다. 그리고 약 2년이 흘렀
다. 스파크를 활용한 몇 개의 과제를 성공적으로 수행했으며, 새로운 도구를 받아들이는데 다
소 보수적인 분야의 현장에서도 스파크를 활용하여 얻을 수 있는 이점을 받아들이고 있다. 우
리는 스파크의 시대가 열리는 것을 목격한 운 좋은 증인이 되었고, 이 책을 읽을 독자분들도 아
직 늦지 않았다는 이야기를 해주고 싶다.
이 책은 단순한 스파크 참고서가 아니다. 스파크 참고서로는 더 좋은 책들이 여럿 있다. 부끄럽
지만 우리는 이 책도 그러한 참고서 중 하나인 줄 알고 번역을 시작했고, 그 착각 탓에 더 어려
운 길을 가야 했지만, 동시에 더 재미있는 길을 가볼 수 있었다. 이 책의 매력은 다양한 현장의
분석을 책에 담아낸 점에 있다. 스파크로 무엇인가를 해야 할지가 막막하다면 이 책을 펴면 도
옮긴이의 말
9. 9
움이 될 것이다. 굳이 스파크가 아닌 다른 도구를 사용하더라도 유용한 정보도 들어 있다. 이
책이 역자들에게 도움이 된 것처럼 독자들께도 도움이 될 것으로 생각한다.
이 책을 번역하느라 업무 부담을 조금씩 나눠주신 에스코어 엔터프라이즈 공통 플랫폼 그룹 김
세준 그룹장 이하 동료들에게 감사를 전한다. 동시에 몇 달 동안 아빠를 번역에 빼앗긴 건우에
게도 미안함을 전한다. 다른 역자들도 마찬가지의 미안함과 고마움을 가지고 있으리라 생각한
다. 번역이라는 것이 이렇게 어려운 작업인 줄은 상상도 못 했다. 책을 읽다가 책의 문장이 발
바닥에 꽂힌 가시 같다는 기분이 들면, 그 책임이 역자들에게도 있을 수 있음을 생각해주시기
바란다.
박상은
10. 10
과거를 후회하는 걸 좋아하진 않지만, 잠시 태만했던 2011년 시절 믿기 어려운 일이 벌어졌다.
당시 나는 어려운 이산 최적화 문제를 클러스터에 효율적으로 분배하는 방법을 고민하고 있었
다. 내 지도교수는 스파크라는 것이 최신 유행이라며 설명해주었지만, 그 개념은 실현되기엔
너무 이상적이라 실패할 것으로 판단하고 바로 학부 졸업논문을 맵리듀스로 작성하였다. 그 후
스파크와 나 모두 성장하였지만, 스파크는 도저히 무시할 수 없는 거물이 되었다. 대략 2년 후,
스파크에 주목해야 함이 명백해졌다.
MPI부터 맵리듀스에 이르기까지, 스파크 이전의 프레임워크들은 분산 시스템의 어렵고 세세
한 핵심들을 추상화하여 대규모 자원을 활용한 프로그램을 작성할 수 있도록 해주었다. 이들
프레임워크는 늘어가는 데이터를 처리하기 위해 발전해온 만큼, 빅데이터가 진출할 수 있는 범
위는 이들 프레임워크의 능력 한계와 밀접하게 연관될 수밖에 없었다. 스파크는 분산 프로그램
도 일반 프로그램을 작성하듯 쉽게 짤 수 있게 하여 이 범위를 좀 더 넓혀주고 있다.
스파크를 사용하면 ETL 파이프라인의 성능이 엄청나게 향상될 것이며 매일 하둡의 신에게 절
망을 하소연하는 맵리듀스 프로그래머들의 고통을 덜어줄 것이다. 그러나 나에게 가장 흥미
로운 점은 항상 스파크가 개척해준 복잡한 분석 작업이었다. 스파크는 반복적 알고리즘iterative
algorithm과 대화형 탐색interactive exploration을 지원하는 패러다임을 갖춰, 마침내 데이터 과학자가 대
규모 데이터셋을 생산적으로 다룰 수 있는 오픈 소스 프레임워크가 되었다.
나는 데이터 과학을 가르치는 가장 좋은 방법은 예제를 활용한 것이라고 생각한다. 이를 위해
나와 동료 저자들은 책에 여러 가지 응용 예를 담았으며, 가장 일반적인 알고리즘들과 데이터
셋들, 그리고 대규모 분석에서의 디자인 패턴들 간의 상호작용을 다루려고 노력하였다. 이 책
은 독자가 처음부터 끝까지 정독하라는 의도로 쓰이지 않았다. 여러분이 성취해봤으면 하는 주
제나 흥미를 자아내는 장을 펼쳐보자.
샌디 라이자
지은이의 말
11. 11
이 책의 1장에서는 데이터 과학과 빅데이터 분석이라는 넓은 맥락에서 스파크의 가치를 소개
한다. 그다음부터 각 장은 스파크를 사용한 독립적인 분석으로 구성된다. 2장은 데이터를 정제
하는 간단한 예로 스파크와 스칼라를 사용한 데이터 분석의 기초를 소개한다. 그리고 그다음
몇 장은 가장 일반적으로 사용되는 알고리즘 몇 개를 전형적인 분야에 적용하면서, 핵심적인
기계 학습 문제를 스파크를 활용하여 푸는 방법을 살펴볼 것이다. 나머지 장들은 좀 더 특수한
분야를 다룬다. 위키백과의 텍스트 안에 숨겨진 의미 관계를 알아보거나 유전체학 데이터도 분
석해볼 것이다.
예제 웹사이트
코드 예제와 데이터셋은 다음 주소에서 내려받을 수 있다.
https://github.com/sryza/aas
이 책의 구성
12. 12
아파치 스파크와 MLlib이 없었다면 여러분이 이 책을 읽을 수 있었을 리 만무하다. 우리 모두
는 스파크와 MLlib을 개발하고 오픈 소스로 제공한 개발팀과 여기에 참여한 수백 명의 기여자
에게 감사를 전한다.
이 책을 검토하느라 시간을 내어준 모든 전문가에게도 감사를 전하고 싶다. 미카엘 베르니코,
이안 부스, 제레미 프리먼, 크리스 프레글리, 드바시시 고시, 줄리엣 호글랜드, 조나단 키블러,
프랭크 나샤프트, 닉 펜트리스, 코스타스 사켈리스, 마르셀로 반진, 그리고 줄리엣 호글랜드
(한 번 더) 모두 고마워! 신세를 졌어. 덕분에 책의 구성과 품질 모두 크게 개선되었다.
또한, 나(샌디)는 어려운 주제의 배경 이론과 관련하여 조언해준 조단 핀쿠스와 리처드 왕에
게 감사를 표한다.
이 책이 출판되고 독자의 손에 들어가기까지 물심양면으로 지원해주고 이런 경험을 하게 해준
마리 보구로와 오라일리에도 감사를 표한다.
샌디 라이자
감사의 말
13. 13
CONTENTS
지은이 소개 .............................................................................................................................
4
옮긴이 소개 .............................................................................................................................
5
추천의 글 ................................................................................................................................
6
옮긴이의 말 .............................................................................................................................
8
지은이의 말 ..........................................................................................................................
10
이 책의 구성 .........................................................................................................................
11
감사의 말 .............................................................................................................................
12
CHAPTER 1 빅데이터 분석하기
1.1 데이터 과학의 어려움.....................................................................................................
23
1.2 아파치 스파크란 ............................................................................................................
25
1.3 이 책에 관하여 ..............................................................................................................
28
CHAPTER 2 스칼라와 스파크를 활용한 데이터 분석
2.1 데이터 과학자를 위한 스칼라..........................................................................................
30
2.2 스파크 프로그래밍 모델..................................................................................................
32
2.3 레코드 링크...................................................................................................................
32
2.4 스파크 셸과 SparkContext 시작하기 ..............................................................................
33
2.5 클러스터에서 클라이언트로 데이터 가져오기 ...................................................................
41
2.6 클라이언트에서 클러스터로 코드 가져가기 ......................................................................
45
2.7 튜플을 사용한 데이터 구조화와 케이스 클래스.................................................................
46
2.8 집계 .............................................................................................................................
52
2.9 히스토그램 만들기 .........................................................................................................
53
2.10 연속 변수에 대한 요약 통계량 ......................................................................................
55
2.11 요약 통계량을 계산하는 재사용 가능한 코드 만들기.......................................................
56
14. 14
2.12 간단한 변수 선택과 점수 매기기...................................................................................
62
2.13 한 걸음 더 나아가기 ....................................................................................................
64
CHAPTER 3 오디오스크로블러 데이터셋으로 음악 추천하기
3.1 데이터셋 .......................................................................................................................
68
3.2 교차 최소 제곱 추천 알고리즘.........................................................................................
69
3.3 데이터 준비하기 ............................................................................................................
73
3.4 첫 번째 모델 만들기.......................................................................................................
76
3.5 추천 결과의 추출 검사하기.............................................................................................
79
3.6 추천 품질 평가하기........................................................................................................
81
3.7 AUC 계산하기 ..............................................................................................................
83
3.8 하이퍼파라미터 선택하기................................................................................................
85
3.9 추천 결과 만들기 ...........................................................................................................
88
3.10 한 걸음 더 나아가기 ....................................................................................................
90
CHAPTER 4 의사 결정 나무로 산림 식생 분포 예측하기
4.1 회귀로 돌아와서 ............................................................................................................
94
4.2 벡터와 특징...................................................................................................................
95
4.3 학습 예제 ......................................................................................................................
96
4.4 의사 결정 나무와 랜덤 포레스트 .....................................................................................
96
4.5 Covtype 데이터셋 ......................................................................................................
100
4.6 데이터 준비하기 .........................................................................................................
101
4.7 첫 번째 의사 결정 나무 ...............................................................................................
102
4.8 의사 결정 나무 하이퍼파라미터....................................................................................
107
4.9 의사 결정 나무 튜닝하기 .............................................................................................
109
CONTENTS
15. 15
4.10 범주형 특징 다시 살펴보기........................................................................................
112
4.11 랜덤 포레스트 ..........................................................................................................
114
4.12 예측하기..................................................................................................................
117
4.13 한 걸음 더 나아가기 .................................................................................................
117
CHAPTER 5 K-평균 군집화로 네트워크 이상 감지하기
5.1 이상 감지 ...................................................................................................................
122
5.2 K-평균 군집화 ...........................................................................................................
123
5.3 네트워크 침입.............................................................................................................
124
5.4 KDD 컵 1999 데이터셋 ..............................................................................................
125
5.5 첫 번째 군집화하기.....................................................................................................
126
5.6 k 선정하기 .................................................................................................................
129
5.7 R에서 시각화 .............................................................................................................
133
5.8 특징 정규화................................................................................................................
135
5.9 범주형 변수................................................................................................................
138
5.10 엔트로피와 함께 레이블 활용하기..............................................................................
139
5.11 군집화하기...............................................................................................................
140
5.12 한 걸음 더 나아가기 .................................................................................................
142
CHAPTER 6 숨은 의미 분석으로 위키백과 이해하기
6.1 단어-문서 행렬 ..........................................................................................................
147
6.2 데이터 구하기.............................................................................................................
149
6.3 파싱하여 데이터 준비하기 ...........................................................................................
149
6.4 표제어 추출................................................................................................................
151
6.5 단어빈도-역문서빈도(TF-IDF) 계산하기.......................................................................
153
16. 16
6.6 특이값 분해................................................................................................................
156
6.7 중요한 의미 찾기 ........................................................................................................
158
6.8 낮은 차원 표현에 대한 의문과 고찰..............................................................................
163
6.9 단어와 단어 사이의 연관도..........................................................................................
164
6.10 문서와 문서 사이의 연관도........................................................................................
166
6.11 단어와 문서 사이의 연관도........................................................................................
168
6.12 여러 개의 단어로 질의하기........................................................................................
169
6.13 한 걸음 더 나아가기 .................................................................................................
171
CHAPTER 7 그래프엑스로 동시발생 네트워크 분석하기
7.1 네트워크 분석 사례: MEDLINE의 인용 색인 .................................................................
174
7.2 데이터 구하기.............................................................................................................
176
7.3 스칼라 XML 라이브러리로 XML 문서 파싱하기.............................................................
178
7.4 MeSH 주요 주제와 주제들의 동시발생 분석하기...........................................................
181
7.5 그래프엑스로 동시발생 네트워크 구성하기 ...................................................................
184
7.6 네트워크의 구조 이해하기 ...........................................................................................
187
7.6.1 연결 성분............................................................................................................
188
7.6.2 차수의 분포.........................................................................................................
191
7.7 관련성 낮은 관계 필터링하기.......................................................................................
193
7.7.1 EdgeTriplets 처리...............................................................................................
195
7.7.2 필터링된 그래프 분석하기......................................................................................
197
7.8 작은 세상 네트워크.....................................................................................................
199
7.8.1 클릭과 군집계수...................................................................................................
199
7.8.2 프레겔을 사용하여 평균 경로 길이 계산하기..............................................................
201
7.9 한 걸음 더 나아가기....................................................................................................
207
CONTENTS
17. 17
CHAPTER 8 뉴욕 택시 운행 데이터로 위치 및 시간 데이터 분석하기
8.1 데이터 얻기................................................................................................................
210
8.2 스파크에서 시간과 지리 데이터 다루기.........................................................................
211
8.3 JodaTime과 NScalaTime을 이용한 시간 데이터..........................................................
212
8.4 Esri Geometry API와 Spray를 사용한 지리 데이터 ......................................................
214
8.4.1 Esri Geometry API 살펴보기................................................................................
215
8.4.2 GeoJSON 소개..................................................................................................
216
8.5 뉴욕 택시 운행 데이터 준비하기 ..................................................................................
219
8.5.1 잘못된 레코드 대규모로 다루기...............................................................................
221
8.5.2 지리 정보 분석하기...............................................................................................
225
8.6 스파크에서 세션화하기................................................................................................
229
8.6.1 세션 구성하기: 스파크에서 보조 정렬하기 .................................................................
230
8.7 한 걸음 더 나아가기 ...................................................................................................
234
CHAPTER 9 몬테카를로 시뮬레이션으로 금융 리스크 추정하기
9.1 금융 분야 전문 용어....................................................................................................
236
9.2 VaR 계산 방법............................................................................................................
237
9.2.1 분산-공분산 .......................................................................................................
237
9.2.2 역사적 시뮬레이션................................................................................................
238
9.2.3 몬테카를로 시뮬레이션..........................................................................................
238
9.3 우리의 모델................................................................................................................
239
9.4 데이터 구하기.............................................................................................................
240
9.5 전처리하기 .................................................................................................................
241
9.6 요인 가중치 결정하기..................................................................................................
245
9.7 표본추출하기..............................................................................................................
248
9.8 다변량 정규분포 .........................................................................................................
250
18. 18
9.9 실험 실행하기.............................................................................................................
252
9.10 수익 분포 시각화하기 ...............................................................................................
256
9.11 결과 평가하기 ..........................................................................................................
257
9.12 한 걸음 더 나아가기 .................................................................................................
260
CHAPTER 10 BDG 프로젝트와 유전체학 데이터 분석하기
10.1 모델링과 저장소를 분리하기......................................................................................
264
10.2 ADAM CLI를 이용한 유전체학 데이터 처리................................................................
267
10.2.1 파케이 형식과 열 기반 저장소..............................................................................
274
10.3 ENCODE 데이터로부터 전사인자 결합 부위 예측하기 ................................................
277
10.4 1000 게놈 프로젝트에서 유전자형 질의하기 ..............................................................
285
10.5 한 걸음 더 나아가기 .................................................................................................
287
CHAPTER 11 파이스파크와 썬더로 신경 영상 데이터 분석하기
11.1 파이스파크 소개 .......................................................................................................
290
11.1.1 파이스파크 내부 구조.........................................................................................
292
11.2 썬더 라이브러리 개요와 설치 ....................................................................................
294
11.3 썬더로 데이터 읽어 들이기........................................................................................
296
11.3.1 썬더 핵심 자료형...............................................................................................
303
11.4 썬더를 이용해서 신경 세포 유형 분류하기..................................................................
304
11.5 한 걸음 더 나아가기 .................................................................................................
310
CONTENTS
19. 19
APPENDIX A 스파크 더 깊숙히
A.1 직렬화.......................................................................................................................
313
A.2 어큐뮬레이터 .............................................................................................................
314
A.3 스파크와 데이터 과학자의 작업흐름 ...........................................................................
315
A.4 파일 형식...................................................................................................................
318
A.5 스파크의 하위 프로젝트들...........................................................................................
319
A.5.1 MLlib...............................................................................................................
319
A.5.2 스파크 스트리밍.................................................................................................
320
A.5.3 스파크 SQL ......................................................................................................
321
A.5.4 그래프엑스........................................................................................................
321
APPENDIX B MLlib 파이프라인 API
B.1 단순한 모델링을 넘어서..............................................................................................
324
B.2 파이프라인 API..........................................................................................................
325
B.3 문서 분류 예제 검토 ...................................................................................................
326
찾아보기 ...................................................................................................................................................
329
20.
21. 21Chapter 1 - 빅데이터 분석하기
“데이터 애플리케이션은 소시지와 비슷하다. 어떻게 만드는지 모르는 편이 나으니까.”1
-오토 폰 비스마르크
● 셀 수 없이 많은 트랜잭션과 수천 가지 특징을 가지고 신용카드 부정 사용을 감지하기 위한 모델 구축
● 수백만 사용자에게 수백만 가지의 제품 중 적절한 것을 지능적으로 추천
● 수백만 가지 요소를 고려한 포트폴리오 시뮬레이션을 통한 투자 위험도 추정
● 질환의 유전적 연관성을 파악하기 위한 대규모 인간 유전자 분석
몇 년 전만 하더라도 이와 같은 일들은 꽤 어려운 일이었다. 오늘날을 빅데이터의 시대라고 말할
수 있는 이유는 기존에는 경험하지 못한 규모로 정보를 수집, 저장, 처리할 수 있는 도구가 준비
되었기 때문이다. 이 배경에는 오픈 소스 생태계가 있는데, 그 덕분에 엄청난 양의 데이터를 다
룰 수 있는 컴퓨터 클러스터 환경을 저렴하게 사용할 수 있게 되었다. 아파치 하둡Apache Hadoop
과 같은 분산 시스템이 대세가 되었으며, 거의 모든 분야의 수많은 현장에서 활용하고 있다.
하지만 돌덩어리와 끌이 있다고 해서 조각상이 다 만들어진 것이 아니듯, 이들 도구와 각종 데
이터를 갖추었다는 것과 이를 활용하여 무언가 쓸모 있는 일을 한다는 것 사이에는 차이가 있
다. 그래서 데이터 과학이 필요해졌다. 조각이 도구를 사용하여 원석을 (조각가가 아닌) 누군가
에게 의미 있는 무언가로 바꾸는 작업이라면, 데이터 과학은 원본 데이터를 (데이터 과학자가
1 옮긴이_ 비스마르크는 원래 ‘데이터 애플리케이션’이 아니라 ‘법률’이 그러하다고 말했다.
빅데이터 분석하기
CHAPTER 1
샌디 라이자
22. 22 9가지 사례로 익히는 고급 스파크 분석
아닌) 누군가의 관심을 끌 만한 의미 있는 것으로 바꾸는 작업이다.
흔히 ‘쓸모 있는 일 하기’는 스키마schema를 설계하고 SQL을 사용하여 “등록 과정의 세 번째 페
이지에 도달한 엄청난 수의 사용자 중 25세 이상은 몇 명인가?”와 같은 질문에 답하는 것을 의
미한다. 이런 질문에 쉽게 답할 수 있도록 데이터 웨어하우스data warehouse를 구성하고 정보를 체
계화하는 방법을 다루는 분야도 거대하지만, 이 책에서는 이런 복잡한 일은 되도록 다루지 않
으려 한다.
때때로 ‘쓸모 있는 일 하기’에는 노력이 더 필요할 수 있다. SQL은 여전히 주요한 수단이다. 하
지만 다루는 데이터가 매우 독특하거나 복잡한 분석이 필요하다면 SQL보다 유연하고 근본적
이며 기계 학습과 통계학 분야의 기능이 풍부한 새로운 프로그래밍 패러다임이 필요해진다. 이
런 유형의 분석이 이 책에서 이야기하려는 대상이다.
오랜 기간에 걸쳐 R, PyData 스택(파이썬 데이터 분석 도구 모음), 옥타브Octave와 같은 오픈
소스 프레임워크 덕에 작은 데이터셋dataset을 빠르게 분석하고 모델을 수립할 수 있었다. 데이터
셋의 일부를 사용해서 기계 학습 모델을 학습시키고 나머지 데이터의 레이블을 예측하는 데 10
줄 이내의 코드로도 가능하다. 여기서 조금만 더 나아가면 결측치missing data를 보정하고, 몇몇 모
델을 실험해 최적의 모델을 찾고, 한 모델의 결과를 다른 모델을 적합fit시키기 위한 입력으로
사용할 수 있다. 대규모 데이터셋에서 동일한 결과를 얻기 위해 컴퓨터 클러스터 환경을 활용
한다면 이상의 과정이 어떻게 달라질까?
단순히 프레임워크를 여러 노드에서 동작하게끔 확장하고 프로그래밍 모델은 그대로 유지한
채 분산 환경에서 잘 동작하게끔 내부를 수정하는 것이 옳을 수도 있다. 하지만 단일 노드에서
는 문제가 되지 않았지만 분산 컴퓨팅에서는 새롭게 고민해야 하는 것들이 있다. 예를 들어 네
트워크는 메모리보다 월등히 느리므로 데이터가 클러스터의 여러 노드에 나뉘어 있다면 많은
데이터를 참조하는 알고리즘은 성능이 매우 나빠진다. 분산 환경에서 동작하는 노드의 수가 늘
어날수록 오류가 발생할 가능성도 커진다. 이러한 사실들을 종합해볼 때 고도의 병렬 실행 코
드를 쉽게 작성할 수 있는, 분산 환경의 특징에 충실한 프로그래밍 패러다임이 필요하다.
하나의 노드에서 동작하는 PyData나 R과 같은 도구가 소프트웨어 커뮤니티에서 최근 주목받
고 있지만, 이들만이 데이터 분석을 위한 도구는 아니다. 대량의 데이터를 다루는 유전체학과
같은 과학 분야에서도 수십 년간 병렬 컴퓨팅 프레임워크를 발전시켜왔다. 이 분야에서 데이터
를 다루는 사람 대부분은 HPChigh-performance computing (고성능 컴퓨팅)라는 클러스터 컴퓨팅 환경
23. 23Chapter 1 - 빅데이터 분석하기
에 익숙하다. PyData나 R은 확장성이 부족해 문제라면, HPC에서는 추상화 수준이 지나치게
낮아서 발생하는 나쁜 사용성이 문제다. 예컨대 DNA 염기서열로 가득 찬 커다란 파일을 병렬
처리하려면 수작업으로 일일이 작은 파일로 나눈 후, 각각에 대한 처리 작업을 클러스터의 스
케줄러에 하나씩 등록해야 한다. 일부에서 오류가 발생하면 작업자는 그 오류를 직접 찾아내서
수동으로 재입력해야 한다. 분석하다 보면 전체 데이터셋의 정렬과 같은 데이터 전체를 사용해
야 하는 작업을 수행해야 할 때가 있다. 이 경우에는 커다란 데이터 모두를 하나의 노드에 밀어
넣거나 MPI와 같은 저수준 분산 프레임워크에 의존해야 하는데, 그러려면 C 언어와 분산 네
트워크 환경을 잘 이해하고 있어야 한다. 또, HPC 환경에 맞게 제작된 도구들은 저수준 저장
소 모델로부터 인메모리in-memory 데이터 모델을 분리하기가 어려운 경우가 많다. 예를 들어 많
은 도구가 POSIX 파일시스템의 단일 데이터 스트림으로만 데이터를 읽을 수 있도록 만들어졌
다. 이러한 도구는 병렬화하거나 데이터베이스 같은 다른 종류의 백엔드 저장소를 사용하도록
변경하기가 쉽지 않다. 하둡 생태계의 최근 시스템들은 사용자가 클러스터 환경을 단일한 컴퓨
터 환경처럼 다룰 수 있도록 추상화해준다. 파일을 쪼개 여러 노드에 걸쳐 있는 저장소에 분산
하고, 일을 작은 단위로 나누어 처리하고, 오류를 복구하는 모든 작업을 자동으로 수행한다. 하
둡 생태계는 큰 데이터 파일을 다루는 과정도 자동화할 수 있으며, HPC보다 훨씬 저렴하다.
1.1 데이터 과학의 어려움
데이터 과학을 실제로 적용하다 보면 종종 어려운 문제에 부딪히게 된다. 클라우데라Cloudera의
데이터 과학팀은 이러한 어려움을 널리 알리는 데 큰 역할을 해왔다. 대량의 데이터로부터 복
잡한 분석을 성공적으로 처리하는 시스템을 구축하려면 (설사 실제로 벌어지지 않더라도) 이
런 어려움에 관해서 알고 있어야 한다.
첫째, 성공적인 분석을 위한 작업의 대부분은 데이터의 전처리 과정에서 이루어진다. 데이터는
너저분하다. 그래서 데이터를 활용하기 전에 정제, 개조, 합치기, 섞기 같은 여러 가지 전처리
과정이 필요하다. 특히, 육안으로 검사하기 어려울 정도로 데이터가 많다면 어떠한 전처리 과
정이 필요한지를 파악하는 일조차 별도의 처리 과정이 필요하다. 심지어 모델의 성능을 최적화
해야 할 때는 알고리즘을 선택해서 구현하는 일보다 특징을 추출하고 선택하는 데 일반적으로
더 많은 노력이 들어간다.
24. 24 9가지 사례로 익히는 고급 스파크 분석
예컨대 온라인 구매 데이터에서 사기 행위를 찾는 모델을 만들고자 한다면 데이터 과학자들은
사용자가 작성하는 주문서 상의 여러 정보, 즉 사용자 IP의 위치 정보, 로그인 시간, 웹 사이트
내비게이션 로그와 같은 활용 가능한 수많은 특징 중에서 무엇을 사용할지 선택해야 한다. 선
택한 각 특징을 기계 학습 알고리즘에 적합한 벡터로 변환해야 하며, 이를 위해서 더블형double
숫자로 이루어진 2차원 배열을 수학적 모델로 변환하는 일 정도는 해줄 수 있는 시스템이 있어
야 한다.
둘째, 데이터 과학에서 반복iteration은 기본적인 과정이다. 보통은 모델을 만들고 분석하는 과정
에서 같은 데이터를 여러 번 반복해서 읽게 된다. 이는 기계 학습이나 통계적 절차의 특징에 기
인하는데, 값이 수렴할 때까지 입력 데이터를 반복해서 사용하는 확률적 구배법Stochastic Gradient
Descent이나 기댓값 최대화법Expectation Maximization과 같은 널리 사용되는 최적화 기법들을 보면 알
수 있다. 반복은 데이터 과학자 자신의 작업 흐름 안에서도 문제가 된다. 데이터 과학자가 처
음 접하는 데이터셋을 파악하고자 할 때, 특정 질의의 결과를 가지고 다음에 수행해야 할 질의
를 결정하는 것이 일반적이다. 모델을 만들 때도 데이터 과학자는 단 한 번의 시도로 모델이 완
성되리라 기대하지 않는다. 실험을 통해서 알맞은 특징을 선택하고, 적절한 알고리즘을 선택하
고, 유의성 검정을 하고, 맞춤 하이퍼파라미터들을 찾아낸다. 어떤 프레임워크가 같은 데이터
를 매번 디스크에서 가져온다면 전체 프로세스의 속도가 디스크 입출력만큼 느려지고, 결과적
으로 할 수 있는 일의 양이 줄어들게 된다.
셋째, 잘 돌아가는 모델이 완성되었다고 해서 일이 끝나는 것은 아니다. 데이터 과학의 핵심이
데이터를 직접 분석하지 않는 사람들에게 유용한 정보를 뽑아내는 것이라면, 데이터 과학자 컴
퓨터의 텍스트 파일에 회귀 가중치의 목록 형태로 저장된 모델은 진정한 목적이 될 수 없다. 데
이터 애플리케이션이라면 데이터 추천 시스템이나 실시간 사기 탐지 시스템처럼 의미 있게 활
용할 수 있어야 한다. 이런 시스템에서는 모델이 제품 서비스의 일부이므로 주기적으로 혹은
실시간으로 다시 생성해야 할 수도 있다.
이런 상황에서는 연구를 위한 분석과 현장을 위한 분석을 구분해야 한다. 연구를 위한 분석은 데
이터에 대한 탐색적 분석exploratory analytics을 의미한다. 이 분석에서는 데이터의 특성을 이해하려 시
도한다. 그 결과를 시각화하고, 아직 적용하지 않은 이론들을 시험한다. 여러 종류의 특징과 현
재의 데이터를 보강할 수 있는 후보 데이터도 시험하게 된다. 한두 가지는 성공하기를 바라면
서 다양한 알고리즘을 시험하는 것이다. 반면 데이터 애플리케이션을 구축하는 현장에서는 운
영을 위한 분석operational analytics을 수행한다. 분석 모델을 실제 의사 결정에 영향을 주는 서비스에
25. 25Chapter 1 - 빅데이터 분석하기
적용하며, 시간 흐름에 따른 모델의 성과를 추적하고, 정확도를 조금이라도 올리기 위한 미세
조정 방안을 궁리한다. 그리고 서비스 수준 협약서Service Level Agreement (SLA)와 가동시간uptime도
고민하게 된다. 일반적으로 R과 같은 언어로 탐색적 분석은 수행한 이후에, 양산 단계에서는
데이터 처리 과정을 자바나 C++로 완전히 새롭게 구현하곤 한다.
물론 처음에 만든 모델의 코드를 실무 애플리케이션에서도 사용할 수 있다면 좋겠지만, R과 같
은 언어는 성능도 좋지 않은 데다가 제품의 다른 구성요소들과 통합하기에는 적합하지 않다.
반대로 자바나 C++와 같은 언어 쪽은 탐색적 분석에 쓸만한 도구를 찾아보기 어렵다. 자바나
C++에서는 데이터와 상호작용할 수 있는 REPLRead-Evaluate-Print-Loop 환경이 부족하며, 간단한
변환식을 구현하는 데도 많은 양의 코드가 필요하다. 그리하여 모델링 과정에서도 쉽게 쓸 수
있고 제품에도 적용할 수 있는 프레임워크가 필요한 상황이 되었다.
1.2 아파치 스파크란
아파치 스파크로 들어가보자. 스파크는 세련된 방법으로 클러스터의 여러 노드로 프로그램을
분배하고, 그 위에서 동작하는 프로그램을 개발할 수 있도록 개발된 오픈 소스 프레임워크다.
UC 버클리의 AMPLab에서 시작해, 지금은 아파치 소프트웨어 재단에서 관리하는 스파크는,
데이터 과학자가 분산 프로그래밍을 할 수 있게 해주는 아마도 최초의 오픈 소스 소프트웨어일
것이다.
스파크를 쉽게 이해하기 위하여 스파크의 선배라 할 수 있는 맵리듀스MapReduce와 비교해보자.
맵리듀스는 수십만 개의 노드를 활용하는 병렬 처리를 간단히 구현할 수 있는 모델로, 대량의
데이터 연산 분야에 일대 혁신을 가져왔다. 맵리듀스는 거의 선형에 가까운 확장성을 보여준
다. 데이터가 많아지면 컴퓨팅 노드도 그만큼 추가하여 같은 시간에 일을 마무리 지을 수 있음
을 의미한다. 그리고 ‘하나의 노드에서는 잘 발생하지 않는 오류라도 규모가 큰 클러스터 환경
에서는 일상적’이라는 상식으로부터도 자유롭다. 맵리듀스는 일을 작은 단위의 작업으로 쪼개
고, 단위 작업에서 오류가 나더라도 전체에 영향을 주지 않도록 우아한 방식으로 오류를 처리
한다.
스파크는 맵리듀스의 선형 확장성과 결함 허용성fault tolerance, 내결함성을 유지하면서, 세 가지 중요
한 개선을 이루어냈다. 먼저, ‘맵 단계 후 리듀스 단계’를 지키지 않아도 되며, 훨씬 일반적인 방
26. 26 9가지 사례로 익히는 고급 스파크 분석
향성 비순환 그래프directed acyclic graph (DAG) 형태로 정의한 연산들을 실행할 수 있다. 맵리듀스
라면 임시 결과를 분산 파일시스템에 반드시 저장해야 하는 상황에서, 스파크는 파이프라인의
다음 단계로 임시 결과를 바로 넘길 수 있다는 뜻이다. 이는 맵리듀스의 후손이자 마이크로소
프트 연구소에서 시작된 Dryad(http://research.microsoft.com/en-us/projects/dryad/)와
유사한 방식이다.
두 번째, 사용자가 연산을 더욱 자연스럽게 표현할 수 있도록 풍부한 변환 방식을 제공하여 처
리 능력을 확장하고 있다. 개발자 중심의 기능을 제공하여 몇 줄의 코드만으로 복잡한 파이프
라인을 구현할 수 있는 간소화된 API를 제공한다.
마지막 개선은 인메모리 처리 방식이다. 스파크의 탄력적 분산 데이터셋Resilient Distributed Dataset
(RDD)이라는 추상 개념은 개발자가 처리 파이프라인의 어느 지점에서라도 데이터를 클러스
터의 메모리로 저장할 수 있도록 해준다. 이후 단계에서 같은 데이터를 사용해야 한다면 데이
터를 다시 연산하거나 디스크로부터 다시 읽을 필요가 없다는 뜻이다. 이 능력 덕분에 과거의
분산 처리 엔진들이 하지 못했던 용도로도 사용할 수 있게 되었다. 예를 들어 데이터셋을 여러
번 훑어야 하는 알고리즘이나 사용자 요청에 빠르게 응답하기 위해 커다란 인메모리 데이터셋
을 스캔해야 하는 반응형 애플리케이션reactive application에 아주 적합하다.
데이터 분석에서 가장 큰 병목이 CPU, 디스크, 네트워크 같은 컴퓨팅 환경이 아니라 분석가의
생산성에 달려 있음을 이해한다면 아마도 가장 중요한 점은 앞 절에서 이야기한 ‘데이터 과학
의 어려움’을 해결하는 데 스파크가 좋은 해답이라는 사실일 것이다. 전처리부터 모델 평가까
지의 전체 과정을 단일 프로그래밍 환경에서 수행하는 것이 개발 속도 면에서 얼마나 큰 이점
인지는 아무리 과장해도 지나치지 않을 것이다. REPL 환경의 분석 라이브러리들을 가지고 많
은 것을 표현할 수 있는 프로그래밍 모델로 묶어내면 맵리듀스와 같은 특정 프레임워크를 사용
하느라 여러 IDE를 오갈 필요도 없고, R과 같은 프레임워크를 사용하느라 HDFS로부터 데이
터를 표본추출하거나 이리저리 이동시킬 필요도 없다. 분석가가 데이터를 조사하는 시간이 절
약될수록 뭔가 쓸만한 일을 할 가능성은 더 커진다.
데이터 조작 또는 ETL에 적용할 수 있다는 면을 보면 스파크는 빅데이터를 다루는 매트랩Matlab
이라기보다는 빅데이터를 다루는 파이썬에 가까워 보인다. 범용 연산 엔진으로서 스파크의 핵
심 API는 통계, 기계 학습, 행렬 연산의 어떤 기능과도 독립적인, 데이터 변환을 위한 강력한
토대를 제공한다. 스파크의 스칼라 API와 파이썬 API 덕분에 범용 언어에서 쉽게 불러 쓸 수
27. 27Chapter 1 - 빅데이터 분석하기
있고, 다른 라이브러리와 함께 사용할 수도 있다.
스파크의 인메모리 캐시 기능은 반복적으로 이루어지는 크고 작은 모든 데이터 처리에 이상적
이다. 이 기능을 활용하면 학습 데이터를 반복해서 읽어야 하는 기계 학습 알고리즘에서는 학
습 데이터를 메모리에 캐시해둘 수 있다. 데이터 과학자가 데이터를 파악하려 할 때도 데이터
를 디스크에서 매번 읽어 들이는 대신, 메모리에 올려둔 채 다양한 질의를 테스트해보고, 또 그
결과를 메모리에 쉽게 저장할 수도 있다.
마지막으로, 스파크는 탐색용 분석 시스템과 운영용 분석 시스템 사이의 간격을 좁힐 수 있
다. 세간에서 데이터 과학자는 통계학자보다는 엔지니어링을 잘하고 엔지니어보다는 통계 활
용에 능하다고 이야기하지만, 적어도 스파크는 대부분의 탐색 시스템보다는 운영 시스템에
서 쓰기에 좋고, 운영 시스템에서 일반적으로 사용하는 기술들에 비해 데이터 탐색에도 적합
하다. 스파크는 근본적으로 성능과 신뢰성 모두를 위해서 만들어졌다. 자바 가상 기계Java Virtual
Machine (JVM)에서 돌아가기 때문에 자바 스택에서 돌아가는 수많은 운영 및 디버깅 도구도 활
용할 수 있다.
스파크는 하둡 생태계의 다양한 도구와 통합하기에도 좋다. 스파크는 맵리듀스가 지원하는 모
든 데이터 포맷을 읽고 쓸 수 있어서, 에이브로Avro, 파케이Parquet와 같은 하둡의 일반적인 데이
터 저장 파일 포맷도 사용할 수 있다. 물론 하둡 이전부터 사용된 쉼표로 분리된 텍스트 형식
CSV도 지원한다. 그리고 HBase와 카산드라Cassandra 같은 NoSQL 데이터베이스로부터 데이터를
읽고 쓸 수도 있다. 스파크 스트리밍Spark Streaming이라는 스트림 처리 라이브러리로는 플룸Flume이
나 카프카Kafka로부터 스트림 데이터를 입력받을 수도 있다. SQL 라이브러리인 스파크 SQL로
는 하이브 메타스토어Hive Metastore와 상호작용이 가능한데, 맵리듀스를 대체하기 위하여 하이브
와 연동하는 데이터 처리 엔진으로 스파크를 활용하려는 프로젝트가 이 책을 쓰는 동안에도 진
행 중이다. 하둡의 스케줄링과 자원 관리를 담당하는 YARNYet Another Resource negotiator, 얀 내부에서
도 동작이 가능하다. 이를 통해서 클러스터 사이에서 자원을 동적으로 공유할 수 있으며, 맵리
듀스나 임팔라Impala와 같은 다른 처리 엔진에서도 동일한 정책으로 관리할 수 있게 되었다.
물론, 스파크가 모든 면에서 좋기만 한 것은 아니다. 이 책을 쓰고 있는 지금도 스파크의 코어
엔진은 완성도를 높여가고 있지만, 아직 맵리듀스에 비해서 역사도 짧고 맵리듀스를 능가하는
일괄 처리batch processing용 도구가 되지도 못했다. 스트림 처리, SQL, 기계 학습, 그리고 그래프
처리와 같은 특화된 하위 모듈들은 아직 성숙해가는 과정에 있으며 대규모 API 개선이 진행 중
28. 28 9가지 사례로 익히는 고급 스파크 분석
이다. 예를 들어 기계 학습 라이브러리인 MLlib의 데이터 파이프라인과 변환 API 모델은 이
책을 쓰는 동안에도 계속 개발 중이다. 통계와 모델링 기능은 아직 R과 같은 단일 노드 언어의
근처에도 가지 못했다. 풍부한 SQL 기능을 제공한다지만 아직 하이브에도 뒤처져 있다.
1.3 이 책에 관하여
이 책의 나머지 부분에서는 스파크의 장점이나 단점은 다루지 않는다. 기본적인 스파크 프로그
래밍 모델과 스칼라 언어의 기초는 소개하지만, 스파크의 레퍼런스에 해당하는 내용이나 모든
것에 대한 포괄적인 지침 같은 것은 제공하지 않으려 한다. 기계 학습, 통계학, 선형대수의 튜
토리얼로 만들 생각도 없다. 물론, 필요하다면 기본적인 배경 정도는 설명할 것이다.
그 대신, 우리는 대량의 데이터셋을 다루는 복잡한 분석을 스파크로 실제 해보며, 그 생생한 느
낌을 독자에게 전달하고자 한다. 단순히 모델을 구축하고 평가하는 데 그치지 않고, 전체 파이
프라인을 돌아보며 데이터 정제, 전처리, 데이터 조사, 실제 제품으로 만들기까지를 보여주고
자 한다. 아마도 실제 예제를 통해서 보여주는 방법이 최선일 것이다. 그래서 우선 스파크와 그
생태계를 간단한 설명한 후, 그다음 장부터는 각 분야의 데이터를 스파크로 분석하는 독립적인
설명들로 채울 것이다.
가능하다면 단순히 ‘정답’을 제공하기보다는 데이터 과학의 절차 전체, 즉 모든 반복, 막다른
길, 재시도 등을 설명할 것이다. 이 책은 스칼라, 스파크, 기계 학습, 데이터 분석에 더 친숙해
지는 계기가 될 것이다. 그리고 이 모두는 더 큰 목적을 향한 과정이다. 우리는 이번 장의 처음
에 언급한 여러 업무에 어떻게 접근하는지를 가르치려는 것이다. 약 30쪽 내외로 구성된 각 장
을 통해 데이터 애플리케이션의 일부를 만들어내는 방법을 가능한 한 실제처럼 설명할 것이다.
29. 29Chapter 2 - 스칼라와 스파크를 활용한 데이터 분석
“흥미를 잃지 않는다면 못할 일은 아무 것도 없다.”
-데이비드 포스터 월리스
데이터 정제는 모든 데이터 과학 프로젝트의 시작이자, 매우 중요한 일이다. 분석에 사용하는 데
이터의 품질이나 다른 내재적 원인에 의하여 분석 결과가 왜곡되거나 실제와 다른 결론이 도출
된다면 아무리 뛰어난 분석 방법이라 할지라도 도움이 되지 않을 것이다.
이러한 중요성에도 불구하고 데이터 과학 서적이나 강의에서는 데이터 정제 과정에 관해서 다
루지 않거나 그냥 언급만 하고 지나치곤 한다. 사실 데이터 정제는 꽤 지루한 과정이다. 우리가
새 문제에 써보고 싶은 멋진 기계 학습 알고리즘을 적용하기 전에 거쳐야 하는 아주 따분한 일
이다. 많은 풋내기 데이터 과학자들은 최소한의 데이터 품질 수준으로 분석을 시작하고, 복잡
한 알고리즘을 적용한 후 말도 안 되는 답을 얻고 나서야 비로소 데이터 품질에 심각한 문제가
있음을 깨닫는 경우가 많다.
“쓰레기를 넣으면 쓰레기가 나온다garbage in, garbage out”라는 말도 있지만, 현실은 이보다 훨씬 심
각하다. 어떤 데이터에 쉽게 파악되지 않는 심각한 품질 문제가 있어서 문제가 없는 데이터로
오인된다면 도출된 결과도 마치 문제가 없는 것처럼 보일 수 있다는 것이다. 이런 종류의 실수
로 인해 심각한 오답을 제시하는 것은 데이터 과학자에게는 치명적이다.
데이터 과학자로서 갖추어야 할 중요한 소질 하나는 데이터 분석의 모든 단계에서 흥미롭고 가
스칼라와 스파크를 활용한 데이터 분석
CHAPTER 2
조시 윌스
30. 30 9가지 사례로 익히는 고급 스파크 분석
치 있는 문제를 찾아내는 능력이다. 분석의 초기 단계에 기술과 통찰을 더하면 최종 결과물의
신뢰도는 더 커지게 된다.
데이터 과학자에게 데이터 품질 관리에 신경을 쓰라고 하다니, 물론 말은 쉽다. 아이들에게 채
소를 먹으라고 이야기하는 것처럼 말이다. 멋진 기계 학습 알고리즘을 만들어보거나, 스트리밍
데이터를 처리하는 엔진을 개발한다든지, 복잡하게 연결된 그래프를 분석한다든지 하는 일에
사용할 수 있는 스파크와 같은 새로운 도구를 써보는 일이 훨씬 재미있기 때문이다. 그래서 스
파크와 스칼라를 활용하여 데이터를 정제하는 예제로부터 시작하려고 한다.
2.1 데이터 과학자를 위한 스칼라
데이터 과학자 대부분은 데이터를 조작하고 분석할 때 R이나 파이썬과 같은, 자신에게 가장 능
숙한 특정 도구를 선호한다. 어쩔 수 없이 다른 환경에서 일하게 되더라도 선호하는 도구에 집
착하며 그 도구를 사용할 수 있는 환경으로 데이터를 가지고 나갈 방법을 모색하곤 한다. 새로
운 문법과 새로운 패턴을 습득해야 하는 새로운 도구를 도입하는 것은 최선의 상황에서도 꽤
힘든 도전적인 일이다.
스파크에는 R이나 파이썬으로 코드를 작성할 수 있는 라이브러리와 래퍼wrapper가 있다. 그중
파이스파크PySpark라는 훌륭한 파이썬 래퍼는 이 책의 뒷부분에서도 일부 다루고 있다. 하지만
대부분의 예제는 스칼라로 제공할 것이다. 스파크 자체가 스칼라 언어로 구현되어 있어서, 스
칼라를 직접 사용하면 다음과 같은 효과를 기대할 수 있다.
성능 면에서 유리하다.
스칼라처럼 JVM에서 동작하는 언어 위에서 R이나 파이썬으로 만들어진 알고리즘을 실행하
려면 코드와 데이터를 변환하거나 다른 환경으로 옮기는 작업이 추가로 필요하며, 때에 따
라서는 이 추가 과정에서 오류가 생길 수도 있다. 반면, 스파크가 제공하는 스칼라 API를 사
용한다면 의도한 대로 동작할 가능성이 매우 커진다.
31. 31Chapter 2 - 스칼라와 스파크를 활용한 데이터 분석
최신 기능을 활용할 수 있다.
스파크의 기계 학습, 스트림 처리, 그래프 분석 등의 라이브러리는 모두 스칼라로 작성했기
때문에 새로운 기능이 파이썬이나 R 환경까지 지원하는 데 시일이 걸리는 편이다. 그러므로
스파크가 제공하는 모든 최신 기능을 곧바로 사용하려 한다면 최소한 스칼라에 대해서 조금
은 알아야 하며, 그 기능들을 확장하여 새로운 문제에 적용하려면 스칼라를 어느 정도 능숙
하게 다룰 수 있어야 한다.
스파크의 철학을 이해하기 쉽다.
파이썬이나 R로 스파크를 사용한다 할지라도, 스파크의 API에는 이를 구현한 언어인 스칼
라로부터 시작된 철학이 녹아 있다. 여러분이 다른 언어를 사용하더라도 스칼라로 스파크를
다루는 방법을 알고 있다면 스파크 체계를 이해하고 문제를 ‘스파크답게’ 해결하는 데 도움
이 된다.
다른 데이터 분석 도구들과는 많이 다르기 때문에 설명하기 힘든, 스칼라의 또 다른 장점이 있
다. 만약 R이나 파이썬을 가지고 데이터베이스로부터 데이터를 가져와서 분석해왔다면 데이터
를 SQL로 가져온 후, 작업 환경을 R이나 파이썬으로 바꿔서 그 데이터를 다루고 시각화하는
절차에 익숙할 것이다. 누군가는 클러스터에 저장된 데이터에 접근하여 작업하는 일과 PC에
저장된 데이터를 다루고 시각화하는 일에 각각 다른 언어를 사용해왔을 수도 있다. 오랫동안
사용해 익숙해졌다면 이런 방식의 불편함을 자각하지 못할 수도 있다.
스칼라와 스파크를 사용한다면 이야기가 달라진다. 어떤 경우에도 같은 언어를 사용할 수 있기
때문이다. 스칼라 코드를 작성하여 스파크를 통해 클러스터에서 데이터를 가져오고, 스칼라 코
드를 작성하여 그 데이터를 로컬 환경에서 다룰 수 있다. 무엇보다 좋은 점은 로컬에서 작성한
스칼라 코드를 데이터가 저장되어 있는 클러스터에 보내서 바로 실행시키는 방식으로, 데이터
를 로컬 환경으로 가져오지 않고도 일을 처리할 수 있다는 것이다. 데이터가 저장되어 있고 처
리되는 위치와 상관없이, 데이터를 조작하고 분석하는 모든 일을 하나의 환경에서 할 수 있다
는 것이 얼마나 혁신적인지 설명하기는 쉽지 않지만, 일단 경험해보면 알 것이다. 필자들은 스
파크를 처음 접했을 때 느꼈던 신비한 힘을 예제에 담아내려고 노력했다.
32. 32 9가지 사례로 익히는 고급 스파크 분석
2.2 스파크 프로그래밍 모델
스파크 프로그래밍을 위해서 데이터와 이를 담은 저장소가 필요하다. 데이터는 보통 하둡 분산
파일시스템Hadoop Distributed File System (HDFS)과 같은 분산 저장소에 저장한다. 일반적으로 스파크
프로그램은 다음과 같은 몇 개의 연이은 단계로 구성된다.
● 입력 데이터에 적용할 변환을 정의한다.
● 변환된 데이터를 저장소로 보내거나 구동자driver의 로컬 메모리로 반환하는 액션을 수행한다.
● 분산 처리 방식으로 계산된 결과를 바탕으로 로컬 계산을 수행한다. 이 작업은 다음에 수행할 변환과 액션을
결정하는 기준이 될 수도 있다.
스파크를 이해한다는 것은 스파크 프레임워크가 제공하는 두 가지 기능 분류인 저장storage과 실
행execution의 관계를 이해한다는 것이다. 스파크는 데이터 처리 파이프라인의 어떤 지점에서도
데이터를 메모리에 캐시하여 나중에 재사용할 수 있도록 함으로써, 저장과 실행을 훌륭하게 연
결해두었다.
2.3 레코드 링크
우리가 이 장에서 논의할 문제는 문헌과 실무 현장에서 엔티티 해소entity reolution, 레코드 중복 제
거record deduplication, 병합 및 제거merge-and-purge, 목록 정리list washing 등 다양한 이름으로 불리고 있
다. 모순적이게도 이 문제가 다양한 이름으로 불리기 때문에 문제 해결을 위한 기술들을 훑어
보고자 해도 관련 논문조차 다 찾아내기 어렵다. 오히려 이 데이터 정제문제에 대한 참고 문헌
들에서 중복 제거를 수행할 데이터 과학자가 필요한 처지다! 이 장의 목적을 원만히 이루기 위
해 이제부터 ‘같은 실체를 가리키는 레코드들을 연결짓는’ 이 문제를 레코드 링크record linkage라 부
르겠다.
이 문제의 일반적인 형태는 다음과 같다. 하나 또는 그 이상의 데이터 출처로부터 데이터를 수
집하여 취합하면 그 속의 레코드 일부가 실제로는 같은 고객, 같은 환자, 같은 위치, 같은 행사
등 동일한 실체를 가리킬 수 있다. 각 실체는 이름, 주소, 생일과 같은 여러 속성을 가지고 있어
서 동일한 실체를 가리키는 레코드들을 찾아내려면 이 속성값을 이용해야 한다. 안타깝게도 이
33. 33Chapter 2 - 스칼라와 스파크를 활용한 데이터 분석
속성값들은 불완전하다. 형식이 다르거나 오타가 있거나 값이 누락되었을 수 있다. 그러므로
단순하게 속성이 같은지만을 검사한다면 상당수의 중복 레코드를 놓치게 될 것이다. [표 2-1]
을 살펴보자.
표 2-1 레코드 링크의 어려움
이름 주소 도시 주 전화번호
조시의 커피숍 선셋 대로 1234 서 할리우드 CA (213)-555-1212
조시 코피 선셋 대로 1234, 서 할리우드 CA 555-1212
커피숍 체인 #1234 선셋 가 1400, 2 할리우드 CA 206-555-1212
커피숍 체인 지역 사무소 선셋 가 1400, 2호실 할리우드 캘리포니아 206-555-1212
이 표에서 위의 두 줄은 각각 ‘서 할리우드’와 ‘할리우드’라는 도시에 있는 서로 다른 커피숍처럼
보인다. 하지만 이는 입력상의 실수로, 사실은 같은 커피숍을 가리킨다. 그다음의 두 줄은 주
소가 같지만 2개의 서로 다른 사업장을 가리키고 있는데, 하나는 실제 커피숍이며 다른 하나는
지역의 체인점 사무소다. 둘 다 시애틀에 있는 본사의 대표 전화번호가 기록되어 있다.
이 예제는 레코드 링크가 얼마나 어려운지를 보여준다. 각각의 묶음이 서로 유사하게 보이더라
도 중복이 있는지를 결정하기 위해 사용하는 기준은 묶음마다 다르다. 사람은 직관으로 쉽게
구분할 수 있겠지만 컴퓨터가 그 구분법을 학습하기에는 어려운 형태다.
2.4 스파크 셸과 SparkContext 시작하기
여기에서는 UC 어바인의 기계 학습 데이터 저장소UC Irvine Machine Learning Repository에서 구할 수 있
는 표본 데이터를 사용한다. 이 저장소에서 연구와 교육을 위한 흥미로운 (더구나 무료인) 데
이터셋들을 구할 수 있다. 우리가 분석할 데이터셋은 2010년에 독일의 한 병원에서 실시한 레
코드 링크 연구에서 나온 것으로, 환자의 성과 이름, 주소, 생일 등 몇 가지 기준에 따라 묶은
수백만 건의 환자 기록 묶음이 들어 있다. 각 묶음에는 문자열 유사도에 따라 0.0부터 1.0까지
점수를 매겼고, 그 후 같은 사람을 표현한 묶음과 그렇지 않은 묶음을 분류해 일일이 표시하였
다. 데이터셋을 만드는 데 사용한 필드 자체의 원래 값은 환자의 개인 정보를 보호하기 위해 제
34. 34 9가지 사례로 익히는 고급 스파크 분석
거되었으며 식별번호, 필드별 유사도 점수, 묶음별 실제 분류값(같은 사람인지 여부)이 레코
드 링크 연구 용도로 발행되었다.
아래와 같이 셸shell 명령어로 저장소로부터 데이터를 가져오자.
$ mkdir linkage
$ cd linkage/
$ curl -L -o donation.zip http://bit.ly/1Aoywaq
$ unzip donation.zip
$ unzip 'block_*.zip'
사용할 수 있는 하둡 클러스터가 있으면, HDFS에 블록 데이터용으로 디렉터리를 생성하고 데
이터 파일을 그 디렉터리에 복사한다.
$ hadoop fs -mkdir linkage
$ hadoop fs -put block_*.csv linkage
이 책의 예제 코드는 1.2.1 버전의 스파크를 사용한다. 필요한 릴리스는 스파크 프로젝트 사이
트에서 내려받을 수 있다(http://spark.apache.org/downloads.html). 클러스터 환경을 사용
하든 로컬 PC 환경을 사용하든, 스파크 참조 문서를 보고 환경을 설정하면 된다(http://spark.
apache.org/docs/latest/).
이제 spark-shell을 실행할 준비가 되었다. spark-shell은 스파크 확장 API를 제공하는 스
칼라 REPLread-eval-print loop이다. REPL이라는 용어가 생소하다면 R 환경과 유사한 것으로 생각
하면 된다. spark-shell은 스칼라 프로그래밍 언어를 사용하여 함수를 정의하고 데이터를 다
룰 수 있는 공간이다.
YARN을 지원하는 하둡 클러스터가 있다면 스파크 마스터를 yarn-client로 지정해서 스파
크 작업을 클러스터에서 실행할 수 있다.
$ spark-shell --master yarn-client
PC에서 실행하려면 local[N] 인수를 지정하여 실행하면 된다. 여기에서 N은 실행할 스레드
의 개수다. 이 값을 *로 지정하면 가용한 CPU 코어 개수로 자동으로 설정된다. 예를 들어 사용
할 PC가 8코어 장비라면 8개의 스레드로 실행된다.
35. 67Chapter 3 - 오디오스크로블러 데이터셋으로 음악 추천하기
“De gustibus non est disputandum.”
(취향에 이유를 따지지 마라.)
누군가 나에게 직업을 물을 때 ‘데이터 과학’ 또는 ‘기계 학습’이라고 직설적으로 대답하면, 들리
기야 멋있게 들리지만 반응은 싸한 편이다. 실제 데이터 과학자들조차도 이 용어의 뜻을 명확
하게 정의하지 못하고 있으니(큰 데이터를 저장하고, 계산하고, 무언가 예측하는 일?) 당연히
그럴 만하다. 예를 들어 이야기해보자.
“아마존에서 고객이 과거에 구매한 책들과 유사한 책을 추천해주는 걸 알고 계신가요? 정말요?
네. 바로 그게 제가 하는 일입니다.”
추천 엔진은 적어도 내 주변 사람은 모두 알고 있으며, 또 많은 사람이 아마존을 통해 경험한
대규모 기계 학습의 사례일 것이다. 소셜 네트워크에서 동영상 사이트, 그리고 온라인 소매업
까지 모든 영역에 적용되는 공통분모에 해당하는 것이며, 또한 실제로 동작하는 모습을 직접
관찰할 수도 있다. Gmail이 우리가 신경 쓰지 않아도 스팸을 골라내는 그 방법으로, 스포티파
이Spotify 역시 재생할 음악을 컴퓨터가 골라주고 있다는 사실을 알고 있다.
다른 기계 학습 알고리즘에 비해 추천 알고리즘의 결과는 훨씬 직관적이다. 게다가 흥미롭기까
지 하다. 개인의 음악 취향이 너무 사적이어서 설명하기 어렵다고 누구나 생각하지만, 추천 엔
오디오스크로블러 데이터셋으로
음악 추천하기
CHAPTER 3
션 오언
36. 68 9가지 사례로 익히는 고급 스파크 분석
진은 우리가 좋아할 것으로 생각하지도 못한 음악을 찾아내는 놀라운 일을 해낸다.
추천 엔진이 널리 사용되는 음악과 영화 분야에서는 추천된 목록이 누군가 과거에 듣거나 본
콘텐츠와 왜 잘 들어맞는지를 추리해내기가 상대적으로 쉽다. 하지만 모든 군집화clustering1
나 분
류classification 알고리즘이 설명하기 쉬운 건 아니다. 예컨대 서포트 벡터 머신support vector machine 분
류기는 계수들의 집합으로 구성되는데, 예측은 하더라도 그 계수들의 의미를 설명하기란 전문
가조차도 쉽지 않다.
그래서 앞으로 3개의 장에 걸쳐서 스파크의 핵심 기계 학습 알고리즘을 다루기 전에, 이번 장
에서 음악에 특화된 추천 엔진을 먼저 들여다보는 것이 좋다고 판단했다. 스파크와 MLlib을 실
제 세상의 문제에 적용하는 방식을 소개하고, 또 앞으로 이어질 장에서 더 깊게 들어갈 기본적
인 기계 학습 알고리즘을 소개하는 적절한 방법이라 생각한다.
3.1 데이터셋
이 장의 예제에서는 오디오스크로블러Audioscrobbler에서 공개한 데이터셋을 사용하려 한다. 오디
오스크로블러는 2002년에 초기 인터넷 스트리밍 라디오 서비스를 제공한 last.fm을 위해서 만
들어진 첫 번째 음악 추천 시스템이다. 오디오스크로블러는 스크로블링2
용 오픈 API를 제공했
고, 청취자의 음악 재생 내역을 기록했다. 서드파티 앱과 사이트들이 추천 엔진에 음악 감상 관
련 데이터를 돌려준 덕에, 이 시스템의 사용자는 수백만 명에 이르렀다.
당시의 추천 엔진 관련 연구는 대부분 평점 데이터를 학습하는 데 그쳤다. 즉, “개똥이가 프린
스에게 별점 3개 반을 주었군”과 같은 입력을 가지고 동작하는 도구처럼 보이곤 했다.
오디오스크로블러의 데이터셋이 재미 있는 점은 “개똥이가 프린스를 들었어”와 같은 단순 재생
정보만 기록한다는 것이다. 단순 재생 여부는 평가보다 정보가 적다. 개똥이가 듣는다는 사실
만으로 개똥이가 실제로 좋아하는지 혹은 싫어하는지를 판단할 수 없기 때문이다. 종종 별 관
심 없는 아티스트의 음악을 틀어놓을 때도 있고, 또 음악을 틀어놓고 외출해버릴 수도 있다.
1 옮긴이_ 영어 그대로 클러스터링이라고도 많이 부르나, 이 책에서는 분산 처리 분야의 용어인 클러스터링과 명확히 구분하기 위해 우리말
용어인 군집화를 사용하기로 한다.
2 옮긴이_ 음악을 들을 때 아티스트, 제목, 앨범 등의 정보를 last.fm 서버에 보내는 작업이다.
37. 69Chapter 3 - 오디오스크로블러 데이터셋으로 음악 추천하기
하지만 감상한 음악을 평가하는 횟수는 음악을 듣는 일에 비해서 훨씬 드물다. 그래서 음악 감
상 데이터 하나의 정보량은 음악 평가 데이터 하나의 정보량보다 적지만, 음악 감상 데이터셋
은 크기도 훨씬 크고, 더 많은 사용자와 아티스트를 포함하며, 정보의 총량도 훨씬 많다. 사용
자와 아티스트 사이의 관계가 어떤 명시적 평가나 ‘좋아요’ 버튼으로 직접 주어지는 대신, 다른
행위로부터 유추할 수 있는 형식이므로 이런 종류의 데이터를 암묵적 피드백implicit feedback이라고
부르기도 한다.
2005년에 last.fm에서 배포한 데이터셋의 스냅샷을 인터넷에서 압축된 파일 형태로 구할 수
있다(http://bit.ly/1KiJdOR). 압축 파일을 내려받은 후, 그 안의 파일을 몇 개 찾아보자. 중심
이 되는 데이터셋은 user_artist_data.txt 파일에 들어 있다. 이 안에는 141,000명의 사용자와
160만 명의 아티스트 정보가 담겨 있으며 약 2,420만 건의 음악 재생 정보가 재생 횟수와 함
께 기록되어 있다.
또한, 이 데이터셋의 artist_data.txt 파일에는 각각의 아티스트에 ID를 부여하고 있다. 음악
이 재생되면 클라이언트 프로그램이 재생되는 아티스트의 이름을 전송하는데, 그 이름은 잘못
기록되었거나 공식 명칭이 아닐 수 있으며, 이러한 오류가 뒤늦게 발견될 수도 있다. 예를 들
어 ‘The Smiths’, ‘Smiths, The’, ‘the smiths’는 데이터셋 안에서는 별도의 아티스트 ID를 가
질지도 모르지만, 이 명칭들은 모두 단 한 사람에게 붙여진 것일 수 있다. 그래서 데이터셋의
artist_alias.txt 파일은 아티스트 명칭의 흔한 오기 패턴과 다양한 변형 표기법으로 기록된 아
티스트 ID를 해당 아티스트의 대표 ID와 연결 짓고 있다.
3.2 교차 최소 제곱 추천 알고리즘
우리는 암묵적 피드백 데이터에 적합한 추천 알고리즘을 선택해야 한다. 우리의 데이터셋은 전
적으로 사용자와 아티스트의 음악 사이의 상호작용으로만 구성된다. 사용자에 대한 어떤 정보
도, 그리고 이름 외에는 아티스트에 대한 어떤 정보도 포함하고 있지 않다. 우리는 사용자와 아
티스트의 속성에 대해 아는 바가 없어도 학습이 가능한 알고리즘이 필요하다. 이런 알고리즘을
일반적으로 협업 필터링collaborative filtering (http://en.wikipedia.org/wiki/Collaborative_filtering)
이라고 한다. 예를 들어 사용자 두 명이 단지 동년배라서 취향이 비슷하다고 이야기하는 것은
협업 필터링이 아니다. 두 사람이 들은 노래 중 같은 것이 많기 때문에 같은 노래를 좋아할 것
38. 70 9가지 사례로 익히는 고급 스파크 분석
이라고 결정하는 것이 협업 필터링의 예라고 할 수 있다.
수천만 건의 재생 기록을 담은 이 데이터는 일견 방대해 보이지만, 다른 관점에서 보면 밀도가
낮기 때문에 꼭 그렇지도 않다. 평균적으로 한 사용자가 160만 명의 아티스트 중 171명의 노
래만 재생했다. 어떤 사용자는 딱 한 아티스트의 노래만 듣기도 했다. 어찌 되었든 음악을 듣는
누구라도 처음에는 딱 한 곡의 청취 기록만 있었을 것이다!
최종적으로, 대규모 모델을 만들 수 있고 동시에 빠른 추천이 가능한, 확장 가능한 알고리즘이
필요하다. 일반적으로 추천 결과가 내일 나온다면 너무 늦다. 1초 이내의 준 실시간으로 나와
야 한다.
이 예제에서는 잠재 요인latent-factor (http://en.wikipedia.org/wiki/Factor_analysis) 모델로
분류할 수 있는 많은 알고리즘 중 하나를 사용하고자 한다. 잠재 요인 모델은 다수의 사용자
와 상품 사이에서 관측된 상호작용observed interaction을 상대적으로 적은 수의 관측되지 않은, 숨은 원인
unobserved, underlying reason으로 설명하려 할 때 사용한다. 이는 수백만의 사람이 수천 개의 음반 중
특정 음반을 구입한 이유를 (직접 관측할 수 없고 데이터도 주어지지 않은) 수십 개 음악 장르
에 대한 개인 취향으로 설명하는 것과 유사하다.
더 구체적으로는 행렬 분해matrix factorization (http://en.wikipedia.org/wiki/Non-negative_matrix_
factorization) 모델을 사용할 것이다. 수학적으로 이들 알고리즘에서는 사용자와 제품 데이터
를 큰 행렬 A로 간주해 다루는데, A는 사용자 i가 아티스트 j의 음악을 들었다면 A의 i행 j열
에 값이 존재하는 행렬이다. A는 희소 행렬sparse matrix이다. 사용자-아티스트의 가능한 모든 조합
중 오직 극소수만이 실제 데이터로 등장하기 때문에 이 행렬의 원소 대부분은 0이 된다. 이들
행렬 분해 알고리즘은 A를 더 작은 행렬 X와 Y의 행렬곱으로 분해하는데, 이 X와 Y는 매우
길쭉하다. A가 다수의 행과 열을 가지기 때문에 X와 Y는 매우 많은 행을 가지게 되는 데 반해,
열은 몇 개(k ) 되지 않는다. k개의 열은 상호작용하는 데이터를 설명하는 데 사용하는 잠재 요
인에 해당한다.
[그림 3.1]에서 볼 수 있듯, k가 작기 때문에 이 분해는 근사치일 수밖에 없다.
39. 71Chapter 3 - 오디오스크로블러 데이터셋으로 음악 추천하기
A X
k
k
YT
그림 3.1 행렬 분해
원래의 행렬 A는 매우 희소한 데 비해 행렬곱 XYT는 밀도가 매우 높아서 이 알고리즘을 행렬
채우기matrix completion 알고리즘이라고 부를 때도 있다. 설사 값이 0인 원소가 있다 할지라도 매우
드물게 나타나므로, 이 모델은 A의 근삿값일 뿐이다. 원래의 행렬 A에서 결측된(즉, 값이 0
인) 많은 원소에 대한 값조차도 생성한다는(채워준다는) 관점에서 행렬 분해는 하나의 모델이
라 할 수 있다.
다행히도 이는 선형대수학이 직관과 아주 잘 들어맞는 경우다. 이 두 행렬은 각 사용자와 각 아
티스트를 하나씩의 행으로 담고 있다. 이 행들은 매우 작은 수(k개)의 값만을 가진다. 그리고
각 값은 모델에서 숨어 있는 특징에 대응한다. 그래서 행들은 사용자와 아티스트가, 아마도 취
향이나 장르에 대응하리라 추측되는, 이들 잠재 요인과 얼마나 밀접하게 관련되는지를 표시하
게 된다. 그리고 사용자-잠재 요인 행렬과 잠재 요인-아티스트 행렬의 행렬곱은 사용자-아티
스트 상호작용 밀집 행렬의 완벽한 근사치에 해당한다.
안타까운 점은 A를 완벽하게 표현하기에는 X와 Y가 충분히 크지 않아(선형대수학에서는 계
수rank가 너무 작다고 기술한다. http://bit.ly/1ALoQKF) A = XYT의 일반적인 해를 구할 수
없다는 것이다. 알고 보면 사실은 좋은 일이다. A는 발생할 수 있는 모든 상호작용 중 아주 작
은 표본일 뿐이다. 어떤 면에서 A는 정보가 매우 드문드문 존재하는 행렬이므로 (크지 않은 k
개의 잠재 요인으로 잘 설명해야 한다는 감춰진 진실의 관점에서 보면) 설명하기 어려운 것이
라 믿게 된다. 고양이 그림의 직소 퍼즐을 생각해보자. 완성된 퍼즐을 보고 고양이라고 설명하
기는 아주 쉬워도, 조각 몇 개만 쥐고 있다면 이것이 어떤 그림이라고 설명하기란 매우 어렵다.
40. 72 9가지 사례로 익히는 고급 스파크 분석
XYT은 여전히 A에 가능한 한 가까워야 한다. 어쨌든 이것이 우리가 해야 할 일이다. 정확하
게 구하지는 못할 것이고 또 구할 수도 없다. 설상가상으로, X와 Y의 정답 모두를 동시에 직접
적으로 구할 수조차 없다. 그나마 나은 소식은 Y를 알고 있을 때는 X의 정답을 구할 수 있음이
자명하고, 그 반대도 마찬가지라는 것이다. 뭐, 아직은 둘 다 모르는 상태지만!
다행히 이런 딜레마를 극복하고 제대로 된 해를 찾아주는 알고리즘이 있다. 더 구체적으로
설명하면, 이 장의 예제에서는 X와 Y를 계산하기 위해 교차 최소 제곱Alternating Least Squares (ALS,
http://bit.ly/16ilZZV) 알고리즘을 사용할 것이다. 이런 종류의 접근법은 넷클릭스 프라이즈
Netflix Prize (http://en.wikipedia.org/wiki/Netflix_Prize)가 열리던 시절에 발표된 <암묵적 피
드백 데이터셋에 대한 협업 필터링Collaborative Filtering for Implicit Feedback Datasets>(http://yifanhu.net/
PUB/cf.pdf)과 <넷플릭스 프라이즈를 위한 대규모의 병렬 협업 필터링Large-scale Parallel Collaborative
Filtering for the Netflix Prize>(http://goo.gl/y34MK2)과 같은 논문 덕에 유명해졌다. 사실 스파크의
MLlib이 제공하는 ALS 알고리즘도 이 논문들에서 아이디어를 가져와 구현한 것이다.
Y의 값을 모르지만, 무작위로 값이 선택된 행 벡터로 초기화할 수는 있다. 그런 다음 간단한
선형대수를 통해 주어진 A와 Y에 대한 최적 X를 구할 수 있다. 사실, X의 각 행 i는 Y와 A의
한 행의 함수로 독립적으로 쉽게 계산할 수 있다. 독립적으로 수행할 수 있으니 병렬 처리가 가
능하며, 이는 대규모로 계산할 때 매우 훌륭한 장점이다.
AiY(YT
Y )-1 = Xi
이 수식의 양 변을 똑같이 만들기란 불가능하므로, 우리의 목표는 양 변의 차이인
|AiY (YT
Y )-1 - Xi|, 즉 두 행렬에서 대응되는 원소 간 차의 제곱의 합을 최소화하는 것이다.
여기서 최소 제곱least squares이라는 이름이 유래되었다. 실전에서는 역행렬을 구하는 방법으로 계
산하지 않고 QR 분해QR decomposition (http://en.wikipedia.org/wiki/QR_decomposition)와 같은
방법으로 더 빠르게 바로 계산할 수 있다. 앞의 식은 단순히 행 벡터가 어떻게 계산되는지의 이
론을 설명하기 위한 것이다.
같은 방법으로 X로부터 각 Yj를 계산할 수 있다. 그리고 다시 같은 방법으로 Yj로부터 X를 계
산할 수 있다. 그래서 이 과정을 교차 alternating라고 한다. 이제 한 가지 작은 문제만 남았다. Y는
무작위로 만들어진 값이므로, 비록 X가 최적값으로 계산되었지만 가짜 해에 불과하다는 것이다.
다행히도 이 과정을 반복해가다 보면 종국에는 X와 Y 모두 제대로 된 해로 수렴하게 된다.
41. 93Chapter 4 - 의사 결정 나무로 산림 식생 분포 예측하기
예측은 매우 어려우며, 미래에 대해서는 특히 그렇다.
-닐스 보어
19세기 후반 영국의 우생학자 프랜시스 골턴 경Sir Francis Galton은 완두콩과 사람 등을 대상으로 그
키를 측정하는 데 집중했다. 그는 키가 큰 완두콩과 사람의 다음 세대 역시 평균보다 크다는 사
실을 발견했다. 놀라운 발견이라고는 할 수 없다. 하지만 그다음 세대는 평균적으로 부모보다
조금 작았다. 사람의 경우 키가 2미터에 달하는 야구 선수의 자식은 물론 평균보다야 크겠지
만, 그렇다고 2미터까지 크지는 않는다는 뜻이다.
이 연구의 뜻하지 않은 결과 덕분에 골턴은 부모 세대의 키와 비교하여 자식 세대의 키를 정리
해보았고 둘 사이에 대략적인 선형 관계가 있음을 알아냈다. 큰 부모 완두콩은 큰 자식 완두콩
으로 이어졌지만, 큰 부모보다는 조금 작았다. 작은 부모 완두콩도 작은 자식 완두콩으로 이어
지지만, 역시 부모보다는 조금 컸다. 이 선형 관계에서 직선의 기울기는 1보다 작은 양수였고,
골턴은 이 현상을 평균으로의 회귀regression to the mean라고 표현했다. 오늘날 우리도 이 표현을 사용
한다.
당시에는 인지하지 못했을지언정, 나에게 이 선형 관계는 예측 모델의 오래된 예로 보인다. 두
값을 연결한 선이 있다는 것은 하나의 값이 다른 값에 대해 많은 것을 시사할 수 있음을 의미한
다. 어떤 완두콩의 자식의 크기는 그 완두콩과 비슷할 것이라고 가정하는 것보다 이 관계를 이
용하여 자식 세대의 크기를 계산하는 쪽이 훨씬 정확할 것이다.
의사 결정 나무로
산림 식생 분포 예측하기
CHAPTER 4
션 오언
42. 94 9가지 사례로 익히는 고급 스파크 분석
4.1 회귀로 돌아와서
통계학이 체계를 갖춘 지 한 세기 이상이 지나고 기계 학습과 데이터 과학이 등장한 오늘날
에도, 주어진 값들로부터 새로운 값을 예측하는 방법으로 ‘회귀(http://en.wikipedia.org/
wiki/Regression_analysis)’를 꼽는다. 심지어 값이 평균에 가까워지거나 실제로 가까워지
려는 움직임조차 없을지라도 말이다. 또한, 회귀 기법은 분류 기법과 연관되어 있다(http://
en.wikipedia.org/wiki/Statistical_classification). 일반적으로 회귀는 크기, 수입, 온도와
같은 숫자를 예측하는 반면, 분류는 ‘스팸 메일’, ‘고양이 사진’과 같은 레이블이나 범주를 예측하
는 데 사용한다.
회귀와 분류의 연결 지점은, 두 방법 모두 하나 이상의 값이 주어졌을 때 하나 이상의 값
을 예측하는 일이라는 것이다. 이를 위해서 학습을 위한 입출력 체계가 구성되어 있어야 하
며, 질문과 이에 대한 답변도 제공되어야 한다. 이러한 탓에 회귀와 분류는 지도 학습supervised
learning (http://ko.wikipedia.org/wiki/지도_학습) 유형에 들어간다.
분류와 회귀는 가장 오래되고 가장 잘 연구된 유형의 예측 분석이다. 서포트 벡터 머신support
vector machine, 로지스틱 회귀logistic regression, 나이브 베이즈 분류naïve Bayes, 신경망neural networks, 그리
고 딥 러닝deep learning과 같은 분석 패키지나 라이브러리에서 자주 접하는 대부분의 알고리즘은
분류와 회귀 기법이다. 3장의 주제인 추천 엔진도 더 직관적이라는 이유로 앞 장의 주제로 사
용했지만, 역시 비교적 최근에 따로 떨어져나온 기계 학습의 하위 주제일 뿐이다.
이번 장에서는 분류와 회귀 모두에 적용할 수 있는 대중적이고 유연한 알고리즘인 의사 결정 나
무(http://en.wikipedia.org/wiki/Decision_tree), 그리고 그것의 확장판인 랜덤 포레스트
(http://en.wikipedia.org/wiki/Random_forest)를 다루고자 한다. 이 알고리즘과 관련한
흥미로는 사실은 닐스 보어가 미래 예측에 대해서 말한 것과 달리 미래를 예측에 사용할 수 있
으며, 적어도 아직은 우리가 명확히 알지 못하는 것을 예측할 수 있다는 것이다. 예를 들어 온
라인에서의 행동 양식으로부터 차를 살 가능성을 예측한다든지, 전자우편 내의 어떤 단어로부
터 이 전자우편이 스팸인지 여부를 찾아낸다든지, 위치와 토양의 화학성분비가 주어졌을 때 몇
제곱미터의 땅에서 작물을 재배할 수 있는지 등과 같은 것이다.
43. 95Chapter 4 - 의사 결정 나무로 산림 식생 분포 예측하기
4.2 벡터와 특징
특정 데이터셋과 알고리즘을 선택하는 방법, 그리고 회귀와 분류가 동작하는 방법을 설명하기
위해서는 우선 입력과 출력을 나타내는 용어들을 간단하게 정의할 필요가 있다.
오늘의 일기를 전제로 내일의 최고 기온을 예측하는 문제를 생각해보자. 별문제 없어 보이지
만, 그저 ‘오늘의 일기’라고 하면 너무 광범위한 개념이라 학습 데이터로 사용하려면 구조화해
야 한다.
오늘 일기의 다음과 같은 특징으로부터 내일 기온을 예측할 수 있다.
● 오늘의 최고 기온
● 오늘의 최저 기온
● 오늘의 습도
● 흐림(cloudy), 비(rainy), 맑음(clear)과 같은 날씨 유형
● 내일 일시적 한파를 예상한 기상 예보관의 수
이 특징들은 종종 차원dimension, 예측 변수predictor 또는 단순히 변수variable로 불린다. 각각의 특징은
정량화될 수 있다. 예를 들어 최고 기온과 최저 기온은 섭씨온도로 측정하고, 습도는 0과 1 사
이의 소수로 계량하고, 날씨 유형은 ‘cloudy’, ‘rainy’, ‘clear’로 표시할 수 있다. 물론 예보관의
수는 정수다. 이에 따라 오늘의 일기는 ‘13.1, 19.0, 0.73, cloudy, 1’과 같은 하나의 리스트로
축약할 수 있다.
이 다섯 가지 특징을 순서대로 묶어 특징 벡터feature vector라고 부르고 어떤 날의 일기를 표현할 수
있다. 이 벡터에 숫자형이 아닌 값이 포함될 수 있고, 또 어떤 값은 생략될 수도 있다는 점만 제
외하면 선형대수에서의 벡터 사용법과 유사하다.
이들 특징은 모두 같은 형식이 아니다. 앞의 두 개는 섭씨온도로 측정한 값이지만, 세 번째는
단위가 없는 비율이다. 네 번째는 아예 수가 아니고, 다섯 번째는 음이 아닌 정수다.
논하는 바의 목적에 맞춰 이 책에서는 범주형 특징categorical feature과 수치형 특징numeric feature 두 종류
의 특징만 다룰 것이다. 여기서 수치형 특징은 수를 사용해 정량화할 수 있고 순서가 의미가 있
다. 예를 들어 오늘의 최고 기온인 23도가 어제 최고 기온인 22도보다 높다고 이야기하는 것은
유효하다. 날씨 유형을 제외한 모든 특징은 수다. ‘clear’와 같은 용어는 수도 아니고 순서도 없
44. 96 9가지 사례로 익히는 고급 스파크 분석
다. 그래서 ‘cloudy’가 ‘clear’보다 크다고 말하는 것은 의미가 없다. 이것이 범주형 특징에 해
당하며, 여러 불연속discrete 값 중 하나를 취하게 된다.
4.3 학습 예제
예측을 위해서는 학습 알고리즘을 데이터로 학습시켜야 한다. 이를 위해 과거의 데이터로부터
얻은 많은 수의 입력 데이터와 각각에 대응하는 정확한 출력 데이터가 필요하다. 이 문제에서
예를 들자면, 어느 날 기온은 최저 12도, 최고 16도이며, 습도는 10%, 날씨는 맑고, 아무도 한
파 예보를 하지 않았다는 그 날의 일기 정보와 함께, 다음 날의 최고 기온인 17.2도가 동시에
학습 알고리즘에 제공되는 형태다. 이러한 예제 데이터가 충분히 많이 있어야 다음 날의 최고
기온을 예측하는 학습 알고리즘을 제대로 학습시킬 수 있다.
특징 벡터는 학습 알고리즘에 입력을 표현하기 위한 체계적인 방법을 제공한다. 여기에서는
{12.5, 15.5, 0.10, clear, 0}가 된다. 예측의 출력이나 목표 또한 특징으로 간주할 수 있는
데, 예를 들어 내일 최고 기온 17.2는 수치형 특징이다.
특징 벡터에 목표도 하나의 특징으로 포함시키는 일이 드물지 않다. 학습을 위한 완전한 예제
는 목표인 다음 날의 최고 기온까지 포함한 {12.5, 15.5, 0.10, clear, 0, 17.2}까지로 봐야
하며, 이 예제들의 집합을 학습 데이터셋training set이라고 부른다.
회귀에서는 수를, 분류에서는 범주를 대상으로 삼는다는 점을 기억하자. 모든 회귀나 분류 알
고리즘이 범주형 특징을 다루거나 범주를 목적으로 할 수 있는 것은 아니다. 일부는 수치형 특
징으로만 제한된다.
4.4 의사 결정 나무와 랜덤 포레스트
의사 결정 나무decision tree에 속하는 알고리즘은 범주형 특징과 수치형 특징 모두를 자연스럽게 다
룰 수 있다. 병렬로 쉽게 구축할 수도 있다. 의사 결정 나무는 데이터 내의 독특한 값outlier, 이상치
들에 잘 휘둘리지 않는 특성을 가지는데, 몇몇 극단적인 오류를 내포한 값들이 예측치에 영향
을 줄 수 없음을 의미한다. 그리고 전처리나 정규화 과정을 거치지 않고도 다른 유형과 다른 척