R에서 데이터 분포 시각화 (히스토그램, 박스플롯)

제공

안녕하세요! 데이터 분석, 어렵게만 느껴지셨죠? 특히 데이터의 분포를 한눈에 파악하는 건 쉽지 않아요. 그런데 걱정 마세요! 오늘은 R을 이용해서 데이터 분포를 시각적으로, 그리고 쉽게 이해하는 방법을 알려드리려고 해요. 마치 그림책을 보듯이 말이죠! 데이터 시각화 도구 중 가장 많이 쓰이는 히스토그램과 박스플롯! 이 두 가지를 R로 그리는 방법을 차근차근, 그리고 친절하게 설명해 드릴게요. R 코드와 함께 히스토그램과 박스플롯을 직접 만들어보면서 데이터 분석의 재미를 느껴보는 건 어떠세요? 📊 자, 이제 함께 데이터의 세계로 떠나볼까요?

 

 

히스토그램 이해하기

데이터 시각화, 얼마나 중요한지 다들 아시죠? 데이터 분석의 꽃이라고도 할 수 있잖아요~? 그중에서도 히스토그램데이터 분포를 한눈에 파악하는 데 정말 유용한 도구예요! 마치 데이터의 지형도를 그리는 것 같다고 할까요? ^^ 히스토그램을 제대로 이해하면 데이터 분석 실력이 껑충 뛰어오르는 걸 느낄 수 있을 거예요!

히스토그램의 정의

히스토그램은 간단히 말해서, 데이터를 특정 구간(bin)으로 나누고 각 구간에 속하는 데이터의 개수를 막대 그래프로 표현한 거예요. 막대의 높이가 해당 구간의 데이터 빈도를 나타내죠. 예를 들어, 100명 학생들의 시험 점수 분포를 히스토그램으로 나타낸다고 생각해 보세요. 0~10점, 10~20점… 이렇게 10점 단위로 구간을 나누고, 각 구간에 몇 명의 학생이 있는지 막대로 표현하는 거죠. 어때요, 참 쉽죠?!

히스토그램 활용 시 중요 포인트

하지만, 히스토그램을 제대로 활용하려면 몇 가지 중요한 포인트를 알아둬야 해요.

구간(bin)의 크기

첫 번째는 바로 ‘구간(bin)의 크기’예요! 구간의 크기가 너무 작으면 그래프가 너무 들쭉날쭉해서 전체적인 분포를 파악하기 어렵고, 반대로 너무 크면 중요한 세부 정보를 놓칠 수 있어요. ㅠㅠ 마치 현미경으로 너무 확대해서 보면 전체 그림을 놓치는 것과 같은 이치죠! 적절한 구간 크기를 정하는 건 데이터의 특징과 분석 목적에 따라 달라지는데, 일반적으로 Sturges’ formula (k = 1 + 3.322 log n, n은 데이터 개수, k는 구간 개수)를 참고하면 도움이 돼요. 하지만 이 공식이 절대적인 건 아니라는 거! 데이터의 특성을 고려해서 유연하게 조절하는 게 중요해요.

막대의 모양

두 번째로 중요한 건 ‘막대의 모양’이에요. 히스토그램의 막대 모양은 데이터 분포의 특징을 나타내는 중요한 단서를 제공해요. 예를 들어, 막대가 종 모양(정규분포)으로 나타나면 데이터가 평균값 주변에 몰려 있다는 것을 알 수 있고, 막대가 한쪽으로 치우쳐져 있으면 데이터가 한쪽으로 쏠려 있다는 것을 알 수 있죠. 때로는 막대가 여러 개의 봉우리를 가지는 경우도 있는데, 이는 데이터가 여러 개의 그룹으로 나뉘어 있을 가능성을 시사해요! 마치 산맥의 봉우리처럼 말이죠!

x축과 y축의 의미

세 번째, 히스토그램을 해석할 때는 ‘x축과 y축’의 의미를 정확하게 파악하는 것이 중요해요. x축은 데이터의 값을 나타내고, y축은 각 구간에 속하는 데이터의 개수(빈도)를 나타내요. x축과 y축의 단위를 잘 확인해야 데이터 분포를 정확하게 이해할 수 있어요. 예를 들어, x축이 ‘키(cm)’이고 y축이 ‘사람 수’라면, 170~180cm 구간의 막대 높이는 해당 키 범위에 속하는 사람들의 수를 나타내는 거죠!

