데이터 분석 기획

R의 연산자 우선 순위

연산자 우선순위 의미
^, ** 지수 2^4
+, - 양수, 음수부호 +4, -2
: 수열 생성 1:5
%any% 특수 연산자 %/% : 몫, %% : 나머지, %*% : 행렬곱
*, / 곱셈, 나눗셈 2*4, 10/3
== 같음 비교 3 == 5 # False
!= 다름 비교 3 != 5 # True
>=, <=, <, > 이상, 이하, 작다, 크다 3>=5, 3<=5 # False, True
! 논리 부정 !(3==5)
&, && 논리 AND & : 논리 연산 데이터가 하나 이상인 경우 사용
&& : 논리 연산 데이터가 하나인 경우 사용
|, || 논리 OR 논리 AND와 같은 규칙
~ 식(formula) 종속변수1 + 종속변수2 … ~ 독립변수1 + 독립변수2 …
->, -» 왼쪽값을 오른쪽으로 대입 3 -> a, 3 -» a
= 오른쪽 값을 왼쪽으로 대입 a = 3
<-, «- 오른쪽 값을 왼쪽으로 대입 a <- 3, a «- 3

R의 데이터 형(=타입)

R의 데이터 형은 기본형, 구조형, 복합형으로 나눌 수 있으며, Special Values가 존재함

데이터 형 특징
numeric(기본형) 정수, 실수, 복소수, 수학적 연산 및 통계적 계산
character(기본형) 문자, 단어로 구성, “ “또는 ‘ ‘내에 표현됨
logical(기본형) TRUE, FALSE, 산술 연산시 1, 0으로 사용됨
데이터형 차원 원소 원소의 타입
scalar(구조형) 단일 수치/문자/논리 단일
factor(구조형) 1D 수치/문자 단일, 범주형
vector(구조형) 1D 수치/문자/논리 단일
matrix(구조형) 2D 수치/문자/논리 단일
data.frame(복합형) 2D 수치/문자/논리 복합 가능
array(구조형) 2D 이상 수치/문자/논리 단일
list(복합형) 2D 이상 수치/문자/논리 복합 가능

Special Values

  • NULL : 변수 값이 초기화 되지 않음
  • NA(Not Available) : 데이터 값 없음(결측치)
  • NaN(Not Available Number) : 계산 불가능
  • INF(infinite) : 무한대

R의 데이터 구조 - vector

vector - c 함수로 생성

  • 하나 이상의 스칼러(=길이가 1인 벡터)원소들을 갖는 단순한 형태의 집합
  • 숫자, 문자, 논리형 데이터를 원소(Element)로 사용할 수 있음
  • 동일한 자료형 을 갖는 값들의 집합으로 **하나의 열(Column)로 구성됨
  • 백터 생성 함수 : c(value1, value2, …), seq(from, to, by), rep(x, time, each)

R의 데이터 구조 - matrix

matrix(행렬)

  • 데이터의 형태가 2차원으로 행(row)과 열(column)로 구성
  • 하나의 데이터 유형만 가능, 역행렬은 solve( )로 구함

행렬 생성 함수

  • matrix(data= NA, nrow=1, ncol=1, byrow=False, dimnames=NULL)
  • rbind(vectors or matrics), cbind(vectors or matrices)

R의 데이터 구조 - data.frame

data.frame

  • 엑셀의 WorkSheet와 같은 구조의 2차원 데이터
  • ‘여러가지 데이터 유형’을 가질 수 있음, 벡터 별로 다른 데이터 유형 가능
  • 벡터가 모여 데이터 프레임을 구성함

