[ R : 기술통계량 함수(psych, dplyr, funModeling) -2 ]
# 주석
## 결과값
패키지 설치 및 로딩하기
install.packages("ggplot2")
library(ggplot2)
1. 기술통계량을 구해주는 유용한 함수들
(1) summary(data$variable)
summary(diamonds$carat)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.2000 0.4000 0.7000 0.7979 1.0400 5.0100
- 평균을 제외한 5개의 값: 다섯수치요약(Five Numbers summary)
- Min, Q1, Median, Q3, Max
(2) by(data$variable, data$variable, functionName)
- by(양적 자료, 질적 자료, functionName)
- functionName에는 mean, sd, summary, hist가 있음
- 집단 별로 양적 자료에 대해 처리할 때 사용함
by(diamonds$carat, diamonds$cut, mean) # 각 cut(5종류)의 carat의 평균값
## diamonds$cut: Fair
## [1] 1.046137
## --------------------------------------------------------
## diamonds$cut: Good
## [1] 0.8491847
## --------------------------------------------------------
## diamonds$cut: Very Good
## [1] 0.8063814
## --------------------------------------------------------
## diamonds$cut: Premium
## [1] 0.8919549
## --------------------------------------------------------
## diamonds$cut: Ideal
## [1] 0.702837
(3) psych::describe(양적자료), describeBy(양적자료, 질적자료)
- by함수가 하나씩 functionName을 줘야했다면, describe는 한 번에 결과 값을 볼 수 있음
install.packages("psych")
library(psych)
i. describe()
carat에 대한 결과 값
psych::describe(diamonds$carat)
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 53940 0.8 0.47 0.7 0.73 0.47 0.2 5.01 4.81 1.12 1.26
## se
## X1 0
ii. describeBy()
각 cut별 carat의 결과 값
psych::describeBy(diamonds$carat, diamonds$cut)
##
## Descriptive statistics by group
## group: Fair
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 1610 1.05 0.52 1 0.98 0.43 0.22 5.01 4.79 1.68 5.31
## se
## X1 0.01
## --------------------------------------------------------
## group: Good
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 4906 0.85 0.45 0.82 0.8 0.43 0.23 3.01 2.78 1.03 1.22
## se
## X1 0.01
## --------------------------------------------------------
## group: Very Good
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 12082 0.81 0.46 0.71 0.75 0.46 0.2 4 3.8 0.99 0.89 0
## --------------------------------------------------------
## group: Premium
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 13791 0.89 0.52 0.86 0.83 0.56 0.2 4.01 3.81 0.86 0.43
## se
## X1 0
## --------------------------------------------------------
## group: Ideal
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 21551 0.7 0.43 0.54 0.64 0.33 0.2 3.5 3.3 1.34 1.63 0
- 혼자 수행해보기
psych::describe(diamonds[ , c(1, 5:10)])
psych::describeBy(diamonds[ , c(1, 5:10)], diamonds$cut)
(4) dplyr::summarise()
- “dplyr” package는 데이터의 양이 많아 전처리르 해야할 경우 유용하게 쓰인다
- %>% (Pipe Operator, 단축키: ctrl+shift+m) : 합집합이라 생각하면 된다
install.packages("dplyr")
library(dplyr)
diamonds의 데이터를 예로 들겠다.
diamonds %>% # diamonds 데이터 선택
dplyr::select(carat) %>% # select는 열을 선택
dplyr::summarise(N = n(), # summarise는 데이터 요약. n은 데이터 개수
Mean = mean(carat), # mead = 평균
SD = sd(carat)) # 표준편차
## # A tibble: 1 x 3
## N Mean SD
## <int> <dbl> <dbl>
## 1 53940 0.798 0.474
- 응용
diamonds %>%
dplyr::select(carat, cut) %>% # carat과 cut 열 선택
dplyr::group_by(cut) %>% # cut으로 그룹을 짓겠다 선언
dplyr::summarise(N = n(), # summarise는 group_by 뒤에 와야 함
Mean = mean(carat),
SD = sd(carat)) %>%
dplyr::arrange(desc(Mean)) %>% # 평균을 기준으로 내림차순 정렬
head(n = 3) # 맨 위의 3번 째 줄까지만 표시
## # A tibble: 3 x 4
## cut N Mean SD
## <ord> <int> <dbl> <dbl>
## 1 Fair 1610 1.05 0.516
## 2 Premium 13791 0.892 0.515
## 3 Good 4906 0.849 0.454
문제1. carat이 4.0 이상, price는 10000 이상인 데이터의 depth에 대해서 clarity별로 n, Mean, SD를 구한 결과의 평균을 기준으로 top3를 알아내라.
- 새로운 열 추가하기
diamonds <- dplyr::mutate(diamonds, xyz.mean = (x + y + z)/3)
dplyr 패키지 정리
- filter : 행 추출
- select : 열 추출
- mutate : 새로운 변수 생성
- summarise : 기술통계량
- group_by : 집단으로 구분
- arrange : 정렬
(5) funModeling 패키지
- 데이터의 생김새를 보고 싶을때 사용하면 유용하다.
- 기술통계량 포스트에서 다루었던 거의 모든 내용을 이 코드 한줄로 다 커버할 수 있다.
install.packages("funModeling")
library(funModeling)
- 시간이 있다면 한 번 해보는 것을 추천한다.
funModeling::df_status(diamonds)
funModeling::plot_num(diamonds)
funModeling::profiling_num(diamonds)
funModeling::freq(diamonds$cut)
[ 정답 ]
문제 1.
diamonds %>%
dplyr::filter(carat >= 4.0 & price >= 10000) %>%
dplyr::select(depth, clarity) %>%
dplyr::group_by(clarity) %>%
dplyr::summarise(N = n(),
Mean = mean(depth),
SD = sd(depth)) %>%
dplyr::arrange(desc(Mean)) %>%
head(n = 3)
'■ 프로그래밍 > R' 카테고리의 다른 글
[R] One Sample Test (단일 표본 검정) (0) | 2018.08.25 |
---|---|
[R 기초] 여러 데이터 한 번에 불러오기 (0) | 2018.08.25 |
[R 기초] 기술통계량 (대표값, 산포) -1 (0) | 2018.08.23 |
[R 기초] 일변량 양적자료의 표, 그래프(histogram, boxplot) (0) | 2018.08.23 |
[R 기초] 일변량 질적자료의 표, 막대그래프, 원그래프 (0) | 2018.08.23 |