이상값(outlier) 탐지

마지막으로, 히스토그램은 데이터의 ‘이상값(outlier)’을 탐지하는 데에도 유용하게 활용될 수 있어요. 이상값은 다른 데이터들과 크게 동떨어진 값으로, 데이터 분석 결과에 큰 영향을 미칠 수 있죠. 히스토그램에서 막대 그래프와 멀리 떨어진 곳에 위치한 데이터는 이상값일 가능성이 높아요! 이런 이상값들은 분석 결과를 왜곡시킬 수 있으니, 주의 깊게 살펴봐야 해요!! 마치 지도에서 멀리 떨어진 섬처럼 말이죠!

히스토그램 활용의 중요성

자, 이제 히스토그램을 어떻게 활용해야 할지 감이 좀 잡히시나요? 데이터 분석의 여정에서 히스토그램은 든든한 나침반 역할을 해줄 거예요. 데이터의 분포를 파악하고, 숨겨진 패턴을 발견하고, 이상값을 탐지하는 데 히스토그램을 적극적으로 활용해 보세요! 데이터 분석의 세계가 더욱 흥미진진해질 거예요! 다음에는 박스플롯에 대해 알아볼 텐데, 기대해 주세요~!

 

박스플롯으로 데이터 분포 파악하기

히스토그램에 이어 이번에는 박스플롯에 대해 알아볼까요? 히스토그램이 데이터 분포의 전체적인 모양을 보여준다면, 박스플롯은 데이터의 중심 위치, 퍼짐 정도, 그리고 이상치 존재 여부를 한눈에 파악하기 쉽게 해줘요. 마치 데이터의 DNA를 분석하는 느낌이랄까요? ^^

박스플롯의 구조

자, 그럼 박스플롯이 어떻게 데이터 분포를 보여주는지 하나씩 살펴보도록 해요. 우선 박스플롯의 기본 구조는 네모난 박스와 그 양쪽으로 뻗어 나가는 수염으로 이루어져 있어요. 이 단순한 구조 안에 데이터 분포에 대한 핵심 정보가 쏙쏙 담겨 있답니다!

박스플롯의 박스

먼저 박스의 아래쪽 경계는 데이터의 1사분위수(Q1)를, 위쪽 경계는 3사분위수(Q3)를 나타내요. 1사분위수는 데이터를 크기 순서대로 나열했을 때 하위 25%에 해당하는 값이고, 3사분위수는 상위 25%에 해당하는 값이에요. 즉, 박스는 데이터의 중간 50%가 위치하는 범위를 보여주는 거죠. 이 범위를 사분위 범위(Interquartile Range, IQR)라고 부르는데, IQR = Q3 – Q1로 계산할 수 있어요. IQR은 데이터의 변동성을 나타내는 중요한 지표 중 하나랍니다. IQR이 크면 데이터가 넓게 퍼져 있다는 것을 의미하고, IQR이 작으면 데이터가 중심에 몰려 있다는 것을 의미해요.

박스플롯의 중앙값

박스 안에는 또 하나의 중요한 선이 있는데, 바로 중앙값(median)을 나타내는 선이에요. 중앙값은 데이터를 크기 순서대로 나열했을 때 정중앙에 위치하는 값이죠. 중앙값은 평균과 달리 이상치의 영향을 덜 받기 때문에 데이터의 중심 위치를 파악하는 데 유용하게 사용돼요. 만약 박스 안의 중앙값 선이 박스의 정중앙에 위치하지 않고 한쪽으로 치우쳐 있다면? 데이터 분포가 비대칭이라는 것을 알 수 있어요. 예를 들어 중앙값 선이 박스의 아래쪽에 가까이 있다면 데이터 분포가 오른쪽으로 긴 꼬리를 가진다는 것을 의미해요.

박스플롯의 수염

