분류
- 범주형 자료 (categorical data)
- 연속형 자료 (numerical data)
- 질적 자료라고도 부름
- 성별 같이 범주 또는 그룹으로 구분할 수 있는 값으로 구성된 자료
- 기본적으로 숫자로 표현할 수 없음
- 대소 비교, 산술 연산 적용되지 않음
- 양적 자료라고도 부름
- 몸무게, 키와 같은 크기가 있는 숫자들로 구성된 자료
- 대소 비교, 산술 연산 가능
분류
- 단일변수 자료
- 다중변수 자료
변수
- 연구, 조사, 관찰하고 싶은 대상의 특성
- 키, 몸무게, 혈액형 같은 것이 예시
- 하나의 변수로만 구성된 자료
- 일변량 자료라고도 부름
- 벡터에 저장
- 두 개 이상의 변수를 구성된 자료
- 다변량 자료라고도 부름
- 두 개의 변수로 구성된 자료는 이변량 자료라고 함
- 매트릭스 또는 데이터 프레임에 저장
범주형 자료에서 할 수 있는 기본적인 작업
- 관측값들의 졸유별로 개수를 세는 것
탐색
- 도수분포표의 작성
- 막대그래프의 작성
- 원그래프의 작성
- '선호 계절'이라는 단일 특성에 대해 자료를 수집하여 단일변수 자료
- SPRING, SUMMER, FALL, WINTER는 크기를 측정할 수 없기 때문에 범주형 자료
favorite <- c('WINTER','SUMMER','SPRING','SUMMER','SUMMER',
'FALL','FALL','SUMMER','SPRING','SPRING')
favorite
table(favorite) # 도수분포표 계산
table(favorite)/length(favorite) # 비율 출력
> favorite <- c('WINTER','SUMMER','SPRING','SUMMER','SUMMER',
+ 'FALL','FALL','SUMMER','SPRING','SPRING')
> favorite
[1] "WINTER" "SUMMER" "SPRING" "SUMMER" "SUMMER" "FALL"
[7] "FALL" "SUMMER" "SPRING" "SPRING"
> table(favorite) # 도수분포표 계산
favorite
FALL SPRING SUMMER WINTER
2 3 4 1
> table(favorite)/length(favorite) # 비율 출력
favorite
FALL SPRING SUMMER WINTER
0.2 0.3 0.4 0.1
- SUMMER를 선호하는 사람이 4명으로 가장 많고, WINTER가 1명으로 가장 적음
- SUMMER를 선호하는 사람은 40%, WINTER는 10%임을 알 수 있음
- barplot의 main은 상단의 타이틀을 지정
ds <- table(favorite)
ds
barplot(ds, main='favorite season')
> ds <- table(favorite)
> ds
favorite
FALL SPRING SUMMER WINTER
2 3 4 1
> barplot(ds, main='favorite season')
순서 변경
ds.new <- ds[c(2,3,1,4)]
ds.new
> ds.new <- ds[c(2,3,1,4)]
> ds.new
favorite
SPRING SUMMER FALL WINTER
3 4 2 1
ds <- table(favorite)
ds
pie(ds, main='favorite season')
- 남성을 1, 여성을 2로 표현해도 연산과 대소 비교가 의미가 없음
- 마찬가지로 도수분포를 계산하고 막대그래프와 원그래프로 확인하면 됨
- 아래 예시에서 1은 초록, 2는 빨강, 3은 파랑
favorite.color <- c(2,3,2,1,1,2,2,1,3,2,1,3,2,1,2)
ds <- table(favorite.color)
ds
barplot(ds, main='favorite color')
colors <- c('green','red','blue')
names(ds) <- colors # 자료값 1,2,3을 green, red, blue로 변경
ds
barplot(ds, main='favorite color', col=colors) # 색 지정 막대그래프
pie(ds, main='favorite color', col=colors) # 색 지정 원그래프
> favorite.color <- c(2,3,2,1,1,2,2,1,3,2,1,3,2,1,2)
> ds <- table(favorite.color)
> ds
favorite.color
1 2 3
5 7 3
> barplot(ds, main='favorite color')
> colors <- c('green','red','blue')
> names(ds) <- colors # 자료값 1,2,3을 green, red, blue로 변경
> ds
green red blue
5 7 3
탐색
- 평균과 중앙값
- 사분위수
- 산포
- 히스토그램
- 상자그림
- 그룹이 있는 자료의 상자 그림
평균
- 전체를 대표할 수 있는 값
- 자료의 값들을 모두 합산한 후 값들의 개수로 나눔
- 중앙값과는 다름
- 일부 큰 값이나 작은 값들에 영향을 많이 받음
중앙값
- 특이한 값에 크게 영향을 받지 않음
절사평균
- 평균이 특이한 값의 영향을 받는 것을 완화시키기 위해 제안됨
- 하위 n%, 상위 n%의 값을 제외하고 중간에 있는 나머지 값들로만 평균을 계산
weight <- c(60,62,64,65,68,69)
weight.heavy <- c(weight,120)
weight
weight.heavy
mean(weight) # 평균
mean(weight.heavy) # 평균
median(weight) # 중앙값
median(weight.heavy) # 중앙값
mean(weight, trim=0.2) # 절사평균 (상하위 20% 제외)
mean(weight.heavy, trim=0.2) # 절사평균
> weight <- c(60,62,64,65,68,69)
> weight.heavy <- c(weight,120)
> weight
[1] 60 62 64 65 68 69
> weight.heavy
[1] 60 62 64 65 68 69 120
> mean(weight) # 평균
[1] 64.66667
> mean(weight.heavy) # 평균
[1] 72.57143
> median(weight) # 중앙값
[1] 64.5
> median(weight.heavy) # 중앙값
[1] 65
> mean(weight, trim=0.2) # 절사평균 (상하위 20% 제외)
[1] 64.75
> mean(weight.heavy, trim=0.2) # 절사평균
[1] 65.6
- 120이라는 특이한 값 때문에 평균이 큰 차이가 나는 것을 확인할 수 있음
- 중앙값, 절사평균은 큰 차이가 없음
- 자료에 있는 값들을 크기순으로 나열했을 때 이것을 4등분하는 지점에 있는 값들
- 4등분하면 등분점이 3개 생김
- 앞에서부터 1사분위수(Q1), 2사분위수(Q2), 3사분위수(Q3)라고 함
- Q2는 중앙값과 동일
- 4개 구간에는 각각 25%의 자료가 존재
예시
- 100명의 학생을 대상으로 시험을 본 결과 Q1=60, Q2=80, Q3=90임
- 25명의 학생은 성적이 60점 미만
- 25명의 학생은 성적이 60~80점 사이
- 25명의 학생은 성적이 80~90점 사이
- 25명의 학생은 성적이 90점 이상
- 90점 이상인 학생이 25명이나 되기 때문에 영어 시험 난이도가 낮았다.
- 전체 50%의 학생이 80점 이상의 성적을 받았음
mydata <- c(60,62,64,65,68,69,120)
quantile(mydata)
quantile(mydata, (0:10)/10)
summary(mydata)
> mydata <- c(60,62,64,65,68,69,120)
> quantile(mydata)
0% 25% 50% 75% 100%
60.0 63.0 65.0 68.5 120.0
> quantile(mydata, (0:10)/10)
0% 10% 20% 30% 40% 50% 60% 70% 80% 90%
60.0 61.2 62.4 63.6 64.4 65.0 66.8 68.2 68.8 89.4
100%
120.0
> summary(mydata)
Min. 1st Qu. Median Mean 3rd Qu. Max.
60.00 63.00 65.00 72.57 68.50 120.00
- 0%와 100%는 각각 최솟값, 최댓값임
- (0:10)/10은 0~10의 정수를 10으로 나누라는 것, 구간을 몇개로 나눌지 결정하는 부분임
- 이 결과는 0.1~1.0까지의 값이 되고 이를 백분율로 환산하면 10%~100%가 됨
- 그래서 10%단위로 구간을 나누어 결과값이 출력됨
- summary()는 사분위수, 최댓값, 최솟값, 평균을 함께 출력함
- 자료에 있는 값들이 퍼져 있는 정도를 말함
- 분산과 표준편차를 가지고 파악 가능
- 분산과 표준편차가 작으면 관측값들이 평균값 부근에 모여 있다는 것
- 반대로 크면 평균값으로부터 멀리 흩어져서 분포한다는 것
mydata <- c(60,62,64,65,68,69,120)
var(mydata) # 분산
sd(mydata) # 표준편차
range(mydata) # 값의 범위
diff(range(mydata)) # 최댓값, 최솟값의 차이
> mydata <- c(60,62,64,65,68,69,120)
> var(mydata) # 분산
[1] 447.2857
> sd(mydata) # 표준편차
[1] 21.14913
> range(mydata) # 값의 범위
[1] 60 120
> diff(range(mydata)) # 최댓값, 최솟값의 차이
[1] 60
- 최댓값과 최솟값의 차이가 크다는 것은 관측값들이 넓게 퍼져있다는 것이 되고, 반대는 좁게 모여 있다는 뜻이 됨
- 막대그래프와 비슷한 그래프
- 막대들이 붙어있으면 히스토그램, 떨어져있으면 막대그래프
- 연속형 자료의 분포를 시각화할 때 사용
- 막대의 면적도 의미가 있음
dist <- cars[,2]
hist(dist, # 자료
main='Histogram for 제동거리', # 제목
xlab='제동거리', # x축 레이블
ylab='빈도수', # y축 레이블
border='blue', # 막대 테두리색
col='green', # 막대 색
las=2, # x축 글씨 방향(0~3)
breaks=5) # 막대 개수 조절
- breaks는 구간을 몇개로 나눌지 조절하는 역할
- 20~40 사이의 값이 빈도수가 가장 높음
- 사분위수를 시각화
dist <- cars[,2]
boxplot(dist,main='자동차 제동거리')
- y축 눈금이 20 단위
- 제동거리 값이 0~120 범위에 있음
- 정상범위의 제동거리는 1~95 사이
- 정상범위 내에서는 상자가 아래쪽으로 치우쳐 있음
- 이는 전체의 50%에 해당하는 값들이 아래쪽에 분포됨을 의미
- 특이값 하나 관측됨
stats
- 결과는 list 형태
- $stats에는 정상범위 자료의 4분위수에 해당하는 값들이 표시
- $n은 관측값들의 개수
- $conf는 중앙값에 관련된 신뢰 구간
- $out은 특이값의 목록
boxplot.stats(dist)
$stats
[1] 2 26 36 56 93
$n
[1] 50
$conf
[1] 29.29663 42.70337
$out
[1] 120
boxplot(Petal.Length~Species, data=iris, main="품종별 꽃잎의 길이")
- Petal.Length~Species는 Peteal.Length를 Species별로 나누어 boxplot을 그린다는 의미
- 다음과 같이 사용할 수도 있음
boxplot(iris$Petal.Length~iris$Species, main="품종별 꽃잎의 길이")
par(mfrow=c(1,3)) # 1x3 가상화면 분할
barplot(table(mtcars$carb),
main="Barplot of Carburetors",
xlab="#of carburetors",
ylab="frequency",
col="blue")
barplot(table(mtcars$cyl),
main="Barplot of Cylender",
xlab="#of cylender",
ylab="frequency",
col="red")
barplot(table(mtcars$gear),
main="Barplot of Gear",
xlab="#of gears",
ylab="frequency",
col="green")
par(mfrow=c(1,1)) # 가상화면 분할 해제