본문 바로가기

STATISTICS/ADsP

3-2. R프로그래밍 기초

[R 소개]

1. R의 탄생

  • R은 오픈소스 프로그램으로 통계, 데이터마이닝과 그래프를 위한 언어
  • 다양한 최신 통계분석과 마이닝 기능을 제공하며, 5,000개에 이르는 패키지 수시 업데이트

2. 통계분석 도구의 비교

구분 SAS, SPSS R
프로그램 비용 유료, 고가 오픈소스
설치용량 대용량 모듈화로 간간
다양한 모듈 지원 및 비용 별도구매 오픈소스
최근 알고리즘 및 기술반영 느림 매우빠름
학습자료 입수의 편의성 유료 도서 위주 공개 논문 및 자료 많음
질의를 위한 공개 커뮤니티 NA 매우 활발

 

3. R의 특징

  • 오픈소스 프로그램
  • 뛰어난 그래픽 및 성능
  • 시스템 데이터 저장 방식
  • 모든 운영체제에서 사용 가능(윈도우, 맥, 리눅스)
  • 표준 플랫폼(S 언어 기반)
  • 객체 지향 언어이면서 함수형 언어

 

[R 기초]

1. 편리한 기능

  • R의 작업환경 설정: R단축아이콘 우측클릭 -> 속성 -> 바로가기 -> 시작위치에 현재 작업위치를 입력 -> 저장
  • 프로그램에서 작업환경 설정: setwd("작업디렉토리")
  • 도움말: help(함수), ?함수, RSite Search("함수명")
  • 히스토리: history(), savehistory(file="파일명"), loadhistory(file="파일명")
  • 콘솔 청소: Ctrl+L

2. 스크립트 사용하기

  • 한줄 실행: Ctrl+R
  • 여러줄 실행: 드래그 후 Ctrl+R
  • 주석처리:  #

3. 패키지

  • 패키지: R 함수, 데이터 및 컴파일 코드의 모임
  • 자동설치: install.packages("패키지명")
  • 수동설치: install.packages("패키지명", "패키지 위치")

4. 배치 실행

  • 매일 실행되어야 하는 프로그램을 시스템에서 프로세스에서 자동으로 구동하는 작업
  • 배치파일 실행 명령: 윈도우 창에서 batch.R 실행파일이 있는 위치에서 R CMD BATCH batch.R
  • Path 지정: 내컴퓨토에 오른쪽 마우스 클릭 -> 속성 -> 고급시스템 설정 -> 환경변수 클릭 -> 변수명이 path 클릭 -> R프로그램의 실행파일의 위치 찾아서 추가 -> 저장

5. 변수 다루기

  • R에서는 변수명만 선언하고 값을 할당하면 자료형태를 스스로 인식하고 선언
  • 화면에 프린트하고자 할 때 print()를 사용해도되비만, 변수 값만 표현해도 내용 출력
  • 변수에 값을 할당할 때는 대입연산자(<-,<<-,=,->,->>) 사용 가능하나 <- 추천
  • 메모리에 불필요한 번수가 있는지 확인하기 위해서는 ls()를, 삭제는 rm() 활용

6. 기본적인 통계량 계산: mean(), median(), sd(), var(), cov(), cor()

7. 함수의 생성 및 활용

  • R은 함수형 언어이기 떄문에 프로그래머가 직접 활용 가능한 함수를 생성하여 활용 가능
  • 함수는 function(매개변수1, 매개변수2,...) 선언하고 표현식이 2줄 이상인 경우 {}로 묶어서 함수 범위 설정
  • 표현식은 변수 할당, 조건문(if문)과 반복문(for문, while문, repeat문), 전달값(return)으로 구성

 

[입력과 출력]

1. 데이터 입력과출력

  • R에서는 텍스트 데이터 분만 아니라 데이터베이스와 다양한 통계프로그램에서 작성된 데이터를 불러들여서 적절한 데이터 분석 수행 가능
  • 부동소수점 표현시 7자리 수를 기본으로 셋팅되어 있으며, option()함수, digit="숫자"를 지정해서 자릿수 변경
  • 문자열을 파일로 저장하고자 할 때 : cat("저장할 문자열", file="파일명")
  • 역슬래쉬(\) 인식 못하므로 슬래쉬(/) 또는 이중 역슬래쉬(\\)로 파일 경로 지정

2. 외부 파일 입력과 출력

  • 고정자리 변수 파일 : read.fwf("파일명", width=c(w1, w2, ...))
  • 구분자 변수 파일 : read.table("파일명", sep="구분자")
  • csv 파일 읽기 : read.csv("파일명", header=T) # 1행이 변수인 경우: header=T
  • csv 파일 출력 : write.csv(데이터프레임, "파일명")

