2016년 10월 23일 일요일

2.1 벡터(Vector)

 

R의 자료구조 : 벡터, factor, 행렬, 배열, 데이터프레임, 리스트

벡터(Vector)는 동일한 형태(예, 숫자)의 데이터 구성인자가 1개 이상이면서 1차원으로 구성되어 있는 데이터 구조입니다.

w <- c(1, 2, 3, 4, 5)  # 숫자 벡터
x <- c("대한", "민국", "평화")  # 문자 벡터
y <- c(TRUE,TRUE,TRUE,FALSE,TRUE)  # 논리 벡터

벡터 안에 있는 값들을 요소라고 합니다. 특정 요소를 보고 싶을때는 벡터명[번호]를 사용합니다.

v <- c(5, 6, 7, 8, 9)
v[3] # => 7
v[2:4]  # => 6 7 8

# 마이너스를 붙이면 그 항목만 빼고 출력
v[-3]  # => 5 6 8 9
v[-2:-4]  # => 5 9

# v의 총길이에서 2개를 뺀 개수만큼 출력
v[1:(length(v)-2)]  # => 5 6 7

# 벡터 요소의 값 변경
v[2] <- 3 # v는 5 3 7 8 9

# 벡터에 새로운 요소 추가
v <- c(v, 10) # v는 5 3 7 8 9 10

# 벡터의 원하는 위치는 새로운 요소 추가
# append()의 옵션 after=2는 2번째 위치 뒤에 추가하라는 의미
v1 <- 1:3
v1 <- append(v1, 22, after=2) # v1은 1 2 22 3
v1 <- append(v1, c(33, 55), after=3) # v1은 1 2 22 33 55 3

1.7 벡터 데이터 타입

 

R은 다양한 데이터 타입을 가지고 있습니다. 벡터, 팩터, 행렬, 배열, 데이터프레임, 리스트 등이 있습니다. 벡터에는 다시 숫자 데이터, 문자 데이터,  논리 데이터, 날짜 데이터 등이 있습니다.

 

숫자(numeric) 데이터

숫자가 길때에는 지수형식으로 표시됩니다.

100000 # => 1e+05
150000000 # => 1.5e+08
5e+3 # => 5000
5e-3 # => 0.005

숫자에 따옴표가 있으면 숫자가 아니고 문자입니다.

"3" * 2 # Error in "3" * 2 : non-numeric …
as.numeric("3") * 2 # as.numeric 함수로 문자를 숫자로 변환

숫자 인지를 확인하는 방법

x <- 21
is.numeric(x)  # 숫자인지 확인, 숫자이면 TRUE

# 정수 지정 및 확인, L은 정수를 변수에 지정할 때 사용
y <- 5L 
is.integer(y)  # 정수인지 확인, 정수이면 TRUE

class(4L)  # => integer
class(2.8)  # => numeric
4L * 2.8  # => 11.2

 

문자(character) 데이터

R에서 문자는 모두 여러 글자를 의미하는 문자열 형태입니다. 문자(열)은 쌍때옴표(“)나 홑따옴표(‘)로 묶어서 표현합니다.

han   # 에러: 객체 'han'를 찾을 수 없습니다
"han"   # => "han"
한글   # 에러: 객체 '한글'를 찾을 수 없습니다
"한글"   # => "한글"

문자(열)의 길이 확인은 숫자 데이터와 마찬가지로 nchar 함수를 사용합니다.

x <- "대한민국"
nchar(x)   # ⇒ 4
nchar("hello")  # ⇒ 5
nchar(3)  # ⇒ 1
nchar(532)  # ⇒ 3

 

논리 데이터

논리 데이터는 TRUE와 FALSE로 표현합니다. 두 숫자를 비교하여 참이면 TRUE, 거짓이면 FALSE를 반환합니다.

3 >= 5   # ⇒ FALSE
2 != 3  # 2와 3은 다른가 ? ⇒ TRUE

숫자로는 TRUE는 1, FALSE는 0과 같습니다.

