그것이 R고 싶다 - R스튜디오에서 클라우드까지 데이터 과학자가 꼭 알아야 할 R 패키지 활용법
양중기 지음 / 한빛미디어 / 2018년 7월
평점 :
절판


초보자가 R의 매력을 느낄 수 있는 책

장점이자 단점

예제 하나를 할 때마다 거의 하나 이상의 package를 설치해야 한다. 설치부터 자세히 설명해주니 초보자에게 좋기는 하지만, 설치에 문제가 생기는 경우는 난감할 수 있다.

장점

초보자를 대상으로 자세하게 썼다(하지만 여전히 R 설정 관련된 부분을 내가 잘 몰라서인지 쉽게 설치하지 못하는 부분도 있다. 특히 저자는 윈도우에서 했고, 나는 맥에서 해서 더 차이가 있는 듯). 특히 클라우드 부분에서 aws/애저 가입부터 설명을 한 걸 보고 정말 신경을 많이 썼다는 생각이 들었다.
심지어 R Studio editor의 theme을 바꾸는 부분까지 설명하기도 한다(66p).

소소한 부분이지만 책 전체가 컬러여서 아무 페이지나 펴도 명확하게 소스와 설명 구분이 쉽고 보기 좋다

단점

(만약 저작권 문제가 없다면) 실습 데이터 파일을 출판사 페이지나 github에 올려줬다면 더 편하게 따라할 수 있었을 거 같다.

part I

언제나 그렇듯 시작하면서 필요한 설치부터 진행하기로 했다. R이나 R Studio는 이미 예전에 설치했는데, mro라는 package를 설치해 병렬 프로세스를 사용할 수 있다기에 당연히 해보았다. 병렬 처리는 개발자라면 누구나 꿈꾸는(?) 부분이니까.

하지만 언제나 그렇듯 잘 되지 않았다.

이리 저리 뜯어보기에는 지금 바쁘기도 하고, 이게 없다고 예제를 따라하는 데 문제가 생기지는 않을 거 같아 일단은 지나가기로 했다. mro 설치는 https://mran.microsoft.com/download서 받아서 해야 하고, 오류가 발생해서 찾아보니(https://github.com/IRkernel/IRkernel/issues/300) X11 설치가 필요해 https://www.xquartz.org/ 서 다운로드를 받았는데, 특히 이 부분이 엄청나게 오래 걸렸다. 왜 이렇게 느린 지 모르겠지만, 거의 4시간 정도 걸려서 받았는데 결국 실패. microsoft의 문서를 보면서 하나씩 다시 설치해봐도 안 되어서 결국 다시 설치할 수 밖에 없었다. 

오류가 발생해서 그런지 나중에 sqldf, dplyr, tidyr같이 나 같은 초보자도 이름은 아는 package조차 설치가 안 되어서 결국 제거하고 다시 설치를 했다.

part II

역시 기본 문법 부분을 따라하는 데는 아무 문제가 없다. 다만 문법이 익숙하지 않아서 오는 부분은 여전히 어렵긴 하다.

3차원 배열을 생성하는데, 값이 채워지는 순서가 왠지 어색하다. array index가 1 부터 시작하는 것도 여전히 어색한데, 뒤쪽부터 값이 채워지니 더 어색하게 느껴졌다.

R 사용자들이 여전히 python이 따라오지 못한다고 말하는 부분들이 있는데 대표적인 게 data frame이다.

특히나 어색했던 건 파이프가 %>%였다는 점. |를 사용하지 않은 이유가 있을 거 같긴 한데, 방식이야 리눅스를 사용하는 프로그래머들이라면 누구나 익숙하겠지만 파이프 문자가 |도 아니고 %>%라는 건 정말 어색했다. 그 뒤에 나오는 항목들도 데이터 조작을 위해 모두 필수적인 함수들로 보였는데, select, filter나 *_join 함수들은 아예 sql query를 함수로 만들어 둔 거 같아 작업하는 데 편해보였다. R만의 장점이 조금씩 눈에 들어오기 시작한 시점이었다.

part III