박스 양쪽으로 뻗어 나가는 수염은 데이터의 범위를 보여주는 역할을 해요. 수염의 끝은 일반적으로 최솟값과 최댓값을 나타내지만, 항상 그런 것은 아니에요! 박스플롯은 이상치를 탐지하는 기능도 가지고 있기 때문에, 이상치가 존재하는 경우 수염의 길이가 제한되고 이상치는 별도의 점으로 표시돼요. 이상치는 일반적인 데이터 분포에서 벗어난 값으로, 데이터 분석에 있어 중요한 정보를 제공할 수 있어요. 예를 들어, 제품의 불량률 측정 데이터에서 이상치가 발견된다면 생산 공정에 문제가 있을 가능성을 시사하는 거죠.

박스플롯에서 이상치 판단

이상치는 어떻게 판단할까요? 일반적으로 IQR을 이용하여 이상치를 판단해요. Q1 – 1.5 * IQR보다 작거나 Q3 + 1.5 * IQR보다 큰 값을 이상치로 간주하는 것이 일반적이에요. 물론, 이 기준은 상황에 따라 조정될 수 있답니다.

박스플롯을 이용한 그룹 비교

박스플롯은 여러 그룹의 데이터 분포를 비교하는 데에도 매우 유용해요. 여러 개의 박스플롯을 나란히 그려봄으로써 각 그룹의 중심 위치, 퍼짐 정도, 이상치 존재 여부 등을 쉽게 비교할 수 있죠. 예를 들어, 남녀 학생들의 시험 점수 분포를 비교하고 싶다면 남학생과 여학생의 데이터로 각각 박스플롯을 만들어 비교해 볼 수 있어요. 이를 통해 남학생과 여학생의 평균 점수 차이, 점수 분포의 차이 등을 한눈에 파악할 수 있답니다.

박스플롯의 활용

어때요? 박스플롯, 생각보다 많은 정보를 담고 있죠? 데이터 분석에서 박스플롯은 마치 돋보기처럼 데이터 분포의 특징을 명확하게 보여주는 강력한 도구예요! 다음에는 R 코드를 이용해서 직접 히스토그램과 박스플롯을 만들어 보는 시간을 가져볼게요. 기대해 주세요~!

 

R 코드로 히스토그램 만들기

드디어! R로 히스토그램을 만들어 볼 시간이에요~! 히스토그램은 데이터 분포를 한눈에 보여주는 정말 강력한 도구죠. 마치 데이터의 얼굴을 보는 것 같달까요? ^^ 단순히 숫자만 나열된 것보다 훨씬 직관적으로 데이터의 특징을 파악할 수 있답니다. 자, 그럼 R을 이용해서 히스토그램을 어떻게 만들 수 있는지, 다양한 옵션들과 함께 자세히 알아볼까요?

hist() 함수로 히스토그램 생성

먼저, 히스토그램을 그리기 위한 기본적인 함수는 hist()랍니다. 사용법은 정말 간단해요! 데이터를 담고 있는 벡터를 hist() 함수에 넣어주기만 하면 끝! 예를 들어, 1부터 100까지의 랜덤 숫자 1000개를 만들어 히스토그램으로 표현해 볼게요.

# 1부터 100까지의 랜덤 숫자 1000개 생성
data <- runif(1000, min = 1, max = 100)

# 히스토그램 생성
hist(data)

이렇게 간단하게 히스토그램을 만들 수 있다니, 정말 놀랍지 않나요?! runif() 함수는 균등분포(uniform distribution)를 따르는 랜덤 숫자를 생성하는 함수에요. 여기서는 1부터 100까지의 숫자를 1000개 생성했어요. 실행해 보면 막대들의 높이가 비슷비슷한 걸 확인할 수 있을 거예요. 균등분포니까 당연한 결과겠죠?

하지만, 기본 설정만으로는 내가 원하는 모양의 히스토그램을 만들기 어려울 수도 있어요. 걱정 마세요! hist() 함수에는 다양한 옵션들이 있어서 히스토그램을 내 입맛대로 customizing 할 수 있답니다!

breaks 옵션으로 구간 개수 조절하기

히스토그램의 막대(bin) 개수를 조절하고 싶다면 breaks 옵션을 사용하면 돼요. 예를 들어, breaks = 20으로 설정하면 막대가 20개인 히스토그램이 만들어진답니다.

