R이란 데이터를 분석을 위해 사용되는 소프트웨어입니다
범용적인 분석 툴로 아래와 같은 다양한 적용 분야를 찾아볼 수 있습니다.
- 통계분석
- 머신러닝 모델링
- 데이터 마이닝
- 소셜 네트워크 분석
- 지도 시각화
- 주식 분석
- 이미지 분석
- 사운드 분석
- 웹 어플리케이션 개발
*설치전 주의사항
: 운영체제 사용자 계정명이 한국어
인 경우 경로를 정상적으로 읽지 못해 오류가 생깁니다.
먼저 R을 이용한 데이터 분석순서의 흐름은 아래와 같습니다.
패키지불러오기-> 데이터 읽기 -> 데이터 가공 -> 데이터 저장 및 시각화
패키지 불러오기는 추후에 설명하도록 하고 먼저 데이터와 관련해서 정리하겠습니다.
데이터를 다루기 위해서는 먼저 데이터 타입과 데이터 구조에 대해서 알아야 합니다.
타입이름 | 타입종류 | 예제 |
---|---|---|
Numeric | 실수형 | 1, 12.3 |
Integer | 정수 | 1L, 23L |
Complex | 복소수 | 3+2i |
Character | 문자 | “Hello”, “대구”, “12345” |
Logical | 논리 | TRUE, FALSE, T, F |
Factor | 범주 | 1, 2, a, b |
Date | 날짜 | “2018-07-03”, “19/01/01” |
mode(변수명)
함수를 이용해서 데이터 타입을 확인할 수 있습니다.
R의 경우 데이터 타입을 선언하고 사용하지 않기 때문에, 추후 사용하는 변수의 자료형이 어떤 것인지 혼란이 올 수 있습니다. 이 때 이 함수를 이용해서 데이터 타입을 파악할 수 있습니다.
str_data <- "Hello World" # '<-'를 대신해서 '='도 호환가능
int_data <- 123456789
bool_data <- T
mode(str_data)
## [1] "character"
mode(int_data)
## [1] "numeric"
mode(bool_data)
## [1] "logical"
myfct = factor(c("a","b","c","d"))
print(myfct)
## [1] a b c d
## Levels: a b c d
구조이름 | 구조설명 |
---|---|
스칼라(Scala) | 정수, 실수, 문자, 문자열 등 값 하나 |
벡터(Vector) | 스칼라 값들이 여러개 모인 형태 |
매트릭스(Matrix) | 2차원 벡터를 의미 |
배열(Array) | 2차원 이상의 벡터를 의미 |
리스트(List) | 항목 순서가 중요한 벡터 |
데이터 프레임(data.frame) | 칼럼(Column)마다 다른 타입을 가짐 |
typeof(변수)
로 벡터타입을 확인할 수 있다.c( )
를 이용하여 여러 값으로 구성할 수 있다.a <- 3
print(a)
## [1] 3
b <- 3.14
print(b)
## [1] 3.14
c <- c(2,4,6,8,10) #combine 함수를 이용해서 벡터 생성
print(c)
## [1] 2 4 6 8 10
d <- 1:10 # 1~10까지
print(d)
## [1] 1 2 3 4 5 6 7 8 9 10
e <- seq(2,3, by=0.5) #2~3까지 0.5 간격으로
print(e)
## [1] 2.0 2.5 3.0
f <- rep(1:2, times=3) #1~2까지 숫자를 3번 반복
print(f)
## [1] 1 2 1 2 1 2
g <- rep(1:2, each=3) #1~2까지 숫자를 각각 반복
print(g)
## [1] 1 1 1 2 2 2
벡터접근은 벡터의 [인덱스]
를 통해 접근할 수 있습니다.
c <- 10:20 # c : 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
c[3] #3번째 인덱스, R의 인덱스는 1부터 시작
## [1] 12
c[-3] # 3번째 인덱스를 뺀 나머지
## [1] 10 11 13 14 15 16 17 18 19 20
c[1:5] # 1~5 인덱스의 값 출력
## [1] 10 11 12 13 14
c[c(1,3,5,7,9)] #1,3,5,7,9번째 인덱스 값 출력
## [1] 10 12 14 16 18
c[c==14]; c[c==24] # c의 값이 14인 인덱스와 24인 인덱스를 출력 한줄에 나타낼 경우 ';'로 표시
## [1] 14
## integer(0)
c[c>5] # 5보다 큰 값을 출력
## [1] 10 11 12 13 14 15 16 17 18 19 20
c[c %in% c(2,4,6,8,10)] # %in% 벡터내 특정값 포함 여부
## [1] 10
c['2'] # NA는 결측치를 의미한다
## [1] NA
벡터의 성분은 숫자로 된 인덱스 대신 이름을 가질 수도 있습니다.
food <- c(1,2,3)
names(food) <- c("apple","banana","coke") #naems : 객체의 이름을 알안내거나 부여할 때 사용
food["banana"] ; print(food)
## banana
## 2
## apple banana coke
## 1 2 3
food2 <- setNames(c(1, 2, 3), c("apple", "melon", "peach")) #setNames : 객체이름부여
print(food2)
## apple melon peach
## 1 2 3
아래의 함수들은 벡터의 편리한 이용을 위해 내장된 기본 함수들입니다.
x <- c(4,5,1,2,3,8,9,10)
length(x) # 벡터 길이 계산 (인덱스 갯수)
## [1] 8
sort(x) #x를 오름차순으로 정렬된 벡터 반환
## [1] 1 2 3 4 5 8 9 10
rev(x) #x를 역순으로 정렬된 벡터 반환
## [1] 10 9 8 3 2 1 5 4
table(x) #x내 항목의 빈도수 반환
## x
## 1 2 3 4 5 8 9 10
## 1 1 1 1 1 1 1 1
unique(x) #x내 항목 목록 반환, 중복은 1번만 표현
## [1] 4 5 1 2 3 8 9 10
append(x,3,after=3) # x벡터의 3번째 인덱스 뒤에 3이라는 숫자를 삽입후 벡터 반환
## [1] 4 5 1 3 2 3 8 9 10
x = append(x,-100,after=0) #x의 맨앞에 -100을 삽입 후 벡터 반환
x_set = unique(x) # 반환된 벡터를 다른 변수에 넣어서 사용 가능
print(x_set)
## [1] -100 4 5 1 2 3 8 9 10
함수명 | 설명 |
---|---|
log(x)/exp(x) | 항목별 로그/지수 계산 |
max(x)/min(x) | 항목의 최대값/최소값 반환 |
round(x,n)/signif(x,n) | 항목별 반올림 |
cor(x,y) | 항목별 상관분석(상관계수) 계산 |
cov(x,y) | 공분산 계산 |
sum(x) | 벡터의 항목 합 |
mean(x) | 벡터의 항목 평균 |
median(x) | 벡터의 항목 중앙 값 |
quantile(x) | 벡터의 사분위 값 계산 |
rank(x) | 벡터의 항목별 순위 |
var(X) | 벡터의 분산 값 |
sd(x) | 벡터의 표준편차 |
range(x) | 최대값 최소값의 차이 |
m1 = matrix(c(1:12), ncol=3) #default : 열 기준
m2 = matrix(c(1:12), ncol=3, byrow= TRUE) #행 기준으로 데이터 값이 들어감
print(m1) ; print(m2)
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
mtx = matrix(c(1:12), ncol=3) #default : 열 기준
mtx[2,] #2번 행
## [1] 2 6 10
mtx[,2] #2번 열
## [1] 5 6 7 8
mtx[2,3] #2행 3열
## [1] 10
mtx[2:3,1:3] #2,3행~1,2,3열까지
## [,1] [,2] [,3]
## [1,] 2 6 10
## [2,] 3 7 11
arr=array(1:20, dim=c(2,5,2)) #array(벡터,dim=c(행,열,갯수)) dim=dimension
print(arr)
## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 9
## [2,] 2 4 6 8 10
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 11 13 15 17 19
## [2,] 12 14 16 18 20
#리스트명 = list(이름=벡터, 이름. 벡터, 이름 = 매트릭스, 이름 = 배열)
a=1; b='a'; c=matrix(c(1:12),ncol=3, byrow=TRUE); d= array(1:20,dim=c(4,5,1))
mylist = list(f1=a, f2=b, f3=c, f4=d)
print(mylist)
## $f1
## [1] 1
##
## $f2
## [1] "a"
##
## $f3
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
##
## $f4
## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
# data.frame(컬럼명=벡터, 컬럼명 = 벡터, ...)
df= data.frame(number=c(1,2,3),color=c("red","green","blue"))
print(df)
## number color
## 1 1 red
## 2 2 green
## 3 3 blue
nrow(df) #행의 수
## [1] 3
ncol(df) #열의 수
## [1] 2
dim(df) #행과 열의 수
## [1] 3 2
df= data.frame(number=c(1,2,3),color=c("red","green","blue"))
df[,2] #2 번째 열
## [1] red green blue
## Levels: blue green red
df[,1:2] # 1~2번째 열
## number color
## 1 1 red
## 2 2 green
## 3 3 blue
df[2,] # 2번째 행
## number color
## 2 2 green
df['number'] # number 열
## number
## 1 1
## 2 2
## 3 3
df[c('number','color')] #number, color 열
## number color
## 1 1 red
## 2 2 green
## 3 3 blue
df$color # df내 color 컬럼
## [1] red green blue
## Levels: blue green red
특정 동작을 반복할 경우, 반복문
을 통해 표현할 수 있습니다.
for
vector <- c(1,2,3,4,5)
sum = 0
for(temp in vector){ #변수명 in 범위
sum = sum+temp
}
print(sum)
## [1] 15
while
While(조건){
반복할 코드
}
특정 조건에 따라 다르게 분기시켜 동작할 수 있습니다.
if(조건){
# 조건이 참일 때 실행
}else{
# 조건이 거짓일 때 실행
}
data <- 10
result <- ifelse(data <0,-1,1) #ifelse(조건,참,거짓)
print(result)
## [1] 1
자주 사용하는 코드는 함수로 묶어서 호출할 수 있습니다.
함수명 = function(인자){
#함수의 기능을 코드 작성
}
조건을 표현할 때 이 비교연산자를 이용할 수 있습니다.
연산자 | 설명 |
---|---|
a==b | a와 b가 같다 |
a!=b | a와 b가 같지 않다 |
a>b | a가 b보다 크다 |
a>=b | a가 b보다 크거나 같다 |
a<b | a가 b보다 작다 |
a<=b | a가 b보다 작거나 같다 |
is.na(a) | a값이 없는지(결측치) |
is.null(a) | a값이 null인지 |