[ADsP - 데이터 분석] Tidyverse의 핵심 dplyr과 tidyr 완전 정복
3-1 R 프로그래밍 기초 & 데이터 마트
Tidyverse의 핵심 dplyr과 tidyr 완전 정복
: 데이터 분석을 바꾸는 문법의 세계
솔직히 말하면, R을 배우다 보면 처음엔 데이터 다루는 게 너무 복잡하고 헷갈릴 수 있어요. 특히 dplyr이나 tidyr 같은 패키지는 이름만 들으면 뭔가 고급 기술 같잖아요. 하지만 알고 보면 이 두 친구는 초보자에게도 엄청난 효율을 안겨주는 Tidyverse 생태계의 핵심 도구예요.
우리가 ADsP 시험을 준비하면서 데이터를 빠르고 정확하게 다룰 수 있는 능력은 필수인데요, 이 글을 통해 dplyr과 tidyr의 기본 문법부터 실습 예제, 모의고사까지 차근차근 익혀보도록 해요.
이 글을 끝까지 읽고 나면, RStudio에서 데이터를 정리하고 분석하는 속도가 2배는 빨라질 거예요. 그리고 무엇보다도, ADsP 시험에서 출제되는 실전 문법들을 정확히 짚고 넘어갈 수 있어서 더 이상 R이 낯설지 않게 느껴질 거예요.
목차
1. Tidyverse란 무엇인가? 🧼📊 [모의고사 포함]
"R로 데이터 분석을 하려면 Tidyverse는 꼭 알아야 돼요." 이런 말, 한 번쯤 들어보셨을 거예요. 그만큼 Tidyverse는 R 커뮤니티에서 표준처럼 사용되는 데이터 처리 패키지 모음이에요. 쉽게 말하면, 데이터를 다듬고 정리하고 분석하는 데 필요한 모든 도구들이 들어 있는 친절한 도구 상자 같은 거죠.
Tidyverse는 ggplot2
, dplyr
, tidyr
, readr
, purrr
, tibble
, stringr
, forcats
등의 패키지로 구성되어 있고, 이 중에서도 dplyr과 tidyr은 데이터 전처리의 핵심 중 핵심이에요. 우리가 ADsP 시험을 준비하면서 실제 데이터를 다룰 때, 가장 자주 쓰게 되는 두 주인공이기도 하죠.
Tidyverse의 특징 요약 🎯
- R 커뮤니티에서 가장 많이 쓰이는 데이터 처리 프레임워크
- 파이프 연산자(%>%)를 중심으로 명령어를 자연스럽게 연결
- 직관적이고 읽기 쉬운 문법을 제공하여 초보자에게 적합
기본 설치 및 로딩 방법 🔧
install.packages("tidyverse")
library(tidyverse)
명령어는 간단하지만, 설치만 해두면 dplyr, tidyr을 비롯한 여러 패키지를 한 번에 불러와서 쓸 수 있게 돼요. library(tidyverse)
명령 하나로 모든 준비 완료!
모의고사 📘
- Tidyverse에 포함되지 않는 패키지는 무엇인가요?
A. dplyr B. tidyr C. shiny D. stringr
정답: C – shiny는 UI 구축용 패키지로 Tidyverse에는 포함되지 않습니다. - Tidyverse의 주요 특징이 아닌 것은?
A. 가독성 높은 문법 B. 객체지향 프로그래밍 기반 C. 데이터 중심 기능 D. 파이프 기반 흐름
정답: B – Tidyverse는 함수형 스타일을 더 많이 따릅니다. - Tidyverse를 설치하는 함수는?
A. install_tidyverse() B. library(tidyverse) C. install.packages("tidyverse") D. require(tidyverse)
정답: C – R에서는 install.packages("패키지명")으로 설치합니다. - dplyr은 주로 어떤 작업에 쓰일까요?
A. 시각화 B. 문자열 처리 C. 데이터 전처리 D. UI 구축
정답: C – dplyr은 필터링, 요약 등 데이터 전처리에 특화되어 있어요. - tidyr의 주요 목적은?
A. 정규분포 시각화 B. 데이터 구조 정리 C. API 호출 D. HTML 문서 생성
정답: B – tidyr은 데이터의 형태를 넓거나 길게 바꾸는 등 구조 변환이 주 역할입니다.
이제 Tidyverse가 왜 R의 핵심 생태계인지 감이 오셨죠? 다음 단계에서는 본격적으로 dplyr의 문법을 파헤쳐 보겠습니다!
Tidyverse, dplyr, tidyr을 제대로 익혀두면 ADsP 시험은 물론 실무 프로젝트에도 훨씬 자신감이 붙어요. 이제 다음 단계로 넘어가 볼까요?
2. dplyr의 기본 문법과 주요 함수 💡🛠️ [모의고사 포함]
dplyr
는 R에서 데이터 전처리를 간단하고 깔끔하게 해주는 파이프라인 기반 함수형 패키지입니다. 우리가 데이터를 분석할 때 가장 많이 하는 일이 "필터링, 정렬, 요약, 집계" 같은 것들이잖아요? dplyr은 그런 반복적인 작업을 손쉽게 처리하게 도와주는 도구예요.
파이프 연산자 (%>%)란? 🔄
dplyr을 사용하면 코드를 "왼쪽에서 오른쪽으로 읽는 방식"으로 바꿀 수 있어요. 이때 사용하는 게 바로 %>%라는 파이프 연산자입니다. 파이프 연산자는 앞의 결과를 뒤 함수의 첫 번째 인자로 넘기는 기능을 해요.
# 예시: iris 데이터에서 Sepal.Length가 6 이상인 행만 추출
iris %>%
filter(Sepal.Length >= 6)
주요 함수 정리 📚
함수 | 설명 | 예시 |
---|---|---|
filter() |
조건에 맞는 행만 선택 | filter(Sepal.Length > 5) |
select() |
특정 열만 선택 | select(Species, Petal.Width) |
arrange() |
정렬(오름차순/내림차순) | arrange(desc(Sepal.Width)) |
mutate() |
새로운 열 생성 | mutate(Ratio = Sepal.Length / Sepal.Width) |
summarise() |
요약 통계 계산 | summarise(mean_length = mean(Sepal.Length)) |
group_by() |
그룹별 연산 | group_by(Species) |
이 함수들을 파이프 연산자와 함께 활용하면 복잡한 데이터 처리도 손쉽게 이어서 할 수 있어요. 코드를 읽는 것도 쓰는 것도 훨씬 직관적으로 바뀌죠.
모의고사 📘
- dplyr에서 특정 열을 선택할 때 사용하는 함수는?
A. filter() B. mutate() C. select() D. summarise()
정답: C – select()는 원하는 열만 뽑을 수 있게 도와줘요. - 행의 조건 필터링에 사용하는 함수는?
A. arrange() B. filter() C. group_by() D. mutate()
정답: B – filter()는 행 기준 조건 추출에 사용됩니다. - 새로운 변수(열)를 만들 때 사용하는 함수는?
A. mutate() B. summarise() C. select() D. group_by()
정답: A – mutate()는 기존 열을 바탕으로 새 열을 만들 수 있어요. - 데이터를 내림차순 정렬하려면 어떤 함수와 조합해야 하나요?
A. filter() + desc() B. arrange() + desc() C. select() + desc() D. summarise() + mean()
정답: B – arrange(desc())로 내림차순 정렬을 구현합니다. - 그룹별 요약 통계를 구할 때 필요한 두 함수는?
A. group_by() + summarise() B. filter() + mutate() C. select() + summarise() D. group_by() + arrange()
정답: A – group_by로 그룹을 나누고 summarise로 요약하는 조합은 dplyr의 핵심이에요.
dplyr을 잘 이해하면 R에서 데이터 처리의 절반은 끝난 거예요. 다음은 tidyr로 데이터 구조를 깔끔하게 정리하는 방법을 알아볼게요!
ADsP 시험에서는 dplyr 함수별 용도, 파이프 연산 활용법, 그리고 group_by + summarise 조합이 자주 출제돼요. 연습 꼭 해보세요!
3. tidyr을 활용한 데이터 구조 정리 🧩📐 [모의고사 포함]
R에서 데이터를 분석하려면 일단 데이터를 '예쁘게' 정리하는 게 먼저예요. 아무리 분석 기술이 좋아도, 데이터가 지저분하면 분석이 엉망이 될 수밖에 없거든요. 여기서 등장하는 친구가 바로 tidyr입니다. 이름 그대로 데이터를 tidy하게 만들어주는 도구죠.
tidyr의 핵심 목적은 데이터를 정형화된 형태로 바꾸는 거예요. 이를 통해 dplyr, ggplot2, 모델링 등 다른 작업에 최적화된 구조를 만들 수 있어요. 즉, ‘데이터 전처리의 시작점’이라고 할 수 있죠.
tidy data란? 🤔
- 각 변수는 하나의 열(column)에 위치해야 함
- 각 관측값은 하나의 행(row)에 위치해야 함
- 하나의 데이터셋은 하나의 관측 단위를 나타내야 함
주요 함수 사용법 💻
함수 | 설명 | 예시 |
---|---|---|
pivot_longer() |
열을 행으로 변환 (wide → long) | pivot_longer(cols = starts_with("year")) |
pivot_wider() |
행을 열로 변환 (long → wide) | pivot_wider(names_from = "year", values_from = "value") |
separate() |
하나의 열을 여러 열로 분리 | separate(col = "date", into = c("year", "month")) |
unite() |
여러 열을 하나로 결합 | unite("date", year, month, sep = "-") |
모의고사 📘
- tidy data의 조건이 아닌 것은?
A. 변수는 열로 표현 B. 관측값은 행으로 표현 C. 열마다 여러 변수 포함 D. 한 관측 단위는 하나의 데이터셋
정답: C – 열마다 하나의 변수만 있어야 tidy data입니다. - 열을 행으로 바꾸는 함수는?
A. pivot_wider() B. pivot_longer() C. separate() D. unite()
정답: B – pivot_longer()는 wide → long 변환 함수입니다. - 여러 열을 하나로 결합하려면 어떤 함수?
A. separate() B. unite() C. pivot_longer() D. mutate()
정답: B – unite()는 여러 열을 하나로 합칠 때 사용해요. - separate() 함수는 주로 언제 사용되나요?
A. 결측치 제거 B. 변수 합치기 C. 날짜 등 문자열 분리 D. 그룹핑
정답: C – 날짜에서 연도/월/일을 분리할 때 자주 써요. - 데이터를 wide 형태로 바꿔주는 함수는?
A. pivot_wider() B. pivot_longer() C. unite() D. filter()
정답: A – pivot_wider()는 long → wide 구조 변환 함수입니다.
데이터가 tidy 형태로 정리돼야 분석이 쉬워져요. tidyr은 단순히 예쁜 데이터가 아니라, 분석 가능한 데이터를 만드는 도구랍니다.
tidyr, tidy data, pivot_longer, pivot_wider – 이 키워드들 꼭 기억하세요! 다음 글에서는 이 모든 걸 합쳐서 dplyr + tidyr 실전 예제를 만들어봅니다!
4. dplyr과 tidyr의 통합 활용 예제 🔁📊 [모의고사 포함]
이제 dplyr과 tidyr의 기본을 알았다면, 실전처럼 함께 써볼 시간이에요. ADsP 실무형 문제나 프로젝트 실습에서도 dplyr만, tidyr만 쓰는 경우는 드물어요. 대부분은 이 둘을 같이 써서 데이터를 가공하고 분석 가능한 형태로 만드는 게 핵심입니다.
실습 예제: 학생 시험 점수 데이터 분석
# 가상의 점수 데이터 (wide format)
library(tidyverse)
scores <- tibble(
name = c("철수", "영희", "민수"),
math_1 = c(80, 90, 85),
math_2 = c(85, 92, 88),
eng_1 = c(75, 85, 80),
eng_2 = c(78, 88, 82)
)
# 1단계: pivot_longer()로 long 형태로 변환
long_scores <- scores %>%
pivot_longer(cols = -name, names_to = "subject_term", values_to = "score") %>%
separate(subject_term, into = c("subject", "term"))
# 2단계: 평균 점수 구하기
summary_scores <- long_scores %>%
group_by(name, subject) %>%
summarise(avg_score = mean(score), .groups = "drop")
# 결과 출력
print(summary_scores)
이 예제는 단순하지만 pivot_longer + separate + group_by + summarise를 활용한 정석적인 분석 흐름이에요. ADsP 시험 실전 문제도 이런 형태로 출제되는 경우가 많아요.
자주 쓰는 dplyr + tidyr 조합 💡
- pivot_longer() → separate() → group_by() → summarise()
- filter() → mutate() → unite()
- pivot_wider() → arrange() → select()
모의고사 📘
- 다음 중 long → wide 형태 변환을 담당하는 함수는?
A. pivot_longer() B. pivot_wider() C. separate() D. gather()
정답: B – pivot_wider()는 데이터를 wide 형태로 펼칩니다. - group_by() 함수 이후 주로 함께 쓰이는 함수는?
A. mutate() B. separate() C. summarise() D. unite()
정답: C – summarise()로 그룹별 요약값을 구합니다. - tidyr에서 열 이름을 나누는 함수는?
A. unite() B. separate() C. spread() D. split()
정답: B – separate()는 문자열을 기준으로 열을 분리합니다. - 다음 중 dplyr 함수가 아닌 것은?
A. filter() B. arrange() C. pivot_longer() D. select()
정답: C – pivot_longer()는 tidyr의 함수입니다. - filter()와 mutate()는 어떤 패키지에 속하나요?
A. tidyr B. base C. dplyr D. stringr
정답: C – 둘 다 dplyr에서 제공하는 함수입니다.
dplyr과 tidyr을 조합하면 복잡한 데이터도 한결 이해하기 쉽게 바뀝니다. 이 조합은 ADsP 실전과 실무 모두에서 매우 자주 쓰이니까 꼭 익혀두세요!
다음은 ADsP 시험에서 자주 나오는 출제 포인트와 꿀팁들을 정리해볼게요. 실수 줄이는 팁까지 함께!
5. ADsP 출제 포인트 정리와 실전 팁 📘📝 [모의고사 포함]
솔직히 말해서 ADsP 시험을 준비하면서 dplyr과 tidyr를 단순 암기만으로 공부하면 머리에 잘 안 들어와요. 하지만 실제 출제 포인트와 반복되는 문제 패턴을 익히면 정말 빠르게 점수를 올릴 수 있어요. 이 파트에서는 시험에 자주 나오는 유형과, 헷갈리기 쉬운 개념들을 정리해볼게요.
출제 포인트 요약 🔍
- dplyr 함수 이름과 기능 매칭 문제 (filter, select, mutate 등)
- tidyr의 pivot_longer, pivot_wider 사용 방식 비교
- 파이프 연산자(%>%)의 역할과 해석 방법
- group_by + summarise 조합 → 그룹별 통계 계산
실전 꿀팁 🍯
- pivot_longer는 ‘열이 많고 행이 적을 때’, pivot_wider는 그 반대
- mutate는 계산된 결과를 ‘새로운 열’로 추가할 때 사용
- summarise는 여러 행을 ‘하나의 요약값’으로 축소시킬 때
- R에서 help("함수이름")을 통해 공식 문서도 확인 가능!
모의고사 📘
- 다음 중 summarise()의 주된 목적은?
A. 조건 필터링 B. 열 이름 변경 C. 행 결합 D. 요약 통계 생성
정답: D – summarise는 평균, 합계 등의 통계 요약을 위해 사용돼요. - dplyr과 tidyr의 공통점으로 적절한 것은?
A. 시각화 중심 B. 문자열 처리 전용 C. 파이프 연산자 활용 D. HTML 출력 전용
정답: C – 두 패키지 모두 %>% 연산자 기반으로 구성되어 있어요. - tidyr에서 unite()의 반대 기능을 하는 함수는?
A. separate() B. mutate() C. group_by() D. summarise()
정답: A – unite는 결합, separate는 분리 함수죠. - group_by() 함수는 언제 주로 사용되나요?
A. 열을 숨기고 싶을 때 B. 필터링할 때 C. 정렬할 때 D. 그룹별 계산을 위해
정답: D – group_by는 summarise와 함께 자주 사용돼요. - 다음 중 tidyr 패키지에 해당하는 함수는?
A. filter() B. pivot_longer() C. summarise() D. arrange()
정답: B – pivot_longer()는 tidyr의 전용 함수입니다.
이제 ADsP 시험에서 어떤 문제를 내더라도 ‘dplyr이냐 tidyr이냐’ 구분할 수 있겠죠? 헷갈릴 때는 함수의 목적부터 생각해보세요!
마지막으로 실습과 복습에 유용한 데이터셋과 참고 자료들을 정리해볼게요. 직접 해보면 확실히 달라져요!
6. 실습을 위한 데이터 세트 추천 및 참고 자료 🧪📚 [모의고사 포함]
이제 이론은 충분히 익혔으니, 직접 손으로 실습해볼 차례예요. R에서 dplyr과 tidyr을 익히기 위해서는 좋은 연습용 데이터셋이 꼭 필요하죠. 너무 복잡하지 않으면서도 다양한 변수와 관측치를 포함한 데이터가 적당해요.
추천 데이터셋 리스트 📦
- iris: 꽃잎/꽃받침의 길이, 품종 등으로 구성된 고전적 예제.
datasets::iris
- mtcars: 자동차 성능 관련 데이터로 연속형 변수 실습에 적합.
datasets::mtcars
- gapminder: 국가별 경제·건강지표 (패키지 설치 필요:
gapminder
) - tibble()로 직접 생성한 가상의 데이터: pivot 연습에 유리
추천 학습 자료 🔗
모의고사 📘
- iris 데이터는 무엇을 측정한 데이터인가요?
A. 자동차 연비 B. 꽃잎과 꽃받침의 길이 C. 건강 지표 D. 문자열 처리 예시
정답: B – 꽃의 생물학적 특징을 담은 데이터입니다. - dplyr과 tidyr 연습에 가장 적합한 데이터셋은?
A. gapminder B. Titanic C. lubridate D. caret
정답: A – gapminder는 국가별 수치 데이터를 다루기 좋아요. - tibble()로 직접 만든 데이터셋은 어떤 연습에 유리한가요?
A. 문자열 분석 B. pivot 연습 C. 모델링 튜닝 D. 패키지 빌드
정답: B – 다양한 형태 변환을 손쉽게 구성할 수 있어요. - R에서 데이터셋을 조회할 수 있는 함수는?
A. get() B. search() C. View() D. tidy()
정답: C – View()는 데이터프레임을 표 형태로 보여줍니다. - 다음 중 실습형 데이터가 아닌 것은?
A. mtcars B. iris C. rmarkdown D. gapminder
정답: C – rmarkdown은 문서 작성 도구로, 데이터셋은 아니에요.
이제 다양한 데이터셋으로 직접 실습을 해보세요. 10번 타이핑하는 것보다, 한 번 손으로 실행해보는 게 훨씬 오래 남는 법이니까요.
dplyr, tidyr, tidyverse 실습을 제대로 반복하면 ADsP 합격은 물론이고 R 데이터 분석도 자신감 있게 해낼 수 있어요!
마무리: dplyr과 tidyr, 이제 두렵지 않아요!
처음엔 dplyr이니 tidyr이니 이름부터 낯설고 복잡하게 느껴졌을 거예요. 하지만 이 글을 끝까지 읽고 따라오셨다면 이제 데이터 분석의 핵심 문법을 체계적으로 이해하셨을 겁니다. ADsP 시험에서 자주 등장하는 실전 문법들을 중심으로, 꼭 필요한 개념과 예제를 직접 다뤄봤으니까요.
장기 전략으로는 gapminder, iris 같은 실습 데이터셋으로 매일 30분씩 데이터 변환 실습을 추천드려요.
단기 전략으로는 출제 포인트(함수 매칭, pipe 활용 등)를 요약 정리한 노트를 만들어 시험 직전까지 반복 복습하는 것이 효과적이에요.
무엇보다 중요한 건 실제로 코드를 작성해보는 것입니다. 실무든 자격증이든, 결국 데이터 분석은 ‘손에 익어야’ 진짜 실력으로 연결됩니다.