Top

R과 Knitr를 활용한 데이터 연동형 문서 만들기 [빅데이터 시대의 효율적인 자료 작성 가이드]

  • 지은이고석범
  • ISBN : 9788960775510
  • 40,000원
  • 2014년 04월 30일 펴냄
  • 페이퍼백 | 612쪽 | 188*250mm
  • 시리즈 : 데이터 과학

책 소개

요약

이 책은 R 언어와 니터(Knitr) 패키지를 사용하여, ‘재현 가능한 연구(reproducible research)’ 방법으로 인쇄물, 웹 페이지, 웹 프리젠테이션, 웹 애플리케이션 등의 다양한 데이터 문서와 자료를 만드는 방법을 소개한다. 이 책에서 설명하는 모든 문서와 자료는 데이터와 다이내믹하게 연동되어 움직이고, 원래의 데이터와 결론에 이르는 과정을 투명하고 일관되게 보여줄 수 있다.

이 책의 특징

■ 데이터에 기반한 다이내믹하고 인터랙티브한 데이터 연동형 문서와 자료를 손쉽게 만들 수 있다.
■ 전문 개발자의 시선이 아닌 평범한 아마추어의 시각으로 접근한다. 누구나 쉽게 따라 할 수 있다.
■ 다양한 R 패키지들을 자연스럽게 접근할 수 있도록 유도한다.
■ 기업형 프로젝트가 아닌 개인의 컴퓨터 사용 패턴에 맞춰 가장 흔하게 사용하는 오피스 프로그램의 기능을 대체할 수 있게 설명한다.
■ 오픈소스 도구를 이용해 설명하므로 추가 비용이 들지 않는다.
■ 하나의 일관된 로직으로 데이터를 분석하고, 다양한 데이터 결과물을 만들 수 있도록 ’One logic, Multi-views‘ 관점으로 작업한 내용을 설명한다.

이 책에서 다루는 내용

■ R 언어의 기초
■ RStudio 사용의 기초
■ 니터(Knitr) 패키지로 R 언어와 마크다운을 하이브리드 시키는 방법
■ 결과물을 엑셀이나 워드프로세서 프로그램에서 읽을 수 있는 형태로 변환시키는 방법
■ slidify와 rCharts 패키지로 재현 가능한 연구 방법으로 웹 슬라이드를 만들고, 다이나믹한 그래프를 넣는 방법
■ 재현 가능한 연구 방법으로 Shiny 웹 프리젠테이션을 만드는 방법
■ 니터 패키지로 R 언어와 레이텍(LaTex)을 하이브리드 시키는 방법과 PDF 형태의 슬라이드를 만드는 방법

▶▶ 예제 파일 다운로드 이 책에서 사용된 예제 코드 파일은 에이콘출판사 사이트 도서정보 페이지저자의 깃허브(GitHub) 사이트에서 내려받을 수 있다.

▶▶ 빅데이터 시대에 누구나 만들 수 있는 역동적인 데이터 연동형 문서
데이터는 어느 시대에나 중요했는데, 최근에는 컴퓨터 과학의 발전으로 말미암아 다룰 수 있는 데이터의 종류가 다양해지고 크기도 매우 커졌다. 그리고 빅데이터라는 단어가 시대의 흐름을 대표하기 시작했다. 이런 시대의 흐름은 매우 큰 것이라서 어떤 식으로든 모든 사람이 영향을 받을 수밖에 없다.

이 책은 이런 빅데이터 시대에 필요한 문서 작성법에 대해 다룬다. 제목만 봐서는 매우 거창할 것 같지만 그렇지는 않다. 데이터 마이닝이나 기계 학습과 같은 거창한 주제가 아니라, 일상 생활 속에서 작성하는 문서 작성에 관련된 것이고, 컴퓨터만 있으면 대부분 추가로 돈을 들이지 않아도 되는 무료 도구들을 가지고 설명할 것이다. 이 책은 문자와 코드를 섞어서 문서를 만드는 방법을 소개한다. 이 방법을 소개하기 전에 논문을 쓰거나 회사에서 보고서를 쓰는 등의 일상의 패턴을 살펴보자. 데이터를 바탕으로 글을 쓰는 작업 과정을 살펴보면 가장 흔한 패턴은 다음과 같다.

  1. 원 데이터를 엑셀 등의 파일로 수집한다.
  2. 엑셀로 계산하고 표를 만든다.
  3. 통계 절차가 필요한 경우에는 SPSS 통계 소프트웨어로 읽어서 통계 분석을 한다. SPSS는 내가 일하는 의료계에서는 아직까지 가장 사용 빈도가 높은 데이터 분석 도구다.
  4. 이렇게 만든 결과물에서 의미 있는 것들을 골라 워드프로세서에서 복사하기 & 붙여넣기 방법으로 가져와 최종 결과물을 만든다.

사용하는 소프트웨어는 다를 수 있겠지만, 비슷한 패턴은 수없이 발견된다. 이것이 뭐 대단한 문제라고 시간을 들여 새로운 방법을 배워야 할 가치가 있느냐고 질문할 수 있을 것이다. 그럭저럭 문제가 없는 것이 사실이고 그렇게도 보인다. 그렇지만 꼬집어 살펴보면 여러 가지 문제가 있다. 이런 문제를 정리해본다면 내 생각에는 효율성과 신뢰성이라는 큰 문제로 나눌 수 있다.