기본 문법을 지나 조금씩 응용을 하기 시작하는 부분이다. data.go.kr에서 데이터를 가져와 진행을 하는데, 사이트는 .go.kr이 붙는 사이트치고 정말 사용하기 편하게 되어 있었다. 건강 관련 정보를 받을 때는 책의 설명을 따라 2015년 데이터를 받고 locale을 euc-kr로 한 후 import를 실행하니 출력하는 데는 한글 인식에 문제가 없었다. 하지만 ‘대기업집단 현황' 자료를 받으려고 하니(https://www.data.go.kr/dataset/3043452/fileData.do), 아니나 다를까, 연도를 선택하는 버튼에서 연도를 선택할 수가 없었다(설마 internet explorer가 아니라서?). 혹시 저자가 자료를 받을 수 있게 해놨을까 싶어 출판사 페이지에 갔는데(http://www.hanbit.co.kr/src/10088) 아쉽게도 정말 예제 소스만 있고, 이런 자료는 없었다. (만약 저작권 문제가 없다면) 기왕에 자료 파일도 같이 올려줬다면 더 좋았을 거다.

이외에도 서울시 open API 이용하기, MySQL 연동 방법, R에 자체적으로 포함된 데이터셋, 난수 생성 등을 통해 데이터 이용하는 방법 등을 설명한다. 각 부분마다 깊이있는 이야기를 하지는 않지만, 기본적인 이용 방법을 자세히 설명하고 있다.

그 다음 장에서는 좀 더 나아가 기본적인 통계를 설명하고, (나 같은 초보에게는) 고급 데이터 분석 기법들, decision tree, random forest 등의 기초적인 실행 방법과 다양한 시각화 기법, graph를 그리거나 R markdown 문서화 등의 방법들을 설명한다.

총평

R 초보자들이 매력을 느끼기에 충분한 책이다. 개인적으로는 다른 R책을 볼 때보다 훨씬 강하게 R의 유용함을 느낄 수 있었다. 특히 시각화 부분에서는 python도 많이 편해지긴 했지만, 이래서 R 사용자들이 R이 아직 훨씬 앞섰다고 이야기한다는 걸 이해할 수 있었다. 조금씩 R에 친숙해져서 개인적인 데이터로 해보고 싶다는 생각이 들었다.

다만 앞서 정리했듯이 패키지 설치로 인해 중간 중간 맥이 끊기는 점(생각보다 설치에 시간이 많이 걸리기도 하고, 실패하는 경우도 있으므로)과, 실습 데이터를 사용하기가 불편했다는 점이 아쉬웠다. 이 부분만 보강하면 정말 R 초보자들에게 굉장히 매력적인 책이 될 거라고 생각한다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
한 권으로 배우는 파이썬 기초 & 알고리즘 사고법
아리스티데스 보우라스 외 지음, 길준민 외 옮김 / 제이펍 / 2018년 7월
평점 :
절판


프로그래밍을 배우고 싶어도 어려울 거 같다는 생각에 선뜻 시작하지 못하는 사람들에게 매우 좋은 선택이 될 책

책을 읽으면서 컴퓨터공학과에 입학했던 20년 전이 생각났다. 당시 많은 컴퓨터 전공자들이 게임이 좋아서 입학했다가, 쏟아지는 복잡한 이야기에 압도당해 내가 과연 옳은 선택을 한 걸까, 내가 하고 싶던 건 이게 아닌데… 이런 고민을 했다(요즘 신입생들도 그럴지는 몰라서 “당시”). 기본적으로 일상 생활을 하면서 할 필요가 없던 방식으로 생각을 해야 하기 때문에 그런 낯설음이 굉장히 큰 장벽으로 다가와서 그러는데, 불친절한 교과서와 교수님들은 그런 어려움을 보통 증폭시키기만 하므로 초반에는 거의 도움이 되지 않는다. 그 때 이런 책이 있었더라면 장벽을 넘어서는데 큰 도움이 되었을 거 같다.

1/2장은 컴퓨터 개론에서 배웠던 극히 일부 내용을 다시 압축한 듯한 느낌이다. 아주 기초적인 컴퓨터 관련 지식과 파이썬 동작 원리에 대한 이야기이다. 다만 한 가지 지적하고 싶은 부분은 파이썬이

…중규모 정도의 애플리케이션이나 동적 웹페이지를 개발하기에 적합하다

