funModeling
이번 포스트에서는 EDA 패키지인 funModeling
에 대해
소개한다.
funModeling
패키지는 탐색적 데이터 분석(EDA)와 관련된
기능을 위주로 분석 데이터 클리닝 및 모델 성능 측정과 관련된 다양한
기능을 제공한다.
funModeling
대부분의 기능은 Data Science Live Book -Open
Source-(2017)(https://livebook.datascienceheroes.com/)에서 자세히
소개되고 있다.
학업 중단자 데이터 로딩
funModeling
패키지의 기능을 소개하기 위해 사용하는
데이터는 ‘평균과 중간값 등 통계치의 시각화 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(학교급))
funModeling 패키지
우선 funModeling
패키지를 설치한다.
if (!require(funModeling)) {
install.packages('funModeling')
library(funModeling)
}
status()
funModeling
패키지에서 가장 기본적으로 사용되는 함수는
status()
이다. 이 함수는 매개변수로 전달되는 데이터에 대한
전반적인 데이터의 구성 백분률을 위주로 보여준다.
status(df_dropout)
## variable q_zeros p_zeros q_na p_na q_inf p_inf type
## 연도 연도 0 0.000000000 0 0 0 0 character
## 시도 시도 0 0.000000000 0 0 0 0 factor
## 시군 시군 0 0.000000000 0 0 0 0 character
## 학교급 학교급 0 0.000000000 0 0 0 0 factor
## 전체학생수 전체학생수 27 0.006671609 0 0 0 0 numeric
## 학업중단자 학업중단자 962 0.237706943 0 0 0 0 numeric
## 유예 유예 2546 0.629107981 0 0 0 0 numeric
## 면제 면제 2807 0.693600198 0 0 0 0 numeric
## 자퇴 자퇴 1866 0.461082283 0 0 0 0 numeric
## 퇴학 퇴학 3328 0.822337534 0 0 0 0 numeric
## 제적 제적 3904 0.964665184 0 0 0 0 numeric
## unique
## 연도 2
## 시도 17
## 시군 208
## 학교급 13
## 전체학생수 2999
## 학업중단자 399
## 유예 191
## 면제 182
## 자퇴 249
## 퇴학 21
## 제적 11
data_integrity()
data_integrity()
는 데이터의 무결성에 대한 정보를 전달해
주는 함수이다. NA를 가지는 변수(열), 변수의 변량이 많은(High
Cardinality) 변수(열), 변수의 형태에 따른 정보 등을 제공하는데 데이터
프레임 형태가 아닌 리스트 형태로 제공한다.
data_integrity(df_dropout)
## $vars_num_with_NA
## [1] variable q_na p_na
## <0 행> <또는 row.names의 길이가 0입니다>
##
## $vars_cat_with_NA
## [1] variable q_na p_na
## <0 행> <또는 row.names의 길이가 0입니다>
##
## $vars_cat_high_card
## variable unique
## 시군 시군 208
##
## $MAX_UNIQUE
## [1] 35
##
## $vars_one_value
## character(0)
##
## $vars_cat
## [1] "연도" "시도" "시군" "학교급"
##
## $vars_num
## [1] "전체학생수" "학업중단자" "유예" "면제" "자퇴"
## [6] "퇴학" "제적"
##
## $vars_char
## [1] "연도" "시군"
##
## $vars_factor
## [1] "시도" "학교급"
##
## $vars_other
## character(0)
plot_num()
plot_num()
은 수치형 변수들에 대한 시각화를 통해 변수의
전반적 상황을 보여준다.
df_dropout |> filter(시군 != '소계', 학교급 == '고등학교') |> plot_num()
profiling_num()
profiling_num()
은 수치형 변수에 대해 각종 기초 통계를
보여주는 함수이다.
profiling_num(df_dropout)
## variable mean std_dev variation_coef p_01 p_05 p_25 p_50
## 1 전체학생수 9.726203e+03 4.012341e+04 4.125290 22 112 525 1991
## 2 학업중단자 6.489424e+01 2.627928e+02 4.049556 0 0 1 12
## 3 유예 1.568940e+01 9.891412e+01 6.304519 0 0 0 0
## 4 면제 1.298690e+01 7.528492e+01 5.796987 0 0 0 0
## 5 자퇴 3.559674e+01 1.341777e+02 3.769383 0 0 0 3
## 6 퇴학 5.418829e-01 2.051527e+00 3.785923 0 0 0 0
## 7 제적 7.931801e-02 6.267908e-01 7.902251 0 0 0 0
## p_75 p_95 p_99 skewness kurtosis iqr range_98
## 1 7394.5 37037.6 107906.54 23.365572 807.6392 6869.5 [22, 107906.54]
## 2 51.0 261.0 768.00 22.030245 715.2889 50.0 [0, 768]
## 3 4.0 69.0 221.00 26.025120 897.9551 4.0 [0, 221]
## 4 2.0 60.0 232.00 20.483560 555.9001 2.0 [0, 232]
## 5 26.0 157.0 437.00 16.773824 397.0189 26.0 [0, 437]
## 6 0.0 3.0 9.00 9.252293 141.8574 0.0 [0, 9]
## 7 0.0 0.0 1.54 12.034651 168.6166 0.0 [0, 1.53999999999996]
## range_80
## 1 [195, 21747.2]
## 2 [0, 148]
## 3 [0, 33.4000000000001]
## 4 [0, 25]
## 5 [0, 91]
## 6 [0, 1]
## 7 [0, 0]
categ_analysis()
categ_analysis()
은 범주형 변수에 대한 분석 결과를
보여준다. 앞선 함수와는 달리 분석될 범주형 변수와 목표 변수가 설정되어야
하는데 목표 변수는 이변량 변수이어야 한다. .
categ_analysis(df_dropout, input = '시도', target = '연도')
## 시도 mean_target sum_target perc_target q_rows perc_rows
## 1 경기 0.486 261 0.136 537 0.133
## 2 서울 0.486 230 0.120 473 0.117
## 3 전남 0.486 180 0.094 370 0.091
## 4 경북 0.484 185 0.096 382 0.094
## 5 강원 0.482 134 0.070 278 0.069
## 6 경남 0.476 151 0.079 317 0.078
## 7 전북 0.476 110 0.057 231 0.057
## 8 충남 0.475 124 0.065 261 0.064
## 9 부산 0.473 134 0.070 283 0.070
## 10 충북 0.471 88 0.046 187 0.046
## 11 인천 0.464 89 0.046 192 0.047
## 12 대구 0.460 74 0.039 161 0.040
## 13 대전 0.448 47 0.024 105 0.026
## 14 울산 0.442 42 0.022 95 0.023
## 15 광주 0.441 45 0.023 102 0.025
## 16 제주 0.395 17 0.009 43 0.011
## 17 세종 0.333 10 0.005 30 0.007
freq()
freq()
는 범주형 변수들에 대한 빈도와 백분률을 표와
시각화를 사용하여 보여준다.
freq(df_dropout, input = c('연도', '시도', '학교급'))
## 연도 frequency percentage cumulative_perc
## 1 2021 2126 52.53 52.53
## 2 2022 1921 47.47 100.00
## 시도 frequency percentage cumulative_perc
## 1 경기 537 13.27 13.27
## 2 서울 473 11.69 24.96
## 3 경북 382 9.44 34.40
## 4 전남 370 9.14 43.54
## 5 경남 317 7.83 51.37
## 6 부산 283 6.99 58.36
## 7 강원 278 6.87 65.23
## 8 충남 261 6.45 71.68
## 9 전북 231 5.71 77.39
## 10 인천 192 4.74 82.13
## 11 충북 187 4.62 86.75
## 12 대구 161 3.98 90.73
## 13 대전 105 2.59 93.32
## 14 광주 102 2.52 95.84
## 15 울산 95 2.35 98.19
## 16 제주 43 1.06 99.25
## 17 세종 30 0.74 100.00
## 학교급 frequency percentage cumulative_perc
## 1 고등학교 475 11.74 11.74
## 2 소계 475 11.74 23.48
## 3 유치원 475 11.74 35.22
## 4 중학교 475 11.74 46.96
## 5 초등학교 475 11.74 58.70
## 6 (일반고) 469 11.59 70.29
## 7 (특성화고) 405 10.01 80.30
## 8 특수학교 257 6.35 86.65
## 9 (특목고) 215 5.31 91.96
## 10 (자율고) 174 4.30 96.26
## 11 각종학교 123 3.04 99.30
## 12 고등기술학교 20 0.49 99.79
## 13 고등공민학교 9 0.22 100.00
## [1] "Variables processed: 연도, 시도, 학교급"
댓글