R에서 ggplot2 패키지 활용 (ggplot(), aes(), geom_bar(), geom_line())

제공

안녕하세요! 데이터 시각화, 어렵게만 느껴지셨나요? 혹시 R을 사용하고 계신다면, 걱정 마세요! R의 강력한 시각화 도구, ggplot2 패키지를 활용하면 아주 쉽고 예쁘게 데이터를 표현할 수 있거든요. ggplot2는 마치 그림을 그리듯, 레이어를 쌓아가는 방식으로 그래프를 만들어가는 재미가 있어요. 오늘은 ggplot() 함수를 시작으로 aes() 함수를 이용한 데이터 매핑, 그리고 geom_bar()로 막대 그래프, geom_line()으로 선 그래프를 그리는 방법까지, 기초부터 차근차근 알아보려고 해요. 흥미진진한 시각화의 세계로 함께 떠나볼까요?

 

 

ggplot2 기본 이해와 활용

R 언어로 데이터 시각화를 한다? 그러면 ggplot2 패키지를 빼놓을 수 없겠죠?! 마치 피자에 치즈처럼요!🍕 ggplot2는 그 문법이 독특해서 처음엔 조금 어렵게 느껴질 수도 있어요. 하지만 걱정 마세요! 한번 익숙해지면 다른 시각화 도구는 눈에 안 들어올 만큼 강력하고 매력적인 도구랍니다. 마치 마법 같아요✨!

ggplot2는 ‘Grammar of Graphics’라는 개념을 기반으로 만들어졌어요. 마치 레고 블록처럼! 원하는 시각화를 만들기 위해 다양한 구성 요소들을 층층이 쌓아 올리는 방식이죠. 이러한 구성 요소들을 레이어라고 부르는데, 이 레이어들을 잘 활용하면 상상할 수 있는 거의 모든 종류의 그래프를 만들 수 있답니다. 정말 신기하지 않나요?!😮

ggplot() 함수

자, 그럼 ggplot2의 기본적인 구성 요소들을 하나씩 살펴볼까요? 먼저 `ggplot()` 함수는 모든 것의 시작점이에요. 이 함수를 통해 빈 캔버스를 만들고, 데이터를 연결할 준비를 하죠. 마치 그림을 그리기 전에 깨끗한 도화지를 펼쳐놓는 것과 같아요! ggplot(data = 데이터프레임) 이렇게 말이죠. 여기서 데이터프레임에는 여러분이 시각화하고 싶은 데이터가 담겨있어야 해요.

aes() 함수

그다음 중요한 함수는 바로 `aes()` 함수! `aes()`는 ‘Aesthetic mappings’의 약자로, 데이터의 어떤 변수를 시각적 요소에 연결할지 지정하는 역할을 해요. 예를 들어 x축에는 어떤 변수를, y축에는 어떤 변수를 표시할지, 색깔이나 크기는 어떤 변수에 따라 다르게 할지 등을 정의할 수 있죠. aes(x = 변수1, y = 변수2, color = 변수3) 와 같이 사용하면 된답니다. `aes()` 함수는 `ggplot()` 함수 안에 들어가야 한다는 점, 잊지 마세요!

`ggplot()` 함수와 `aes()` 함수, 이 두 가지가 ggplot2의 가장 기본적인 구성 요소라고 할 수 있어요. 이 두 함수를 잘 이해하면 ggplot2의 절반은 정복한 거나 다름없답니다! 💪

geom_() 함수

하지만 ggplot2의 진짜 마법은 `geom_()` 함수에서 시작된다는 사실! `geom_()` 함수는 실제로 그래프를 그리는 역할을 해요. 막대 그래프를 그리고 싶으면 geom_bar(), 선 그래프를 그리고 싶으면 geom_line(), 산점도를 그리고 싶으면 geom_point() 등 다양한 `geom_()` 함수들이 존재한답니다. 각 `geom_()` 함수는 고유한 특징과 매개변수를 가지고 있어서, 원하는 대로 그래프를 섬세하게 조정할 수 있어요. 정말 놀랍죠?! 🤩