▶ 문서 작성의 효율성
먼저 효율성을 생각해보자. 이미 작업했던 원 데이터에 변화가 생겼다. 데이터가 추가되거나 일부 잘못된 것이 있어서 수정된 경우 등과 같은 일이 생긴다. 그러면 그동안 했던 작업 흐름을 똑같이 반복해야 한다. 시간과 노력이 더 필요할 것이고, 복사하기 & 붙여 넣기 과정에서 오류가 생길 가능성이 높아진다. 나는 컴퓨터를 정식으로 공부하지 않은 순수한 아마추어다. 그래도 컴퓨터 개발자들의 생각과 작업 방식을 매우 흥미롭게 생각한다. 그 중에는 일상과 업무에 적용해 도움을 받을 수 있는 부분이 많다. 예전부터 개발자들은 개발에서 DRYDon’t Repeat Yourself(전체 프로그램에서 정보나 과정은 하나의 장소나 코드군으로 만들어야 한다) 원칙을 지키도록 훈련받아왔다. 이 원칙은 문서를 작성하는 데도 적용할 필요가 있다. 이렇게 하려면 데이터의 변동에 따라서 최종 결과물의 내용이 다이나믹하게 변경되는 시스템이 필요하다. 예를 들어 110명을 대상으로 얻은 엑셀 자료가 있을 때, 논문과 같은 문서에서 다음과 같이 쓸 것이다.

“이 연구에는 110명을 대상으로 조사한 것이다. …”

데이터와 연동되어 다이나믹한 방법으로 문서를 만든다면, 나중에 데이터가 115개로 늘었을 때 자동으로 최종 결과물의 내용이 다음과 같이 바뀌어야 할 것이다.

“이 연구에는 115명을 대상으로 조사한 것이다. …”

이렇게 역동적으로 숫자가 변화되게 하려면 컴퓨터 코드가 필요한데, 나는 R코드를 추천한다. 솔직히 아주 쉽다고는 말할 수 없지만, 그렇다고 그렇게 어려운 일은 아니다. 나 같은 아마추어도 사용할 만큼 충분히 쉽게 배울 수 있는 컴퓨터 언어다. 더욱 중요한 것이 R은 빅데이터 시대로 접어들면서 가장 각광받는 언어가 되고 있는데, 수백 가지나 되는 컴퓨터 언어 중에서 데이터 분석에서만큼은 가장 효율적이기 때문이다. 이 책은 R 언어에 기반한 다이나믹한 문서 작성 방법을 설명한다. 믿기지 않을 만큼 쉽다.

▶ 문서 작성의 신뢰성
다뤄야 하는 데이터가 복잡해지고 커졌다. 문서가 논문이거나 정책을 결정하기 위한 보고서라고 했을 때, 가장 중요한 것은 내용의 신뢰성이다. 의도하지 않더라도 복잡해지고 커지는 데이터를 가지고 작업하다 보면 오류가 생길 수 있다. 이런 오류를 최대한 줄이려면 원 데이터에서 주장하는 최종 결론에 이르기까지의 과정이 공개되고 재검증되는 절차가 필요할 것이다. 이런 시대적인 흐름 때문에 ‘작업 가능한 연구’라는 명칭으로 「네이처」나 「사이언스」 같은 최고 권위의 과학잡지에서 하나의 정책을 세워 이를 지키려는 움직임들이 있다. 이에 관한 포괄적인 논의는 영국의 로얄소사이어티의 정책 보고서를 인터넷에서 찾아서 읽어볼 것을 권한다. 제목으로 구글 등에서 검색하면 쉽게 찾을 수 있다.

또 이런 흐름에 대비해 교육계에서도 변화를 주려는 움직임이 논문(Baumeret al. 2014) 등으로 소개되고 있다. 대학 기초 통계학 과정의 하나로서 이 논문에서 사용했던 방법은 이 책에서 소개하는 방법과 똑같다. 이 방법을 따른다면 앞서 이야기한 다이나믹한 문서 생산은 물론이고, 어떤 자료를 사용해 어떻게 계산했더니 이런 결론이 나왔다고 자신 있게 전부 내놓고 이야기할 수 있다. 굳이 이 책에서 어떻게 신뢰성을 획득할 것인지에 대해서는 강조해 이야기하지 않았다. 다만, 방법을 이해하고 나면 자연히 알게 될 것이다.

▶▶ 코드와 R을 지금 배워야 하는 이유

이 책에서 소개하는 방법도 단점이 없는 것은 아니다. 무엇보다 컴퓨터 언어를 배워야 하는 것이 가장 큰 장애물이다. 이 책에서 소개하는 방법만을 사용하기 위해서 새로운 언어를 배울 독자는 없을 것이다. 그렇지만, 다른 이유에서 이 책이 주로 사용하는 R을 배워야 하는 이유가 있다. 그것은 데이터가 주도하는 시대에서 R이 여러 영역에 걸쳐 데이터 분석 언어로 자리잡고 있기 때문이다. 어차피 배워야 하는 것이라면 배워서 더 유용하게 쓰자는 것이 이 책을 쓴 취지이기도 하다. 나는 이 책에서 소개하는 방법이 넘사벽이라고 생각하지 않는다. 개인적으로 컴퓨터 언어 등에 대한 교육을 체계적으로 받아본 적이 없다. R도 지금부터 3, 4년 전 돈 들이지 않고 쓸 수 있는 통계 패키지가 없을까 하고 찾아 보다 우연히 접하게 되었다. R을 매개로 하여 컴퓨터에 대한 지식을 아주 폭넓게 넓힐 수 있었다. 지금은 이 책의 내용을 누구의 도움도 없이 다룰 수 있는 수준이 되었다. 웹도 좀 만들 줄 알고, 스마트폰 속의 앱이 어떻게 어떻게 개발되는지도 알게 되었다. 그러나 컴퓨터 언어로 뭔가를 만들 줄 안다는 것이 근본적으로 중요한 것은 아니라고 생각한다. 가장 큰 변화는 생각의 방식이 바뀌었다는 것이다. 그렇기 때문에 영국이 2014년을 ‘코드의 해(Year of Code)’로 정해서 소프트웨어 교육을 보강하려고 하는 움직임이 이해가 가고,3 우리나라 정부에서 고등학교 교과과정에 소프트웨어를 정규 과목으로 넣으려고 하는 움직임이 꼭 필요한 것이라는 생각을 하게 된다.

