[R 쉽게 설명하기] 단변수 연속형 자료와 단변수 범주형 자료의 표현
7. 더 다양한 모험을 떠나요!
우와, 여러분은 이제 단변량 데이터를 다양한 그래프로 표현하는 방법을 잘 알게 되었어요. 하지만 모험은 아직 끝나지 않았답니다. 더 많은 그래프 기술을 배워볼 준비가 되셨나요?
7.1. 상자 그림으로 데이터의 분포 살펴보기
상자 그림(Box plot)은 데이터의 분포를 한눈에 볼 수 있는 그래프예요. 상자의 양 끝은 데이터의 1사분위수와 3사분위수를 나타내고, 상자 안의 선은 중앙값을 나타내죠. 상자 바깥의 선은 데이터의 범위를 보여줍니다.
library(MASS)
boxplot(Min.Price ~ AirBags, data = Cars93,
col = c("orange", "cyan", "yellow"),
names = c("Driver & Passenger", "Driver only", "None"),
ylab = "Minimum Price", xlab = "Airbag")
IQR(Interquartile range)은 데이터의 1사분위수와 3사분위수 사이의 범위를 말해요. 이 범위는 데이터의 중간 50%를 포함하죠.
7.2. 해적 그림으로 데이터를 보다 자세히 탐색하기
해적 그림(Pirate plot)은 상자 그림과 유사하지만, 데이터의 분포를 더 자세히 볼 수 있어요. 상자 그림에 데이터 포인트와 확률 밀도 곡선이 추가된 거죠.
library(yarrr)
pirateplot(formula = MPG.city ~ Origin + DriveTrain,
data = Cars93, point.o = 0.5,
main = "City MPG by Origin and Drive Train",
inf.method = "iqr")
7.3. 확률 밀도 곡선으로 데이터의 분포 파악하기
우리는 앞서 히스토그램을 부드럽게 연결한 밀도 곡선에 대해 배웠어요. 이번에는 그룹별로 밀도 곡선을 그려볼 거예요.
library(ggplot2)
ggplot(Cars93, aes(x = MPG.highway)) +
geom_density(aes(group = Type, colour = Type)) +
labs(x = "MPG.highway", y = "Density") +
ggtitle("Density of MPG on Highway by Type") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
7.4. 다중 그래프 배열하기
때로는 여러 개의 그래프를 한 번에 보는 게 더 좋을 때가 있어요. gridExtra
패키지를 사용하면 여러 그래프를 한 페이지에 배열할 수 있어요.
library(gridExtra)
grid.arrange(p1, p2, ncol = 2)
7.5. 척추 그림으로 범주형 변수의 관계 살펴보기
척추 그림(Spineplot)은 두 개의 범주형 변수 사이의 관계를 보여줘요. 각 범주의 빈도에 따라 영역이 나뉘죠.
library(vcd)
spineplot(Improved ~ Age, data = Arthritis)
이제 여러분은 R의 다양한 그래프 기술에 대해 잘 이해하게 되었어요. 이 기술들을 활용해 데이터의 숨겨진 패턴과 관계를 발견해보세요. 여러분만의 새로운 모험을 만들어 보는 건 어떨까요?
우리 반 학생들의 신체 measurements(키, 몸무게, 시력 등)를 수집해서 상자 그림과 해적 그림으로 나타내 보아요.
우리 동네 가게들의 유형(편의점, 카페, 레스토랑 등)과 위치(번화가, 주택가 등)의 관계를 척추 그림으로 살펴보아요.
데이터 탐험가로서의 여러분의 모험이 즐겁고 유익하길 바랄게요. 앞으로도 데이터와 함께 멋진 발견 가득하시길!
8. 트레이너와 함께 성장해요!
Q: 상자 그림에서 상자 바깥의 점들은 무엇인가요? A: 그것들은 이상치(outlier)로, 다른 데이터와 크게 다른 값들이에요. 상자 그림은 이상치를 찾는 데에도 유용하죠.
Q: 해적 그림과 상자 그림은 어떤 점이 다른가요?
A: 해적 그림은 상자 그림에 데이터 포인트와 밀도 곡선이 추가된 거예요. 데이터의 분포를 더 자세히 볼 수 있죠.
여러분, 이제 R을 사용해 데이터를 탐험하는 기술을 많이 배웠어요. 하지만 가장 중요한 건 이 기술들을 실제 데이터에 적용하며 연습하는 거랍니다. 데이터 분석은 단순히 코드를 써내는 게 아니라, 데이터 속에서 의미를 찾아내는 것이니까요. 포켓몬 트레이너로서, 데이터 분석가로서 여러분의 성장을 응원할게요. 모두 데이터와 함께 멋진 모험 만들어 가시길!
8. 조건부 밀도 함수 그림으로 변수 간 관계 파악하기
우리가 지금까지 배운 것은 주로 한 변수에 대한 그래프였어요. 하지만 두 개의 연속형 변수 사이의 관계를 살펴볼 때는 조건부 밀도 함수 그림이 유용하답니다. 한 변수의 밀도 곡선이 다른 변수의 값에 따라 어떻게 달라지는지 볼 수 있거든요.
8.1. 조건부 밀도 함수 그림 그리기
ggplot2
패키지의 geom_density()
함수를 사용해 조건부 밀도 함수 그림을 그려볼 거예요. 이번에는 Cars93
데이터셋에서 엔진 크기(EngineSize
)에 따른 고속도로 연비(MPG.highway
)의 분포를 살펴볼 거예요.
library(ggplot2)
ggplot(Cars93, aes(x = MPG.highway, colour = factor(EngineSize))) +
geom_density() +
labs(x = "MPG on Highway", y = "Density", colour = "Engine Size")
8.2. rug 함수로 데이터 분포 표시하기
조건부 밀도 함수 그림에 rug()
함수를 추가하면, x축 위에 작은 선분으로 데이터 포인트의 위치를 표시할 수 있어요. 이를 통해 데이터가 x축 상에 어떻게 분포하는지 한눈에 파악할 수 있죠.
ggplot(Cars93, aes(x = MPG.highway, colour = factor(EngineSize))) +
geom_density() +
geom_rug() +
labs(x = "MPG on Highway", y = "Density", colour = "Engine Size")
8.3. 실습: 다른 변수로 조건부 밀도 함수 그림 그리기
이번에는 여러분이 직접 Cars93
데이터셋에서 다른 변수를 선택해 조건부 밀도 함수 그림을 그려보세요. 예를 들어, 차의 무게(Weight
)에 따른 도심 연비(MPG.city
)의 분포를 그려볼 수 있겠죠.
# Weight를 3개 구간으로 나누기
Cars93$WeightCat <- cut(Cars93$Weight, breaks = 3, labels = c("Light", "Medium", "Heavy"))
# 조건부 밀도 함수 그림 그리기
ggplot(Cars93, aes(x = MPG.city, colour = WeightCat)) +
geom_density() +
geom_rug() +
labs(x = "MPG in City", y = "Density", colour = "Weight Category")
조건부 밀도 함수 그림을 통해 우리는 한 변수의 분포가 다른 변수의 값에 따라 어떻게 달라지는지 살펴볼 수 있어요. 이는 변수들 간의 관계를 이해하는 데 큰 도움이 된답니다.
9. 포켓몬 트레이너의 통찰력 기르기
이제 여러분은 데이터 탐험에 필요한 다양한 도구를 갖추게 되었어요. 하지만 진정한 포켓몬 마스터가 되려면 이 도구들을 활용해 데이터 속에 숨겨진 패턴과 관계를 발견할 수 있어야 해요. 그래프를 그리는 것으로 끝이 아니라, 그래프가 우리에게 말해주는 바를 이해하는 게 중요하죠.
조건부 밀도 함수 그림을 보면서 이런 질문들을 해보세요.
엔진 크기가 큰 자동차와 작은 자동차의 연비 분포는 어떻게 다른가요?
자동차의 무게가 연비에 미치는 영향은 무엇인가요?
이러한 관계를 알면 어떤 점에서 도움이 될까요?
데이터 분석은 단순히 숫자를 다루는 것이 아니에요. 우리 주변의 세상을 이해하고, 더 나은 선택을 하는 데 도움을 주는 도구랍니다. 여러분이 이 도구를 활용해 세상을 탐험하는 멋진 포켓몬 트레이너가 되기를 바랄게요!
10. 트레이너의 조언
Q: 조건부 밀도 함수 그림에서 각 밀도 곡선의 아래 영역은 어떤 의미인가요? A: 밀도 곡선 아래의 영역은 항상 1이에요. 이는 확률의 총합이 1이라는 것을 나타내죠. 각 밀도 곡선은 해당 그룹 내에서의 상대적인 분포를 보여줍니다.
Q: rug 함수로 표시되는 선분들의 길이는 어떤 의미인가요? A: 선분들의 길이는 특별한 의미가 없어요. 선분들은 단지 데이터 포인트가 x축 상에 위치한 곳을 표시해주는 거랍니다. 많은 선분들이 모여 있는 구간은 그만큼 데이터가 많이 분포해 있다는 것을 나타내죠.
여러분, 우리는 이제 R을 활용해 데이터를 탐험하는 여정의 끝에 다다랐어요. 하지만 이것은 새로운 시작이기도 해요. 앞으로 여러분이 만나게 될 다양한 데이터 세트를 탐험하면서, 오늘 배운 것들을 활용해보세요. 데이터 속에서 발견의 기쁨을 느끼는 여러분의 모습을 상상하니 벌써 설레는걸요?
포켓몬 트레이너로서, 데이터 분석가로서 여러분의 앞날에 행운이 가득하기를! 힘차게 전진하세요, 어린 트레이너 여러분!