TRUE * 3  # 1*3과 같으므로 결과값은 3
FALSE * 3  # 0*3과 같으므로 결과값은 0

TRUE와 FALSE의 단축키로 T와 F를 사용할 수 있으나, T와 F는 단순히 TRUE와 FALSE를 저장한 변수이므로 T에 다른 값을 저장할 수 있어 사용하지 않는 것이 좋습니다.

T  # ⇒ TRUE
T <- 5
T  # ⇒ 5

 

날짜 데이터

날짜는 1970-01-01 이후의 경과일의 수로 표현됩니다.

# 오늘의 날짜 "2016-10-23"
today <- Sys.Date()
# 오늘의 날짜와 시간 "2016-10-23 14:00:15 KST"
now <- Sys.time() 
# 미국식 날짜와 시간 "Sun Oct 23 14:00:25 2016"
today2 <- date() 

# 문자를 날짜를 변환하기위해 as.Date( ) 사용
mydates <- as.Date(c("2016-07-21", "2015-03-15"))
# 2016/7/21와 2015/3/15 사이의 날짜 수
mydates[1] - mydates[2]  # => Time difference of 494 days


날짜 형식

형식 의미 예시
%d 일을 숫자로(0~31) 01 ~ 31
%m 월을 숫자로(00~12) 00 ~ 12
%y 년도를 두 자리 숫자로 16
%Y 년도를 네 자리 숫자로 2016
%a 주를 약어로
%A 주를 전체 이름으로 월요일
%b 월을 약어로 Jan
%B 월을 전체 이름으로 January

# 오늘 날짜를 원하는 형태로 출력
today <- Sys.Date()
# 출력결과 "2016년 10월 23일(일요일)"
format(today, format="%Y년 %m월 %d일(%A)")

문자를 날짜로 변환해주는 함수는 as.Date()입니다. 함수의 형식은 as.Date(x, "format")입니다. 기본 포멧형식은 yyyy-mm-dd 입니다.

as.Date("2015-05-21")  # => "2015-05-21"
as.Date("02/05/2015", "%m/%d/%Y")  # => "2015-02-05"
as.Date("2015년 2월 5일", "%Y년 %m월 %d일")
as.Date("161215", "%y%m%d") # => "2016-12-15"
as.Date("01-11-2016", "%d-%m-%Y")  # => "2016-11-01"

날짜를 숫자나 문자로 변환하려면 as.numeric()과 as.character()를 사용합니다.

myday <- as.Date("2016-11-21")
as.numeric(myday)  # => 17126
as.character(myday)  # => "2016-11-21"

날짜와 시간까지 있는 경우 as.POSIXct()를 사용합니다.

as.POSIXct("2016-05-21 17:25") # => "2016-05-21 17:25:00 KST"

lubridate와 같은 패키지를 사용하면 날짜와 시간을 더 쉽게 다룰 수 있습니다.

 

결측(missing) 데이터

R에서 결측 데이터(missing values)는 기호 NA(not available)로 표현됩니다.

결측값 존재 여부 확인

x <- c(2, NA, 7, NA, 6)
is.na(x) # => FALSE  TRUE FALSE  TRUE FALSESE
s <- c("대한", NA, "민국")
is.na(s)  # => FALSE  TRUE FALSE

특정값을 결측값으로 지정

# 데이터프레임 df1의 변수 v1에 있는 값 중 99를 결측값으로 변환
df1$v1[df1$v1==99] <- NA

결측값을 분석에서 제외

x <- c(2, NA, 7, NA, 6)
# NA가 포함된 계산은 NA를 출력
mean(x) # => NA
# 옵션 na.rm=TRUE는 계산에서 NA를 제외
mean(x, na.rm=TRUE) # => 5

결측값 관련 데이터 추출

x <- c(21, NA, 23, NA, 25)
y <- c(1, 2, NA, 4, 5)
df <- data.frame(x, y)
# 결측값이 있는 데이터만 추출
df[!complete.cases(df),]