코딩을 너무 어렵게만 보지 말자. 어린 아이들도 충분히 배워서 할 수 있다. 이런 내용에 관심 있는 분은 매우 인기 있는 강연 사이트인 TED 에서 부분을 찾아서 보면 좋을 것 같다.

이 책은 전문개발자가 쓴 책이 아니다. 아마추어로서 철저하게 초심자의 입장에서 쓰려고 했다. 개발자가 썼다면 내용에 좀 더 깊이가 있었겠지만 나는 그런 능력이 없다. 그래서 오히려 새로 시작하는 사람에게는 이런 접근이 도움이 될 수 있다는 생각을 한다. 가볍게 시작하여 앞에서 이야기했던 큰 것을 획득할 수 있기를 기대한다.

이 책의 독자 대상

▶ 보고서를 써야 하는 직장인
일반적으로 직장인이 보고서를 제대로 쓸 수 있는 것은 큰 능력의 하나로 인정 받는다. 매달 반복되는 보고서를 써야 하는 상황에 있다면 이 책에 있는 방법으로 해보길 권한다. 소소하고 일반적인 것들은 하나로 모아서 컴퓨터가 알아서 처리하게 만들면, 개인적인 판단이나 생각할 시간을 더 많이 벌게 될 것이고, 이런 과정에서 업무의 창의성이 높아지고 만족도가 올라갈 것이다. 파워포인트나 키노트가 아니라 웹 브라우저를 가지고, 정지된 그래프가 아니라 일사불란하게 움직이는 그래프를 보여준다면 그만큼 본인의 가치가 상승할 것이다. 다뤄야 하는 데이터가 많은 직장인일수록 이 책에서 더 큰 도움을 받을 것이다.

▶ 학교 선생님
앞으로 학생들이 살아갈 시대는 좋건 싫건 컴퓨터와 함께 할 수밖에 없다. 그런 시대를 대비하여 아이들에게 어떤 교육을 해야 하는지 고민하는 선생님들이라면 이 책의 방법을 배워보기를 감히 권한다. 업무에 효율성을 높일 수 있는 것은 물론이고 사소한 부분이지만 컴퓨터로 일하는 방식을 느껴볼 수 있는 좋은 아이템이라고 생각한다.

▶ 통계를 배우는 대학생
통계학은 어느 학과를 막론하고 교양의 필수 과목으로 채택되어 있는 경우가 많다. 처음 R은 통계학자들이 통계를 배우는 학생들을 위해 만들기 시작했기 때문에, 통계학에 매우 강력한 기능들을 가지고 있다. 더군다나 R은 무료이며, 활용가치가 매우 높은 언어다. 따라서 초심자도 이 책에서 소개하는 방법을 배운다면 앞으로 요긴하게 활용할 수 있을 것이라 생각해서 적극 추천한다.

▶ 데이터를 가지고 논문을 쓰는 학자
학자들은 데이터를 가지고 논문을 많이 쓴다. 앞에서도 잠깐 설명했지만 기존의 방법으론 효율성이 떨어진다. 그리고 앞으로 더 많은 학술지나 학술 단체들, 혹은 그 지식의 소비자들이 데이터와 분석의 신뢰성을 요구할 가능성은 점점 더 커질 것이다. 이런 측면에서 이 책에서 소개하는 방법은 도움이 될 것이다. 요구하는 데이터, 분석 과정을 모두 투명하게 정리하여 보여줄 수 있다. 학자분들이 가끔 사소한 질문을 하곤 한다. 데이터를 워드프로세서로 바꿀 수 있는지 묻는데, 이 일은 R이 할 수 있는 것 중에 극히 일부분이다. 영국 로얄소사이어티의 보고서는 「Science As an Open Enterprise」라는 다소 도발적인 제목을 달고 있다. 다뤄야 하는 데이터가 이전보다 훨씬 많아지고, 데이터 자체와 데이터 분석 과정에 대한 투명성을 앞으로 점점 더 많이 요구 받을 것이다. 그런 열린 세상을 준비하기 위해서는 이에 대한 이해와 준비가 필요하다고 생각한다.

▶ 데이터 사이언티스트
빅데이터 시대가 되면서 데이터 사이언티스트가 새로운 직군으로 부상하고 있다. 이들은 통계적 지식과 컴퓨터 지식이 충만하지만, 한편 너른 시야를 갖지 못할 경우도 많다. 그래서 지식과 기술은 뛰어난데, 정작 중요한 고객을 놓치는 우를 범하기도 한다. 데이터 사이언티스트들은 자신들이 분석한 결과를 소비할 고객들을 항상 생각해야 한다. 따라서 이 책은 결과를 고객들에게 어떤 형태로 전달해야 할지를 고민하는 데이터 사이언티스트들에게 도움이 될 것이다. 그게 종이로 인쇄된 문서일 수도 있고, 웹 페이지가 될 수도 있으며, 웹 애플리케이션이 될 수도 있다. 이 책은 결과를 어떻게 고객에게 전달할지를 다룬다.

▶ 프로그래머
솔직하게 이 책에서 소개하는 방법을 익히고 난 후, 나는 오피스 프로그램을 더 이상 사용하지 않게 되었다. 유연하지도 않으면서, 수많은 복사하기 & 붙여 넣기를 유도하는 데 지쳤다. 상업용 소프트웨어들이 가지는 사용자 직관성은 칭찬받아 마땅할 것인데, 그 유연하지 못함은 이제 견디기가 어렵다. 바라건대 워드프로세서에서 스프레드시트가 돌아가는 프로그램이 있었으면 한다. 프로그램도 완전한 오픈소스를 내놓을 수 없다고 할지라도 유연하게 구성하여, 데이터가 주도하는 시대에 걸맞도록 사용하기 편하게 만들어 주었으면 하는 것이 소비자의 한 사람으로서 가져보는 한 가지 바람이다.

