[ADsP]2.R 프로그램 기초

😃

요즘의 대세는 python이야!! 라고 많은 이들이 외치지만 전통적인 분석 언어 R도 많이 사용된다. 분석가에 따라서 R을 쓰기도하고 python을 쓰기도 해서, 많은 프로젝트들에서 R과 python 모두를 만족하는 환경을 제공하고 있다(일반적으로는 sparkR/pySpark로 분산환경에서 학습/분석작업을 수행하고 있다). 이번 장에는 간단히 R로 분석을 하기 위한 간단한 문법을 알아보자!!


R소개

R은 오픈소스 프로그램으로 통계 및 데이터마이닝과 그 결과를 그래프를 위한 언어이다. 오픈소스이기 때문에 지속적으로 최신의 통계분석과 데이터 마이닝 기술이 반영되어 발전되고 있다. 새로운 것을 이해하는데 가장 좋은 방법 중 하나는 기존에 친숙한 도구들과 비교하는 것이다. (물론 저와 같이 모든게 새로운 분들도 계시겠지만 😓 )

특징 SAS SPSS(IBM) R
프로그램 비용 상용/고가 상용/고가 오픈소스/무상
설치용량 작음
모듈 지원 및 비용 별도구매 별도구매 오픈소스로 제공
최근 알고리즘 및 기술 반영 느림 다소느림 매우빠름
러닝커브 유료 문서 유료 문서 공개 논문/자료 많음
커뮤니티 활성도 낮음 낮음 높음

R특징

  1. 오픈소스이다.
  2. 모든 OS에서 사용가능
  3. 객체지향/함수형 언어로 사용가능하다
  4. S통계언어를 기반으로 업계 표준이다
  5. 그래픽 요소가 강하고 성능이 좋다
  6. 세션 사이마다 시스템이 데이터셋을 저장하여 데이터 적재시간을 줄인다.

문법

  1. 변수선언 / 간단한 연산

    > 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 : 이항연산자에 수치가 아닌 인수입니다
    
  2. 수열

    > 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)
    
  3. 반복

    > 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
    
  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"
    
  5. 논리연산

    > 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
    
  6. 벡터 기초 통계

    > 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
    
  7. 기타

    >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
    
    
  8. 헷갈리는 문법

    > 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
    

정리

  1. R은 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경이다.
  2. 뉴질랜드 오클랜드 대학의 로스 이하카와 로버트 젠틀맨 😎 에 의해서 시작되어 현재는 R코어 팀이 개발하고 있다.
  3. R은 GPL(Gerneral Public License) 하에 배포되는 S 프로그래밍 언어 (통계를 위한 언어)로 구현되어 GNU S라고 한다. (GUN is not unix)
  4. S언어 기반 표준 플랫폼이다.
  5. 모든 OS에서 사용가능하다
  6. 메모리 저장방식이다.
  7. 객체지향 언어이며 함수형 언어이다.
  8. 오픈소스 프로그램으로 무료이다.