# 결측값이 없는 새로운 데이터셋 생성
newdata <- na.omit(df)  # na.omit()는 결측값이 있는 모든 행 삭제
newdata <- df[complete.cases(df),]

NA와 유사한 의미를 갖는 기호로 NULL이 있는데, NA는 주로 벡터 데이터에서 결측 값을 나타내는 데 쓰이고, NULL은 데이터 프레임이나 리스트 등에서 변수나 구성요소를 제거할때 주로 사용됩니다.

# 데이터프레임 df에 있는 변수 x를 제거
str(df$x)  # => num [1:5] 21 NA 23 NA 25
df$x <- NULL
str(df$x)  # => NULL

2.3 연속 숫자 만들기


연속 숫자 만들기

:(콜론) 기호를 사용하여 연속적인 숫자 생성

1:10 # => 1 2 3 4 5 6 7 8 9 10
s <- 5:20 # 변수 s에 5에서 20까지의 연속값 할당

ㆍ seq(from=시작, to=끝, by=간격) / seq(from=시작, to=끝, length.out=길이)
ㆍ rep(반복할 내용, times=반복할 수) / rep(반복할 내용, each=각각 반복할 수)

seq(from=1, to=5, by=2) # => 1 3 5
seq(from=1.0, to=2.0, length.out=5)
# => 1.00 1.25 ~ 2.00
rep(1, times=5) # => 1 1 1 1 1
rep(1:2, each=2) # => 1 1 2 2

2016년 10월 21일 금요일

1.6 변수


변수의 생성

변수명은 항상 왼쪽에 쓰며, '<-' 기호를 사용하여 변수에 데이터를 넣을 수 있습니다. (‘<-’ 기호 대신 ‘=’ 기호도 사용가능) 변수명은 영어와 숫자 모두 사용할 수 있으나 시작 글자는 반드시 문자여야 합니다.

x <- 3
y <- 5
x # => 3
print(y) # => 5
x * y # => 15
x + y # => 8


변수의 나열

ls() 함수를 입력하면 현재 컴퓨터 메모리에 있는 변수들을 알 수 있습니다.

ls()


변수의 삭제

rm(x) # 변수 x 삭제


2016년 10월 20일 목요일

1.5 기초 연산



계산용 연산자

+(더하기), -(빼기), *(곱하기), /(나주기), ^(자승), %%(나머지)

8 + 3  # => 11
8 - 3  # =>  5
8 * 2  # => 16
8 / 2  # =>  4
8 ^ 2  # => 64
8 %% 3  # => 2
(5/9) * (100-32)  # => 37.77778



논리 연산자

==(같다), !=(같지않다), >(크다), >=(크거나 같다), <(작다), <=(작거나 같다)

5 == 5  # => TRUE
5 != 5  # => FALSE
5 > 5  # => FALSE
5 >= 5  # => TRUE
3 < 5  # => TRUE
6 <= 5  # => FALSE



기본 함수

pi  # => 3.141593  파이
sqrt(2)  # => 1.414214  제곱근 계산
log(10)  # => 2.302585  자연로그 함수
log10(10)  # => 1  상용로그 함수
exp(1)  # => 2.718282  지수 함수
sum(c(2,5,5))  # => 12  합계
mean(c(2,5,5))  # => 4  평균
sd(c(2,5,5))  # => 1.732051  표준 편차
var(c(2,5,5))  # => 3  분산
median(c(2,5,5))  # => 5  중위수

x <- c(1, 3, 5, 7, 9, 11, 13, 15, 17, 19)
max(x)  # => 19  최대값
min(x)  # => 1  최소값
IQR(x)  # => 9  사분위 범위
quantile(x, 0.25)  # => 5.5  백분위 수
range(x)  # => 1 19  최소값과 최대값
round(2.345, 2)  # => 2.35  반올림


1.4 R 패키지

 

R 패키지는 목적에 맞게 R 함수, 데이터 등을 모아 놓은 것입니다. 현재 수 많은 사용자들이 만들어 올려 놓은 수천 개의 패키지가 있기 때문에 이를 다운 받아 활용할 수 있습니다.