▶ R을 배우기를 고민하는 독자
R은 빅데이터 시대에 들어서면서 가장 중요한 언어의 하나로 각광받고 있고, 학계나 산업계에 흔히 사용되고 있다. 따라서 배우지 않을 이유가 전혀 없다. 더군다나 데이터를 다루는 분야에서 R을 빼놓고는 넘어갈 수 없는 상황이 되어 가고 있다. 이 책에서는 R을 배우면 이런 것들도 가능하겠다는 동기를 부여하고 싶었다.

이 책의 구성

이 책은 문자와 코드를 결합해 작업했을 때 얻을 수 있는 시너지를 설명한다. 여기서 문자란 자신의 생각을 글로 옮기는 텍스트를 의미하고, 코드는 데이터 분석을 위한 코드를 말한다. 이 책은 문자와 코드를 하나의 파일에서 작업할 수 있게 해주는 니터(knitr)라는 R 패키지를 사용해 다이나믹하게 다양한 포맷의 문서를 만드는 방법을 다룬다. 이 책에서 문서란 단순히 종이로 인쇄된 것만을 의미하지 않고 좀 더 광범위하게 정보를 전달하는 매체와 같이 광범위한 의미를 가진 단어로 사용한다.

R 언어를 처음 접하는 독자를 위해 R 언어에 대한 기초적인 측면을 소개했고, R 언어로 큰 데이터를 어떻게 효율적으로 다룰 수 있는지에 대한 사례도 넣었다. 이 책에서 소개하는 방법을 사용하려면 R 언어 이외에 마크다운(markdown)이나 레이텍(LaTex) 같은 마크업 언어도 알아야 한다. 이 책에서는 이들 마크업 언어들을 쉽게 접근할 수 있도록 초보자의 입장에서 소개했기 때문에 쉽게 배우고 널리 활용할 수 있도록 구성했다.

이 책에서는 먼저 R + R 마크다운 하이브리드 방법을 설명하고, 차차 R + 레이텍 하이브리드 방법을 소개할 것이다. 이런 순서를 잡은 데에는 몇 가지 이유가 있다. 마크다운은 웹을 만드는 언어로서 HTML을 간편하게 사용하기 위한 언어다. 즉, 마크다운은 배우기 쉽고, 시간이 갈수록 웹 문서가 점점 더 중요해지고 있기 때문이다. R과 마크다운을 결합해 흔히 보는 웹 페이지 문서뿐만 아니라 웹 프리젠테이션, 웹 애플리케이션 등을 구현하는 방법을 설명한다. 마지막에는 레이텍 조판 언어와 R을 결합해 자료를 생성하는 방법을 다룬다. 레이텍은 유연성이 매우 높지만 배우기가 까다롭다. 그래도 웹 문서가 가지지 못한 장점을 가진 PDF 문서를 만들고, 논문이나 책과 같은 형식의 결과물을 얻을 수 있는 큰 장점이 있다.

저자/역자 소개

지은이의 말

R을 접할 수 있었던 것은 정말 행운이었다. 무료로 사용할 수 있는 통계 패키지를 찾다가 우연히 R을 발견했다. 처음 R 콘솔을 실행하고 간단한 소개가 나온 후 프롬프트로 끝나는 화면을 보았을 때의 황당함을 잊을 수 없다. 도대체 무엇을 어떻게 하라는 것인지 정말 당황스러웠다. 이런 도구를 두고 왜 그렇게 많은 외국의 사용자가 열광하는지 이해할 수 없었다.

그래도 통계에는 쓸만하다고 해서 CRAN 사이트에 올라와 있는 여러 매뉴얼을 들춰보면서 R을 공부하기 시작했다. R 사용설명서와 R 사용자들의 블로그를 모아놓은 R-bloggers.com 사이트에서 R로 구현한 여러 사례들을 접하면서, 오픈소스의 세계와 컴퓨터 코딩의 세계를 접할 수 있었다. R을 사용하는 많은 사람이 학계에 있어서인지 그들의 글을 읽어보면 통계학적인 지식뿐만 아니라 컴퓨터 세계에 대한 이해의 틀을 가져야 한다고 조언하는 내용이 많았으며, 실제로 그런 내용을 많이 소개하고 있었다. 대표적인 글이 R의 고향인 뉴질랜드 오클랜드 대학 통계학과 교수인 폴 머렌이 쓴 『Introduction to data technologies』(Chapman & Hall/CRC, 2009)다. 이렇게 나는 컴퓨터에 대해 전혀 몰랐던 상태에서 R을 매개로 코딩을 맛보고, C 언어, 레이텍, 웹 등으로 공부 범위를 점차 넓힐 수 있었다.

이 책은 이와 같은 과정을 거쳐 완성된 결정체다. 책에서 다루는 내용은 외국에서는 재현 가능한 연구(reproducible research) 개념으로 통한다. R 언어로 이것을 구현하는 방법으로 처음 사용했던 것은 스위브(Sweave) 방법이었다. 당시는 레이텍을 충분히 이해하지 못했던 때라 주로 Lyx로 문서를 만들어보곤 했는데 쉽지 않아 포기할 수밖에 없었다. 그때도 제대로 사용해보진 못했지만, 활용만 잘 한다면 일상 생활에서 보고서 등을 만들 때 매우 좋을 것 같다는 생각을 했다. 지금은 그 방법을 쉽게 해주는 모듈이 포함되어 예전보다 쉽게 사용할 수 있다.