data.frame 생성 함수

  • data.frame(vectors or matrices, stringsAsFactors) * 벡터의 길이는 모두 같아야함
  • data.frame(변수명=벡터, …, stringsAsFactors * stringsAsFactors를 TRUE로 지정하면 문자열을 factor형으로 저장함

R의 데이터 구조 - list

list

  • 서로 다른 데이터 타입을 담을 수 있음
  • 리스트에 저장된 데이터를 index 또는 key를 사용해 접근함
  • 생성 함수 : list(key=value, key=value … )

외부 데이터 사용

작업 환경 설정

  • setwd(‘디렉터리 이름’) > setwd(‘c:/r_workspace’)
  • getwd( ) : 현재 작업 디렉터리 반환 > getwd()

csv 파일 불러오기, 저장하기

  • read.csv(‘파일이름’, fileEncoding=’UTF-8-BOM’)
  • write.csv(‘파일이름’, row.names=FALSE)

data.frame 핸들링

새로운 변수 만들기 데이터프레임 $변수명 또는 데이터 프레임 [‘변수명’] <- 추가할 데이터 벡터
조건으로 선택 subset(x, subset=(조건)) * subset=생략 가능
목록으로 선택 subset(x, subset=(조건), select=열/열 목록)
열, 열 목록 제거 subset(x, subset=(조건), select=열/ - 열 목록)
열 이름 바꾸기 colnames(x) <- , colnames(x)[index] <-

R의 데이터셋 사용

x : 데이터 셋 이름 / v : 데이터 / n : 숫자

head(x, n) 데이터 셋 처음 여섯 개 반환, n지정 시 해당 개수 만큼 반환
tail(x, n) 데이터 셋 마지막 여섯 개 반환, n 지정 시 해당 개수 만큼 반환
View(x) 창을 열고 엑셀과 유사한 형태로 데이터 셋을 보여줌
summary(x) 데이터 셋을 구성하는 항목의 기초 통계량을 보여줌
(최솟값, 1사분위수, 중간값, 평균, 3사분위수, 최댓값)
str(x) 데이터의 구성을 표시함
attach(x) 데이터셋을 고정으로 사용하겠다고 선언함, detach할 때까지 유효
변수명만으로 바로 데이터에 접근 가능 iris$Sepal.Width -> Sepal.Width
detach(x) 고정된 데이터셋 사용을 해체 선언함

head, tail, summary, str : vector, matrix 등의 다양한 객체에 적용 가능

View : matirx, data.frame, list 등 Data 구조에 적용 가능

그래프 종류

산점도 산점도 행렬 상자그림 히스토그램 막대그래프
plot(x, y) pairs( ) boxplot( ) hist( ) barplot( )
2개 수치형 변수의
상관관계 알아보기
여러개의 변수관계 알아보기 이상치 존재 확인, IQR 길이, 최소, 최대,
1사분위, 3사분위, 중위값 확인
NA제거하고 그려짐
연속형 수치에 적합 히스토그램의 사각형 명목형 변수의 빈도에 활용,
막대 사이가 끊겨있는 모양

Boxplot

데이터의 분포를 파악하는 도구이다.

Histogram

  • 도수 분포ㅛㅍ의 각 계급을 가로축에 나타내고, 해당 계급에 속하는 측정값의 도수를 세로축에 표시하여 직사각형 모양으로 그림
  • 왼쪽으로 치우친 모양이라면 데이터가 전체 범위에서 수치가 낮은 쪽에 몰려 있음을 의미, 오른쪽에 치우쳐 있다면 높은 쪽에 몰려 있음을 의미
  • 할 쪽으로 치우치는 것 없이 비슷한 높이로 그려진다면 균일한 분포
  • 막대 높이는 빈도를 나타내며, 폭은 의미가 없음
  • 가로, 세로축 모두 연속적임, 범주형에는 막대그래프를 사용함
  • 많은 데이터를 가지고 있는 경우보다 정확한 관계 파악을 할 수 있음

apply 계열 함수

  • 데이터 조작에 편리한 기능 제공, apply 함수가 가장 많이 사용됨
    • for문 없이 multi-core 사용으로 빠르게 연산 가능
    • split -> apply -> combine 기능 제공, (데이터 분할 -> 함수 적용 -> 재결합)
  • apply
    • apply(input : array / output : array)
    • array 에 행 또는 열 별로 함수를 적용한 다음 그 결과를 vector 또는 array로 변환
  • lapply
    • lapply(input : vector, list / output : list)
    • vector, list에 함수를 원소별 적용하여 결과를 list로 반환
    • vector로 변환을 위해 unlist 사용
  • sapply
    • (input : list or vector / output : vector or array)
    • lapply와 유사하지만 결과를 vector, matrix 또는 array로 반환
  • tapply
    • tapply(input : list or vector and factor / output : vector or array)
    • 입력 데이터를 특정 기준 ㅇㅡ로 묶은 다음 각 그룹마다 주어진 함수를 적용하고 그 결과를 반환

패키지 설치, 대표적인 패키지

패키지 설치와 로딩

  • 패키지 설치
    • install.packages(‘패키지이름’) * 패키지 이름은 문자열로
  • 패키지 로딩
    • library(‘패키지이름’), library(패키지이름) * 패키지 이름은 문자열로 / 이름 자체

주요 패키지

  • reshape
    • melt(data, id=…) : id에 저장한 변수를 기준(=고정)으로 데이터 구조를 변경함
    • cast(data, formula=…, [func=…]) : 데이터를 formula에 있는 형태로 변환하고 func 적용
    • formula=행변수(고정)~열변수(변경), 여러 개 변수는 + 로 묶음
  • reshape2
    • cast 대신 acast, dcast 사용
  • sqldf
    • sqldf(‘sql 문자열’)
  • plyr
    • ??ply, **adply(), ddply() …

유용한 함수들

  • past()
    • 입력 받은 객체들의 같은 위치 요소를 하나의 문자열로 붙임
    • number <- 1:5
    • alphabet <- c(‘a’, ‘b’, ‘c’)
    • paste(numberm alphabet) * “1a” “2b” “3c” “4d” “5b”
  • substr()
    • 주어진 문자열에서 특정 문자열 추출, substr(대상, 시작위치, 끝위치)
    • fruit <- c(“apple”, “banana”, “orange”)
    • substr(fruit, 1, 2) * “ap” “ba” “or”
  • split()
    • 데이터를 분리할 때 사용, split(데이터, 분리조건)
    • split(iris, iris$Species) * 3개 data.frame 을 갖는 list로 생성됨
  • subset()
    • 특정 부분만 추출하는 용도
    • subset(iris, Species==’setosa’ & Sepal.Length > 5.0)
  • select()
    • subset에 select 인자를 지정하면 특정 열을 선택하거나 제외 용도로 사용
    • subset(iris, select = c(Sepal.Length, Species))

객체의 속성 관련 함수

is.numeric(x) 객체 유형이 numeric 인지 판단 TRUE/FALSE 반환
is.logical(x) 객체 유형이 logical 인지 판단 TRUE/FALSE 반환
is.character(x) 객체 유형이 caracter 인지 판단 TRUE/FALSE 반환
is.integer(x) 객체 유형이 정수 인지 판단 TRUE/FALSE 반환
is.double(x) 객체 유형이 실수 인지 판단 TRUE/FALSE 반환
is.factor(x) 객체 유형이 factor 인지 판단 TRUE/FALSE 반환
is.null(x), is.na(x) 객체 유형이 NULL/NA 인지 판단 TRUE/FALSE 반환
length(x) 객체 원소의 개수 반환, matrix의 경우 행 * 열의 수  
nrow(x) 행의 개수 반환(백터, 스칼라 등에서 사용 못함)  
NROW(x) 백터의 행의 개수 반환(스칼라에서도 사용 가능)  

결측치 대치법

단순 대치법(Single Imputation)

  • 완전히 응답한 개체 분석
    • completes analysis, 불완전 자료는 모두 무시
    • 부분적으로 관측된 자료를 무시하므로 생기는 효휼성 상힐, 통꼐적 추론의 타당성 문제 존재
  • 평균대치법
    • 관측 또는 실험을 통해 덛어진 데이터의 평균으로 결측값 대치
    • 비조건부 평균 대치법 : 관측 데이터의 평균값으로 대치
    • 조건부 평균 대치법 : 회귀분석을 활용한 대치법
  • 단순 확률 대치법
    • 평균대치법에서 추정한 표준오차의 과소추정문제를 보완하고자 고안됨
    • Hot-deck, nearest neighbor 방법 등이 있음

다중 대치법

  • 단순 대치법을 한번이 아닌 m번 수행하여 m개의 가상적 완전 자료를 만듦
  • 추정량 표준오차의 과소추정 또는 계산의 난해성 문제를 가지고 있음

결측치 인식, 선택, 삭제

  • is.na(x)
    • x의 포함된 값이 NA인지 아닌지 각각에 대해 TRUE, FALSE 값을 반환함
    • logical을 산술 연산이 가능하기 때문에 is.na 함수 적용 후, sum함수를 사용해 결측치 개수를 파악할 수 있음 sum(is.na(x))
  • complete.cases(x)
    • x가 결측치를 가지고 있지 않은 완전한 데이터인지 확인하는 함수
    • 행 별 로 결측치가 없으면 TRUE, 있으면 FALSE를 반환함
  • x[!complete.cases(x), ] : indexing을 사용하여 결측치(NA) 행만 추출
  • x[complete.cases(x), ] : indexing을 사용하여 결측치(NA)를 포함하지 않은 행만 추출
  • na.omit(x) : 결측치(NA)가 있는 행 전체 삭제

이상값 검색

  • 이상값(Outlier)
    • 의도하지 않게 잘못 입력된 경우(bad data)
    • 분석 목적에 부합되지 않아 제거해야 하는 경우
    • 의도되지 않은 현상이지만 분석에 포함해야 하는 경우
  • 이상값 판단
    • ESD : 평균으로부터 3 * 표준편차 밖의 값
    • boxplot 사용 : IQR*1.5 밖의 값
    • summary() 사용 : 평균, 중앙값, IQR을 보고 판단함
  • 이상값 처리
    • 이상값도 분석 대상이 될 수 있어 무조건 삭제는 안 됨