.libPaths()   # R의 library 폴더 위치 확인
library()   # 시스템에 설치된 모든 패키지 확인
search()    # 현재 메모리에 로드된 패키지 확인


패키지 설치 및 로딩

PC에서 패키지 설치는 최초에 한번 하면 되지만, 패키지를 사용하기 위해서는 R을 새로 시작할 때 마다 library 함수를 이용하여 패키지를 불러와야 합니다. (library 함수대신 require 함수를 사용하여도 됩니다.)

install.packages(“dplyr”)  # dplyr 패키지 설치
library(dplyr)  # dplyr 패키지 로딩

 

패키지 만들기

패키지를 만들려면 아래 자료를 참고합니다.

2016년 10월 19일 수요일

1.3 작업 디렉토리

 

작업공간(workspace)

작업공간은 벡터, 데이터프레임, 함수 등 객체들을 저장하고 있는 영역입니다. R을 종료할 때 ‘작업공간 이미지를 저장합니까’라는 질문에 대해 ‘예’라고 응답하면 작업 디렉토리에 ".RData"로 저장이 됩니다. 저장된 작업공간은 R이 다시 시작할 때 자동적으로 메모리에 로드됩니다.

명령어로 작업공간을 저장하거나 파일명을 지정하여 저장할 수 있습니다. 

# 현재의 작업공간을 작업 디렉토리에 ".RData"로 저장
save.image() 

# 현재의 작업공간을 작업 디렉토리에 "ws2.RData"로 저장
save.image(file = "ws2.RData") 
load("ws2.RData")  # 작업공간이 저장된 파일을 메모리에 로드

ls()  # 현재의 작업공간에 있는 객체들을 표시

 

작업 디렉토리(working directory)

작업 디렉토리는 R이 데이터 및 객체들을 저장하고 불러올때 디폴트로 지정된 폴더입니다. 프로젝트별로 폴더를 다르게 하여 파일들을 저장하고 불러오는 편이 많으므로 R이 시작될때 우선적으로 작업 디렉토리를 지정하는 것을 추천합니다.

[참고] Windows 환경에서 폴더 표기 ( \ –> / )
(X) c:\mydocuments\myfile.txt
(O) c:/mydocuments/myfile.txt

getwd() # 현재의 작업디렉토리 표시

setwd(mydirectory)      # 작업 디렉토리 지정
setwd("c:/docs/mydir")  # 작업 디렉토리 지정(\  대신에 /)
setwd("/usr/rob/mydir") # linux에서 작업 디렉토리 지정

dir()  # 작업 디렉토리에 있는 파일 리스트 출력
dir(all.files = TRUE)  # 숨겨진 파일도 출력
list.files()  # dir()과 동일함

 

옵션


help(options) # 옵션에 대한 도움말
options() # 현재의 옵션 설정 상태 출력
options(digits=3) # 출력되는 소수점 자리수 지정

 

명령어 히스토리

history() # 이전 명령어 25개 출력
history(max.show=Inf)  # 모든 이전 명령어 출력

savehistory(file="myfile")  # 이전 명령어 파일로 저장
loadhistory(file="myfile") # 이전 명령어 파일 불러오기


savehistory()  # 작업디렉토리에 ".Rhistory"로 내보내기
loadhistory()  # 작업디렉토리의 ".Rhistory" 불러오기

 

객체 저장 및 불러오기

save(object list, file="myfile.RData")  # 객체 또는 객체들 저장
load("myfile.RData")  # 저장된 객체 불러오기

2016년 10월 18일 화요일

1.2 R 도움말


도움말 이용 방법

R을 설치하면 명령 프롬프트에서 아래 명령어를 입력하여 내장된 도움말 시스템을 이용할 수 있습니다.
help.start()   # 도움말 웹페이지
help(sum)    # sum 함수에 대한 도움말
?sum           # sum 함수에 대한 도움말
example(sum)   # sum 함수의 예제 나열
apropos("sum") # "sum"이라는 문자열이 들어간 모든 함수 나열
help.search("sum")  # 도움말에서 문자열 "sum" 검색
??sum  # 도움말에서 문자열 "sum" 검색