‘재현 가능한 연구’ 방법은 그 이후로 항상 마음에 두고 있었는데, 스위브 방법을 개선한 니터(knitr) 패키지가 나왔을 때 정말 환호했다. 곧바로 익혔고, 업무에도 활용했다. 이때까지만 해도 이 내용을 책으로 쓸 생각은 없었다. 그러던 중 R스튜디오(RStudio)라는 R 개발 환경이 소개되고 여기에 니터의 기능이 통합되었을 때 R을 사용하는 것은 훨씬 쉬워졌고, 이 방법을 소개하는 책을 쓰면 좋겠다는 생각이 들었다. 또한 최근 빅데이터라는 단어를 일상에서 자주 접하게 되고, 국내외 전문가들이 빅데이터 처리에 R이 굉장히 유용하다는 평을 많이 하고 있기도 했다. 하지만, 사실 도전하는 데는 많은 용기가 필요했다.

의사의 입장에서 보면 이 책에서 다룰 내용이 관련 전문가의 영역을 건드리는 것 같았기 때문이다. 그렇지만, ‘코딩은 누구나 기본 소양으로 배우고 이것을 활용할 수 있도록 해야 한다’는 주장들과 예전 독서모임에서 만났던 한국전자통신연구소의 박문호 공학박사님이 뇌 과학에 대한 책을 출간해서 큰 반향을 일으켰던 사실을 떠올리며 용기를 내어 이 책을 집필하기로 결심했다.

처음 집필하는 것이라, 책의 내용이 독자들에게 어떻게 다가갈지 잘 가늠할 수 없지만 다음과 같은 점을 부각하려고 노력했다.

■ 가장 먼저 코드와 텍스트를 혼합하는 ‘재현 가능한 연구’ 방법의 효율성과 투명성을 강조하고 싶었다. 그렇지만, 과학 논문처럼 이야기하지는 않고, 초보자도 이해하기 쉽게 가급적 실용적인 측면을 다루려 노력했다.
■ 전체 작업에서 데이터를 다루는 논리는 코드로 정리하고, 이 하나의 논리를 통해서 다양한 종류의 문서를 만들 수 있는 방법을 모색했다. 인쇄용 문서, 평범한 웹 페이지, 웹 애플리케이션, 웹 프리젠테이션 등 다양한 문서를 만들 수 있는 방법을 제시하고자 했다. 다양하게 제시되지만 데이터와 관련된 논리는 하나다.
■ R이 여러 영역에서 사용될 수 있겠지만, 이 책에서는 실용적인 관점에서 실생활에서 가장 많이 사용되는 오피스 프로그램을 모델로 삼았다. 워드 프로세서로 문서를 만드는 것, 스프레드시트로 계산을 하는 것, 파워포인트나 키노트 등으로 프리젠테이션을 만드는 것을 모델로 삼아 이것들보다 더 제대로 컴퓨터를 활용해보는 모델을 제시하고 싶었다.
■ 코드를 배우는 것은 그야말로 첫 학습곡선(learning curve)이 가파르다고 느낄 수 있을 것이다. 그러나 이런 과정을 거치고 나면 컴퓨터에 대한 이해를 높이고, 컴퓨터를 소비적으로 사용한다기보다는 자신의 생각을 창의적으로 발휘하면서 생산적으로 이용할 수 있다. 이 책이 그런 면에서 하나의 본보기가 되었으면 한다.
■ 이 책에서 소개하는 여러 내용이 통계학, 데이터사이언티스트, 인포그래픽스 등의 전문가들에게도 도움이 될 수 있을 것이다. 관련 내용을 직접 다루지는 않았지만, 뉴욕타임즈 인포그래픽스 전문가들이 작품을 만들 때 사용하는 기초 기술들을 포함시켰다. 그만큼 R 커뮤니티에서 뜨겁게 논의되는 부분들을 포함시키려고 했다.
■ 이 책에서 소개하는 모든 도구는 오픈소스다. 그들의 철학을 존중하고 감사의 말씀을 전한다. 훌륭한 상업용 소프트웨어도 좋지만, 오픈소스만의 무시할 수 없는 세계가 있다. 이 책을 통해 오픈소스 도구를 사용해도 재미있는 작업을 할 수 있음을 보여주고 싶었다.

마지막으로 병원 식구들에게 감사의 말씀을 드린다. 대한민국을 넘어 세계에서 통할 수 있는 병원을 만들고자 열정적으로 매달리는 임직원들에게 언제나 감동을 받는다. 그리고 젊고 부족한 원장을 존중해주고, 그 세계를 이해해주고 지지해주는 임직원들에게 항상 고마움을 느낀다. 이 책은 내 상상 속에서 시작된 책이 아니며, 현장에서 관찰을 토대로 필요한 부분들을 고민하면서 시작된 것이기 때문에, 작은 결과이지만 이 책은 나만의 책이 아니라 우리 보바스기념 병원의 책이다.

저자 소개

고석범

경기도 성남시에 있는 노인 요양과 재활 서비스를 주로 제공하는 보바스기념 병원에서 근무한다. 가톨릭대학교 의과대학을 졸업하고, 같은 대학병원에서 신경과 전문의를 수료했다. 현재 병원장으로 글로벌 환경에서 경쟁할 수 있는 병원을 만드는 것을 항상 고민한다. 그 과정에서 컴퓨터가 매우 중요하기 때문에 ‘코딩을 모르는 것은 21세기 문맹이다’라고 주장하며 모든 임직원이 관심을 가질 것을 항상 주문한다. 에이콘출판사에서 출간한 『R과 Shiny 패키지를 활용한 웹 애플리케이션 개발』(2014)을 번역했다.