hist(data, breaks = 20)

막대 개수를 바꿔보면서 데이터 분포의 모양이 어떻게 달라지는지 관찰해 보세요! 데이터의 특징을 더 잘 파악하는 데 도움이 될 거예요!

col 옵션으로 색상 변경하기

히스토그램의 색깔이 지루하다면 col 옵션을 사용해서 바꿔볼 수 있어요. "skyblue", "lightgreen", "orange" 등 다양한 색상 이름을 사용할 수 있답니다. 히스토그램을 좀 더 예쁘게 꾸미고 싶다면 꼭 활용해 보세요~

hist(data, breaks = 20, col = "skyblue")

main, xlab, ylab 옵션으로 제목과 축 레이블 설정

히스토그램에 제목이나 x축, y축 레이블을 추가하고 싶다면 main, xlab, ylab 옵션을 사용하면 돼요. main은 제목, xlab는 x축 레이블, ylab는 y축 레이블을 설정하는 옵션이랍니다.

hist(data, breaks = 20, col = "skyblue", main = "데이터 히스토그램", xlab = "값", ylab = "빈도")

xlim, ylim 옵션으로 축 범위 설정

x축이나 y축의 범위를 제한하고 싶다면 xlimylim 옵션을 사용하면 돼요. 예를 들어, xlim = c(0, 100)으로 설정하면 x축 범위가 0부터 100까지로 제한된답니다.

hist(data, breaks = 20, col = "skyblue", main = "데이터 히스토그램", xlab = "값", ylab = "빈도", xlim = c(0, 100))

probability = TRUE 옵션으로 밀도 히스토그램 그리기

y축을 빈도 대신 확률 밀도로 표시하고 싶다면 probability = TRUE 옵션을 사용하세요. 이렇게 하면 히스토그램의 전체 면적이 1이 되도록 그려진답니다! 데이터의 분포를 확률적으로 분석할 때 유용하게 활용할 수 있어요.

hist(data, breaks = 20, col = "skyblue", probability = TRUE, main = "데이터 히스토그램 (밀도)", xlab = "값", ylab = "밀도")
# 밀도 히스토그램 위에 정규분포 곡선 추가 (데이터가 정규분포를 따른다고 가정)
curve(dnorm(x, mean = mean(data), sd = sd(data)), add = TRUE, col = "red", lwd = 2)

이처럼 hist() 함수 하나만으로도 정말 다양한 히스토그램을 만들 수 있죠? 이 외에도 border, labels, axes 등 더 많은 옵션들이 있으니, R 도움말(?hist)을 참고해서 나만의 멋진 히스토그램을 만들어 보세요! 데이터 분석의 재미가 훨씬 커질 거예요! 다음에는 박스플롯에 대해 알아볼게요! 기대해주세요~!

 

R 코드로 박스플롯 만들기

자, 이제 드디어 R을 이용해서 박스플롯을 직접 만들어 볼 시간이에요! 히스토그램에 이어서 이번에도 어렵지 않으니 걱정 마세요~? R의 강력한 기능 덕분에 몇 줄의 코드만으로 멋진 박스플롯을 뚝딱 만들 수 있답니다! 준비되셨나요?!

데이터 준비

먼저, 데이터가 필요하겠죠? 예시로 펭귄들의 날개 길이 데이터를 사용해볼게요. 펭귄 데이터는 palmerpenguins 패키지에 들어있어요. 만약 설치가 안 되어 있다면 install.packages("palmerpenguins")를 실행해서 설치해 주세요! 설치 후에는 library(palmerpenguins)로 패키지를 불러와야 사용할 수 있어요. 잊지 마세요~ ^^

# palmerpenguins 패키지 설치 (이미 설치되어 있다면 생략 가능)
install.packages("palmerpenguins")

# 패키지 불러오기
library(palmerpenguins)

# penguins 데이터셋 살펴보기
head(penguins)

head(penguins) 함수를 사용하면 데이터셋의 앞부분을 살짝 엿볼 수 있어요! 펭귄 종류, 섬, 날개 길이 등 다양한 정보가 담겨 있네요.

