본격적인 빅데이터 분석에 앞서 데이터 분석 도구인 R에 대해 알아보는 챕터입니다. 기본 문법에 대해 이미 알고 계신 분들이라면 넘어가셔도 좋습니다:)
1. R의 이해
1) R이란?
: 통계분석, 그래픽 표현, 보고 작성을 위한 프로그래밍 언어 및 소프트웨어 환경
- 통계분석
- 선형 및 비선형 모델링, 통계 검정, 시계열 분석, 분류, 군집화 등의 기능
- 그래픽 표현 및 보고 작성
- 막대형 그래프, 원형 그래프, 3차원 그래프 등 출력
- GNU GPL Version2 라이센스에 의하여 관리
- Windows, Linux, Mac 등 다양한 운영체제 환경 지원
2) R의 특징
- 효과적인 데이터 핸들링 및 저장소 기능
- 선형대수 연산에 적합한 연산자 제공
- 일관성 있으며 통합된 데이터 분석 도구
- 데이터 분석의 그래픽 및 출력 기능
- 견고하면서도 간결하고 효과적인 프로그래밍 언어
(조건문, 루프, 사용자 정의 재귀 함수, 입출력 기능 등)
3) R 설치 및 RStudio 설치
2. R 기본 문법
1) 기본문법
대입(할당) 연산자의 사용
- < -연산자 or - > 연산자를 이용 하여 변수에 값 대입
주석의 사용 #
- comments : 실제로 실행되지 않는 코드의 메모
2) 변수의 사용
■ 변수 Variables
- 모든 변수는 문자 , 숫자 , 점 '.' , 밑줄 '_' 만 사용 가능
- 첫번째 문자는 숫자와 문자_로 시작할 수 없음
- 첫번째 문자가 점.인 경우 두번째 문자는 숫자 외 사용
■ 변수 관련 함수
- class() : 변수의 데이터형을 알아내기 위한 함수
- character 문자형
- numeric 숫자형
- integer 정수형
- Logical 논리형
- complex 복소수형
- raw 원형
- ls() : 현재 사용하고 있는 변수의 목록 출력
- 사용하고 있는 변수 중 글자’v’을 포함하는 변수 보기
ls(pattern=”v”) [l] “v”
- rm() : 변수를 지우는 함수
3) 데이터형 Data Types
: R에서 기본으로 지원하는 데이터형(데이터를 담는 그릇의 형태)
■ 데이터형의 종류
- 논리형Logical
- True, False의 값을 가짐
- 숫자형 numeric
- 실수를 표현하기 위한 데이터형
- 정수형 integer
- 소수점이 없는 정수를 표현(숫자+L)
i<-1147L
class(i)
[l] "integer"
- 복소수형 complex
- 복소수를 표현하고자 할 때 사용(실수+허수)
c<-3+5i
class(c)
[l] "complex"
- 문자형 character
- 문자 또는 문자열을 표현할 때 사용
- 원형 raw
- 날것, 변형이 되지 않은 데이터
- 컴퓨터 시스템에서 표현하는 기본 형태
r<-charToRaw("hello")
r
[l] 68 65 6c 6c 6f
4) R객체(R-Object)
: R에서 지원하는 특수한 형태의 객체object
■ 자주쓰는 R객체들
ⓐ 벡터Vector
- 다수의 값을 담고 있는 R객체
- 내부 데이터는 한가지 데이터형으로 통일
v<-c('hello', 3.14) #문자형과 숫자형 혼용
class(v)
[l] "character" #문자형으로 통일
v
[l] "hello" "3.14"
ⓑ 리스트lists
- 서로 다른 유형의 데이터를 담을 수 있는 R객체
l<-list("hello", 3.14) #문자형과 숫자형 혼용
class(l)
[l] "list" #리스트형으로 취급
l
[[1]]
[l] "hello"
[[2]]
[l] 3.14
ⓒ 행렬matrices
- 행과 열로 이루어진 2차원 데이터 집합
m<-matrix(c(2,3,1,5), nrow=2,ncol=2)
class(m)
[l] "matrix"
m
[,1] [,2]
[1,] 2 1
[2,] 3 5
ⓓ 배열arrays
- 다차원으로 구성된 데이터 집합
** 차원의 설정에 따른 배열의 변화
-
- 1차원으로 설정 →배열Arrays 취급
- 2차원으로 설정 →행열Matrix 취급
- 3차원 이상으로 설정 →배열Arrays로 취급
: 선형계수를 쉽게 표현하기 위한 장치
ar1<-array(c(1,2,3,4),dim=c(4))
ar2<-array(c(1,2,3,4),dim=c(2,2))
ar3<-array(c(1,2,3,4),dim=c(1,2,2))
class(a1) [l] "array"
class(a2) [l] "matrix"
class(a3) [l] "array"
a3
, , 1
[,1] [,2]
[1,] 2 3
, , 2
[,1] [,2]
[2,] 3 4
ⓔ 요인factors(범주)
- 데이터의 값Value과 레이블Label을 함께 표현
- 객체가 구축되며 데이터가 자동으로 분석되므로 통계적 모델링과 분석에 유용
v<-c("kim","kim","han","lee","lee","kim")
vf<-factor(v)
vf
[l] kim kim han lee lee kim
levels : han kim lee
class(vf)
[l] "factory"
ⓕ 데이터프레임data frames
- 표의 형태로 정리된 데이터 객체의 일종
- 열Column과 행row의 이름name을 지정 가능
- 열마다 서로 다른 데이터형을 가질 수 있음
- 숫자형numeric, 요인factor, 문자형character외의 다른 데이터를 저장할 수 없음
- 열마다 같은 수의 데이터를 포함하여야 함
5) 연산자
■ 산술연산자 Arithmetic Operators
-
- a+b : 덧셈 후 결과 반환
- a-b : 뺏셈 후 결과 반환
- a*b : 곱셈 후 결과 반환
- a/b : 나눗셈 후 결과 반환
- a%%b : 나눗셈 후 나머지 반환
- a%/%b : 나눗셈 후 몫 반환
- a^b : a의 b승을 계산
■ 관계연산자 Relational Operators → 결과는 TRUE/FALSE
-
- a>b : a가 b보다 큼
- a≥b : a가 b보다 크거나 같음
- a==b : a와 b의 값이 서로 같음
- a! =b : a와 b의 값이 서로 다름
■ 논리 연산자 Logical Operators
-
- a&b : a와 b의 각 성분별로 AND 연산 결과
- a|b : a와 b의 각 성분별로 OR 연산 결과
- !a : a의 논리 결과를 반대로 변환(NOT)
- a&&b : a와 b의 첫번째 원소에 대하여 AND연산 결과
- a||b : a와 b의 첫번쨰 원소에 대하여 OR연산 결과
■ 대입(할당) 연산자 Assignment Operators
-
- b의 값을 a에 대입(할당) : a< -b, a=b, a<< -b
- 모두 같은 결과(취향이나 회사/팀 작업하는 규칙에 따라 결정)
■ 기타연산자 Miscellaneous Operators
-
- a:b : 시작값은 a이고 끝값은 b보다 작거나 같은 벡터를 생성
- a%in%b : a가 b의 성분인 경우 TRUE, 그렇지 않은 경우False
- a%*%b : a와 b가 행렬 R객체인 경우, 행렬 간 곱셈을 수행
(a,b,c,d)
(p,q,r,s)
(a c) (p r) (ap+br ar+cs)
(b d) (q s) (bp+dq br+ds)
6) 의사결정Decision Making 구조
: 하나 이상의 조건을 평가(또는 테스트)하여 그 결과에 따라 다양한 흐름으로 명령문을 수행하는 구조
■ 의사결정 구조의 용도
ⓐ if문 : 조건이 참일 때만 명령문을 수행
- 조건이 TRUE인 경우에만 명령문 수행
- 가장 단순한 의사결정 구조
if(조건){
#조건이 참인 경우 수행하는 명령문
}
ⓑ if~ else문 : 조건에 따라 별개의 명령문을 수행
- 조건이 참인경우와 거짓인 경우 서로 다른 명령문을 수행하는 의사결정 구조
if(조건){
#조건이 참인 경우 수행하는 명령문
}else{
#조건이 거짓인 경우 수행하는 명령문
}
ⓒ swich문 : 다양한 값의 조건에 따라 별개의 명령문을 수행
- 조건이 일치하는 경우CASE의 명령문을 실행
- 조건이 다수로의 분기를 가질 때 유리
- 다른 프로그램 언어와 달리 기본 값Default이 없음
#문법
switch(조건, case1,case2,...->caseN)
#예시
x<- "han"
switch(x, "kim"="김", "lee"="이", "han"="한")
[l] "한"
7) 루프 Loop
: 특정한 명령문을 조건에 따라 여러 번 실행하고자 할 때 사용하는 구조
■ 종류
ⓐ repeat loop
- 무한히 반복하여 명령문을 실행하는 루프 구조
- if문과 break를 사용하여 반복에서 탈출 할 수 있음
#문법
repeat{
#반복하여 실행할 명령문
}
#예시
i<-1
repeat{
i<-i+1 if(i==3){
print(i) break
}
}
[l] 3
ⓑ while loop
- 조건이 참이면 동일한 명령문을 다시 실행하는 루프
- 명령문의 실행 결과에 따라 조건이 거짓이 되면 반복문으로부터 탈출하는 것이 가능
#문법
while(조건){
#조건이 참이면 반복하며 실행할 명령문
}
#예시
i<-1
while(i<3){
i<-i+1
}
i
[l] 3
ⓒ for loop
- 벡터의 각 성분에 따라 반복하는 루프 구조
- 벡터의 성분의 위치index에 일일히 접근하지 않으므로 벡터 성분별 명령문을 수행하는 구조일 때 유리
- 벡터의 성분의 값을 대입하기 위한 변수 지정 필요
#문법
for(value in vector){
#각 성분별 실행할 명령문
}
#예시
v<-c(2,3,5,7,10)
s<-0
for(ve in v){
s<-s+ve
}
print(s)
[l] 27
■ 루프 제어 명령문
ⓐ break문
- 현재 실행중인 루프문을 중단하고, 루프문 이후 명령문부터 실행하는 루프 제어 명령문
ⓑ next문
- 현재 실행중인 루프문을 중단하고, 루프문의 처음으로 되돌아가 명령문을 실행하도록 흐름을 제어하는 루프 제어 명령문
v<-1:10
for(ve in v){
if(ve%%2 != 0){ # %%는 나머지 연산자 즉 짝수일때는 %%2값은 0, 홀수는 %%2=1
next
}
print(ve)
} #짝수만 출력하게 하는 구조
[l] 2
[l] 4
[l] 6
[l] 8
[l] 10
**적용 방법은 if문 들을 이용하여 사용하는 것이 일반적
8) 함수 Functions
: 특정한 작업을 수행하는 명령문과 구조를 나열한 집합
■ 분류
ⓐ 기본함수 Buil-in Functions
: R에서 기본으로 정의되어 있는 함수
ⓑ 사용자 정의 함수 User-defined functions
: 사용자가 자신의 목적에 맞게끔 함수명, 명령문, 실행구조, 입력인자, 출력인자를 지정한 함수
- 구성요소
- 필수요소 : 함수명, function키워드, 중괄호 등
- 선택요소 : 입력인자, 출력인자, 입력인자명 등
#문법
<함수명><-function(입력인자명1=입력인자1,...){
# 함수가 호출되면 실행할 명령문 및 구조
}
# 예시 myfunc<-function(v){
s<-0
for(ve in v){
s<-s+v
}
return(s) #함수를 호출한 쪽으로 반환
}
myfunc(c(2,3,7))
[l] 6,9,21
■ 함수의 사용
- 함수의 호출 Function Calling
<함수명>(입력인자1, 입력인자2...)
>> mean(c(88,96,92)) # mean과 C함수 호출
<함수명>(입력인자명1=입력인자1, 입력인자명2=입력인자2...)
'>> png(file="result.png") #입력인자명을 지정하여 호출
'시간 관리 및 생산성 도구 > 빅데이터' 카테고리의 다른 글
[이론]11.데이터 시각화 :정의와 기술 (0) | 2022.09.03 |
---|---|
[이론]8.데이터마이닝의 정의,적용분야,방법론,적용사례 (0) | 2022.08.26 |
데이터 분석도구 R, R Studio 설치하기 (0) | 2022.08.24 |
[이론]5. 빅데이터의 저장소 설계와 관리 (0) | 2022.08.23 |
[이론]4. 데이터의 분류와 수집: 방법론, 도구 (0) | 2022.08.23 |
댓글