이 문서에서는 R에서 데이터의 사분위수를 어떻게 얻으며, 그로인해 어떤 작업들을 해나갈 수 있는지에 대해서 이야기하려고 한다. 또한 이 문서에서는 사분위수에 대해서 “데이터의 분포 불균형”으로인한 문제를 다루고 있다.
library(dplyr) # for refine
##
## Attaching package: 'dplyr'
##
## The following object is masked from 'package:stats':
##
## filter
##
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2) # for graph(EDA)
ted_freq <- read.csv("ted_0.3.csv", header=TRUE, stringsAsFactors=FALSE, sep=",")
사분위수란?
자료를 크기 순으로 배열하고, 누적 백분율을 4 등분한 각 점에 해당하는 값을 말한다. 제1사분위수는 누적 백분율이 25%에 해당하는 점수이고, 제2사분위수는 누적 백분율이 50%, 제3사분위수는 75%, 제4사분위수는 100%에 해당하는 점수이다. 특히 제2사분위수는 누적 백분율이 50%이므로 개념적으로 중앙값과 동일하다. [네이버 지식백과] 사분위수 [quartile] (교육평가용어사전, 2004. 5. 31., 학지사)
사분위값 기준으로 25%, 75% 사이 값들만 필터링하는 과정에 대해서 정리하려고한다.
TED DATA의 사분위값 사분위값을 구하려면 qunatile함수를 이용하면된다.
quantile(ted_freq$TOTAL_VIEWS) # 사분위값
## 0% 25% 50% 75% 100%
## 48071 647932 1001676 1523782 38464847
사분위값의 결과로 다음과 같이 사분위값을 확인할 수 있다.
종종 숫자를 직접 입력하다 실수를 하는 경우가 있기 때문에, 변수에 할당후 사용했다.
ted_0 = 48071 #0%
ted_25 = 647932 #25%
ted_75 = 1523782 #75%
ted_100 = 38464847 #100%
ted_2575 = ted_freq
#select나 subset에서의 select를 이용하면 간결하게 뽑을 수 있겠지만, 데이터셋의 열 개수가 많기때문에 일일히 작성하기보다 원본데이터(여기서는 ted_freq)를 새로 할당해서 사용했다.
#새로운 데이터셋 ted_quartile에 subset함수를 활용해 조건에 맞는 데이터만 가져온다.
ted_quartile_middle = subset(ted_freq, subset=c(TOTAL_VIEWS >= ted_25 & TOTAL_VIEWS < ted_75)) #middle
ted_quartile_bottom = subset(ted_freq, subset=c(TOTAL_VIEWS >= ted_0 & TOTAL_VIEWS < ted_25)) #bottom
ted_quartile_top = subset(ted_freq, subset=c(TOTAL_VIEWS >= ted_75 & TOTAL_VIEWS <= ted_100)) #top
사분위수의 0%~25%를 구할때 0%가 ’0’을 의미하는것이 아니라는 것을 명심하자. 체크하자.
nrow(ted_quartile_bottom) #547행
## [1] 547
nrow(ted_quartile_middle) #1,092행
## [1] 1092
nrow(ted_quartile_top) #547
## [1] 547
# 547 + 1092 + 547 = 2186
mean()sd()var()mediant_mean = summarise(ted_freq, tv_mean = mean(ted_freq$TOTAL_VIEWS, na.rm = TRUE) ) ## 조회수 평균
t_sd = summarise(ted_freq, tv_mean = sd(ted_freq$TOTAL_VIEWS, na.rm = TRUE) ) ## 조회수 표준편차
t_var = summarise(ted_freq, tv_mean = var(ted_freq$TOTAL_VIEWS, na.rm = TRUE) ) ## 조회수 분산
t_median= summarise(ted_freq, tv_mean = median(ted_freq$TOTAL_VIEWS, na.rm = TRUE) ) ## 조회수 중앙값