ggplot2 패키지를 사용한 박스플롯 생성

자, 그럼 이제 ggplot2 패키지를 사용해서 박스플롯을 만들어 볼까요? ggplot2는 R에서 가장 인기 있는 시각화 패키지 중 하나랍니다. 강력하고 예쁜 그래프를 만들 수 있어서 저도 애용하고 있어요! 혹시 설치가 안 되어 있다면 install.packages("ggplot2")를 실행해 주세요!

# ggplot2 패키지 설치 (이미 설치되어 있다면 생략 가능)
install.packages("ggplot2")

# 패키지 불러오기
library(ggplot2)

# 기본 박스플롯 만들기
ggplot(data = penguins, aes(x = species, y = flipper_length_mm)) + 
  geom_boxplot()

짜잔~! ggplot() 함수로 그래프를 시작하고, aes() 함수 안에 x축에는 펭귄 종류(species), y축에는 날개 길이(flipper_length_mm)를 넣어주면 기본적인 박스플롯이 완성돼요! 어때요? 정말 간단하죠?! 각 종별 날개 길이의 중앙값, 사분위수, 이상치까지 한눈에 볼 수 있어서 정말 편리해요!

박스플롯 꾸미기

하지만 여기서 멈추지 않고 좀 더 멋지게 꾸며볼 수도 있어요! 색깔을 바꿔볼까요? fill 옵션을 사용하면 박스플롯의 색깔을 변경할 수 있답니다.

# 색깔 변경하기
ggplot(data = penguins, aes(x = species, y = flipper_length_mm, fill = species)) + 
  geom_boxplot()

이렇게 fill = species를 추가하면 펭귄 종류별로 다른 색깔의 박스플롯이 만들어져요! 훨씬 보기 좋죠?! ggplot2는 정말 다양한 옵션을 제공해서 원하는 대로 그래프를 꾸밀 수 있어요. 예를 들어, notch = TRUE 옵션을 추가하면 중앙값 주변에 노치를 만들어서 중앙값의 신뢰구간을 표시할 수 있답니다.

# 노치 추가하기
ggplot(data = penguins, aes(x = species, y = flipper_length_mm, fill = species)) + 
  geom_boxplot(notch = TRUE)

이 외에도 제목을 추가하거나, 축 레이블을 변경하거나, 테마를 적용하는 등 다양한 방법으로 박스플롯을 꾸밀 수 있어요. ggplot2 패키지의 다양한 기능을 활용해서 나만의 멋진 박스플롯을 만들어 보세요! 예를 들어, theme_bw()는 깔끔한 흑백 테마를 적용해 준답니다!

# 테마 적용하기
ggplot(data = penguins, aes(x = species, y = flipper_length_mm, fill = species)) + 
  geom_boxplot(notch = TRUE) +
  theme_bw()

결론

자, 이제 R을 이용해서 박스플롯 만드는 방법을 알아봤어요! 어때요? 생각보다 쉽죠?! 데이터 분석에서 시각화는 정말 중요한 부분이에요. 박스플롯을 잘 활용하면 데이터의 분포를 한눈에 파악하고, 숨겨진 인사이트를 발견할 수 있답니다! 다양한 데이터로 연습해보고, 나만의 멋진 박스플롯을 만들어 보세요~! 다음에는 또 다른 흥미로운 데이터 시각화 기법을 소개해 드릴게요! 기대해 주세요!

 

자, 이렇게 히스토그램박스플롯에 대해 알아봤어요! 어때요, 생각보다 어렵지 않았죠? 데이터 분석, 처음엔 막막하게 느껴질 수 있지만, 이런 시각화 도구들을 활용하면 데이터 속에 숨겨진 이야기들을 훨씬 쉽게 발견할 수 있답니다. 마치 보물찾기 같지 않나요? R 코드도 간단하니까 직접 데이터를 가지고 실험해보면 더 재밌을 거예요. 데이터 분석 실력 쑥쑥 키워서, 앞으로 더 많은 인사이트를 발견하길 바라요! 궁금한 점이 있다면 언제든 질문해주세요. 함께 데이터 세상을 탐험해봐요!

 


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다