Recent Posts
Stats & AI tech blog - '일단 시도함'
[R] EDA with ggplot2 본문
R에서 그래프로 탐색적 분석을 수행할 때, 주로 아래 순서대로 시각화를 진행한다.
1. 단변량 시각화
: 변수의 분포 이해 (히스토그램, 박스플롯, KDE, 막대그래프)
2. 이변량 시각화
: 두 변수 간의 관계 파악 (산점도, 히트맵, 라인플롯)
3. 다변량 시각화
: 세 개 이상의 변수 간 관계 파악 (페어플롯, 병렬좌표, 히트맵)
아래는 자주 사용하는 몇 가지 그래프에 대한 예시 코드이다.
- 밀도추정그래프 (KDE)
# 이탈여부에 따라 분포가 어떻게 다른지 확인
df %>%
ggplot(aes(x = tenure, fill = fct_rev(Churn), alpha = .5))+
geom_density()
- 평균 막대 그래프
- fct_rev()를 통해 레벨 거꾸로 표현
- stat = 'summary', fun = 'mean' 으로 평균 표현
- stat_summary()로 그래프 위에 평균 지점 텍스트로 표현
- grid.arrange()로 여러 그래프 함께 표현
- position = 'dodge'로 막대그래프 옆으로 표현
# 이탈 여부에 따라 평균이 얼마나 다른지 확인
g1 <- df %>%
ggplot(aes(y = tenure, x=fct_rev(Churn), fill = fct_rev(Churn))) +
geom_bar(stat = 'summary', fun = 'mean', alpha = .5) +
stat_summary(fun = 'mean', geom = 'text', aes(label = paste(round(..y.., 0), "months")), size = 3.5, vjust = -0.5) +
labs(title = 'Average Customer Tenure', y = 'Tenure')
g2 <- df %>%
ggplot(aes(y = MonthlyCharges, x=fct_rev(Churn), fill = fct_rev(Churn))) +
geom_bar(stat = 'summary', fun = 'mean', alpha = .5) +
stat_summary(fun = 'mean', geom = 'text', aes(label = paste('$',round(..y.., 0))), size = 3.5, vjust = -0.5) +
labs(title = 'Average Monthly Charges', y = 'Monthly Charges')
g3 <- df %>%
ggplot(aes(y = TotalCharges, x=Contract, fill = fct_rev(Churn))) +
geom_bar(position = "dodge", stat = 'summary', fun = 'mean', alpha = .5) +
stat_summary(fun = 'mean', geom = 'text', aes(label = paste('$',round(..y.., 0))), size = 3.5, vjust = -0.5,position = position_dodge(width = 0.9)) +
labs(title = 'Average Monthly Charges by Contract', y = 'Total Charges')
grid.arrange(g1,g2,g3, ncol= 2, nrow=2, layout_matrix = rbind(c(1,2),c(3,3)))
- 비율 막대 그래프
- group과 facet_grid로 영역 나누고 그 안에서 비율 계산
- y=..prop..로 축 비율로 설정
- fill = factor(..x..)로 색 지정 근데 Churn으로 적으면 오류남
- geom_test에서 y=..prop.., label = scales::percent(..prop..)로 그래프 위에 라벨링
- scales_y_continuous(labels = scales::percent)로 축 %형식으로 변경
df %>%
ggplot(aes(x=fct_rev(Churn), group = Contract))+
geom_bar(stat='count', aes(y = ..prop.., fill = factor(..x..)), alpha=.6)+
geom_text(stat='count', aes(label = scales::percent(..prop..), y=..prop..), vjust = -.5)+
scale_y_continuous(labels = scales::percent)+
facet_grid(~Contract)
- Pair plot
df %>%
select(tenure, MonthlyCharges, TotalCharges, Churn) %>%
ggpairs(aes(color = fct_rev(Churn)),
upper = list(combo = wrap('box_no_facet', alpha=.7)),
diag = list(continuous = wrap('densityDiag', alpha=.6),
discrete = wrap('barDiag', alpha=.7)),
lower = list(combo = wrap('box_no_facet',alpha = .7),
continuous = wrap('smooth', alpha=.15)))
'Programming > R' 카테고리의 다른 글
[R] R에서 라이브러리 (패키지) 만들기 (0) | 2024.07.09 |
---|---|
[R] Caret Package로 모델 학습 및 튜닝하기 (0) | 2024.05.29 |
[R] K-Means Clustering (0) | 2024.02.26 |
[R] 자주 쓰는 전처리 코드 정리 (0) | 2024.02.23 |
[R] 여러 개의 ggplot 한번에 저장 (ggplot, ggsave) (1) | 2024.02.16 |