자동 탐색적 데이터 분석
데이터 분석을 하기 위해서 가장 먼저 해야하는 작업은 분석에 필요한 적절한 데이터를 찾고 얻어내는 것일 것이다. 자신이 분석하기 원하는 데이터를 찾았다면 먼저 데이터를 R로 불러들여야 한다. 이 작업이 끝나면 이제 본격적으로 데이터 분석을 시작해야 한다.
그렇다면 이제 무슨 작업을 해야하는 것일까?
우선은 자신이 불러들인 데이터가 어떻게 생겼고 어떤 특성을 지녔는지 전반적으로 확인해야 할 것이다. 이 작업을 탐색적 데이터 분석( Exploratory Data Analysis : EDA)이라고 한다.
대부분의 R 관련 입문 도서들에서는 탐색적 데이터 분석을 위해
head()
와 tail()
로 개략적인 데이터를 확인하고
str()
과 glimpse()
를 사용하여 데이터프레임의
전반적인 구조를 확인하는 방법을 소개한다. 하지만 R에서는 이보다 강력한
EDA 패키지가 제공된다. 이번 포스트에서는 다양한 EDA 패키지에 대해
소개한다.
학업 중단자 데이터 로딩
EDA 패키지의 기능을 소개하기 위해 사용하는 데이터는 ‘평균과 중간값 등 통계치의 시각화 in R’(https://2stndard.tistory.com/132) 포스트에서 사용했던 학업 중단자 데이터를 사용하도록 하겠다.
df_dropout <- read_excel('데이터저장폴더/유초 주요-04 시도별 행정구역별 교육통계 현황_방통제외(1999-2022)_20220824y.xlsx',
sheet = '2021-2022',
skip = 11,
col_names = FALSE,
col_types = c(rep('text', 4), rep('numeric', 166)))
df_dropout <- df_dropout |>
select(1, 2, 3, 4, 22, seq(from = 127, to = 142, by = 3)) |>
rename(c('연도' = ...1, '시도' = ...2, '시군' = ...3, '학교급' = ...4, '전체학생수' = ...22, '학업중단자' = ...127, '유예' = ...130, '면제' = ...133, '자퇴' = ...136, '퇴학' = ...139, '제적' = ...142))
여기에 일부 열을 팩터로 변경하여 사용한다.
df_dropout <- df_dropout |>
mutate(시도 = as.factor(시도),
학교급 = as.factor(학교급))
SmartEDA 패키지
SmartEDA
패키지는 데이터프레임의 구조와 관계를 설명하는
다양한 함수를 제공한다. 특히 그래트와 차트를 통해 EDA를 제공하고 EDA를
종합한 보고서도 작성할 수 있다는 장점이 있다.
우선 SmartEDA
패키지를 설치한다.
if (!require(SmartEDA)) {
install.packages('SmartEDA')
library(SmartEDA)
}
전체 데이터 요약
SmartEDA
에서 가장 기본적으로 사용되는 함수는
ExpData()
이다. 이 함수는 데이터프레임의 전반적인 개요를
설명해주는 메타데이터와 데이터들의 종합값을 보여준다.
ExpData()
는 type 1과 type 2의 두 가지 요약 결과를
보여준다.
ExpData(df_dropout, type = 1)
## Descriptions Value
## 1 Sample size (nrow) 4047
## 2 No. of variables (ncol) 11
## 3 No. of numeric/interger variables 7
## 4 No. of factor variables 2
## 5 No. of text variables 2
## 6 No. of logical variables 0
## 7 No. of identifier variables 0
## 8 No. of date variables 0
## 9 No. of zero variance variables (uniform) 0
## 10 %. of variables having complete cases 100% (11)
## 11 %. of variables having >0% and <50% missing cases 0% (0)
## 12 %. of variables having >=50% and <90% missing cases 0% (0)
## 13 %. of variables having >=90% missing cases 0% (0)
type 1의 결과를 보면 전체 샘플 사이즈는 4047개, 변수(열)의 수는 11개, 수치형 변수는 7개, 팩터형 변수는 2개, 문자형 변수는 2개, 논리형 변수, ID 변수, 날짜형 변수, 0 분산 변수는 0개, 완전한 케이스(NA를 포함하지 않는)를 가지는 변수는 100%(11개), 결측치의 범위에 따른 변수의 개수를 보여준다.
ExpData(df_dropout, type = 2)
## Index Variable_Name Variable_Type Sample_n Missing_Count Per_of_Missing
## 1 1 연도 character 4047 0 0
## 2 2 시도 factor 4047 0 0
## 3 3 시군 character 4047 0 0
## 4 4 학교급 factor 4047 0 0
## 5 5 전체학생수 numeric 4047 0 0
## 6 6 학업중단자 numeric 4047 0 0
## 7 7 유예 numeric 4047 0 0
## 8 8 면제 numeric 4047 0 0
## 9 9 자퇴 numeric 4047 0 0
## 10 10 퇴학 numeric 4047 0 0
## 11 11 제적 numeric 4047 0 0
## No_of_distinct_values
## 1 2
## 2 17
## 3 208
## 4 13
## 5 2999
## 6 399
## 7 191
## 8 182
## 9 249
## 10 21
## 11 11
type 2의 결과를 보면 각각의 변수에 따른 변수타입, 샘플 개수, 결측치수, 결측치의 비율, 유일값의 개수를 보여준다.
이 type 2의 결과에 합계, 평균, 중앙값, 분산 등의 요약 통계치를 같이 나타내는 코드는 다음과 같다.
ExpData(df_dropout, type = 2, fun = c('sum', 'mean', 'sd'))
## Index Variable_Name Variable_Type Sample_n Missing_Count Per_of_Missing
## 1 1 연도 character 4047 0 0
## 2 2 시도 factor 4047 0 0
## 3 3 시군 character 4047 0 0
## 4 4 학교급 factor 4047 0 0
## 5 5 전체학생수 numeric 4047 0 0
## 6 6 학업중단자 numeric 4047 0 0
## 7 7 유예 numeric 4047 0 0
## 8 8 면제 numeric 4047 0 0
## 9 9 자퇴 numeric 4047 0 0
## 10 10 퇴학 numeric 4047 0 0
## 11 11 제적 numeric 4047 0 0
## No_of_distinct_values sum mean sd
## 1 2 NA NA NA
## 2 17 NA NA NA
## 3 208 NA NA NA
## 4 13 NA NA NA
## 5 2999 39361942 9726.20 40123.41
## 6 399 262627 64.89 262.79
## 7 191 63495 15.69 98.91
## 8 182 52558 12.99 75.28
## 9 249 144060 35.60 134.18
## 10 21 2193 0.54 2.05
## 11 11 321 0.08 0.63
수치형 변수 요약
SmartEDA
에서는 데이터프레임 중에서 수치형 변수에 대한
상세한 EDA를 위해 ExpNumStat()
가 제공된다.
ExpNumStat(df_dropout)
## Vname Group TN nNeg nZero nPos NegInf PosInf NA_Value Per_of_Missing
## 4 면제 All 4047 0 2807 1240 0 0 0 0
## 3 유예 All 4047 0 2546 1501 0 0 0 0
## 5 자퇴 All 4047 0 1866 2181 0 0 0 0
## 1 전체학생수 All 4047 0 27 4020 0 0 0 0
## 7 제적 All 4047 0 3904 143 0 0 0 0
## 6 퇴학 All 4047 0 3328 719 0 0 0 0
## 2 학업중단자 All 4047 0 962 3085 0 0 0 0
## sum min max mean median SD CV IQR Skewness Kurtosis
## 4 52558 0 2484 12.987 0 75.285 5.797 2.0 20.484 552.900
## 3 63495 0 4089 15.689 0 98.914 6.305 4.0 26.025 894.955
## 5 144060 0 3758 35.597 3 134.178 3.769 26.0 16.774 394.019
## 1 39361942 0 1656804 9726.203 1991 40123.410 4.125 6869.5 23.366 804.639
## 7 321 0 11 0.079 0 0.627 7.902 0.0 12.035 165.617
## 6 2193 0 45 0.542 0 2.052 3.786 0.0 9.252 138.857
## 2 262627 0 10385 64.894 12 262.793 4.050 50.0 22.030 712.289
ExpNumStat()
는 변수의 그룹에 따라 EDA를 보여주는
매개변수를 제공한다. ‘by’는 ’A’, ‘G’, ‘GA’의 세 가지 값을 가지는데 ’A’는
전체적인 EDA, ’G’는 ’gp’ 매개변수에 설정된 열의 값게 따라 그룹화하여
수치형 변수에 대한 EDA를 보여준다. ’GA’는 전체와 그룹화 EDA를
보여준다.
ExpNumStat(df_dropout, by = 'GA', gp = '연도')
## Vname Group TN nNeg nZero nPos NegInf PosInf NA_Value
## 4 면제 연도:All 4047 0 2807 1240 0 0 0
## 11 면제 연도:2021 2126 0 1473 653 0 0 0
## 18 면제 연도:2022 1921 0 1334 587 0 0 0
## 3 유예 연도:All 4047 0 2546 1501 0 0 0
## 10 유예 연도:2021 2126 0 1334 792 0 0 0
## 17 유예 연도:2022 1921 0 1212 709 0 0 0
## 5 자퇴 연도:All 4047 0 1866 2181 0 0 0
## 12 자퇴 연도:2021 2126 0 981 1145 0 0 0
## 19 자퇴 연도:2022 1921 0 885 1036 0 0 0
## 1 전체학생수 연도:All 4047 0 27 4020 0 0 0
## 8 전체학생수 연도:2021 2126 0 14 2112 0 0 0
## 15 전체학생수 연도:2022 1921 0 13 1908 0 0 0
## 7 제적 연도:All 4047 0 3904 143 0 0 0
## 14 제적 연도:2021 2126 0 2045 81 0 0 0
## 21 제적 연도:2022 1921 0 1859 62 0 0 0
## 6 퇴학 연도:All 4047 0 3328 719 0 0 0
## 13 퇴학 연도:2021 2126 0 1764 362 0 0 0
## 20 퇴학 연도:2022 1921 0 1564 357 0 0 0
## 2 학업중단자 연도:All 4047 0 962 3085 0 0 0
## 9 학업중단자 연도:2021 2126 0 515 1611 0 0 0
## 16 학업중단자 연도:2022 1921 0 447 1474 0 0 0
## Per_of_Missing sum min max mean median SD CV IQR
## 4 0 52558 0 2484 12.987 0 75.285 5.797 2.00
## 11 0 29754 0 2484 13.995 0 94.809 6.774 2.00
## 18 0 22804 0 535 11.871 0 44.641 3.761 2.00
## 3 0 63495 0 4089 15.689 0 98.914 6.305 4.00
## 10 0 40910 0 4089 19.243 0 130.717 6.793 4.00
## 17 0 22585 0 786 11.757 0 40.950 3.483 4.00
## 5 0 144060 0 3758 35.597 3 134.178 3.769 26.00
## 12 0 84840 0 3758 39.906 2 174.357 4.369 24.00
## 19 0 59220 0 555 30.828 3 65.188 2.115 30.00
## 1 0 39361942 0 1656804 9726.203 1991 40123.410 4.125 6869.50
## 8 0 26368674 0 1656804 12402.951 2093 53674.467 4.328 7530.75
## 15 0 12993268 0 147176 6763.804 1851 13683.564 2.023 6273.00
## 7 0 321 0 11 0.079 0 0.627 7.902 0.00
## 14 0 216 0 11 0.102 0 0.772 7.597 0.00
## 21 0 105 0 7 0.055 0 0.409 7.484 0.00
## 6 0 2193 0 45 0.542 0 2.052 3.786 0.00
## 13 0 1266 0 45 0.595 0 2.397 4.026 0.00
## 20 0 927 0 22 0.483 0 1.581 3.277 0.00
## 2 0 262627 0 10385 64.894 12 262.793 4.050 50.00
## 9 0 156986 0 10385 73.841 11 342.901 4.644 47.75
## 16 0 105641 0 1794 54.993 13 123.320 2.242 53.00
## Skewness Kurtosis
## 4 20.484 552.900
## 11 18.851 414.435
## 18 6.932 57.866
## 3 26.025 894.955
## 10 21.159 554.418
## 17 8.658 111.052
## 5 16.774 394.019
## 12 14.316 260.403
## 19 3.763 18.363
## 1 23.366 804.639
## 8 18.376 473.495
## 15 4.642 29.823
## 7 12.035 165.617
## 14 10.614 123.352
## 21 11.859 168.844
## 6 9.252 138.857
## 13 9.287 129.648
## 20 6.611 64.450
## 2 22.030 712.289
## 9 18.564 464.160
## 16 5.974 53.142
SmartEDA
는 수치형 변수에 대한 밀도분포 함수의 시각화를
보기 위해서 ExpNumViz()
를 제공한다.
ExpNumViz()
는 각각의 변수의 EDA 값에 따른 밀도분포 함수
그래프들을 리스트로 리턴한다.
plot <- df_dropout |> filter(시군 != '소계', 학교급 == '고등학교') |> ExpNumViz(Page=c(3,3))
plot
## $`0`
만약 특정 변수에 따른 변수별 EDA 시각화 결과를 보기 위해서는 ‘target’ 매개변수에 목표 변수를 설정하면 설정된 목표 변수의 타입에 따른 시각화 결과를 보여준다. 수치형 변수에 따른 수치형 EDA 시각화는 다음과 같이 산점도로 보여준다.
plot <- df_dropout |> filter(시군 != '소계', 학교급 == '고등학교') |> ExpNumViz(Page=c(3,3), target = '전체학생수')
plot
## $`0`
목표 변수를 팩터형 변수로 설정하면 다음과 같이 박스 플롯으로 표현된다.
plot <- df_dropout |> filter(시군 != '소계', 학교급 == '고등학교') |> ExpNumViz(Page=c(3,3), target = '연도')
plot
## $`0`
범주형 변수 요약
범주형 변수에 대한 EDA를 위해 SmartEDA
패키지는
ExpCTable()
을 제공한다. 이 함수는 범주형 변수를 자동으로
선택하여 변수에 대한 빈도나 테이블을 제공한다.
ExpCTable(df_dropout)
## Variable Valid Frequency Percent CumPercent
## 1 연도 2021 2126 52.53 52.53
## 2 연도 2022 1921 47.47 100.00
## 3 연도 TOTAL 4047 NA NA
‘Target’ 매개변수를 사용하면 특정 매개변수에 따른 EDA를 출력한다. ‘Target’ 매개변수가 팩터형 변수라면 해당 펙터 값에 따른 빈도와 분포율을 보여준다.
ExpCTable(df_dropout, Target = '학교급', per = T)
## VARIABLE CATEGORY Number 학교급:(일반고) 학교급:(자율고) 학교급:(특목고)
## 1 연도 2021 nn 243.00 103.0 116.00
## 2 연도 2022 nn 226.00 71.0 99.00
## 3 연도 TOTAL nn 469.00 174.0 215.00
## 4 연도 2021 % 51.81 59.2 53.95
## 5 연도 2022 % 48.19 40.8 46.05
## 6 연도 TOTAL % 100.00 100.0 100.00
## 학교급:(특성화고) 학교급:각종학교 학교급:고등공민학교 학교급:고등기술학교
## 1 212.00 68.00 6.00 13
## 2 193.00 55.00 3.00 7
## 3 405.00 123.00 9.00 20
## 4 52.35 55.28 66.67 65
## 5 47.65 44.72 33.33 35
## 6 100.00 100.00 100.00 100
## 학교급:고등학교 학교급:소계 학교급:유치원 학교급:중학교 학교급:초등학교
## 1 246.00 246.00 246.00 246.00 246.00
## 2 229.00 229.00 229.00 229.00 229.00
## 3 475.00 475.00 475.00 475.00 475.00
## 4 51.79 51.79 51.79 51.79 51.79
## 5 48.21 48.21 48.21 48.21 48.21
## 6 100.00 100.00 100.00 100.00 100.00
## 학교급:특수학교 TOTAL
## 1 135.00 2126.00
## 2 122.00 1921.00
## 3 257.00 4047.00
## 4 52.53 52.53
## 5 47.47 47.47
## 6 100.00 100.00
만약 ‘Target’ 매개변수가 수치형이라면 해당 수치형 변수를 구간으로 그룹화하여 해당 구간에 나타난 빈도와 분포율을 출력한다.
ExpCTable(df_dropout, Target = '전체학생수', per = T)
## VARIABLE CATEGORY Number 전체학생수:(-1.66e+03,5.52e+05]
## 1 연도 2021 nn 2123.0
## 2 연도 2022 nn 1921.0
## 3 연도 TOTAL nn 4044.0
## 4 연도 2021 % 52.5
## 5 연도 2022 % 47.5
## 6 연도 TOTAL % 100.0
## 전체학생수:(5.52e+05,1.1e+06] 전체학생수:(1.1e+06,1.66e+06] TOTAL
## 1 2 1 2126.00
## 2 0 0 1921.00
## 3 2 1 4047.00
## 4 100 100 52.53
## 5 0 0 47.47
## 6 100 100 100.00
SmartEDA
는 범주형 변수에 대한 요약 통계 EDA를 확인하기
위해 ExpCatStat()
를 제공한다. ExpCatStat()
는
특정 변수에 따른 나머지 변수들의 상대적 요약통계를 제공하기 때문에
반드시 ‘Target’ 매개변수로 목적 변수를 설정해야 한다. 특히 Weight of
evidence and Information values에 따른 IV 값을 기반으로 예측 파워와 두
이산형 변수의 연관성 정도인 Cramer’s V를 보여준다는 점이 특이하다.
ExpCatStat(df_dropout, Target = '자퇴')
## Variable Target Unique Chi-squared p-value df IV Value Cramers V
## 1 연도 자퇴 2 424.159 0 248 0.03 0.32
## 2 전체학생수 자퇴 10 4686.143 0 2232 0.98 0.36
## 3 학업중단자 자퇴 8 14294.486 0 1736 0.76 0.71
## 4 유예 자퇴 4 1099.291 0 744 0.11 0.30
## 5 면제 자퇴 4 1027.813 0 744 0.12 0.29
## 6 자퇴 자퇴 6 20235.000 0 1240 0.34 1.00
## 7 퇴학 자퇴 2 2119.303 0 248 0.01 0.72
## 8 제적 자퇴 1 214646.802 0 248 0.00 0.00
## Degree of Association Predictive Power
## 1 Strong Not Predictive
## 2 Strong Highly Predictive
## 3 Strong Highly Predictive
## 4 Strong Somewhat Predictive
## 5 Moderate Somewhat Predictive
## 6 Strong Highly Predictive
## 7 Strong Not Predictive
## 8 Very Weak Not Predictive
범주형 변수의 EDA 시각화는 ExpCatVis()
를 사용하는데
아래와 같이 막대 그래프로 비율을 보여준다.
plot2 <- ExpCatViz(df_dropout)
plot2
## [[1]]
'데이터 전처리' 카테고리의 다른 글
탐색적 데이터 분석(Exploratory Data Analysis)의 자동화 패키지 in R - Part 4 : DataExplorer (0) | 2022.09.18 |
---|---|
탐색적 데이터 분석(Exploratory Data Analysis)의 자동화 패키지 in R - Part 2 : explore (0) | 2022.09.15 |
연도별 시도별 비정규 교원 1인당 학생수 in R - rank() (20) | 2022.07.13 |
행정구역별 연령별 학생 비율 구하기 in R - mutate_all, mutate_at, mutate_if (0) | 2022.07.13 |
누적합과 누적평균 in R (0) | 2022.06.26 |
댓글