[ADsP]2.R 프로그램 기초
😃
요즘의 대세는 python이야!! 라고 많은 이들이 외치지만 전통적인 분석 언어 R도 많이 사용된다. 분석가에 따라서 R을 쓰기도하고 python을 쓰기도 해서, 많은 프로젝트들에서 R과 python 모두를 만족하는 환경을 제공하고 있다(일반적으로는 sparkR/pySpark로 분산환경에서 학습/분석작업을 수행하고 있다). 이번 장에는 간단히 R로 분석을 하기 위한 간단한 문법을 알아보자!!
R소개
R은 오픈소스 프로그램으로 통계 및 데이터마이닝과 그 결과를 그래프를 위한 언어이다. 오픈소스이기 때문에 지속적으로 최신의 통계분석과 데이터 마이닝 기술이 반영되어 발전되고 있다. 새로운 것을 이해하는데 가장 좋은 방법 중 하나는 기존에 친숙한 도구들과 비교하는 것이다. (물론 저와 같이 모든게 새로운 분들도 계시겠지만 😓 )
특징 | SAS | SPSS(IBM) | R |
---|---|---|---|
프로그램 비용 | 상용/고가 | 상용/고가 | 오픈소스/무상 |
설치용량 | 큼 | 큼 | 작음 |
모듈 지원 및 비용 | 별도구매 | 별도구매 | 오픈소스로 제공 |
최근 알고리즘 및 기술 반영 | 느림 | 다소느림 | 매우빠름 |
러닝커브 | 유료 문서 | 유료 문서 | 공개 논문/자료 많음 |
커뮤니티 활성도 | 낮음 | 낮음 | 높음 |
R특징
- 오픈소스이다.
- 모든 OS에서 사용가능
- 객체지향/함수형 언어로 사용가능하다
- S통계언어를 기반으로 업계 표준이다
- 그래픽 요소가 강하고 성능이 좋다
- 세션 사이마다 시스템이 데이터셋을 저장하여 데이터 적재시간을 줄인다.
문법
-
변수선언 / 간단한 연산
> a <-3 > b <-4 > a+b [1] 7 > a=5 > a+b [1] 9 > a [1] 5 > print(a) [1] 5 > arr_a =c(1,2,3,4) > arr_b =c("hello","it","is","me") > arr_b[0] character(0) > arr_b[1] [1] "hello" > arr_b[2] [1] "it" > arr_b[-2] [1] "hello" "is" "me" > arr_c <-c(5,6,7,8) > arr_a+arr_c [1] 6 8 10 12 > arr_a+arr_b Error in arr_a + arr_b : 이항연산자에 수치가 아닌 인수입니다
-
수열
> 1:5 [1] 1 2 3 4 5 > 9:-2 [1] 9 8 7 6 5 4 3 2 1 0 -1 -2 > seq(from=0,to=20,by=2) [1] 0 2 4 6 8 10 12 14 16 18 20 > seq(from=0,to=20,length.out=5) [1] 0 5 10 15 20 > sec(0,20,2)
-
반복
> rep(1,time=5) [1] 1 1 1 1 1 > rep(1:4,each=2) [1] 1 1 2 2 3 3 4 4 > arr=c(1,2,3,4) > rep(arr,3) [1] 1 2 3 4 1 2 3 4 1 2 3 4 > rep(arr,each=2) [1] 1 1 2 2 3 3 4 4
-
문자열
> str_a = paste("a","b","c","d","-") > str_a [1] "a b c d -" #기본값은 space > str_a = paste("a","b","c","d",sep="-") > str_a [1] "a-b-c-d" > str_i=paste(1,2,3,4,sep="-") > str_i [1] "1-2-3-4" #숫자형도 문자로 변환되어 연결 > str_c=paste(arr,"a") > str_c [1] "1 a" "2 a" "3 a" "4 a" > str_c=paste(arr,"a","b") #combine 타입도 사용가능 > str_c [1] "1 a b" "2 a b" "3 a b" "4 a b" > str_c=paste(arr,"a","b",sep="-") > str_c [1] "1-a-b" "2-a-b" "3-a-b" "4-a-b"
-
논리연산
> a=true 에러: 객체 'true'를 찾을 수 없습니다 > a=True 에러: 객체 'True'를 찾을 수 없습니다 > a=t #t라는 함수가 있나보다 > a function (x) UseMethod("t") <bytecode: 0x0000000004beb650> <environment: namespace:base> > a=T > a [1] TRUE > a=true 에러: 객체 'true'를 찾을 수 없습니다 > a=True 에러: 객체 'True'를 찾을 수 없습니다 > a=t > a function (x) UseMethod("t") <bytecode: 0x0000000004beb650> <environment: namespace:base> > a=T > a [1] TRUE > b=F > b [1] FALSE > a&b [1] FALSE > a&!b [1] TRUE > a&&b [1] FALSE > a&&!b [1] TRUE > a|b #비트연산을 지원하지 않는다. [1] TRUE > a>b [1] TRUE > a<b [1] FALSE > a==b [1] FALSE
-
벡터 기초 통계
> v1=c(4,4,5,6,8) > sum(v1) #합 [1] 27 > mean(v1) #평균 [1] 5.4 > median(v1) #중앙값 [1] 5 > len(v1) Error in len(v1) : 함수 "len"를 찾을 수 없습니다 > length(v1) #길이 [1] 5 > log(v1) #로그 [1] 1.386294 1.386294 1.609438 1.791759 2.079442 > sd(v1) #표준편차 [1] 1.67332 > var(v1) #분산 [1] 2.8 > v2=c(7,6,4,2,1) > cov(v1,v2) #공분산 [1] -4 > cor(v1,v2) #상관계수 [1] -0.9376145
-
기타
>getwd() #현재 작업공간 출력 [1] "C:/Users/Desmond/Documents" > dir.create("./Rmade") #디렉토리 생성 > setwd("./Rmade") #작업공간 변경 > getwd() [1] "C:/Users/Desmond/Documents/Rmade" > history() #명령어 이력 확인 > savehistory(file="./myhistory.log") #히스토리 저장 > loadhistory(file="./myhistory.log") #히스토리 로드 > library(help=AID) #다운로드 된 AID패키지의 help문서 확인 > help(package=AID) #웹에서 AID패키지 문서 확인 starting httpd help server ... 완료 > source("myScript.r") # 외부 스크립트 수행 > sink("result.out") # 출력 결과를 외부 파일로 변경 > pdf("result.pdf") # 그래픽 출력 결과를 pdf파일로 지정 > dev.off() # 파일 닫기 > install.packages("AID") # R studio 기능 -- # 배치 수행 w CLI $> R CMD BATCH ./script/myScript.r
-
헷갈리는 문법
> n=-4 > 1:n [1] 1 0 -1 -2 -3 -4 > 1:(n+1) [1] 1 0 -1 -2 -3 > 1:n+1 #결과에 +1을 함 [1] 2 1 0 -1 -2 -3
> n [1] 1 > n< -1 #변수입력 시 붙여서 써야됨 [1] FALSE
정리
- R은 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경이다.
- 뉴질랜드 오클랜드 대학의 로스 이하카와 로버트 젠틀맨 😎 에 의해서 시작되어 현재는 R코어 팀이 개발하고 있다.
- R은 GPL(Gerneral Public License) 하에 배포되는 S 프로그래밍 언어 (통계를 위한 언어)로 구현되어 GNU S라고 한다. (GUN is not unix)
- S언어 기반 표준 플랫폼이다.
- 모든 OS에서 사용가능하다
- 메모리 저장방식이다.
- 객체지향 언어이며 함수형 언어이다.
- 오픈소스 프로그램으로 무료이다.