▶ 보바스기념 병원 소개 경기도 성남시 분당에 있는 보바스기념 병원(http://ibobath.com)은 뇌신경재활치료, 노인요양, 말기 암환자 호스피스 등의 서비스를 제공하는 540병상 규모의 요양병원이다. 같은 계열의 헤리티지 시니어타운(http://www.theheritage.co.kr)과 헤리티지 너싱홈(http://www.heritagenf.co.kr)과 같은 단지에 있으며, 이들 시설과 더불어 연속케어형 노인복합센터의 한 축을 담당하며 선진국형 토탈헬스케어를 지향한다. 최근에는 병원 해외진출과 해외환자 유치 등 글로벌 의료사업에 힘쓰고 있다.

목차

목차

  • 1장 문자와 코드의 혼합
  • 1.1 문자와 코드를 혼합하는 방법의 역사
  • 1.2 니터 사용 방법의 기초
  • 1.3 전체 윤곽 설정
  • 1.4 데이터와 얻고자 하는 결과물
  • 1.5 하나의 로직, 다양한 결과물
    • 1.5.1 사례 1: R + 마크다운으로 만드는 웹 페이지
  • 1.5.2 사례 2: 인터랙션 기능을 가진 표
  • 1.5.3 사례 3: 웹 프리젠테이션
  • 1.5.4 사례 4: slidify로 만드는 웹 프리젠테이션
  • 1.5.5 사례 5: 인터랙티브 그래프가 들어간 웹 페이지
  • 1.5.6 사례 6: 웹 애플리케이션
  • 1.5.7 사례 7: PDF 문서
  • 1.5.8 사례 8: PDF 프리젠테이션
  • 1.5.9 사례 9: 오피스 문서로 전환
  • 1.6 다이나믹하게 문서 생성
  • 1.7 계산 과정의 투명성
  • 1.8 정리
  • 2장 필요한 오픈소스 프로그램 설치
  • 2.1 R 설치와 환경 설정
    • 2.1.1 R 스크립트
    • 2.1.2 R 그래픽 창
    • 2.1.3 R GUI 재설정
    • 2.1.4 패키지 관리
    • 2.1.5 R 콘솔 사용법
    • 2.1.6 Help 메뉴에 있는 내용들
    • 2.1.7 R의 도움말 기능
    • 2.1.8 R 세션에 대한 정보
  • 2.2 R스튜디오 설치
    • 2.2.1 R스튜디오
    • 2.2.2 R스튜디오의 작업 환경 설정
  • 2.3 R스튜디오에서 R 코드 실행
  • 2.4 R스튜디오 소스 편집창
  • 2.5 R스튜디오에서 니터를 사용하기 위한 설정
  • 2.6 R스튜디오의 R 패키지 관리와 관련 도움말
    • 2.6.1 패키지 관리
    • 2.6.2 패키지에 있는 자료 활용
  • 2.7 프로젝트 생성 후 작업
    • 2.7.1 프로젝트의 의미
  • 2.7.2 R스튜디오 프로젝트 이용
  • 2.8 깃을 이용한 문서 작업 과정 기록
    • 2.8.1 버전 관리 시스템 깃 소개와 설치
    • 2.8.2 R스튜디오에서 깃의 사용
    • 2.8.3 깃 관련 정보
  • 2.9 이 책에서 사용된 여러 도구들
  • 2.10 도구 사용에서 고려할 점
  • 3장 R 언어의 기초
  • 3.1 값, 표현식, 기본 데이터 타입, 할당
  • 3.2 데이터 구조
    • 3.2.1 벡터
    • 3.2.2 벡터의 부분 집합 추출
    • 3.2.3 값의 수정과 삭제
    • 3.2.4 정렬
    • 3.2.5 데이터 프레임
    • 3.2.6 팩터
    • 3.2.7 테이블
    • 3.2.8 결측값
    • 3.2.9 날짜와 시간
  • 3.3 정리
  • 4장 R로 데이터 조작
  • 4.1 정리된 데이터와 정리되지 않은 데이터
  • 4.2 reshape 패키지를 이용한 데이터셋 폼 변환
    • 4.2.1 melt( ) 함수와 cast( ) 함수
    • 4.2.2 데이터 정리와 보조 함수
  • 4.3 plyr 패키지를 사용해 데이터 조작
    • 4.3.1 Split하는 방법
    • 4.3.2 apply 함수
    • 4.3.3 plyr 패키지를 사용한 Split-Apply-Combine 전략
  • 4.4 두 데이터 프레임의 결합
  • 4.5 dplyr 패키지
    • 4.5.1 큰 데이터를 손쉽게 출력
    • 4.5.2 데이터를 다루는 데 기본이 되는 5가지 함수
    • 4.5.3 데이터를 조건에 맞게 그룹으로 분할
    • 4.5.4 함수들의 체인
    • 4.5.5 윈도우 함수들과 다른 기능
  • 5장 문자와 코드가 결합한 시너지 효과
  • 5.1 마크다운, R 마크다운, R스튜디오
  • 5.2 마크다운 문법
    • 5.2.1 장절의 구분
    • 5.2.2 단락
    • 5.2.3 목록
    • 5.2.4 의도적인 줄 바꿈
    • 5.2.5 강조
    • 5.2.6 인용 문단
    • 5.2.7 컴퓨터 코드
    • 5.2.8 수평선
    • 5.2.9 그림 삽입
    • 5.2.10 링크
    • 5.2.11 수식
    • 5.2.12 표 생성
    • 5.2.13 하나의 파일에서 HTML과 마크다운을 같이 사용
  • 5.3 R과 R 마크다운 하이브리드
  • 5.4 스타일 커스터마이징
    • 5.4.1 R스튜디오가 사용하는 디폴트 스타일과 이것을 바꾸는 방법
    • 5.4.2 커스터마이징의 중심: markdownToHTML( )
    • 5.4.3 knitrBootstrap 패키지를 이용한 스타일링
    • 5.4.4 워드프로세서 파일 등으로 변환
  • 5.5 프로젝트, 깃의 적극적인 활용
  • 6장 문자와 코드를 엮는 뜨개질: 니터 패키지
  • 6.1 청크 옵션을 설정하는 일반적인 방법
  • 6.2 cache, eval, include, label 옵션
    • 6.2.1 이전에 수행한 계산을 다시 하지 않게 하기: cache
    • 6.2.2 코드 청크를 실행시킬지 여부: eval
    • 6.2.3 다음 단계로 코드 청크의 결과를 보낼지 여부 결정: include
    • 6.2.4 코드 청크 이름: label
  • 6.3 코드 청크의 출력물과 옵션
    • 6.3.1 소스코드 옵션
    • 6.3.2 소스코드를 출력할지 결정: echo-logical이나 numeric
    • 6.3.3 출력하는 코드를 보기 좋게 할 방법 결정
  • 6.4 코드 청크의 텍스트 출력을 조절하는 옵션
    • 6.4.1 출력물 앞에 주석 기호를 붙일지 여부: comment
    • 6.4.2 결과 텍스트를 보낼 방법 결정: results
    • 6.4.3 message, warning, error 출력을 조절하는 옵션
  • 6.5 표 만드는 법
    • 6.5.1 정적인 표
    • 6.5.2 동적인 표
  • 6.6 옵션들을 묶어서 관리
    • 6.6.1 opts_chunk 객체에 글로벌 옵션 설정
    • 6.6.2 opts_template 객체 사용
  • 6.7 니터 패키지 옵션
  • 6.8 훅을 이용한 커스터마이징
    • 6.8.1 훅을 저장하는 객체
  • 6.8.2 청크 훅
  • 7장 그래프
  • 7.1 R 그래픽
    • 7.1.1 R 그래픽의 개요
    • 7.1.2 그래픽 디바이스, 전통적 그래픽, 그리드 그래픽
  • 7.2 그래프의 생성과 출력 과정
    • 7.2.1 코드 청크에 의한 그래프의 생성
  • 7.3 그래프의 생성과 저장을 조절하는 옵션
    • 7.3.1 저장소의 지정: fig.path-character
    • 7.3.2 그래픽 디바이스 설정: dev-character
    • 7.3.3 그래프의 크기 조절
    • 7.3.4 그래픽 디바이스를 기준으로 크기 결정
    • 7.3.5 출력물을 기준으로 그래프 크기 결정
    • 7.3.6 한 코드 청크에서 여러 그래프를 저장하는 방법
    • 7.3.7 복수의 그래프에 다른 옵션 값 설정
  • 7.4 그래프의 배치를 조절하는 옵션
    • 7.4.1 좌우 정렬
    • 7.4.2 코드와 그래프의 상대적 위치
    • 7.4.3 복수의 그래프 레이아웃 설정
    • 7.4.4 gridExtra 패키지를 이용한 그리프 그래프 레이아웃 설정
  • 7.5 캡션과 레이블
  • 7.6 그래프에 한글 삽입
    • 7.6.1 일반적인 R 콘솔에서 한글이 포함된 그래프
    • 7.6.2 extrafont 패키지
    • 7.6.3 니터 방식에서의 그래프 한글 식자
  • 8장 참고문헌 관리
  • 8.1 참고문헌 관리의 개요
  • 8.2 빕텍과 R
  • 8.3 R 패키지에 대한 bibentry
  • 8.4 빕텍 데이터베이스를 만드는 다양한 방법
    • 8.4.1 knitcitations 패키지로 doi를 이용해 서지 정보 읽기
  • 8.5 자료에 참고문헌 정보 삽입
    • 8.5.1 R + 마크다운 하이브리드 방법에서 참고문헌 삽입
  • 9장 오피스 프로그램과 함께 사용
  • 9.1 엑셀과 R
    • 9.1.1 엑셀로 데이터를 정리할 때 주의할 점
    • 9.1.2 CSV 파일을 이용해 엑셀 데이터 읽기
    • 9.1.3 XLConnect 패키지 사용
    • 9.1.4 XLConnect 패키지에서 사용되는 개념
    • 9.1.5 엑셀 자료 읽기
    • 9.1.6 워크북을 만들지 않고 직접 워크시트 읽기
    • 9.1.7 R 객체를 엑셀 파일로 저장
    • 9.1.8 이름 상자에 그래프 삽입
  • 9.2 워드프로세서에서 읽을 수 있는 포맷으로 변환
    • 9.2.1 팬독으로 md 파일로 docx 파일 생성
  • 9.3 옵션: R + 팬독 하이브리드로 만드는 워드프로세서 파일
    • 9.3.1 기본 개념
    • 9.3.2 니터 패키지의 pandoc( ) 함수
    • 9.3.3 R + 팬독 하이브리드로 문서 제작
    • 9.3.4 두 번째 예제
    • 9.3.5 pandoc( ) 함수의 config 옵션과 Pandoc 옵션을 지정하는 방법
  • 9.4 제대로 변환되지 않을 때 고려할 사항
    • 9.4.1 마크다운 파일을 팬독을 사용해 다른 파일로 변환할 때 표 문제
    • 9.4.2 그래프
  • 10장 웹 프리젠테이션과 다이나믹 그래프
  • 10.1 웹 프리젠테이션 만들기: slidify 패키지
    • 10.1.1 slidify 패키지의 설치와 로딩
    • 10.1.2 웹 프리젠테이션 기본 골격 제작
    • 10.1.3 index.Rmd 편집 방법
    • 10.1.4 slidify 패키지의 원리
    • 10.1.5 template
    • 10.1.6 데이터
    • 10.1.7 YAML 형식의 역할
    • 10.1.8 템플릿과 데이터, 결합
    • 10.1.9 slidify에 사용되는 웹 프리젠테이션 프레임워크
  • 10.2 레이아웃
    • 10.2.1 레이아웃 정의 파일
    • 10.2.2 특정 레이아웃 선택
    • 10.2.3 사용자 레이아웃 제작
    • 10.2.4 레이아웃 블록과 인헤리턴스
    • 10.2.5 slidify를 이용해 일반적인 웹 페이지 제작
  • 10.3 다이나믹 그래프: rCharts 패키지
    • 10.3.1 데이터 비쥬얼리제이션을 위한 자바스크립트 라이브러리
    • 10.3.2 일반 웹 페이지에 rCharts를 사용해 인터랙티브 그래프 제작
    • 10.3.3 웹 프리젠테이션에 인터랙티브 그래프 삽입
    • 10.3.4 rCharts 패키지
  • 10.4 R스튜디오로 만드는 웹 프리젠테이션
    • 10.4.1 시작
    • 10.4.2 슬라이드 만들기와 내용 입력
    • 10.4.3 화면 전환 등 프리젠테이션 효과 반영
    • 10.4.4 프리젠테이션 실행
    • 10.4.5 프리젠테이션 테마 설정
    • 10.4.6 R 프리젠테이션에 인터랙티브 그래프 삽입
  • 11장 웹 애플리케이션으로 소통
  • 11.1 기본 폴더 구조와 앱의 실행, Shiny 앱의 작동 방식
  • 11.2 ui.R과 server.R의 기본 틀
    • 11.2.1 ui.R의 기본 틀
    • 11.2.2 server.R의 기본 틀
  • 11.3 shiny 애플리케이션의 개괄적 이해
  • 11.4 반응성 프로그램의 기초: Reactivity
  • 11.5 사용자 인터페이스
    • 11.5.1 입력: sidebarPanel( )
    • 11.5.2 결과 출력: mainPanel( )
  • 11.6 반응성 다시 보기
    • 11.6.1 객체의 사용 범위
    • 11.6.2 반응성 표현식
    • 11.6.3 반응성 프로그래밍 모델
    • 11.6.4 반응성의 조절
  • 11.7 DataTables 라이브러리를 사용해 데이터 출력
  • 11.8 주의할 점
  • 11.9 일반적인 HTML로 shiny 인터페이스 생성
  • 11.10 slidify와 rCharts를 같이 사용
    • 11.10.1 slidify 결과물에 shiny 애플리케이션 추가
    • 11.10.2 slidify 웹 프리젠테이션에 shiny 앱 추가
    • 11.10.3 rCharts를 포함하는 shiny 앱 생성
  • 11.11 정리
  • 12장 장롱 속 오래된 진주, 레이텍 마크업
  • 12.1 레이텍의 소개와 설치
  • 12.2 레이텍 처음 사용
    • 12.2.1 처음 사용자에게 유용한 문서
    • 12.2.2 문서 제작
  • 12.3 레이텍의 기본
    • 12.3.1 레이텍 명령어
    • 12.3.2 문서의 기본 골격
    • 12.3.3 제목, 저자명, 날짜 지정과 출력
    • 12.3.4 패키지 사용: \usepackage 명령
    • 12.3.5 장절의 구분
    • 12.3.6 차례
    • 12.3.7 공백의 처리
  • 12.3.8 단락
    • 12.3.9 강제 줄바꿈
    • 12.3.10 특별한 문자
    • 12.3.11 주석
    • 12.3.12 페이지 스타일
  • 12.4 한글 사용과 폰트
    • 12.4.1 텍 엔진, 한글 패키지, 시스템 폰트
    • 12.4.2 문서에서 폰트를 사용하는 방법
    • 12.4.3 폰트 크기
  • 12.5 상호 참조 시스템: Cross References
  • 12.6 hyperref 패키지를 사용해 하이퍼링크 강화
  • 12.7 정리
  • 13장 레이텍 마크업과 R 코드 결합
  • 13.1 R + 레이텍 하이브리드 작업 환경 설정
  • 13.2 R + 레이텍 하이브리드 방법에 의한 문서 생성 과정
  • 13.3 R + 레이텍 하이브리드에서의 표 제작
    • 13.3.1 레이텍에서의 표 8
    • 13.3.2 R + 레이텍 하이브리드 방법에서 표 제작
  • 13.4 R + 레이텍 하이브리드 방법에서의 그래프
  • 14장 PDF 포맷으로 된 프리젠테이션 제작
  • 14.1 beamer PDF 프리젠테이션 제작
  • 14.2 프레임 환경
    • 14.2.1 프레임의 제목과 부제목
    • 14.2.2 프레임 환경의 옵션
    • 14.2.3 하나의 프레임 안에 두 개 이상의 열 배치
  • 14.3 프리젠테이션의 동적인 효과: 오버레이
    • 14.3.1 오버레이 명세
    • 14.3.2 \pause 명령 사용
    • 14.3.3 세밀한 오버레이 명세 조정
  • 14.4 beamer 테마
    • 14.4.1 테마 정하기 예제
  • 14.5 beamer에서의 R + 레이텍 하이브리드
  • 부록 참고문헌
  • 도서 오류 신고

    도서 오류 신고

    에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

    오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

    (예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

    정오표

    정오표

    [ 2014. 05. 16]
    [p66 souce() → source()]

    [2014. 06. 05]
    [p100 6행 작업한 결과들을 찾아서 헤매보기 전가지는 → 헤매보기 전까지는]

    [2014. 06. 09]
    p419 7행 " ui.R 파일는 사용자..." → "ui.R 파일은 사용자.." 는 -> 은 으로

    p.348의 9행-12행의 예제문 코드 오류

    <변경 변경> "' r fig.align='center' x<- rnorm(1000) hist(x) "'

    <변경 변경> ```{r fig.align = 'center'} x<- rnorm(1000) hist(x)

    [2014. 7. 25]
    P.29 아래에서 15번째 행 URL 주소 오타
    http://www.aco'nr'pub.co.kr/book/r-knitr -> http://www.aco'rn'pub.co.kr/book/r-knitr

    [2014. 8. 18]
    P.32 3번째 행 URL 주소 오타
    http://www.aco'nr'pub.co.kr/book/r-knitr -> http://www.aco'rn'pub.co.kr/book/r-knitr

    2015-04-21

    p148-24행
    duations ⇒ durations

    2015-04-27

    p234 20~21행

    <현재>

    a <- rnorm(1000, col='orange' hist(a)

    <변경>

    a <- rnorm(1000) hist(a, col='orange')