R 관련 자료 찾기

http://rseek.org   #R과 관련된 정보만 검색
http://stackoverflow.com   #개발자 사이트
http://stats.stackexchange.com  #통계분석 관련 정보검색
http://www.r-project.org  #R홈페이지



Sample Datasets

R을 설치하면 기본적으로 약 100개의 데이터셋을 제공합니다. R 패키지를 설치하고 로딩하면 각 패키지가 제공하는 데이터셋도 사용할 수 있습니다.
data()  # 현재 사용가능한 모든 데이터셋 표시

2016년 10월 17일 월요일

1.1 R 소개

 

R이란

R은 다양한 통계분석, 데이터 마이닝, 그래프 작성 등을 위한 무료 프로그래밍 언어입니다.

  • R은 오픈소스로서 무료입니다.
  • 프로그래밍 언어로서 사용자의 실력에 따라 매우 복잡한 분석도 쉽게 자동화하여 수행할 수 있습니다.
  • 다양한 최신 통계분석 기법, 데이터 마이닝 기법, 그래프 작성 기법 등이 사용자들에 의해 제공됩니다.
  • 전 세계적으로 사용자들이 다양한 예제를 공유합니다.(영문 예제 다수)

R의 다양한 장점에도 불구하고 몇 가지 단점이 존재합니다. R이 프로그래밍 언어이기 때문에 초보자가 쉽게 접근하기 어렵습니다. 다양한 최신기법들이 사용자들에 의해 제공되기 때문에 어떤 분석기법이 있고 어떻게 사용해야 하는지를 알아내야 한다는 점이 번거롭습니다. 그러나 이러한 단점들은 공부를 계속해 나가다 보면 자연스럽게 해결될 것입니다.

 

R의 특징

  • R은 명령어를 1줄씩 처리하고 그 결과를 바로 보여주는 인터프리터 언어입니다.
  • R의 콘솔창에 > 기호는 명령 프롬프트입니다. > 뒤에 원하는 명령어를 입력하고 Enter를 치면 명령어가 실행됩니다.
  • R은 대소문자를 구별합니다. 명령어를 입력할 때 대소문자를 명확히 파악하고 입력하여야 합니다. 
  • R 콘솔창에서 키보드의 상향(↑)를 누르면 이전에 실행했던 명령어를 순서대로 다시 불러올 수 있습니다.
  • #은 주석 기호(메모 유사)입니다. 즉 맨 앞에 #이 있으면 그 줄은 실행하지 않습니다.

 

R 설치

R은 Windows, MAC OSX and Linux 등에 설치될 수 있습니다.
R은 The R Project for Statistical Computing(www.r-project.org)에서 다운받아 설치할 수 있습니다.
본인의 PC에 따라 32비트와 64비트 둘 중 하나를 설치하는 것을 추천합니다.

 

RStudio 설치

RStudio는 R을 보다 쉽게 사용할수 있도록 도와주는 통합개발환경입니다. RStudio는 오픈 소스로서 무료입니다. R을 먼저 설치하고 RStudio를 http://www.rstudio.com/에서 다운 받아 설치하면 됩니다. RStudio에서 한글을 입력할때 약간의 불편이 있습니다.

 

텍스트 에디터 사용

RStudio 사용이 불편하면, Notepad++와 같은 텍스트 에디터를 이용하여 명령어들을 코딩하고, 이 명령어들을 R 콘솔창에 복사하여 사용하는 방법을 추천합니다. Notepad++는 https://notepad-plus-plus.org/에서 다운 받아 설치합니다.

2.1 벡터(Vector)

  R의 자료구조 : 벡터, factor, 행렬, 배열, 데이터프레임, 리스트 벡터(Vector)는 동일한 형태(예, 숫자)의 데이터 구성인자가 1개 이상이면서 1차원으로 구성되어 있는 데이터 구조입니다. w <- c(1, 2, 3, 4, ...