본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
카테고리 없음

탐색적 데이터 분석(Exploratory Data Analysis)의 자동화 패키지 in R - Part 2 : funModeling

by 아참형인간 2022. 9. 18.
eda2.knit

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: 연도, 시도, 학교급"

댓글