Chapter 2 준비1
2.1 기본 개념
2.1.1 컴퓨터
컴퓨터는 범용계산기계다. ’범용’이란 수행할 수 있는 과제가 특정 영역에 국한되지 않는다는 의미다. 즉, 컴퓨터는 인간처럼 모든 영역의 과제를 수행할 수 있다. 컴퓨터는 인간과 달리 수행해야 하는 과제를 인간이 지정해야 한다. 인간은 해결해야 하는 문제를 스스로 설정한다.
컴퓨터는 하드웨어와 소프트웨어로 이뤄져 있다.
하드웨어 중앙처리장치(CPU), 저장장치, 입출력기기, 통신장치 등으로 이뤄져 있다.
2.1.1.1 하드웨어
범용계산기계(컴퓨터)를 작동하도록 하는 기계부품이다.
- 중앙처리장치: 과제 수행에 필요한 계산 수행
- 저장장치: 계산에 필요한 자료를 임시로 저장하는 내장메모리와 자료를 장기간 저장하는 외부저장장치로 구분한다. 내장메모리는 과제 수행에 필요한 자료를 올려 놓는 작업대에 해당한다. HDD 등 외부저장창치는 자료를 장기간 저장하는 일종의 창고로서 도서관의 서고에 해당한다.
- 입출력기기: 키보드 마우스 모니터 등 입력과 출력을 처리하는 기기다.
- 통신장치: 인터넷 등에 연결하는 기기
2.1.1.2 소프트웨어
범용계산기계(컴퓨터)의 작동에 필요한 신호체계다. 알고리듬과 자료(data)구조로 이뤄져 있다.
알고리듬(algorithm): 문제를 푸는 방도. 기계가 수행해야 할 특정 과제를 순서대로 알려주는 구체적인 지시의 집합이다. 알고리즘이라고도 하지만, 알고리듬이 더 정확한 표현이다. algorism은 페르시아의 수학자 알-콰리즈미의 이름에서 유래한 용어로서 ’숫자를 이용한 연산’이란 의미다.
자료구조: 데이터를 조직하는 특정한 방법. 예를 들어, 벡터(vector)는 자료의 값(value)을 나열한 자료구조고, 데이터프레임(data frame)은 자료의 값을 행(row)과 열(column)의 테이블 구조에 저장하는 자료구조다.
2.1.1.3 프로그래밍 언어
알고리듬을 표현하는 방식. 컴퓨터언어라고도 한다. 기계어, C, 자바, 파이썬, R 등이 있다. 프로그래밍은 알고리듬대로 소프트웨어를 만드는 작업이다.
- 기계어: 컴퓨터가 직접적으로 이해할 수 있는 언어.
- 가장 “낮은” 수준. 0과 1로만 이뤄짐
- Fortran: 최초의 높은 수준의 범용 프로그래밍 언어. 인간의 언어에 유사
- 1954년 IBM의 John Backus 개발
- C: 1970년대 개발이후 가장 널리 사용됐던 언어. compiled 언어
- Java: 컴파일 한번만 하면 모든 플래폼에서 실행. compiled 언어
컴파일드(Compiled)언어 소스코드를 기계어로 미리, 한번에 번역한다.
예를 들어, C언어의 경우 소스코드를 실행프로그램으로 한번에 컴파일해 사용한다.
- 소스코드
samepl..c
#include(studio.h)
int main()
{
print("Hello World!"\n
return 0;
}
컴파일
gcc sample.c-o sample.exe
기계어:
sample.exe
000111110000011111000000000011111111110101010101010000000000000100000000000000000001111111100000000000000000000000000000
C, Java 등 컴파일드 언어(complied language)는 코드를 한번에 기계어로 변환한다. 한번에 변환하므로 실행이 빠르고 간편하다. 독립 소프트웨어 개발에 유리하다.
인터프리티드(interpreted)언어 프로그래밍 코드를 한줄씩 해석(기계어로 번역)해 실행한다. 한줄씩 해석하므로 코드 수정이 용이하다. 명령프롬프트 ( > )에 명령어를 한번에 하나씩 입력해서 실행한다. 바로 실행하므로 데이터분석에 편리하다.
- JavaScript: 웹페이지 개발 등에 널리 사용. Java와 다른 언어
- Python: 높은 수준의 범용, 인터프리티드 언어
- C/C++, Java보다 더 높은 수준. 인간이 이해하기 더 수월하다.
- R: 데이터분석에 특화된 높은 수준의 인터프리티드 언어
2.1.2 R
통계학자에 의해 개발된 오픈소스 컴퓨터프로그래밍언어다.
2.1.2.1 R 약사
- 1976년 John Chambers, R 전신인 S언어 발표
- Bell Labs
- 1994년 Ross Ihaka & Robert Gentleman R 발표
- 뉴질랜드 오클랜드 대학
- 1997년 GNU project에 포함
- 현재 R Development Core Team이 개발 및 유지
2.1.2.2 R의 장점
- 데이터 분석에 필요한 모든 기법 구현 가능
- 최신 통계 기법 신속 반영
- 뛰어난 그래픽 처리
- 데이터 탐색과 분석에 용이
- 다양한 플래폼에서 작동(윈도, 리눅스, 유닉스, 맥 등)
- 다양한 데이터 소스에 접근 가능
- 텍스트파일부터 데이터베이스관리시스템, 통계패키지 등
- 웹페이지, 소셜미디어 사이트 등 다양한 온라인 데이터 서비스에 직접 접근
2.2 R시작하기
R을 이용하는 방법에는 로컬컴퓨터(자신의 컴퓨터)와 클라우드를 이용하는 방법 2가지가 있다.
- 컴퓨터에 R을 설치해 이용
- 장점: 내 컴퓨터에서 사용하므로 편의성이 높다.
- 단점: 컴퓨터 사양이 낮으면 매우 불편하다.
- 클라우드에서 R 이용
- 장점: 컴퓨터 사양이 낮아도 브라우저만 있으면 된다.
- 단점: 매번 패키지를 설치해야 한다.
R Studio 클라우드와 구글 코랩 등이 R클라우드다. 구글 코랩의 기본값은 파이썬이지만, 이 주소로 연결하면 R이 사용언어로 설정된다.
2.2.1 로컬컴퓨터에 설치하기
R project사이트에서 접속 이 주소(cloud.r-project.org)로 직접 접속하거나, 구글에서 “r project” 검색
본인의 운영체제에 맞는 R다운로드 후 설치. R을 설치하고 실행하면 콘솔 창이 열린다.
>
프롬프트가 뜨면 정상이다 (Figure: 2.1).
2.2.2 R의 기능구현
함수와 객체를 통해 기능을 구현한다.
2.2.2.1 함수(function)
특정 동작을 수행하는 컴퓨터프로그램의 일부. 알고리듬이 함수에 구현돼 있다. 언어로 따지면 동사에 해당한다. 예를 들어, +
는 ’더하기 하라’는 동작을 지정한 함수이고, mean()
은 ’평균을 계산하다’는 동작을 지정한 함수다. q()
는 R을 종료하라는 동작을 지정한 함수다.
내장 함수 R을 설치하면 기본적으로 함께 제공되는 함수. R함수라고 줄여 말하기도 한다.
패키지 함수 추가로 설치하는 패키지에서 제공하는 함수. (패키지는 R함수, 데이터, 완성된 코드를 정리해 종합한 꾸러미다.)
사용자 생성 함수 사용자가 자신의 편의를 위해 만든 맞춤형 함수다. 예를 들어, 평균, 중간값, 표준편차를 한번에 계산하고 싶으면
mean()
median()
,sd()
등 3개 함수를 모아 하나의 함수로 만들면 사용자 생성함수가 된다.
2.2.2.2 객체(object)
값(value)을 할당한 것. 데이터, 함수, 그래프, 분석결과 등을 할당해 객체를 생성한다. 언어로 따지면 명사에 해당한다.
아래 예시는 x라는 객체에 “Hello World!”라는 문자벡터를 할당해 객체를 만들었다. 벡터(vector)는 데이터의 구조중 가장 기본이 되는 구조다.
<- "Hello World!" x
할당할 때는 <-
기호를 사용한다. =
를 사용해도 된다. 다른 프로그래밍 언어에서는 객체를 생성할 때 값을 할당하기 위해 =
를 주로 사용한다. R프로그래밍에서는 <-
를 주로 사용한다. =
를 이용해 할당하면 오류가 생기는 경우가 가끔 있다.
- 생성된 객체는 내장 메모리에 저장된다. 객체를 따로 저장하지 않으면, R세션을 종료하면 생성된 객체는 사라진다. 객체를 다시 사용하려면 외부저장장치(예: HDD)에 파일로 저장해야 한다.
생성한 객체의 내용을 보는 방법은 다양하지만, 가장 기본적인 방법은 print()
함수다.
print(x)
## [1] "Hello World!"
2.2.2.2.1 연습
- x에 숫자 10을 할당하고, y에 숫자 20을 할당해 x와 y를 더하는 코드를 작성하시오.
<- 10
x <- 20
y + y x
## [1] 30
- x에 문자 10을 할당하고, y에 문자 30을 할당해 x와 y를 더하는 코드를 작성해 위 1번의 결과와 비교하시오.
<- "10"
x <- "20"
y + y x
“Error in x + y : 이항연산자에 수치가 아닌 인수입니다”라는 오류메시지가 나타난다. 숫자라도 따옴표" "
로 감싸면 문자형이 된다. 작은 따옴표' '
로 감싸도 문자형이 된다.
문자는 paste()
함수로 결합한다.
paste(x , y)
## [1] "10 20"
2.2.2.3 인자(argument, parameter)
함수 실행에 필요한 데이터, 실행방식 등을 지정하는 내용이다. 함수는 동사, 객체는 명사에 해당한다면, 인자는 목적어나 수식어 등에 해당한다. 분리 인자 sep =
의 기본값은 " "
이다. 기본값은 따로 지정하지 않아도 된다.
paste(x , y, sep = "과 ")
## [1] "10과 20"
paste(x , y, sep = " ")
## [1] "10 20"
2.2.2.4 기술문(statement)
함수, 객체, 인자(argument)로 구성된 일종의 문장이다.
2.2.2.4.1 기술문 사례
x <- rnorm(n = 500, mean = 10, sd = 4)
rnorm()
: 함수- ’정규분포를 만들라’는 명령을 컴퓨터에 전달하는 함수다.
n = 500, mean = 10, sd = 4
: 인자.- 평균 10, 표준편차 4을 이루는 500개의 값
x
: 객체- 평균 10, 표준편차 4을 이루는 500개의 값이 할당된 객체
일련의 기술문을 작성하는 것을 “코딩”한다고 한다.
2.2.2.5 결과의 재사용
분석의 산출물을 객체에 할당해 재사용한다.
lm(mpg ~ wt, data = mtcars)
lm()
함수를 이용해 mtcars
라는 데이터의 wt
(무게)변수로 mpg
(연료효율)변수를 예측하는 단순 회귀분석하는 기술문이다. 이 분석 결과는 화면에 나타날 뿐이다. 그 결과를 다시 사용하려면 객체에 할당한다.
mtcars
는 R에 내장된 데이터다. (단수 복수에 주의한다. 오류의 주된 원인 중 하나가 복수s
누락)~
는 공식(formula)을 만들때 사용하는 기호다.mpg ~ wt
는 공식(formula)다.
아래 코드는 fit
에 기술문을 할당한 다음, fit
의 내용을 summary()
함수로 요약해 출력하고, plot()
함수로 도표를 그리라는 내용이다.
<- lm(formula = mpg ~ wt, data = mtcars)
fit summary(fit)
plot(fit)
2.2.2.6 코멘트 #
코딩할 때 코딩한 내용에 대해 사람이 참조하기 위해 기록을 남길 필요가 있다. #
부호가 있으면 컴퓨터엑 해석(interpret)할 필요가 없다는 의미가 돼, #
부호 다음의 내용은 컴퓨터가 무시하고 처리하지 않고 내용을 그대로 화면에 제시하기만 한다.
<- rnorm(5) # rnorm()은 정규분포를 이루는 임의의 값을 출력하는 함수다. x
2.2.2.7 도움말
R의 모든 함수와 인자를 기억해 사용할 수 없다. 도움말을 이용해야 한다. 일반적인 도움말은 help.start()
함수를 이용한다. 개별 함수에 대한 도움말은 help("함수")
나 ?함수
의 형식으로 입력한다.
c()
함수에 대해 알고 싶으면?c
help("c")
mean()
함수의 도움말은:?mean
help("mean")
2.2.3 작업공간(workspace)
현재 실행중인 R의 작업환경이다. 사용자가 생성한 객체(object)가 저장돼 있는 곳이다. 컴퓨터의 하드디스크가 아니라 메모리에 올려져 있다. R을 종료하면 함께 사라진다. R을 종료할때 “Save workspace image?”라는 창이 뜬다. 작업공간에 저장된 객체는 이미지파일로 하드디스크에 저장할 것인지 묻는 메시지다. ’예’를 선택하면 현재 작업공간의 객체들이 모두 .RData
파일로 저장된다. 이 이미지 파일의 내용은 R을 다시 기동하면 작업공간으로 다시 올려진다.
ls()
함수는 작업공간의 객체의 목록(list)을 보여준다. 조금 전에 객체 x
, y
, fit
을 만들었으므로 ls()
함수를 콘솔에 입력하면 이 세 객체가 화면에 나타난다.
rm()
함수는 작업공간의 객체를 제거(remove)한다. x
, y
, fit
를 제거하고 ls()
함수를 실행해보자.
rm(x, y, fit)
ls()
2.2.4 중요: 작업디렉토리(working directory)
R이 기본값으로(by default) 파일을 읽고 저장하는 디렉토리 (또는 폴더)로서 하드디스크 공간이다.
getwd()
: 현재의 작업디렉토리를 알려준다. wd는 working directory의 약자. 즉, getwd는 working directory를 get하라는 의미.
getwd()
로 자신의 작업디렉토리를 파악해보자.
주의: 윈도는 드라이브명 다음에 역슬래시
C:\
를 사용하지만, R에서는 정슬래시C:/
를 이용한다.setwd()
: 지정한 폴더를 작업디렉토리로 설정. working directory를 set하라는 의미다.
2.2.4.1 연습: C드라이브의 data폴더를 작업디렉토리로 설정하시오.
- 주의:
" "
와 아포스트로피(apostrophe)“ ”
는 다른 기호다. 다른 문서에서 코드 복사해 사용할때 주의.
setwd("C:/data")
만일 작업디렉토리를 설정하고자 하는 폴더가 C드라이브에 없으면?
컴퓨터의 탐색기를 열어 해당 폴더를 만들거나, R콘솔에서 폴더 생성 함수dir.create()
로 해당 폴더를 만든다.
’newfolder’라는 폴더를 C드라이브에 만들려면?
dir.create("C:/newfolder")
- 연습: C드라이브에 newdir이란 폴더를 생성하고, 이 폴더를 작업디렉토리로 설정하시오. 설정된 작업디렉토리를 확인하시오.
dir.create("C:/newdir")
## Warning in dir.create("C:/newdir"): 'C:\newdir' already exists
setwd("C:/newdir")
getwd()
## [1] "C:/newdir"
list.files()
현재의 작업디렉토리에 있는 파일과 폴더 목록 보여준다.ls()
는 작업공간의 객체 목록주의: 작업공간(working space)은 메모리에 생성된 작업환경이고 작업디렉토리(working directory)는 HDD(하드디스크)에 생성된 폴더다.
2.2.4.2 팁
- 키보드의
control
키와L
키를 함께 누르면 콘솔 화면이 정리된다. - 키보드의 상하 방향키를 이용하면 이전에 입력했던 명령어를 다시 사용할 수 있다.
2.3 IDE(통합개발환경: Integrated Development Environment)
R과 같은 프로그램언어를 보다 효율적으로 사용할 수 있도록 해주는 도구가 IDE다. 코드 편집기외에 다양한 부가기능이 있다. R의 대표적인 IDE가 RStudio다. 파이썬의 파이참에 해당한다.
2.3.1 RStudio 설치
구글에서 ’rstudio’를 검색하거나 이 링크 R Studio Desktop Free에서 다운로드 받아 설치한다.
설치한 다음 아래처럼 실행되면 설치에 성공한 것이다 (Figure 2.2). 화면에 3개의 창틀이 열려 있는데, 각 창을 pane(창틀)이라고 한다.
왼쪽에 보이는 ’Console’이라고 된 창이 R을 실행했을 때 코드를 입력했던 콘솔 창이다. R의 콘솔과 동일하므로 사용법도 같다.
오른쪽 위의 창이 작업공간이다. 메모리에 생성된 작업환경(Working envorionment).
오른쪽 아래 창은 작업디렉토리. 파일이 저장돼 있는 하드디스크.
2.3.2 프로젝트 만들기
작업을 할 때 반드시 프로젝트로 관리애 해야 하는 것은 아니나, 프로젝트로 만들어 작업을 관리하는 것이 상당히 유용하고 편리하다.
- 상단 왼쪽 위에 있는
File
을 클릭하면 드롭다운 메뉴가 열린다.New Project
를 클릭하면 아래 창이 열린다 (Figure 2.3).
위 그림에서 New Directory
를 클릭하면 열리는 창에서 Empty Project
를 선택하면 아래 창이 열린다. Browse...
버튼 클릭해 프로젝트 파일 설치할 디렉토리 선택하고, 그 아래에 생성할 디렉토리 명을 Directory name:
에 입력한다. 아래 그림은 “E:/data/elearning”폴더를 선택한 화면이다 (Figure 2.4).
Directory name:
에 ’git2015’라고 입력하고, 아래 Create Project
버튼을 클릭하면, “E:/data/elearning”아래 ’git2015t’란 폴더가 생성되면서 “E:/data/elearning/git2015”가 작업디렉토리가 된다 (Figure 2.5).
- 콘솔 창에 작업디렉토리가 표시돼 있다.
- 오른쪽 위의 작업공간 위에 새로 만든 프로젝명이 보인다.
- 오른쪽 아래 작업디렉토리에 새로 만든 프로젝트 파일이 생성돼 있다.
2.3.3 편집창 열기
IDE를 사용하는 하는 이유 중 하나가 편집기(Editor)를 사용하기 위해서다. 콘솔에서는 한번에 한줄만 입력해 실행하지만, 편집창에서는 코드를 여러줄을 입력해 실행할 수 있다. 아래 그림의 화살표가 가리키는 아이콘을 클릭하면 열리는 창에서 R Script
를 선택하거나, 단축키로 Ctrl + Shift + N
을 이용한다. 또는 상단메뉴 File
을 클릭하면 열리는 드롭다운 메뉴에서 New File
선택 (Figure 2.6).
아래처럼 편집창이 열리면 RStudio를 이용한 코딩 준비가 된 것이다 (Figure 2.7).
편집창에 코드를 입력하면 탭의 Untitled
가 빨간색으로 변한다. 디스크 모양 아이콘 클릭해 파일 이름을 지정해 저장한다. 예를 들어, 2_createData
라고 파일명을 지정하면 확장자가 .R
인 2_createData.R
이 작업디렉토리에 생긴다. 오른쪽 아래 작업디렉토리에서 생성된 파일을 확인할 수 있다 (Figure 2.8).
2.3.4 코드 실행
편집창에서 마우스 커서가 있는 줄의 코드를 실행하는 방법은 다음과 같다.
- 편집창에서
콘트롤
+엔터
키 - RStudio 편집창 화면에서
Run
아이콘 클릭 (Figure 2.9).
여러 줄의 코드를 동시에 실행하려면 실행하려는 코드를 마우스로 드랙해 설정한 다음, 콘트롤
+ 엔터
키 혹은 - RStudio 편집창 화면에서 Run
아이콘 클릭 (Figure 2.10).
2.3.5 한글사용 설정
한글을 사용하기 위해서는 인코딩을 해야 하는데, 윈도는 CP949
라고 하는 마이크로소프트 고유의 확장완성형 인코딩을 이용한다. 이를 보편적으로 사용하는 UTF-8
로 변경한다.
- RStudio 상단메뉴
Tools
를 클릭 - 드롭다운 메뉴가 열리면
Global option
선택 (Figure 2.11). Options
창이 열리면 ’Default text encoding 을 UTF-8으로 설정한다.
2.4 패키지(Package)
패키지는 R함수, 데이터, 완성된 코드를 정리해 종합한 꾸러미다. 라이브러리(library)라고도 한다. 패키지를 R환경에 올리는 함수가 library()
인 이유다. require()
도 패키지를 R환경에 올리는 함수이나 library()
와는 달리, TRUE
와 FALSE
값을 산출한다.
패키지::함수
와 같은 방식을 이용해도 패키지의 함수를 이용할 수 있다. 아래 예문은 psych
패키지의 headTail()
함수 이용.
예: psych::headTail(df)
sessionInfo()
함수를 이용해 R환경에 올려진 패키지와 버전을 확인할 수 있다.
패키지 버전만 확인하고 싶으면 packageVersion("패키지명")
을 이용한다.
R Studio에서 버전을 확인하는 방법은 다음과 같다.
Tools -> Check for Package Updates ...
패키지를 설치할 때는 RStudio를 관리자 권한으로 실행해야 제대로 설치된다. 윈도가 보안정책을 강화했기 때문이다.
2.4.1 rtools
R의 다양한 패키지를 설치하고 사용하는데 필요한 패키지다.
CRAN의
rtools
페이지에 접속한다.설치된 R버전과 일치하는 버전의
rtools
를 다운로드받는다. 예를 들어, R이 4.0대 버전이면rtools40
을 설치한다.
rtools
는 다른 패키지와 달리install.packages()
함수로 설치하지 않고, 설치파일을 컴퓨터에서 직접 실행해 설치한다.
- 설치할때 경로변경하지 말고
C:/Rtools
에 설치한다. 실치과정에서Add rtools to system PATH
가 체크돼 있는지 확인한다.
2.4.2 tidyverse
정돈된 세계를 구성해 R을 한층 뛰어난 프로그래밍 언어로 만들어준 패키지다. (tidy를 직역하면 “깔끔한”이지만, tidyverse의 취지에 맞게 tidy를 “정돈된”으로 쓰자는 의견에 동의)
정돈된 세상에 대해서는 한국통계학회 소식지 2019년 10월호에 실린 "데이터사이언스 운영체계 tidyverse
필독
tidyverse
는 정돈된 세상(tidy + universe)이란 의미의 종합패키지다. “정돈된 세계(tidyverse)”안에서는 코딩작업을 직관적이고도 일관성있게 할 수 있다. 해들리 위컴(Hadley Wicham)이 제시한 “정돈된 데이터 원리(tidy data principle)”에 따라 구성한 세계관이다. tidyverse
패키지를 설치하면 ggplot2
, dplyr
, tidytext
, lubridate
등 다수의 유용한 패키지가 함께 설치된다.
- Hadley Wicham http://hadley.nz/
- Tidyverse Overview https://tidyverse.tidyverse.org
먼저 install.packages()
함수를 이용해 tidyverse
패키지를 설치하고, library()
함수를 이용해 현재의 R환경에 올려 패키지를 사용할 수 있도록 하자.
install.packages("tidyverse")
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.0.5
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3 v purrr 0.3.4
## v tibble 3.1.0 v dplyr 1.0.2
## v tidyr 1.1.2 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.0
## Warning: package 'ggplot2' was built under R version 4.0.5
## Warning: package 'tibble' was built under R version 4.0.5
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
설치하면 -- Attaching packages --
라는 메시지가 뜨며 아래 8종의 패키지 목록이 보인다. 이 8종의 패키지는 library(tidyverse)
를 통해 tidyverse
패키지를 현재의 R환경에 올리면 함께 R환경에 올라가는 부착된 패키지다. 즉, 아래 8개 패키지를 library()
로 개별적으로 올리지 않아도 R환경에서 사용할 수있다.
ggplot2
시각화 도구모음. 그래픽의 문법에 기초dplyr
데이터 조작. 일종의 공구상자tidyr
데이터 정돈. 데이터를 정돈하는 함수 제공readr
데이터 이입. 행과 열이 있는 데이터(예: csv, tsv, fwf) 이입(import)purr
함수형프로그래밍(functional programming) 도구모음tibble
데이터프레임의 현대적 양식sringr
문자형 데이터(string) 작업 도구 모음forcats
데이터유형(type)이 요인(factor)일때 발생하는 문제해결 도구모음.
아래의 패키지는 tidyverse
와 함께 설치되지만 library(패키지명)
로 따로 R환경에 올려야 사용할 수 있는 패키지다.
hms
housr와 time 데이터 처리 도구 모음lubridate
date와 times 데이터 처리 도구 모음httr
웹 APIrvest
웹 스크레핑readxl
xls ghrdms xlsx 파일 이입haven
SPSS, SAS, STATA 파일 이입jasonlite
JSONxml2
XMLmodelr
파이프라인안에서 모델링broom
모델을 tidydata로
2.5 오류(error)
Warning(경고)메시지는 참고만 하고 무시해도 되지만, 오류(error)메시지는 거의 대부분 해결해야 다음 단계로 넘어갈 수 있다.
** 오류가 발생하면 당황하지 말고, 오류메시지를 잘 읽어보자.**
2.5.1 패키지 설치시 겪을 수 있는 오류
패키지설치할 때 아래와 같은 오류가 발생하는 경우가 있다.
library(“tidyverse”) Error: package or namespace load failed for ‘tidyverse’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]): namespace ‘scales’ 0.4.0 is already loaded, but >= 0.4.1 is required
tidyverse
패키지와 함께 설치되는 패키지가 의존하는 scale
패키지가 컴퓨터에서 업데이트돼 있지 않아 오류가 발생했다는 의미다.
해당 패키지(이 경우 scale
)를 새로 설치하거나 업데이트한다.
새로 설치할 때는 dependencies=TRUE
를 명령어에 추가해 모든 의존 패키지도 설치하도록 하자.
install.packages("패키지명", dependencies=TRUE)
패키지 업데이트를 해보는 방법도 있다.
update.packages("패키지명")
만일 새로 설치해도 해결이 안되면, 패키지를 R콘솔에서 설치해본다. 이때 R을 관리자권한으로 실행하자.
그래도 안되면, 패키지가 설치돼 있는 하드디스크폴더에서 해당 패키지 폴더를 삭제하고 다시 설치한다.
패키지가 설치된 위치는 다음과 같다. .libPaths()
함수를 통해 확인할 수 있다.
패키지가 설치되는 위치는 RStudio를 관리자 권한으로 실행하는 경우 C:/Program Files/R/[R버전]/library
에 설치된다.
관리자권한으로 실행하지 않으면 아래의 경우처럼 문서폴더에 패키지가 설치된다.
내 PC > 문서 > R > win-library
또는
C:\Users\[윈도사용자]\Documents\R\win-library
예를 들어:
C:\Users\myPC\Documents\R\win-library
패키지 설치위치는 .libPaths("폴더명")
함수로 패키지 설치위치를 바꿀 수 있다.
예를 들어, C드라이브의 library
폴더를 만들어 .libPaths("c:/library")
로 패키지 설치 경로가 변경된다.
2.5.2 실행할 때 겪을 수 있는 오류
다음과 같은 에러메시지가 뜨는 경우가 있다. 메시지의 내용을 잘 읽어보자.
Error in tibble(text = text_vword) %>% unnest_tokens(output = word, input = text) :
함수 "%>%"를 찾을 수 없습니다
실행하는데 필요한 함수 %>%
를 찾을 수 없다는 의미다. %>%
는 파이핑에 필요한 함수로서 dplyr
에서 magrittr
패키지를 통해 제공한다. dplyr
는 tidyverse
를 올리면 함께 부착된다.
따라서 아래 3가지 중 하나만 하면 해결할 수 있다.
library(tidyverse)
또는
library(dplyr)
또는
library(magrittr)
마찬가지로 아래와 같은 에러메시지가 뜨면 어떻게 해야할까?
Error in unnest_tokens(., output = word, input = text) :
함수 "unnest_tokens"를 찾을 수 없습니다
오류메시지의 내용을 보니, unnest_tokens
함수가 없다고 한다. unnest_tokens
가 어디에 속해 있는 함수인지 검색해보자. tidytext
패키지의 함수란 정보를 어렵지 않게 찾을 수 있다. 따라서 unnest_tokens
함수를 제공하는 패키지 tidytext
를 실행한다. 설치가 안돼 있으면 설치부터 한다.
install.packages("tidytext")
library(tidytext)
- 기타 패키지 설치 관련 정보는 이 문서 참조
2.6 여러 패키지 한번에 설치
(이 부분은 건너 뛰어도 된다.)
텍스트마이닝에는 여러 종류의 패키지가 필요하다. 이 모든 것을 매번 설치하고 번번히 실행하는 것이 번거롭다. 게다가 이미 설치된 패키지가 무엇이 있는지 기억하기 어렵기 때문에, 패키지를 반복해서 설치하는 경우가 있다. 설치돼 있는 패키지는 설치를 피하고, 새로운 패키지만 골라서 동시에 설치하는 방법을 알아보자.
명령어 앞뒤로 괄호( )
를 치면 할당한 객체의 내용을 콘솔에서 보여준다.
names( installed.packages()[,"Package"] )
<- c( "tidyverse", "epubr", "showtext",
package_list "tidytext", "tidymodels", "tidygraph", "textclean" )
<- package_list %in% installed.packages()[,"Package"] )
( package_list_installed
<- package_list[!package_list_installed] )
( new_pkg if(length(new_pkg)) install.packages(new_pkg)
설치한 여러 패키지를 동시에 R환경에 올리는 방법은 다음과 같다.
lapply
함수는 데이터 하부요소에 대해 투입한 함수를 하나 씩 반복적으로 실행해준다. for
의 반복문보다 효율적이어서 자주 쓰는 함수다.
아래 코드는 require
함수를 설치해야 하는 패키지 목록이 담겨 있는 package_list
의 하부요소(개별 패키지)에 대해 하나씩 실행하라는 의미다.
lapply(package_list, require, character.only = T)
( .packages() )
library
대신 require
를 쓴 이유는 반복실행 과정에 처리 결과에 대한 TRUE
와 FALSE
가 필요하기 때문이다. require
와 library
는 둘다 패키지를 R환경에 올리지만, require
가 처리 결과에 대한 TRUE
와 FALSE
를 돌려준다고 했다.
위 코드를 각자 자주 사용하는 패키지 목록으로 수정해, 별도의 R파일로 만들어 패키지를 새로 설치하거나 실행할 때 사용하면 편리하다. 매번 번거롭게 library
를 반복해서 입력할 필요가 없어진다.
2.7 코딩 스타일
일관성 있는 코드작성은 해들리 위컴의 R스타일 가이드를 참조하자.
데이터를 할당한 객체이름을 정할 때 객체의 특성(예: 데이터구조)를 명기하는 습관을 들이는 것이 좋다.
예:
벡터: name_v
데이터프레임: name_df
매트릭스: name_m
리스트: name_ls
사용자 함수: name_f
토큰: name_tk
2.8 파일경로(path) 표시
2.8.1 슬래시 /
윈도에서는 경로 표시 역슬래시\
를 사용하지만, R환경에서는 슬래시/
를 이용해 경로를 표시한다. \\
처럼 역슬래시를 두번 쓰기도 한다.
/
만 쓰거나 첫번째로 적는 /
는 루트디렉토리를 의미한다.
list.files("/") #루트디렉토리에 있는 모든 파일과 폴더 표시
list.files("/data") #루트디렉토리 아래의 data폴더에 있는 모든 파일과 폴더 표시
list.files("data") # 현재 작업디렉토리 아래의 data폴더에 있는 모든 파일과 폴더 표시
2.8.1.1 퀴즈
list.files("data\images")
를 실행하면 아래와 같은 오류가 발생한다. 이유는?
> list.files("data\images")
에러: ""C:\U"로 시작하는 문자열들 가운데 16진수가 아닌 "\U"가 사용되었습니다
윈도에서 사용하는 경로표시 \
를 R환경에서 사용했기 때문이다. \
를 /
로 수정한다.
2.8.2 마침표 . ..
- 마침표 하나
.
현재 작업디렉토리 - 마침표 둘
..
현재 작업디렉토리 바로 한단계 위에 있는 폴더
list.files(".") #작업디렉토리에 있는 모든 파일과 폴더 표시
list.files("./images") #작업디렉토리아래에 있는 images폴더에 있는 모든 파일과 폴더 표시.
list.files("./images")
의 산출결과는 list.files("images")
와 같다. ./images
와 images
는 둘다 현재 작업디렉토리 아래에 있는 images
란 의미.
list.files("..") # 작업디렉토리 위 폴더에 있는 모든 파일과 폴더 표시
list.files("../dir") #작업디렉토의 위 폴더 아래(즉, 현 작업디렉토리와 같은 단계의 위치에 있는 폴더) 아래에 있는 images폴더에 있는 모든 파일과 폴더 표시
2.8.3 물결 ~
물결표시~
는 홈디렉토리를 의미한다. 로그인 사용자가 사용할 수 있는 최상위 디렉토리.
윈도의 경우에서 만일 사용자 ID를 user1이라고 한 경우 C:/Users/user1/Documents
폴더가 홈디렉토리가 된다.
(윈도환경에서는 경로를 역슬래시를 사용하므로 C:\Users\user1\Documents
로 표시된다.)
따라서 list.files("~")
과 list.files("C:/Users/user1/Documents")
는 같은 결과 산출.
list.files("~") #홈디렉토리에 있는 모든 파일 표시
list.files("~/R/win-library") #홈디렉토리 아래단계에 있는 R/win-library폴더의 모든 파일과 폴더 표시
2.9 파일과 객체
2.9.1 하드디스크에 있는 파일을 다루는 함수
dir.create("C:/newdir") 디렉토리(폴더) 생성
list.files() 현재 작업디렉토리 파일과 폴더 목록
2.9.2 R환경내 객체를 다루는 함수
ls() 현재 작업공간에 있는 객체 목록
rm(객체명) 작업공간의 객체 제거. 필요없는 객체 제거에 사용.
getwd() 작업디렉토리(working directory) 표시
setwd("C:/newdir") "C:/newdir"을 작업디록토리 설정
단일 R객체를 파일로 저장하는 방법
saveRDS(name_df, file = "name_df.rds")
name_df <-readRDS("name_df.rds")
복수의 R객체를 파일로 저장
save(n1_df, n2_df, file = "name.RData") n1_df과 n2_df객체를 작업디렉토리에 name.RData란 이름의 파일로 저장
load("name.RData") name.RData를 작업공간에 탑재
R환경의 모든 객체를 이미지로 저장.
save.images("myData.RData") 작업공간을 이미지파일로 저장. 파일명 지정하지 않으면 .RData로 저장.
load("myData.RData") 작업디렉토리 파일을 현 작업공간에 객체로 탑재
fst
패키지를 이용하면 대용량 파일을 빠르게 처리할 수있다.
# Store the data frame to disk
write.fst(df, "dataset.fst")
# Retrieve the data frame again
df <- read.fst("dataset.fst")
2.10 따옴표와 백틱
2.10.1 겹따옴표 홑따옴표
겹따옴표와 홑따옴표는 문자형요소를 지칭하는데, 함께 사용해야 할때가 있다.
인용문안에서 인용해야 할때는 겹따옴표와 홑따옴표를 함께 사용한다.
"이렇게 인용문 안에 '다시 인용할때' 겹따옴표와 홑따옴표를 함께 사용"
2.10.2 백틱(backquote/backtick) `
변수 혹은 객체명이 한글 특수기호 혹은 띄어쓰기가 있는 경우, 키보드 가장 왼쪽 위에 있는 부호 백틱 한쌍을 이용한다.
`한글변수(명)`
2.11 주의(중요)
R작업에 관련된 폴더이름은 모두 영문으로 지정한다. 한글명 폴더를 이용할 경우 오류발생하는 경우가 드물지 않다.
폴더명을 지정할 때 띄어쓰기를 하지않는다. 오류의 원인이다. 데이터분석 작업을 하는 폴더의 이름은 모두 영문으로 붙여쓴다.
R스튜디오는 작업디렉토리 기본설정을 홈디렉토리(~)로 해 놓았다. 만일 윈도나 맥 등 운영체제에서 한글을 사용자명으로 지정했을 꼉우, 경로에 한글폴더가 포함된다. 대부분 문제없지만, 간혹 오류 발생의 원인이 된다.
작업디렉토리 기본값을 루트디렉토리 아래 영문폴더(예: C:/data
)를 만들어 설정하자.
2.12 흔한 오류
2.12.1 오자와 탈자.
매우 흔한 오류의 원인이다. 특히, 영어단어 복수s에 주의하자.
2.12.2 괄호의 불일치
마무리를 하지 않았으니 코드 실행이 될수가 없다. R스튜디오 편집창에서 오류 표시를 해 준다.
2.12.3 보이지 않는 코드
PDF문서의 내용을 R스튜디오 편집창에 복사해서 붙일 때, 문서의 코드를 그대로 복사해서 붙였으므로, 오자나 탈자가 없는데도, 코드가 작동하지 않는 경우가 있다. 이런 일이 생기는 이유는 사람의 눈에 동일한 문자라도 기계는 다른 문자코드로 인식할 수 있기 때문에. 특히, PDF문서를 복사해서 편집기에 복사해서 붙이면 사람 눈에 보이지 않는 코드도 함께 복사돼 붙여지는 경우가 있다.
이런 문제가 생기면, 메모장같은 텍스트에디터에 해당 코드를 붙여넣었다 다시 복사해서 R스튜디오 편집창에 붙여 넣으면 해결할 수 있다.
2.12.4 글꼴
R문서/그래프/코딩 글꼴(font) https://statkclee.github.io/viz/viz-r-font.html
2.13 기타
2.13.1 NA
와 NULL
의 차이
결측값 NA
는 값이 없지만, 값이 들어갈 자리는 있는 상태.
NULL
은 값과 자리가 모두 없는 상태.
0
은 결측값이 아니다.
0
은 숫자형 값
"0"
은 문자형 값