프로그래밍 기초와 마크다운 보고서 - 3월23일
Overview
Teaching: 180 min
Exercises: 0 minQuestions
초중등 교육과정에서 코딩을 경험해 보신 분?
소프트웨어와 보고서를 어떻게 통합할 수 있을까?
프로그래밍과 글쓰기의 같은 점과 다른 점은 무엇일까요?
Objectives
재현가능한 보고서 가치
마크다운 기초
R 코드 덩어리(R code chunks), 덩어리 선택옵션(Chunk options), 인라인(Inline) R 코드
기타 출력 포맷
프로그래밍과 글쓰기
- 컴퓨터 과학 언플러그드
- 프로그래밍과 문제해결 - 파이썬, 리보그, 러플
- Code Perspectives – STEM Intros](http://codeperspectives.com/)
- 모두를 위한 파이썬 - 정보교육을 위한 파이썬
- 소프트웨어 카펜트리 버젼 5.3
- 데이터 과학을 위한 저작도구
데이터 분석 보고서
데이터 분석가는 동료 혹은 향후 참고자료로 자신의 작업결과를 문서화하는데 상당량의 보고서를 작성해서 분석과정과 출력결과를 기술한다.
처음 작업을 시작할 때, 온전히 본인 작업을 위해서 R 스크립트를 작성한다. 그리고 나서, 다양한 그래프가 첨부된 분석결과를 기술해서 동료에게 전자우편을 발송한다. 분석결과를 논의하는 과정에서 어느 그래프를 지칭하지에 대해 혼란이 종종 수반된다.
워드나 $\LaTeX$으로 좀더 정형화된 보고서로 옮겨가도, 그림이 올바르게 보이도록 만드는데 상당한 시간을 소비한다. 대부분 페이지 나누기가 문제가 된다.
웹페이지(html 파일)를 생성하게 되면 모든 것이 훨씬 수월해진다. 이유는 하나의 긴 흐름이 되기 때문이다. 따라서, 한 페이지에 맞지 않는 긴 그림도 사용할 수 있게 된다. 스크롤링이 딱맞는 친구다.
문학적 프로그래밍(literate programming)
이상적으로 그런 분석 보고서가 재현가능한 문서가 된다: 만약 오류가 발견되거나, 추가적인 분석주제가 데이터에 추가되면, 다시 재컴파일 하게 되면, 신규 혹은 수정된 결과를 얻게 된다. (반대로, 워드나 한글 등 오피스로 작업하게 되면 그림을 다시 생성하고나서 문서에 붙여넣고 수작업으로 상세결과를 편집해야 한다.)
R에서 문학적 프로그래밍을 구현하는 주된 도구가 knitr다.
knitr는 텍스트와 R 코드가 뒤썩인 문서를 생성할 수 있게 하는 역할을 수행한다.
문서가 knitr
로 처리되면, R 코드가 실행되어 그래프와 분석결과가 문서에 삽입된다.
이런 유형의 아이디어를 문학적 프로그래밍(literate programming)이라고 부른다.
knitr
는 R코드 뿐만 아니라 다양한 프로그래밍 언어를 텍스트와 뒤섞을 수 있도록 하지만,
기본적으로 R 마크다운을 추천한다. R 마크다운은 마크다운과 R코드를 섞어 쓸 수 있도록 한다.
마크다운은 가벼운 마크업 언어로 웹페이지를 생성하는데 사용된다.
R 마크다운 파일 생성하기
RStudio 에서 File → New File → R Markdown 을 클릭하면 다음과 같은 대화상자가 열린다:
기본설정(HTML 출력)된 대로 사용할 수도 있지만, 제목을 줄 수도 있다.
R 마크다운 기본 구성요소
초기 설정된 텍스트 덩어리에 R에 대한 지시사항이 담겨있다:
제목, 저자명, 날짜, html
출력물(다른 말로, 웹페이지)을 생성할지가 포함된다.
---
title: "Initial R Markdown document"
author: "Karl Broman"
date: "April 23, 2015"
output: html_document
---
원하지 않는 경우, 상기 필드를 임의로 삭제할 수 있다. 엄밀히 말해서 인용부호는 상기 경우에 꼭 필요한 것은 아니다. 제목에 콜론(:)이 포함되는 경우 대체로 인용부호가 필요하다.
RStudio에 시작을 도와주도록 예제가 문서에 포함되어 있다. 다음과 같은 R 코드 덩어리가 포함되어 있는 점을 주목한다:
```{r} summary(cars) ```
knitr
로 실행되는 R 코드 덩어리로 R 코드 실행결과로 치환된다.
뒤에서 더 다루게 된다.
또한, 웹주소는 < >
꺾쇠 기호로 담아내고, **Knit**
처럼 별표 두개를 사용하기도 한다.
이것이 전형적인 Markdown 구문의 한 사례가 된다.
마크다운(Markdown)
HTML 코드로 작성하는 대신에 전자우편에서 문서를 작성하는 것처럼 텍스트에 마크업(markup)을 적용해서 웹페이지를 저작하는 시스템이 마크다운이다. 마크업 텍스트는 적절한 HTML코드로 치환되는 과정을 거쳐서 최종 HTML로 변환된다.
지금은 자동생성된 모든 코드를 삭제하고, 마크다운으로 저작을 시작해보자.
별표 두개를 사용해서 굵게(bold)할 수 있는데 **굵게(bold)**
텍스트를 타이핑하면 된다.
밑줄 혹은 별표 한개를 사용해서 이탤릭 도 구현가능한데, _이탤릭_
텍스트를 타이핑하면 된다.
다음과 같이 하이픈 혹은 별표를 적용해서 블릿 기호가 붙은 항목을 생성할 수 있다:
* bold with double-asterisks
* italics with underscores
* code-type font with backticks
혹은 다음과 같이도 가능하다:
- bold with double-asterisks
- italics with underscores
- code-type font with backticks
다음과 같이 웹페이지로 보여지게 된다:
- bold with double-asterisks
- italics with underscores
- code-type font with backticks
숫자를 사용하면 숫자가 붙은 항목도 생성이 가능하다. 원하는만큼 동일한 숫자를 반복해서 적용하면 된다:
1. bold with double-asterisks
1. italics with underscores
1. code-type font with backticks
다음과 같이 보이게 된다.
- bold with double-asterisks
- italics with underscores
- code-type font with backticks
#
기호를 각 라인 첫번째 적용하게 되면 다른 크기를 갖는
섹션 제목을 만들 수 있다:
# 아주 큰 제목(Title)
## 큰 제목(Main section)
### 작은 제목(Sub-section)
#### 아주 작은 제목(Sub-sub section)
좌측 상단에 “Knit HTML” 버튼을 클릭하면 R 마크다운 문서를 HTML 웹페이지로 _컴파일_하게 된다. 바로 옆에 작은 물음표가 있음에 주목한다; 클릭하게 되면 “Markdown Quick Reference” (마크다운 구문) 뿐만 아니라 RStudio IDE에서 R 마크다운 문서도 참고할 수 있다.
도전과제
R 마크다운 문서를 생성한다. 모든 R 코드 덩어리를 삭제하고 마크다운 문서를 작성한다. (제목, 이탤릭 텍스트, 블릿 기호가 붙은 항목 등)
문서를 웹페이지로 변환시킨다.
마크다운 한 걸음 더 들어갑니다.
[text to show](http://the-web-page.com)
처럼 하이퍼링크를 걸 수도 있다.
![caption](http://url/for/file)
처럼 이미지를 삽입할 수도 있다.
F~2~ 처럼 아래 첨자를 F~2
와 같이 넣을 수도 있도, F^2^ 처럼
윗첨자를 F^2^
와 같이 넣을 수도 있다.
수식 작성법은 LaTeX을 참조해서 작성할 수 있는데,
$ $
와 $$ $$
을 사용해서 수식을 넣을 수 있다: $E = mc^2$
.
$$y = \mu + \sum_{i=1}^p \beta_i x_i + \epsilon$$
R 코드 덩어리
마크다운은 흥미롭고 유용하기도 하지만, 실제 진정한 힘은 마크다운을 R 코드 덩어리와 뒤섞어 사용할 때 나온다. R 마크다운으로 말이다. R 마크다운이 처리되면서 R 코드도 실행된다; 그림이 생성되는 경우, 최종 문서에 자동으로 그림이 삽입되어 들어간다.
데이터를 불러오는 R 코드는 다음과 같이 생겼다:
```{r load_data} gapminder <- read.csv("~/Desktop/gapminder.csv") ```
즉, ```{r chunk_name}
와 ```
사이에
R 코드 덩어리를 위치한다.
R 코드 덩어리에 명칭을 부여하는 것이 좋은데 이유는 오류 수정을 유용하게 하고,
그래프가 생성되는 경우 파일명이 R 코드 덩어리에 지정한 명칭이 따라 붙기 때문이다.
도전과제
다음 R 코드를 추가한다.
ggplot2
팩키지 불러오는 코드gapminder
데이터를 불러오는 코드- 그래프를 생성하는 코드
컴파일은 어떻게 되는가?
“Knit HTML” 버튼을 생성하게 되면, knitr 프로그램이 R 마크다운 문서를 처리해서, 일반 마크다운 문서가 생성된다(그림도 포함된다.): R 코드가 실행되면서 입력과 출력 모두에 대해 치환된다; 그림이 생성되는 경우, 그림에 대한 링크도 포함된다.
마크다운과 그림 문서는 pandoc 도구로 처리되어서, 마크다운 파일을 그림이 내장된 HTML 파일로 탈바꿈하게 된다.
덩어리(Chunk) 선택옵션
코드 덩어리가 어떻게 처리되는 방법에 대한 선택옵션이 다수 지원된다.
echo=FALSE
: R 코드가 출력되는 것을 방지results="hide"
: 출력결과물이 문서에 뿌려지지 않도록 방지.eval=FALSE
: 코드는 출력되지만, 평가되어 실행되는 것은 방지.warning=FALSE
,message=FALSE
: 경고와 메시지 출력을 숨김.fig.height
,fig.width
: 인치 단위로 그림 크기 높이와 폭을 지정.
다음과 같이 작성할 수도 있다:
```{r load_libraries, echo=FALSE, message=FALSE} library("dplyr") library("ggplot2") ```
전역 덩어리(chunk) 선택옵션을 사용하여 반복적으로 사용할 R마크다운 선택옵션을 다음과 같이 지정하는 것도 가능하다:
```{r global_options, echo=FALSE} knitr::opts_chunk$set(fig.path="Figs/", message=FALSE, warning=FALSE, echo=FALSE, results="hide", fig.width=11) ```
fig.path
선택옵션은 그림이 저장되는 장소를 지정하는데 사용한다.
/
이 중요한데 이유는 /
을 지정하지 않으면 그림이 Figs
으로 시작하는
파일명으로 표준 저장소에 저장된다.
작업 디렉토리에 R 마크다운 파일이 다수 존재하는 경우,
fig.path
를 사용해서 fig.path="Figs/cleaning-"
, fig.path="Figs/analysis-"
처럼
그림 파일명에 접두어를 달리 지정할 수도 있다.
도전과제
그림 크기를 변경하고, 코드를 출력에서 감추도록, R 코드 덩어리 선택옵션을 설정해 본다.
인라인(Inline) R 코드
보고서의 모든 숫자를 재현가능하게 만들 수 있다.
인라인 코드를 작성할 때 `r
와 `
을 사용한다.
예를 들어, `r round(some_value, 2)`
.
R 코드가 실행되어 코드가 결과 값으로 치환된다.
두줄이상에 걸처 인라인 코드 덩어리가 나눠지도록 작성하지는 말자.
아마도, 조금 큰 코드 덩어리의 경우 include=FALSE
(echo=FALSE
와 results="hide"
두가지 기능을 함께 보유)를 사용해서
연산과 정의를 처리하는 것도 가능하다.
이런 경우에 소수점 자리수에 대해서 2.0
을 원하지만, round(2.03, 1)
코드는 2
가 된다.
R/broman 팩키지에서
myround
함수가
도움이 될 수 있다.
도전과제
인라인 R 코드를 작성해 보자.
기타 출력 선택옵션
R 마크다운 문서를 PDF나 워드 문서로 변환할 수도 있다.
“Knit HTML” 버튼 옆에 작은 삼각형을 클릭하면
드롭다운 메뉴가 나타난다.
혹은 R 마크다운 .Rmd
파일의 헤더부분에 pdf_document
, word_document
으로 설정하면 된다.
Tip: PDF 문서 생성하기
Resources
- Knitr in a knutshell tutorial
- Dynamic Documents with R and knitr (book)
- R Markdown documentation
- R Markdown cheat sheet
- Getting started with R Markdown
- Reproducible Reporting
- The Ecosystem of R Markdown
- Introducing Bookdown
Key Points
초중등 교육과정 코딩을 스펀지처럼 흡수한다.
R 마크다운으로 작성한 보고서와 R로 작성한 소프트웨어를 섞어쓴다.
포맷을 제어하는데 덩어리 선택옵션(chunk options)으로 지정한다.
knitr
팩키지를 사용해서 문서를 PDF를 비롯한 다른 포맷으로 변환시킨다.