[ R : 일변량 양적자료의 표, 그래프(histogram, boxplot) ]
패키지 로딩하기
library(ggplot2)
일변량 양적자료 분석
1. 표 = 빈도표 : 구간의 빈도, 백분율
- 성별은 남/여 두개로 나뉘지만, 키는 사람마다 다르기 때문에 구간을 만들어야 함
- 양적 자료 -> 질적 자료
ex. cut을 factor화 시킨 후, 구간 명명 : breaks 사용
diamonds$price.group <- cut(diamonds$price,
breaks = seq(from = 0, to = 20000, by = 5000),
right = FALSE) # FALSE면 오른쪽 숫자 미만, TRUE면 오른쪽 숫자 이하
breaks로 0부터 20000만까지 5000단위로 나눈 것이다.
R에서 ‘[]’가 ’이상’ 혹은 ‘이하’, ()는 ‘초과’ 혹은 ’미만’을 뜻한다.
참고: http://kim-mj.tistory.com/25?category=810330
table(diamonds$price.group)
##
## [0,5e+03) [5e+03,1e+04) [1e+04,1.5e+04) [1.5e+04,2e+04)
## 39213 9504 3567 1656
cut을 하면, 기본적으로 숫자 보다 수식으로 나타나 진다.
만약 “0이상 5천이하”로 나타내 싶다면, factor의 labels를 설정하면 된다.
prop.table(table(diamonds$price.group)) * 100 # 백분율 구하기
sort(prop.table(table(diamonds$price.group)) * 100, decreasing = TRUE) # 백분율 내림차순
round(sort(prop.table(table(diamonds$price.group)) * 100, decreasing = TRUE), 1) # 소수점 1자리 반올림
2. 그래프
(1) 히스토그램(Histogram)
- hist(data$variable, breaks = )
hist(diamonds$price,
xlim = c(0, 20000), # x축 구간 설정
breaks = seq(from = 0, to = 20000, by = 500)) # 막대 범위 설정 or 'breaks = 20' 약 20개 구간을 만들기
(2) 상자그림(Boxplot)
- 목적: 양적 자료의 이상치 파악
- boxplot(data$variable, range = 1.5, horizontal = )
- range = 1.5가 default 값
par(mfrow = c(1, 2))
boxplot(diamonds$price)
boxplot(diamonds$price, horizontal = TRUE)
집단별로 상자그림 그리기
- boxplot(양적 자료 ~ 질적 자료)
par(mfrow = c(1, 3))
boxplot(diamonds$price ~ diamonds$cut) # 각 cut의 price값
boxplot(diamonds$price ~ diamonds$color) # 각 color의 price 값
boxplot(diamonds$price ~ diamonds$clarity) # 각 clarity의 price 값
- for문으로 위에 세 그래프 한 번에 그리기
par(mfrow = c(1, 3))
for(i in c("cut", "color", "clarity")){
boxplot(as.formula(paste0("price ~ ", i)), data = diamonds) # paste0는 공백이 안 생김
}
참고
IQR(Inter Quartile Range) = 사분위 범위
price.boxplot <- boxplot(diamonds$price)
- 맨 밑의 가로 줄이 min값
- box의 맨 하단이 Q1
- box의 중간 선이 Q2이자 median(중위수)
- box의 맨 상단이 Q3
- 맨 위의 가로 줄이 max값
- 그 위의 검정색 굵은 줄이 모두 outlier(이상치).원래 하나의 원이지만 너무 많아서 직선으로 보임
price.boxplot$status # min, 사분위수, max값
price.boxplot$out # outlier(이상치)
length(price.boxplot$out) # 이상치 개수
min(price.boxplot$out) # 이상치 min값
max(price.boxplot$out) # 이상치 max값
- price.boxplot의 정보보기 : str(data)
str(price.boxplot)
## List of 6
## $ stats: 'integer' num [1:5, 1] 326 950 2401 5324 11886
## $ n : num 53940
## $ conf : num [1:2, 1] 2371 2431
## $ out : num [1:3538] 11888 11888 11888 11897 11899 ...
## $ group: num [1:3538] 1 1 1 1 1 1 1 1 1 1 ...
## $ names: chr "1"
List의 Slicing
- list[index]
- list[[index]]
- list$variable
- quantile(data$variable): 사분위수
quantile(diamonds$price)
## 0% 25% 50% 75% 100%
## 326.00 950.00 2401.00 5324.25 18823.00
quantile(diamonds$price)[2] # Q1
## 25%
## 950
quantile(diamonds$price)[4] # Q3
## 75%
## 5324.25
- outlier(이상치) 수식
quantile(diamonds$price)[2] - 1.5*IQR(diamonds$price) # 이 보다 작은 값이 이상치
quantile(diamonds$price)[4] + 1.5*IQR(diamonds$price) # 이 보다 큰 값이 이상치
'■ 프로그래밍 > R' 카테고리의 다른 글
[R 기초] 기술통계량 함수(psych, dplyr, funModeling) -2 (0) | 2018.08.23 |
---|---|
[R 기초] 기술통계량 (대표값, 산포) -1 (0) | 2018.08.23 |
[R 기초] 일변량 질적자료의 표, 막대그래프, 원그래프 (0) | 2018.08.23 |
[R 기초] 외부 데이터(txt, csv, excel) 불러오기 (0) | 2018.08.21 |
[R 기초] 데이터 유형 - Array, Data.Frame, List (0) | 2018.08.19 |