3. 웹페이지에서 데이터 읽어오기

  • 파일 다운로드 : read.csv(http://www.example.com/download/data.csv)
  • ftp에서 파일 다운로드 : read.csv(ftp://ftp.example.com/download/data.csv)
  • html에서 테이블 : readHTMLTable("url")

 

[데이터 구조와 데이터 프레임]

1. 벡터 Vector

  • 벡터들은 동질적
  • 위치로 인덱스
  • 인덱스를 통해 여러 개의 원소로 구성된 하위 벡터 반환 가능
  • 원소들에 이름 부여

2. 리스트 Lists

  • 리스트는 이질적
  • 위치로 인덱스
  • 하위리스트 추출 가능
  • 원소들에 이름 부여

3. 데이터프레임 Data frames

  • 강력하고 유연한 구조로 SAS의 데이터셋 모방
  • 데이터프레임의 리스트의 원소는 벡터 또는 요인
  • 각각의 열에 대해 문자형 수치형 자동적 구분
  • 벡터와 요인은 데이터프레임의 열이고 동일한 길이
  • 메모리상에서 구동

4. 그 밖의 데이터 구조들 : 단일값 Scalars, 행렬 Matrix, 배열 Arrays, 요인 Factors

<데이터 구조 변경>

벡터 -> 리스트 as.list(vec) 행렬 -> 벡터 as.vector(mat)
벡터 -> 행렬 1열짜리 행렬: cbind(vec) 또는 as.matrix(vec)
1행짜리 행렬: rbind(vec)
n x m 행렬: matrix(vec, n, m)
행렬 -> 리스트 as.list(mat)
벡터 -> 데이터프레임 1열짜리 데이터프레임: as.dataframe(vec) 
1행짜리 데이터프레임: as.dataframe(rbind(vec))
행렬 -> 데이터프레임 as.dataframe(mat)
리스트 -> 벡터 unlist(lst) 데이터프레임 -> 벡터 1열짜리 데이터프레임: dfm[[1]] or dfm[,1]
1행짜리 데이터프레임: dfm[1]
리스트 -> 행렬 1열짜리 행렬: as.matrix(lst)
1행짜리 행렬: as.matrix(rbind(lst))
n x m 행렬: matrix(lst, n, m)
데이터프레임 -> 리스트 as.list(dfm)
리스트 -> 데이터프레임 목록 원소들이 데이터의 열이면:
as.data.frame(lst)
리스트 원소들이 데이터의 행이면:
rbind(obs[[1]], obs[[2]])
데이터프레임 -> 행렬 as.matrix(dfm)

 

[데이터 변형]

  • 벡터: split(vec, fac) - 벡터값과 펙터값의 길이가 같아야 함
  • 데이터프레임: split(dfm, fac)

2. 함수 적용하기

  • 벡터 : 행렬 : apply(mtr, 1, func), apply(mtr, 2, func)
  • 리스트 : lapply(lst, func), sapply(lst, func)
  • 데이터프레임: lapply(dfm, func), sapply(dfm, func), apply(dfm, 1or2, func)

3. 집단별로 함수 적용하기

  • tapply(vec, fac, func)
  • by(dfm, fac, func)

4. 병렬 벡터들과 리스트들에 함수 적용하기

  • 벡터: mapply(func, vec1, vec2, vec3, ...)
  • 리스트: mappply(func, lst1, lst2, lst3, ...)

5. 문자열 다루기

  • 문자열 길이: nchar("문자열")
  • 벡터의 길이: length(vec)
  • 문자열 연결하기: paste("단어", "문장", scalar)
  • 하위 문자열 추출하기: substr("문자열", 시작번호, 끝번호)
  • 구분자로 문자열 추출하기: strsplit("문자열", 구분자)
  • 문자열 대체하기: sub("대상문자열", "변경문자열", s), gsub("대상문자열", "변경문자열", s)

6. 날짜 다루기

  • 문자열 -> 날짜: as.Date("2014-12-25"), as.Date("12/25/2014", format="%m/%d/%Y")
  • 날짜 -> 문자열: format(Sys.Date(), format="%/m%/d%Y")
  • format 인자값
    • %b: 축약된 월 이름 ("Dec")
    • %B: 전체 월 이름 ("December")
    • %d: 두 자리 숫자로 된 일 ("31")
    • %m: 두 자리 숫자로 된 월 ("11")
    • %y: 두 자리 숫자로 된 년 ("20")
    • %Y: 네 자리 숫자로 된 년 ("2020")

'STATISTICS > ADsP' 카테고리의 다른 글

3-4. 통계분석  (0) 2020.08.27
3-3. 데이터 마트  (0) 2020.08.25
3-1. 데이터 분석 기법의 이해  (0) 2020.08.22
2-2. 분석 마스터 플랜  (0) 2020.08.22
2-1. 데이터 분석 기획의 이해  (0) 2020.08.20