예를 들어, geom_bar(stat = "identity") 와 같이 stat 매개변수를 “identity”로 설정하면, 데이터에 이미 계산된 값을 그대로 사용해서 막대 그래프를 그릴 수 있어요. 만약 stat 매개변수를 지정하지 않으면, ggplot2는 기본적으로 데이터의 개수를 세어서 막대 그래프를 그린답니다. 이처럼 `geom_()` 함수의 다양한 매개변수들을 활용하면 원하는 모양의 그래프를 정확하게 표현할 수 있어요.

ggplot2는 레이어 방식으로 작동하기 때문에, 여러 개의 `geom_()` 함수를 겹쳐서 사용할 수도 있어요. 예를 들어 geom_point()로 산점도를 그리고, 그 위에 geom_smooth()를 추가하여 추세선을 그릴 수 있죠. 이렇게 레이어를 쌓아가면서 복잡하고 다채로운 시각화를 만들 수 있다는 것이 ggplot2의 가장 큰 장점 중 하나랍니다. 마치 멋진 그림을 그리는 화가처럼요! 🎨

자, 이제 ggplot2의 기본적인 구성 요소들을 살펴봤으니, 실제 데이터를 활용해서 다양한 그래프를 만들어 볼 준비가 되었어요! 다음에는 aes() 함수를 좀 더 자세히 알아보고, geom_bar()geom_line() 함수를 사용해서 멋진 막대 그래프와 선 그래프를 그려보도록 할게요. 기대되시죠?! 😉 ggplot2의 세계는 무궁무진하니까요! 계속해서 탐험해보면 데이터 시각화의 달인이 될 수 있을 거예요! 😄

 

aes() 함수로 데이터 매핑하기

자, 이제 ggplot2의 핵심이라고 할 수 있는 aes() 함수에 대해 알아볼까요? 마치 그림을 그릴 때 밑그림을 그리는 것처럼, aes() 함수는 데이터를 어떻게 시각적으로 표현할지 정의하는 역할을 해요. ‘Aesthetic mappings’, 즉 ‘미적 매핑’이라는 멋진 이름을 가지고 있죠? ^^ ggplot2에서는 이 미적 매핑을 통해 데이터의 변수들을 그래프의 시각적 요소(색상, 크기, 모양 등)에 연결한답니다. 이 부분이 처음에는 조금 헷갈릴 수 있는데, 몇 가지 예시를 통해 차근차근 살펴보면 금방 이해할 수 있을 거예요!

aes() 함수의 기본: x축, y축 매핑

aes() 함수 안에는 x축, y축에 해당하는 변수를 지정하는 것이 가장 기본이에요. 예를 들어, mpg 데이터셋을 사용해서 자동차의 엔진 크기(displ)와 연비(hwy)의 관계를 나타내는 산점도를 그리고 싶다고 해 볼게요. 이때 aes(x = displ, y = hwy)처럼 x축에는 displ, y축에는 hwy를 매핑하면 된답니다. 참 쉽죠?!

aes() 함수의 매력: 색상, 크기, 모양 매핑

하지만 aes() 함수의 진짜 매력은 여기서 끝이 아니에요! 단순히 x, y축 뿐만 아니라 점의 색깔, 크기, 모양까지 데이터에 따라 다르게 표현할 수 있다는 사실! 예를 들어, 자동차의 종류(class)에 따라 점의 색깔을 다르게 하고 싶다면, aes(x = displ, y = hwy, color = class)처럼 color 인수에 class 변수를 매핑하면 돼요. 이렇게 하면 자동차 종류별로 다른 색깔의 점으로 산점도가 그려진답니다. 정말 신기하지 않나요?! class 변수가 가지고 있는 각각의 값(Compact, SUV, Midsize 등)에 따라 자동으로 색깔이 구분되어 표시되는 거예요!

크기나 모양도 마찬가지랍니다. 자동차의 실린더 수(cyl)에 따라 점의 크기를 다르게 하고 싶다면 aes(size = cyl)을 추가하고, 자동차의 구동 방식(drv)에 따라 점의 모양을 다르게 하고 싶다면 aes(shape = drv)를 추가하면 돼요. 이처럼 aes() 함수를 사용하면 데이터의 다양한 특징을 시각적으로 한눈에 파악하기 훨씬 쉬워진답니다! 데이터 시각화의 마법 같지 않나요~?

aes() 함수 사용 시 주의사항

aes() 함수 안에 변수를 매핑할 때 중요한 점은, 변수를 따옴표 없이 그대로 입력해야 한다는 거예요. 따옴표를 사용하면 변수 이름이 아니라 문자열로 인식되기 때문에 제대로 매핑되지 않을 수 있어요. 주의하세요!!

또 하나! aes() 함수는 ggplot() 함수 안에 들어가야 한다는 점도 기억해 두세요. ggplot() 함수는 ggplot2로 그래프를 그리기 위한 기본 틀을 만들어주는 함수인데, aes() 함수는 이 틀 안에서 데이터를 어떻게 시각화할지 정의하는 역할을 하기 때문이죠. 마치 캔버스에 그림을 그리기 전에 밑그림을 그리는 것과 같은 이치라고 생각하면 돼요.

aes() 함수 활용 예시: 다양한 데이터셋과의 조합

자, 이제 aes() 함수를 이용해서 다양한 시각적 요소를 데이터에 매핑하는 방법을 알아봤으니, 실제 데이터를 활용해서 여러 가지 그래프를 만들어 보는 건 어떨까요? mpg 데이터셋 외에도 diamonds, iris 등 다양한 데이터셋을 활용해서 연습해 볼 수 있어요. 각 데이터셋이 가지고 있는 변수들을 활용해서 다양한 조합으로 aes() 함수를 사용해 보세요! 예를 들어, diamonds 데이터셋을 사용해서 다이아몬드의 캐럿(carat), 컷(cut), 색상(color), 투명도(clarity) 등의 변수를 aes() 함수 안에 매핑해서 다양한 산점도를 그려볼 수 있겠죠?

iris 데이터셋을 사용한다면, 꽃잎의 길이(Petal.Length), 꽃잎의 너비(Petal.Width), 꽃받침의 길이(Sepal.Length), 꽃받침의 너비(Sepal.Width), 그리고 품종(Species) 등의 변수들을 활용해서 다양한 시각화를 시도해 볼 수 있을 거예요! 각 변수들을 x, y축에 매핑하고, 색상, 크기, 모양 등의 시각적 요소에도 매핑해 보면서 데이터의 패턴을 분석해보는 재미를 느껴보세요!

처음에는 조금 어려워 보일 수 있지만, 몇 번 연습하다 보면 금방 익숙해질 거예요! 화이팅!

aes() 함수의 활용 가치

aes() 함수를 잘 활용하면 데이터 안에 숨겨진 이야기를 발견하고, 그 이야기를 효과적으로 전달하는 데 큰 도움이 될 거예요. 데이터 시각화의 세계는 무궁무진하니까요! 다양한 시도를 통해 자신만의 멋진 시각화 작품을 만들어 보세요!

다음 내용 예고: geom_bar() 함수

다음에는 geom_bar() 함수를 이용해서 막대 그래프를 만드는 방법을 알아볼게요! 기대해 주세요!

 

geom_bar()로 막대 그래프 만들기

드디어! ggplot2의 꽃이라고 할 수 있는 geom_bar()를 사용해서 막대 그래프를 만들어 볼 시간이에요~! 짝짝짝! 데이터 시각화에서 막대 그래프만큼 자주 쓰이고, 또 효과적인 방법도 드물죠? ^^ geom_bar() 함수는 정말 다재다능해서, 간단한 집계부터 복잡한 그룹화까지 다양한 막대 그래프를 만들 수 있답니다.

데이터 준비

자, 그럼 본격적으로 시작해 볼까요? 먼저, 막대 그래프를 그리려면 어떤 데이터가 필요할지 생각해 봐야겠죠? 예를 들어, 온라인 쇼핑몰에서 판매된 상품 카테고리별 판매량을 시각화한다고 해볼게요. ‘의류’, ‘전자제품’, ‘식품’, ‘도서’와 같은 카테고리가 있고, 각 카테고리별 판매량 데이터가 있다고 가정해 봅시다. 이런 데이터는 엑셀이나 CSV 파일 형태로 준비되어 있을 거예요. R에서는 이런 데이터를 불러와서 data.frame 형태로 다루게 됩니다. data.frame은 마치 엑셀 시트처럼 행과 열로 이루어진 표 형태라고 생각하시면 돼요. 각 행은 하나의 데이터 항목을 나타내고, 열은 각 항목의 속성을 나타내죠. 이해하기 쉽죠? ^^

ggplot2 시작하기

이제 R 코드를 작성해 볼게요. ggplot2 패키지를 사용하려면 먼저 library(ggplot2) 명령어로 패키지를 불러와야 해요. 그다음 ggplot() 함수를 사용해서 막대 그래프의 기본 틀을 만들어 줍니다. ggplot() 함수 안에는 aes() 함수를 사용해서 데이터와 그래프 요소를 연결해 주는데요, x축에는 카테고리, y축에는 판매량을 나타내는 변수를 지정해 주면 됩니다. 여기까지만 해도 뭔가 흥미진진하지 않나요?!

geom_bar() 함수로 막대 그리기

자, 이제 geom_bar() 함수를 추가해서 막대를 그려볼게요! geom_bar() 함수 안에는 stat = “identity”라는 인수를 추가해 줘야 하는데요, 이건 ggplot2에게 데이터에 이미 집계된 값이 있으니 그대로 사용하라고 알려주는 역할을 해요. 만약 stat = “count”를 사용하면, ggplot2가 자동으로 각 카테고리별 데이터 개수를 세서 막대 그래프를 그려줍니다. 데이터 형태에 따라 적절한 stat 값을 사용하는 게 중요해요!

막대 스타일링

geom_bar() 함수에는 막대의 색깔, 테두리, 투명도 등 다양한 스타일 옵션을 지정할 수 있어요. fill 인수를 사용하면 막대의 채우기 색을, color 인수를 사용하면 테두리 색을 지정할 수 있죠. alpha 인수를 사용하면 막대의 투명도를 조절할 수도 있답니다! 0부터 1까지의 값을 사용하는데, 0에 가까울수록 투명해지고 1에 가까울수록 불투명해져요. 신기하죠? ^^

그룹별 막대 그래프

때로는 막대 그래프를 그룹별로 나눠서 비교하고 싶을 때도 있잖아요? 예를 들어, 남성과 여성 고객의 카테고리별 판매량을 비교하고 싶다면 어떻게 해야 할까요? 이럴 때는 aes() 함수 안에 fill 인수를 사용해서 그룹 변수를 지정해 주면 됩니다. 그러면 각 그룹별로 다른 색깔의 막대가 표시되어 비교하기 훨씬 쉬워져요! position = “dodge” 옵션을 추가하면 그룹별 막대가 겹치지 않고 나란히 표시되도록 할 수도 있어요. 정말 유용하죠?!

누적 막대 그래프

ggplot2는 단순한 막대 그래프뿐만 아니라 누적 막대 그래프도 그릴 수 있어요. position = “stack” 옵션을 사용하면 각 그룹의 막대가 위로 쌓아 올려진 형태로 표시됩니다. 전체 판매량 중 각 그룹이 차지하는 비중을 한눈에 파악하기에 좋죠. position = “fill” 옵션을 사용하면 각 그룹의 막대가 전체 높이에 비례해서 표시되어, 비율을 더욱 명확하게 보여줄 수 있어요. 정말 다양한 옵션이 있죠? ^^

마무리

이렇게 geom_bar() 함수를 사용하면 다양한 형태의 막대 그래프를 자유자재로 만들 수 있어요. 데이터 분석 결과를 시각적으로 표현하고 싶을 때, geom_bar() 함수는 정말 강력한 도구가 될 수 있답니다!

 

geom_line()으로 선 그래프 그리기

자, 이제 드디어 geom_line() 함수를 이용해서 선 그래프를 그려볼 시간이에요! ggplot2로 막대 그래프를 슥슥 그려봤으니, 선 그래프도 어렵지 않게 쓱싹! 해낼 수 있을 거예요.^^ 기본적인 원리는 geom_bar()와 거의 똑같으니까, 걱정 마세요~?

선 그래프는 시간에 따른 데이터의 변화 추이를 보여주거나 연속적인 데이터의 흐름을 나타낼 때 정말 유용해요. 주식 가격 변동, 웹사이트 방문자 수 변화, 날씨 변화… 이 모든 걸 선 그래프 하나로 깔끔하게 표현할 수 있답니다! ggplot2에서는 geom_line() 함수 하나면 충분해요. 어떻게 사용하는지, 바로 예시를 통해 알아볼까요?!

데이터 프레임 생성

먼저, 간단한 데이터 프레임을 만들어 볼게요. 2020년부터 2023년까지 4년 동안의 가상 판매량 데이터라고 생각해 보세요. year 변수에는 연도가, sales 변수에는 해당 연도의 판매량이 기록되어 있어요.

sales_data <- data.frame(
  year = 2020:2023,
  sales = c(1500, 1800, 2200, 2500)
)

geom_line()으로 선 그래프 그리기

이제 ggplot() 함수와 aes() 함수를 이용해서 기본 틀을 만들고, geom_line() 함수로 선을 그려 넣어 보겠습니다!

ggplot(sales_data, aes(x = year, y = sales)) +
  geom_line()

정말 간단하죠? x축에는 연도, y축에는 판매량을 지정하고 geom_line() 함수를 추가하기만 하면 끝! 이렇게 하면 각 연도별 판매량을 연결하는 선 그래프가 뿅! 하고 나타난답니다. 마치 마법 같죠?!

선 스타일 변경

선의 색깔이나 두께, 모양 등을 바꾸고 싶으신가요? 그럼 geom_line() 함수 안에 추가적인 옵션을 넣어주면 돼요! 예를 들어, 선의 색깔을 빨간색으로 바꾸려면 color = "red"를, 선의 두께를 2로 설정하려면 size = 2를 추가하면 됩니다. 참 쉽죠잉~?

ggplot(sales_data, aes(x = year, y = sales)) +
  geom_line(color = "red", size = 2)

선의 종류도 바꿀 수 있어요! 점선으로 표현하고 싶다면 linetype = "dashed"를 추가해 보세요. 다양한 선 종류를 사용해서 그래프를 좀 더 멋지게 꾸며볼 수 있답니다. 점선 외에도 dotted, dotdash, longdash 등 다양한 옵션이 있으니, 직접 사용해보고 마음에 드는 스타일을 찾아보세요!

ggplot(sales_data, aes(x = year, y = sales)) +
  geom_line(linetype = "dashed", size = 1.5, color = "blue")

여러 개의 선 그리기

여러 개의 선을 한 그래프에 표현하고 싶을 때는 어떻게 해야 할까요? 예를 들어, 판매량과 함께 예상 판매량 데이터도 함께 그래프에 표현하고 싶다고 가정해 봅시다. 데이터 프레임에 forecast라는 변수를 추가하고, aes() 함수 안에 group 옵션을 사용하면 돼요! group 옵션을 사용하면 데이터를 그룹별로 나누어서 선을 그릴 수 있어요. 아래 코드를 한번 볼까요?

sales_data$forecast <- c(1600, 1900, 2100, 2700)

ggplot(sales_data, aes(x = year)) +
  geom_line(aes(y = sales, color = "실제 판매량")) +
  geom_line(aes(y = forecast, color = "예상 판매량")) +
  scale_color_manual(values = c("실제 판매량" = "blue", "예상 판매량" = "red"))

각 선에 대한 범례(legend)까지 자동으로 생성되었죠?! scale_color_manual() 함수를 사용하면 범례의 색상과 이름을 직접 지정할 수 있어요. 정말 편리하지 않나요?! 이처럼 geom_line() 함수 하나만 잘 활용해도 다양한 스타일의 선 그래프를 쉽고 빠르게 그릴 수 있답니다! 이제 여러분도 데이터 분석 전문가처럼 멋진 선 그래프를 샥샥! 그려낼 수 있을 거예요! 다음에는 더욱 흥미진진한 ggplot2 기능들을 함께 탐험해 보도록 해요~!

 

자, 이렇게 ggplot2의 기본 개념부터 aes() 함수를 이용한 데이터 매핑, geom_bar()로 막대 그래프 표현, geom_line()으로 선 그래프 그리는 것까지 쭉 살펴봤어요! 어때요, 이제 좀 감이 잡히나요? 처음엔 조금 어려워 보일 수 있지만, 막상 해보면 생각보다 간단하고 재밌다는 걸 느낄 거예요. 직접 데이터를 가지고 이것저것 그려보면서 ggplot2의 매력에 푹 빠져보는 건 어떨까요? R과 ggplot2를 이용하면 상상하는 거의 모든 그래프를 자유자재로 그릴 수 있답니다! 앞으로 데이터 시각화 작업이 훨씬 즐거워질 거예요. 다음에는 더 재미있는 내용으로 찾아올게요! 기대해 주세요!

 


코멘트

답글 남기기

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