alt

4주차-1

Shared on April 22, 2026

R을 사용한 데이터 정제와 변환: 실전 워크숍

개요

  • 목표: R과 tidyverse를 활용해 데이터를 불러오고 정리하며, 변환·정제 과정을 실습한다.
  • 대상: 데이터 분석 초보자 및 중급자
  • 구성: 데이터 불러오기 → tidy 데이터 구조 이해 → 정제·변환 → 실전 예제

핵심 개념

개념설명
데이터 정제(Data Wrangling)파일을 불러와서 결측값 처리, 형 변환, 중복 제거 등 모델링에 적합하도록 가공하는 과정
tidyversedplyr, tidyr, readr, ggplot2 등 R의 모듈 모음으로 파이프(%>%)를 활용해 직관적으로 데이터 조작
Tibbledata.frame의 확장판. 열 타입과 행 수를 한눈에 보여 주며, NANULL 대신 NA로 처리
tidy 데이터1) 변수가 열에 2) 관측치는 행에 3) 값은 셀에 저장되는 구조
변수 타입numeric (실수), integer, character, factor (범주형) 등
정제 함수filter(), select(), rename(), mutate(), case_when(), gather()/spread(), unite()/separate()

상세 내용

1. 데이터 불러오기

  • Base R : read.csv(), read.table()data.frame 생성
  • tidyverse : read_csv(), read_excel()tibble 생성
    • tibblecharacter를 자동으로 factor로 변환하지 않으며, 열 타입이 명시적으로 보임
    • 예시 mydata_df <- read.csv("data/small_data.csv") mydata_tib <- read_csv("data/small_data.csv")

2. Tidy 데이터 구조 이해

  • Tidy Data 정의: 각 변수는 한 열, 각 관측치는 한 행, 각 값은 한 셀
  • untidy 예시: 한 열에 여러 정보(예: "advil 600mg 2xday")가 포함된 경우
  • 정리 방법: separate()mutate()를 이용해 열을 분리하고 정수형/실수형으로 변환

3. 필터링과 선택

  • filter(): 행 선택 (is.na(), 비교 연산자, 논리 연산자 사용) demo_data %>% filter(bmi > 20, grade %in% c("10th", "11th"))
  • select(): 열 선택 및 재배열 (contains(), starts_with(), everything() 활용) demo_data %>% select(record, age, sex)
  • rename(): 열 이름 바꾸기 demo_data %>% rename(id = record)

4. 변수 생성·변환

  • mutate(): 새 열 추가
    • 수학 연산, 문자열 처리, case_when()
    • 예시 demo_data %>% mutate(bmi_high = bmi > 30, male = sex == "Male", grade_num = as.numeric(str_remove(grade, "th")))
  • case_when(): 조건에 따라 값 지정 demo_data %>% mutate(bmi_group = case_when( bmi < 18.5 ~ "underweight", bmi <= 24.9 ~ "normal", bmi <= 29.9 ~ "overweight", TRUE ~ "obese"))

5. 문자열·날짜 처리

  • unite(): 여러 열을 하나로 합치기
  • separate(): 하나의 열을 여러 열로 분리
  • 날짜 변환: lubridate::dmy() 등 사용

6. 결측값 및 중복 처리

  • na.omit(): 결측값이 포함된 행 모두 삭제
  • distinct(): 중복 행 제거

7. 행 정렬

  • arrange(): 열 기준으로 정렬 (desc() 사용 시 내림차순) demo_data %>% arrange(desc(bmi), stweight)

8. 다중 변환 함수

  • mutate_at(), mutate_if(), mutate_all()
    • 특정 타입(예: numeric) 혹은 조건(예: is.character)에 따라 한 번에 변환
    • 예시 demo_data %>% mutate_if(is.numeric, as.character) demo_data %>% mutate_at(vars(age:grade), toupper)

9. 실전 과제

  1. demo_data 불러오기
  2. grade_num(numeric) 생성
  3. 11학년 이상만 필터
  4. bmi 결측값 제외
  5. bmi_normal(1/0) 생성
  6. grade_num 기준 내림차순 정렬
  7. 결과를 newdata에 저장

10. 주요 포인트 정리

정제 과정에서 가장 중요한 원칙

  • 원본 데이터는 절대 변경하지 않음
  • 정제 단계마다 중간 결과를 확인
  • 형 변환 시 범주형은 factor로, 수치형은 numeric/integer로 명확히 정의

정리된 데이터가 모델링에 미치는 영향

  • 중복/결측값 제거 → 모델 성능 향상
  • 정확한 타입 지정 → 자동 인코딩 문제 예방
  • 정제된 데이터는 이후 분석 및 시각화에 안정적인 기반을 제공

전문가 팁

  • 프로젝트 폴더를 사용해 경로를 상대적으로 지정 (read_csv("data/file.csv"))
  • 코드 주석을 통해 각 단계 목적 명시 → 재사용성 및 협업 효율 증가

이 요약은 R과 tidyverse를 활용한 데이터 정제 과정을 체계적으로 이해하고 실전에서 바로 적용할 수 있도록 구성되었습니다.

4주차-1 | Alt