는 부분인데, 보통은 그렇게 생각하지만 인스타그램같은 대규모 웹사이트/앱에서도 파이썬을 사용(https://instagram-engineering.com/what-powers-instagram-hundreds-of-instances-dozens-of-technologies-adf2e22da2ad)하기 때문에 사실 규모는 파이썬 사용 유무와는 무관하다고 봐야 한다.

3장에서는 실습을 위한 이클립스 설치를 설명하는데, 이 부분은 조금 아쉽다. 이미 python에서 가장 많이 사용하는 IDE는 pycharm으로 넘어온지 오래인데, 아마 저자들이 이클립스를 많이 사용해서 선택한 게 아닌가 추측해볼 뿐이다.

4장 알고리즘 기본, 5장 변수와 상수 등 부터 본격적인 프로그래밍 기초를 설명한다. 이미 경험있는 프로그래머가 읽기에는 지루할 수도 있는 부분이지만, 앞서 말했듯 20여년 전 처음 프로그래밍을 배울 때 생각했던 당혹감을 생각해보면 이렇게 하나하나 설명이 있어야 초보자들이 그나마 이해하기가 쉽다는 걸 이해할 수 있다. 특히 8장 추적표는 많이 와 닿았는데, 요즘에도 알고리즘 문제를 손으로 풀 때 비슷하게 디버깅을 하고 있기 때문이다. 예제 8.1–2같은 부분은 특히 프로그래밍 초보자에게는 귀중한 설명이다. a, b = b, a와 같은 swap이 프로그래머들에게는 매우 당연한 이야기이고, tmp = a; a = b; b = tmp; 와 같은 temporary 변수 사용 또한 공기와도 같은 부분이지만, 초보자들에게는 안 그래도 어지러운 머리를 또 한 번 복잡하게 할 수도 있는 부분인데, 이걸 이해하기 쉽게 그림과 함께 설명하고 있다. 9장에서는 이클립스로 프로젝트를 만들고 디버깅하는 방법을 보여주면서 본격적으로 프로그램을 작성할 준비를 한다.

그 뒤로 제어와 관련된 구문을 계속 설명하는데, if else나 loop에 대한 설명이 part V, 525 page까지 이어진다. 중간중간 추적표와 예제마다 곁들여진 그림으로 설명하기 때문에 혼자서 읽어도 대부분 쉽게 이해할 수 있을 거 같다.

알고리즘 서적이라면 정렬/검색이 기본인데, 662 page가 되어서야 처음으로 버블 정렬을 통해 정렬 알고리즘을 설명하고 part VII이 되어서야 function/procedure 및 39.8 재귀(774 page)에 대해 설명한다.

다시 한 번 말하면, 이 책은 초보자 중에서도 입문자를 위한 서적이다. 책을 읽어보고 조금이라도 지루한 부분이 있다면 이 책을 추천하지 않는다. 하지만, 프로그래밍을 시작해보려다가 포기한 경험이 있는 사람이라면 강력히 추천한다. 왠만한 선생님보다 좋을 것이다.

끝으로 한 가지 아쉬운 점. 14.4 IS_NUMERIC을 통해 정규식으로 문자열이 숫자인지 검사하는 방법을 보여주고 있는데, 아무 설명없이 정규식을 사용하는 건 좀 어려울 거 같단 생각을 했다. 이 책에서 아마 유일하게 자세한 설명없이 사용하는 고급(?) 기법일 거 같다. 뒤에서도 계속 여러가지 예제에 사용하기 때문에 그냥 간단히 넘어간 거 같다.

https://github.com/Jpub/Python_Algorithms 를 통해 책에 나온 코드를 다 제공하지만, 입문자 수준에서 github을 사용하는 건 약간 난이도가 있을 거라고 생각하는데, 이에 대한 설명이 없다는 점도 사람에 따라서는 아쉬울 수 있을 거 같다.



댓글(0) 먼댓글(0) 좋아요(8)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
머신러닝 실무 프로젝트 - 실전에 필요한 머신러닝 시스템 설계, 데이터 수집, 효과 검증 노하우
아리가 미치아키 외 지음, 심효섭 옮김 / 한빛미디어 / 2018년 6월
평점 :
구판절판


장점; 읽어보면 실무를 해본 사람들이 썼다는 걸 알 수 있다. 이론도 설명하지만, 실제 경험에서 오는 설명이 굉장히 와 닿는다

장점이자 단점; 책이 두껍지 않기 때문에 읽는데 부담이 좀 덜 하지만 자세한 내용을 원하는 경우 약간 부족하다는 생각이 들 수 있다

Part I

1장

특히 ‘1.2.2의 머신러닝을 사용하지 않는 방법 검토하기'가 인상적이다. 실무를 해본 사람들과 이야기해보면 흔히 하는 이야기지만, 출간하는 책에서 이렇게 쓰는 걸 보기는 힘들다. 사용하는 방법의 장점을 더 부각시켜야 독자가 흥미를 갖고 책을 읽지 않겠는가. 하지만 이렇게 솔직하게 현실을 썼다는 점에서 오히려 믿음이 갔다.

2장

머신러닝의 주제에 대한 대-소 분류 및 개념 설명을 하는데, 정말 정신없이 지나간다. 나 같이 어설프게 아는 사람에게는 다른 책에서 봤던 개념에 대한 설명 정도로만 이해하고 지나가게 될 거 같긴 하지만, 정리가 잘 되어 있어 읽기 편하다.

3장

평가를 위한 개념을 설명한다. 정밀도 정확도 재현률이나 TP, TN, FP, FN은 언제나 봐도 헷갈린다. 마이크로-매크로 평균이란 건 처음 봤고, RMSE와 결정 계수는 이름만 아는 정도인데, 일단 읽으면서 아~ 이랬지 하고 넘어갔다. 아마 또 잊어버려서 나중에 다시 봐야겠지.

4장

내용은 간단하지만, 실무에서 여러가지 경험을 통해 문제를 겪었다는 걸 느낄 수 있었다. 꼭 머신러닝이 아니더라도 시스템 구성의 기본적인 부분에 대해 궁금한 사람에게는 도움이 될 수 있다. 특히 로그에 대한 내용은 정말 공감이 간다. 간단한 프로그램이 아닌 이상 시스템에서는 로그를 남기고 쉽게 추적할 수 있어야, 문제가 생기건 개선을 하건 필요한 정보로 활용할 수 있는데, 대규모 로그를 잘 설계해서 사용하기 쉽게 만들면서도 필요한 정보를 즉각 보는 일은 정말 어렵다. 이런 면에서 참고할 만한 이야기가 많아 좋았다.
다만 아무리 봐도 그림 4–1, 2, 3이나, 5, 6, 7은 같은 그림으로 보이는데, 색을 다르게 했는데, 책에서는 흑백이라 구분이 가지 않는 건지 잘 모르겠다. 다시 봐도 똑같은 그림으로 보이는데.

5장

업무에 적합한, 질 좋은 데이터를 만드는 건 사실상 돈을 써야만 한다. 즉 수작업이 필요하다.

6장

가설 검정 부분은 통계를 몰라 그냥 그렇구나 하고 넘어갔으며, A/B 테스트 부분은 역시 동감한다.

Part II

역자가 https://github.com/flourscent/ml-at-work 를 통해 잘 준비해둬서 따라하는 데 어려움이 없다. macbook에서 Anaconda Python 3.5.5로 실행했다.

설치


실행



댓글(0) 먼댓글(0) 좋아요(1)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
해들리 위컴의 Advanced R
해들리 위컴 지음, 정우준 옮김 / 제이펍 / 2018년 5월
평점 :
절판



원래 이 책을 읽으려는 이유는 지극히 개인적인 야구에 대한 관심 때문이었다. R에 대해서는 큰 관심은 없었고, 다만 세이버 매트릭스 관련 블로그를 보면 요즘에는 python도 많이 쓰지만 여전히 R로 데이터를 가공하는 경우가 많기 때문에 R을 알면 좀 더 재미있게 야구 블로그를 읽을 수 있을 거란 기대 때문이었다. 하지만 책을 펴고 나니 이 생각이 틀렸음을 알게 되었다. 베타 리더들의 이야기뿐만 아니라, 책의 시작 자체가 정말 제목 그대로 ‘Advanced’ user를 위한 책이었다. 일반적인 프로그래밍 기본 서적은 설치와 ‘hello world’를 출력하는데서 시작하지만, 이 책은 R의 데이터 구조부터 시작하며, 설치에 대한 안내는 부록으로도 제공하지 않는다 ㅜㅜ 저자는 서문에서 심지어 SICP https://mitpress.mit.edu/sites/default/files/sicp/index.html 를 거론하며 더 나은 프로그래밍을 하기 위해 필요한 일반적인 프로그래밍 서적들을 이야기하고, 마지막 두 챕터는 고성능을 위해 cpp와 c 연동 방식에 대해 설명한다.

그래서 일단 R을 설치하고 테스트하기 위해 매번 새로운 걸 할 때처럼 R의 docker image를 찾아보았다. 검색을 해서 https://hub.docker.com/_/r-base/ 를 찾아 가장 간단하게 interactive mode부터 하려고 docker run -ti — rm r-base 을 실행했다. 바로 print(“Hello World”)를 실행할 수 있었다.

Part I

그래도 비교적 쉽게 읽었다. 처음 접해서 문법이 어색하지만, 입력하고 실행하는데 어려움은 없었고, 이해가 되지 않는 부분도 없었다.

그래서 야구 관련 블로그 글 몇 군데서 코드를 (성급하게) 따라해보려고 했지만 역시나 잘 되지 않았다.

> library(tidyr)
Error in library(tidyr) : there is no package called ‘tidyr’

설치 오류이니 이 경우는

> install.packages(‘tidyr’)
https://www.r-bloggers.com/installing-r-packages/

이렇게 해결이 가능하다. 다만 baseball packages를 설치하기 위해서는 개발자 도구가 먼저 필요한데

> install.packages(“devtools”)

여기서 선행 설치가 필요한 library에서 dependency 오류가 발생해서 일단 원인 추적은 멈추고(아마 환경 설정 오류겠지), R Studio를 설치하기로 했다.

R Studio는 먼저 command line에서 r이 설치가 되어 있어야 해서 $ brew install r로 R을 설치한 후 https://www.rstudio.com/ 에서 desktop free version을 받아 R Stduio까지 설치를 했다. 이번에는 devtools 설치가 성공했다.

이렇게 브라우저에서 실행할 수 있는 환경도 쉽게 검색할 수 있고, R studio server를 이용하면 jupyter에서 R을 실행할 수도 있다고 하니, 코드를 따라해보는 데는 아무 문제가 없었다.

https://rdrr.io/snippets/
http://www.tutorialspoint.com/execute_r_online.php
http://www.compileonline.com/execute_r_online.php
https://www.r-bloggers.com/interactive-r-notebooks-on-powerful-cloud-hardware/

Part II

우선 기본적인 건 할 수 있게 되어 책을 계속 읽어보았다. 첫 번째로 아쉬운 점을 만났는데, 클로저에 대한 정의에 오류가 있었다(p185). 책에서는

함수를 만들고 반환하는 함수

이렇게 설명을 하고 있는데, 원문이 어떻게 되어있는지 모르겠지만, 이건 람다의정의로 보는 게 차라리 맞다. 클로저를 사용해서 함수를 만들고 반환할 수 있는 건 맞지만, 클로저라면 scope에 대한 이야기가 나와야 맞으며, Chapter 10.3에서는 해당 내용을 언급하고는 있지만, 이쪽에 포인트를 두지는 않는다. 보통 javascript쪽에서 클로저를 이렇게 설명하는 경우를 좀 봤는데, 역시 잘못 알고 있어서 그렇다.

https://simple.wikipedia.org/wiki/Closure_(computer_science)

Chapter 11의 기능(functional)에 대한 번역도 좀 어색하다. 역자가 서문에서 언급을 하긴 했지만, 여전히 이런 일종의 과한(?) 번역은 나에겐 어색하게만 느껴졌다. 참고로 이 장에서는 R의 apply에 대해 설명하는데, 역시 일반적인 함수형 프로그래밍에서의 apply처럼 함수에 값을 적용할 수 있게 하는 함수인 걸로 보인다

https://en.wikipedia.org/wiki/Apply

Chapter 12.1.3 느슨함은 lazy evaluation에 대한 이야기일텐데, 그냥 느슨함이라고 쓰면 이해를 제대로 하지 못하는 사람들이 있을 거 같다.

Part III, IV

후반부는 여러가지 깊은 programming 관련 주제를 이야기한다. 이 책이 확실히 R이라는 언어 자체에 대한 책이라는 점을 보여준다. 가끔 커뮤니티를 보면 R이 너무 느리고 대규모 데이터를 처리하기 어렵다고 이야기하는 사람들이 있고, 역자가 그건 R을 잘 몰라서 그렇고, 지원하는 package들이 있다고 하는데, 이 부분이 이 책의 범위를 벗어나는 주제라 볼 수 없어서 아쉬웠다. 고급 기법을 기대한 건 아니고, 그냥 간단한 parallel 실행에 대해 사례 정보만 보여줬으면 더 좋았을 거 같다(지극히 개인적인 아쉬움). 예제를 실행하는 데는 큰 어려움은 없었다.

Chapter 19.4 Rcpp 설탕인데, 역시 syntactic sugar를 설탕이라고 번역하는 부분은 매우 아쉽다.

Rcpp가 Chapter 20. C interface보다 먼저 나온 이유는 Rcpp가 메모리 관리 등 여러가지 측면에서 다 좋기 때문인 걸로 보인다.

> install.packages(‘pryr’)
> library(pryr)
> install.packages(‘inline’)

이 예제는 실패했는데 필요한 건 둘 다 설치한 거 같지만 오류가 발생했고, 원인은 아직 모르겠다.

etc

https://github.com/BillPetti/baseballr

좀 빨리 하긴 했지만, 해보고 싶었던 야구 관련 package를 따라하려고 R Studio에서 설치를 시도했지만 결국 실패했다(꽤 오래 걸림). 아직 R Studio log를 보는 게 불편해서 원인 분석은 못 했는데, 아마도 환경 변수 오류일 가능성이 높을 거 같다.

총평

책 자체는 R programming을 잘 하기 위해 잘 쓰여졌다고 생각한다. 여러가지 깊은 주제들도 대부분 언급을 했기 때문에 더 나은 수준을 가기 위해 필요한 발판이 될 수 있다. 번역 부분은 개인적으로 조금 아쉽지만, 이건 사람에 따라 시각이 다를 수 있으므로, 단정지어 말하긴 어렵다. 전체적으로 볼 때 좋은 책이다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
핸즈온 머신러닝 - 사이킷런과 텐서플로를 활용한 머신러닝, 딥러닝 실무
오렐리앙 제롱 지음, 박해선 옮김 / 한빛미디어 / 2018년 4월
평점 :
구판절판


(다 읽지는 못한 상황)


장점


관점에 따라 다를 수 있지만 이론과 실습이 잘 조화되었다


알고리즘을 예를 들어 설명하고 구현하는데 초점을 맞췄기 때문에 (비교적) 따라가기 쉽다


역자가 예제를 잘 따라갈 수 있게 설명을 잘 해뒀다

https://github.com/rickiepark/handson-ml

물론 요즘 대부분의 프로그래밍 책들이 깃헙을 통해 소스를 공개하고 따라갈 수 있게 하지만, 소스 코드만 올려놓고 설정이나 설치에 대해서는 인색한 경우가 종종 있는데, 이 책의 역자는 그렇지 않았다. 실습을 따라할 수 있는 거의 대부분의 환경을 설명했다


원서의 깃헙은 지금도 활발히 업데이트를 하고 있는데, 내용을 아직 잘 몰라 이해는 못했지만, 최신 경향을 반영하려는 듯 하다

https://github.com/ageron/handson-ml


단점


나의 이해 능력.... -_-;


기타


기억이 맞다면 역자가 다음 블로그에 이 책의 번역에 대한 이야기를 써 뒀는데, 가보니 왠지 글이 사라졌다

https://tensorflow.blog/2017/12/30/review-hands-on-machine-learning-with-scikit-learn-tensorflow/

무슨 이유가 있겠지만, 뭔가 아쉬움


댓글(0) 먼댓글(0) 좋아요(2)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo