Transcript Document

R 프로그램
1
R 소개 및 설치
2
R : http://www.r-project.org
3
R 이란?
S-언어를 기반으로 한 공개 프로그램
효율적인 데이터 관리와 저장
행렬연산을 위한 적당한 연산자
데이터 분석을 위한 다양한 함수와 시각화한 그래픽
제공
• 사용자 위주의 단순하고 효과적인 programming
language
• 다양한 운영체제(OS)에서 구현(Unix, Linux, Windows)
•
•
•
•
4
R 설치하기
• http://www.r-project.org
• Download, packages → CRAN 선택
• CRAN Mirrors 중 한 곳 선택 (Korea 3개 sites)
• Download and Install R 에서 OS 맞게 선택
(Windows/Mac)
• Base 선택
• Download R 3.2.0 for Windows (62MB, 32/63 bit)
5
R 설치 완료 후 실행
6
R Studio소개 및 설치
7
R Studio 설치
• http://www.rstudio.com
• Download RStudio → Desktop → DOWNLOAD
RSUTIO DESKTOP → Windows Vista/7/8/10
• R-Studio 사용시 한글이 깨지는 경우
 Tools >> Global Options
 UTF-8 선택
8
R Studio 이해하기
• 멀티 플랫폼을 지원 => 맥, 리눅스,
윈도즈에서 동일한 환경으로 작업 가능
• 서버 버전
-> Rstudio Server를 설치하면 웹브라우저로
서버에 접속해 서버에서 작업하는 환경과
동일하게 Rstudio를 이용할 수 있음
9
• 프리 소프트웨어 라이선스 (오픈소스)
• 멀티 플랫폼 지원(MS Windows, Mac OSX,
Ubuntu Linux 32&64 bit, Fedora Linux 32&64
bit)
• 코드 자동 완성
• 코드 소스, R 콘솔, 작업공간, 그래프를 한
화면에 볼 수 있음
• 단축키 지원 과거 실행한 코드의 탐색 등등
10
Rstudio 창
11
• Rstudio 단축키(Ctrl+Number)
키
이동
1
소스코드편집기(Source editor)
2
콘솔(Console)
3
도움말(Help)
4
히스토리 편집기(History editor)
5
파일 브라우저(File browser)
6
플롯 영역(Plot Area)
7
패키지(Packages)
8
작업환경(Enviornment)
12
• 메뉴 > Tools-Global
Options-Panel Layout 실행
=> 각 섹션의 순서와
내용도 변경 가능
13
Rstudio – 프로젝트 생성
• 메뉴 >> File-New Project
• New Project >> Project Type >> Empty Project
14
• Create New Project >> Create project as subdirector
of: >> Browse 클릭
• 프로젝트 생성할 directory 선택
• Directory name 생성
15
R 이해하기
16
Package 설치하기
• Package
– R 설치 시 함께 설치하는 표준(standard) package외에 R개발자들에
의해 제공되는 package로 구분함
– 개인적으로 필요한 package는 기본(base) 설치 후에 개별적으로
설치
• Package 설치하기
– Menu : Package
 Install package(s)
 CRAN mirror site 선택(Korea (Seoul 1 or 2 or 3)
 설치하려는 packages를 선택하고 ‘OK’
– Available packages 검색
– http://cran.nexr.com/web/packages/
17
Package 관리 함수
• R console에 직접 함수를 입력하여 package를 설치할
수 있음
– 설치할 package 선택
– 설치된 package를 update하기
– 설치 완료된 package에 있는 함수나 데이터를 사용하기 위해
library()로 불러들여야 함
18
R : Manual and help page
• R manual
– Menu : Help → Manuals in PDF → An introduction to R
• Help
–?
• ?help()
• ?plot()
– help(package="base")
• 기본적으로 많이 쓰는 함수들에 대한 정보
– help.search("sort")
• All functions containing "sort"
– example(plot)
• To see the examples of plot function
19
R Editor
• 분석에 사용한 명령어, 함수
등을 편집, 수정하고 저장
– Menu : File → New script
– Menu : File → Open script
• 이전에 작업했던 script file
불러오기
– R Editor에서 작업한 내용들을
저장할 시, 확장자명은 ‘.R’
20
Objects (객체) in R
• Types of objects
– Data/variable : 자료의 값들을 저장
– Function : R 명령문들을 저장
• R object에 내용(값) 할당 (assignment)
– <- : 오른쪽에 위치한 정보를 왼쪽의 정보로 전달
•
•
•
•
왼쪽에는 이름, 오른쪽에는 값
xx <- 10 : xx에 10이라는 값을 할당
yy <- c(1,2,3,4,5) : yy에 vector를 할당
zz <- T : zz에 TRUE 논리값을 할당
21
Data/variable : Classes
Class
Description
numeric
실수형
integer
정수형
logical
논리형
character
문자형(single character or string)
factor
인자형
ordered
순서형
• 변수의 class 확인 : class()
• 변수의 class 변경 : as.numeric(), as.factor(), … ,
22
Data/variable : Types
Type
Description
vector
동일한 class의 자료값으로 구성된 1차원의 자료구조
matrix
동일한 class의 자료값으로 구성된 2차원 자료구조행과 열로 구성
array
동일한 class 의 자료값으로 구성된 2차원 이상의 자료구조
data.frame
변수와 관측값으로 구성된 2차원의 자료구조
변수들이 서로 다른 class를 가질 수 있으나 길이는 동일
list
변수들이 묶음 형태로 표현되는 자료구조
변수들이 서로 다른 class와 길이를 가질 수 있음
23
R : 주의사항
• R은 대소문자를 구분
• 변수이름 규칙
– 문자나 ‘ . ‘으로 시작
– 내장함수명과 동일하게 지정하는 것은 피할 것
• Missing value
– NA or <NA> : Not available
– NaN : Not a number
• #
– 주석 처리
• ;
– 한 line에 여러 명령어 입력 시 명령어 구분
24
R : vector operation
• 10명 학생의 수학 시험 점수
96, 80, 76, 96, 88, 75, 78, 89, 92, 70
score_1 = c(96, 80, 76, 96, 88, 75, 78, 89, 92, 70)
• 또 다른 10명 학생의 수학 시험 점수
67, 83, 96, 90, 85, 75, 82, 89, 92, 75
score_2 = c(67,83,96,90,85,75,82,89,92,75)
score=c(score_1,score_2)
25
R : vector operation
x <- c(1,3,5,7,9) # default column vector
x; class(x)
# class check
y<-c("R","SAS","SPSS")
y; class(y)
y<-c(2,4,6,8,10) # 덮어쓰기
class(y)
z<-c("R“,4,6,8)
z; class(z) # 모두 문자로 인식
26
R : vector operation
c(T, F, F, F, T, T, F)
x <- -3:3 # -3부터 3까지 일련 정수 생성
w <- x<2
sum(w)
fact=c(1,2,3)
fact_1=as.factor(fact) # 범주형 factor로 변환
f.log=as.logical(fact) # 논리형 데이터 객체로 변환
exp.fact=fator(c("exp1","exp2“))
fact.2=as.numeric(exp.fact) # 숫자형 데이터 객체로
변환
27
R : vector operation
x<-c(88,5,12,13)
x<-c(x[1:3],168,x[4]) # 13앞에 168을 넣음
x<-c(1,2,4)
y<-x+c(5,0,-1)
z<-x*c(5,0,-1)
zz<-x/c(5,4,-1)
x<-c(1,2,4)
yy<-x%%2
# 나누기 후 나머지를 돌려주는 연산자
28
R : vector operation
c(1,2,4,3,0)+c(6,0,9,20,22)
[1] 7 2 13 23 22
c(1,2,4)+c(6,0,9,20,22)
[1] 7 2 13 21 24
Warning message:
In c(1, 2, 4) + c(6, 0, 9, 20, 22) :
29
R : vector operation
x<-c(1,2,3)
y<-c(4,5,6)
z<-c(x,y)
# x,y vector 병합
z1<- cbind(x,y) # column 으로 병합 (가로)
dim(z1)
z2<-rbind(x,y)
# row 로 병합 (세로)
dim(z2)
30
R : vector operation
z
z+c(1,2)
#c(1,2,3,4,5,6)+c(1,2)
z+c(1,2,1,2,1,2)
[1,] 1 4
12
[2,] 2 5 + 2 1
[3,] 3 6
12
31
R : vector operation
x<-c(9,9,12,15,10,11)
length(x)
length(which(x>11)) #원소들 중 >11를 만족하는 원소 개수
which(x>11)
#원소들 중 >11를 만족하는 원소 위치
x[3]
#vector x의 3번째 원소값
x[c(2,4,5)]
#vector x의 2,4,5위치한 원소값
x[-c(3,5)] #vector x의 3,5번째 위치한 원소값을 제외하고
출력
32
R : vector operation
• 함수 사용하기
– Sum(), mean(), max(), min(), sqrt(), cumsum(), length()
x<-c(9,9,12,15,10,11)
sum(x)
length(x)
sum(x)/length(x)
mean(x)
cumsum(x)
33
R : Replicate elements of vectors
# 단순수열
xx <- 1:10 ; xx
yy <- 10:1 ; yy
# 산술수열
seq(2,10,by=2)
seq(2,10,by=3)
# 값 반복
rep(1,10); rep(1:3,3)
rep(c("A","B"),c(2,3))
34
R : 논리값과 결측값
• 논리연산자
– < , =, > , >= , == (equal), != (not equal), | (or), & (and)
xx<- 11:15
xx>13 ; xx<=15
• 결측값
– NA로 표시
– 결측값 존재여부는 is.na()함수 이용
– NULL은 불확실한 값이 아닌 아예 답이 없는 경우
35
R : 논리값과 결측값
yy<-c(1,2,3,NA,5)
is.na(yy)
mean(yy); mean(yy,na.rm=T)
# NA remove
# 1:10에서 짝수로 된 벡터를 생성
z<-NULL
for (i in 1:10) if (i %% 2==0) z<-c(z,i)
z
[1] 2 4 6 8 10
seq(2,10,2)
2*1:5
36
실습 예제
• A 회사의 2015년 월별 매출액 데이터
100, 120, 130, 124, 150, 167, 170, 163, 160, 155, 145, 157
1.
2.
3.
4.
5.
6.
7.
8.
벡터 데이터 x 생성
벡터 x에서 다섯 번째 값
벡터 x에서 첫 번째부터 세 번째까지의 데이터 값
벡터 x의 이름으로 일련번호를 부여
벡터 x에서 첫 번째 값만 제외
벡터 x에서 첫 번째와 열두 변째 데이터 값을 제외
벡터 x에서 150 이 아닌 경우만
벡터 x에서 150 이상인 경우만
37
R : matrix
y<-matrix(c(1,2,3,4),nrow=2,ncol=2)
y<-matrix(c(1,2,3,4),nrow=2)
y<-matrix(nrow=2,ncol=2)
y[1,1]<-1
y[2,1]<-2
y[1,2]<-3
y[2,2]<-4
m<-matrix(c(1,2,3,4,5,6),nrow=2,byrow=T)
# byrow=T 행우선 배열
38
R : matrix
y%*%y # 행렬 간 곱
3*y # 행렬-상수 간 곱
y+y # 행렬 간 합
z
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 1 0
[3,] 3 0 1
[4,] 4 0 0
z[,2:3]
z[3:4,]
z[3:4,3]
39
R : matrix
x
[,1] [,2]
[1,] 1 2
[2,] 2 3
[3,] 3 4
j<-x[,2]>=3
x[j,]
[,1] [,2]
[1,] 2 3
[2,] 3 4
# 2번째 열의 원소가 3보다 크거나 같은지 판단
# j의 원소 중 참인 값의 x의 행
40
R : matrix
• 4X3X2 3차원 배열에 1부터 24까지 값을 배열
g <- array(1:24, c(4,3,2))
g[1, , ]
g[, , 1]
g[ , 1 ,]
x < - array(1:120,c(5,4,3,2))
41
R : matrix
# apply( ), tapply( ), lapply( ) …
apply(m,dimcode,f)
# dimcode는 차원수로, 1인 경우 함수를
행에 적용, 2인 경우 열에 적용
m<-matrix(c(1,4,2,5,3,6),nrow=3,byrow=T)
apply(m,2,mean)
f<-function(x) x/c(2,8) #
y<-apply(m,1,f)
y
t(apply(m,1,f))
42
R : matrix
z<-matrix(1:8,nrow=4)
length(z)
class(z)
attributes(z) # matrix class 에는 dim이라는 속성을 포함
dim(z)
nrow(z)
ncol(z)
colnames(z)
colnames(z)<-c("a","b")
z[,"a"]
z[,"b"]
43
R : list
j<-list(name="Jay",salary=5000,union=T)
j$name
j$salary
z<-list(a="abc",b=12)
z$c<-"sailing"
# c 구성 요소 추가
length(z)
z[[4]]<-28
z[5:7]<-c(FALSE,TRUE,TRUE)
names(j)
uj<-unlist(j) # 문자열로 이뤄진 벡터
class
xx<-list(a=5,b=12,c=13)
y<-unlist(xx)
class(y)(uj)
44
R : list
lapply(list(1:3,25:29),mean)
# list에 apply를 적용
sapply(list(1:3,25:29),mean)
# simplified[1]apply를 단순화한 것
45
R : data frame
kids<-c("Jack","Joe","Jay")
states<-c("CA","NA","HI")
d1<-data.frame(kids,states)
d2<-data.frame(c("Joe","Jay","Jack"),c(10,7,12))
colnames(d2)<-c("kids","ages")
d<-merge(d1,d2)
46
R : Data import / export
•
•
•
•
library( ) 와 data( ) 함수 이용
변수 access
Formatted data file 읽기
Dataset file / 결과 내보내기
47
R : library( )와 data( )함수 이용
• Package는 사용할 때마다 library( ) 또는 require( )를
이용하여 load를 해야 함
– library() #설치되어 있는 모든 packages를 보여줌
– library(MASS) # load MASS package
• Package를 load하면, 해당 package에 있는 dataset들을
사용할 수 있음
– data( ) 함수를 사용하여 dataset을 load함
– library(survival)
– data(colon)
• Dataset만 load하고 싶은 경우
– data(colon, package="survival")
48
R : Dataset에 있는 변수 access
•
•
•
•
head(colon)
names(colon)
colon$age
summary(colon$age)
49
R : Dataset에 있는 변수 access
• attach( )
– Data frame 이름을 언급하지 않고 변수명만을
이용하여 분석할 수 있음
• with( )
– attach( )와 detach( )를 한꺼번에
50
R : Formatted data file 읽기
• read.table( ) : local directory에 있는 text file
불러오기
• read.csv( ) : local directory에 있는 csv file 불러오기
– data1<-read.table("test.txt",header=T,sep="\t")
• read.table( )의 default 구분자는 공백(“ “)
• header : file의 첫번째 행에 변수명이 있으면,
header=T (TRUE)
– data2<-read.table("c:\kss\text.csv",header=T)
• read.csv( )의 default 구분자는 “ , “
51
R : Data export
• write.table( )
– write.table(data1,
file="c:\kss\test_file1.txt",row.names=F,quote=F,sep="\t")
• write.csv( )
– write.csv(data2,file="test_file1.csv",row.names=F,quote=F)
• save( ) : save R object
– save(test,file="test.Rdata")
52
실습
1
2
3
4
5
6
형
86
71
77
68
91
72
동생
88
77
76
64
96
72
1. csv 파일로 만들어 brother_e.csv 로 저장
2. csv 파일에서 형과 동생 점수를 각각 elder,
younger에 저장하고 합과 평균을 구하시오
53
R : 함수(function)
• 내장(built-in) 함수
– R package에서 제공되는 함수
– 사칙연산 외의 모든 다른 계산, 분석 및 그래픽스에
이용
• 사용자 지정(user-defined) 함수
– 동일한 과정의 데이터 처리 및 분석을 수행하고자 할 때
작성
– 사용자 함수는 R package에서 제공되어지는 함수를
변경하여 작성 가능
– R편집기 창을 이용하여 스크립트로 사용자 함수 작성
54
R : 사용자 지정함수
my.f <-function(x) {
s1<-mean(x,na.rm=T)
s2<-sd(x,na.rm=T)
s3<-median(x,na.rm=T)
s4<-range(x,na.rm=T)
s5<-sum(x,na.rm=T)
return(c(Mean=s1, SD=s2, MED=s3, Min=s4[1], Max=s4[2], Sum=s5))
}
x<-rnorm(n=100,mean=10,sd=2)
my.f(x)
55
R : looping
# 반복수에 대한 정보가 있을 때
• for( )
for(i in 1:4) print(i)
# for( ) 을 이용하여 1,2,3,4, 값을 출력
예제 )
200
𝑖=100 𝑖
을 구해보자
56
R : looping
• while( )
# 어떤 조건을 만족할 때 까지 반복해야하는 경우
• repeat( )
# 멈추어야하는 조건을 만날 때까지 해당 작업을
반복하는 경우
57
R 그래프
58
R : 그래프
# graphic device 생성 : 그래프가 출력되는 장치 설정
windows( ) #Mac : quartz( ), graphics window
dev.list( )
# graphic device 목록 조회
dev.cur( )
# 현재 활성화 된 graphic device 장치
dev.set(device number)
# 활성화 된 graphic device를
변경
# device 닫기
dev.off( )
# 현재 활성화된 graphic device를 닫음
plot.new( ) # 열려져 있는 device를 닫고 새로운 device를 염
59
R : 그래프
# par( ) : graphic parameter 설정
par(mfrow=c(1,2)) # Figure region을 1ⅹ2 화면으로 나눔
pch # point character
lty #line type
col #문자나 점(points)등 출력물들의 색상을 지정
# colours( ) : R에 내장되어 있는 color list, 657가지
# 직접 색을 입력하거나, rgb( )이용하여 설정가능
cex #charater expansion, 문자나 점의 크기를 설정. Default=1
font #문자의 font 종류를 설정
#1: plain체, 2:bold체, 3:italic체, 4:bold italic체, 5:symbol
60
R : 그래프 작성
abline( )
abline(h=10)
abline(v=10)
#좌표에 직선을 그리는 함수
#x축에 평행한 직선
#y축에 평행한 직선
lines(x,y=NULL,type=“l”,…) #좌표의 점들을 이어 선을 그리는 함수
points(x,y=NULL,type=“p”,…)
#특정 좌표 위에 점을 찍는 함수
title(main=NULL,sub=NULL,xlab=NULL,ylab=NULL,…)
#그래프에
title을 출력하는 함수
text(x,y=NULL,labels=seq_along(x),…)
#좌표에 문자를 출력하는
함수
legend(x,y=NULL,legend,fill=NULL,…)
#범례를 그리는 함수
61
R : 그래프
x = (0:20)*pi/10
y = cos(x)
ysin = sin(x)
ysin2 = sin(x)^2
# x축 데이터 생성
par(mfrow = c(1,2))
yy = cbind(y, ysin, ysin2)
matplot(x, yy, type = "pll", pch="*")
그리기
plot(x,y)
lines(x, ysin, type="p", pch="*")
lines(x, ysin2)
dev.off()
# y 벡터를 결합
# matplot을 이용한 한 평면에 여러 그래프
# 그래프 그리기
# 기존 그래프에 추가하여 그리기
# 기존 그래프에 추가하여 그리기
62
R : 그래프
op = par(mfrow = c(2,2))
plot(x, y, type = "p")
# point로 된 그래프
plot(x, y, type = "l")
# line으로 된 그래프
plot(x, y, type = "b")
# both(point and line)로 된 그래프
plot(x, y, type = "p", pch=19, col="red")
# point(표시기호 19, red)로 된 그래프
par(op)
dev.off()
plot(c(0,7),c(1,7), type="n", ylab=" ", xlab=" ", axes=FALSE, main="line type")
# nothing 그래프를 그리지 않는다. 축을 그리지 않는다.
for (i in 1:6) {
lines(c(0,7), c(i, i), lty=i)
# 현재 그래프에 그리기
axis(2,at=i, labels=paste("lty=",i), las=1)
# 축 추가하기
}
dev.off()
63
R : Categorical data
# 분할표
table( )
race<-c("white","black","others")
count<-c(110,89,240)
data_race<-data.frame(race,count)
prop<-count/sum(count)*100
64
R : pie /bar graph
# pie chart
pie(prop, main="Mother’s race")
text(-0.3,0.3, "White")
text(0.3,0.3, "Black")
text(0,-0.3, "Others")
# barplot
barplot(prop, xlab="colors", ylab="proportions")
barplot(prop, xlab="colors", ylab="proportions", horiz=T)
65