Recent Posts
Stats & AI tech blog - '일단 시도함'
[R] 자주 쓰는 전처리 코드 정리 본문
- 라이브러리 & 데이터 불러오기
# library
setwd("C:/Users/PC2/Documents/Rcode")
req <- substitute(require(x, character.only = TRUE))
lib = list('ggplot2','data.table','tidyverse','gridExtra','ggpubr',
'viridis','maps','VGAM','vegan','forecast','xts','GGally','caret','textclean')
sapply(lib, function(x) eval(req) || {install.packages(x); eval(req)})
# data.table packages 대용량 데이터에서 성능 좋음
data <- fread("경로.csv")
#fread("./data/train.csv", header = T, sep = ",", encoding = "UTF-8")
# check import data
glimpse(data)
- 변수명 변경
# 충돌 에러 (unused argument error) 발생할 경우 패키지 명시해주기
data %>%
dplyr::rename(Annaul_Income = 'Annual Income (k$)',
Spending_Score = 'Spending Score (1-100)')
- 변수 타입 변경
# 동시에 여러 컬럼 변경
data[,1:11] <- sapply(data[,1:11], as.character)
# 문자형 변수 factor형으로 변경
data %>%
mutate_if(is.character, as.factor)
- Factor 변수 처리
# factor로 변경
# ordered=T는 데이터가 순서형임을 뜻함
data$quarter <- factor(data$quarter, ordered = T, levels =c('Q1', 'Q2', 'Q3', 'Q4'))
# factor level명 변경
data$StockCode <- fct_recode(data$StockCode, "Postage" = "POST", "Discount" = "D",
"Carriage" = "C2")
# factor level 순서 변경
df <- df %>%
mutate(Time = factor(Time, ordered = T, levels=c("Day0","Day1","Day3","Day7","Day14","Day21"))) %>%
mutate_if(is.character, as.factor) %>%
- 날짜 변수 처리 {lubridate}
# chr to posixct
data$InvoiceDate <- as.POSIXct(data$InvoiceDate, tryFormats = '%m/%d/%Y %H:%M')
# posixct to Date (no time)
data$date <- as.Date(data$InvoiceDate)
# extract year as chr
data$year <- format(data$date, '%Y')
# extract month as factor
data$month <- factor(format(data$date, '%b'), ordered=T,
levels = c('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec'))
# extract quarter and weekend
data$quarter <- case_when(
data$month %in% c('Jan', 'Feb', 'Mar') ~ 'Q1',
data$month %in% c('Apr', 'May', 'Jun') ~ 'Q2',
data$month %in% c('Jul', 'Aug', 'Sep') ~ 'Q3',
data$month %in% c('Oct', 'Nov', 'Dec') ~ 'Q4',
TRUE ~ 'Unknown'
)
commerce$quarter <- factor(commerce$quarter, ordered = T, levels =c('Q1', 'Q2', 'Q3', 'Q4'))
commerce$weekend <- ifelse(weekdays(commerce$date) %in% c('Saturday', 'Sunday'), 'weekend', 'weekday')
- 중복값 & 결측치 확인
# 중복id 확인
n_distinct(CustomerID)
# 컬럼별 결측값 확인
sapply(data, function(x){sum(is.na(x))})
# time, group별 unique id 확인
df %>%
filter(!is.na(right_control)) %>%
group_by(Time, Group) %>%
summarise(count = n_distinct(No))
- 새로운 컬럼 생성
# 컬럼 select, ifelse, mutate로 새로운 컬럼 생성
data %>%
select(-event_contents) %>%
mutate(event_Ability = ifelse(event == "Ability", 1, 0),
event_SetControlGroup = ifelse(event == "SetControlGroup", 1, 0)) -> train
# case_when, mutate로 새로운 컬럼 생성
data %>%
mutate(P0_species = case_when(P0_species == "T" ~ 1,
P0_species == "P" ~ 2,
P0_species == "Z" ~ 3),
P1_species = case_when(P1_species == "T" ~ 1,
P1_species == "P" ~ 2,
P1_species == "Z" ~ 3)) -> tidy_train
'Programming > R' 카테고리의 다른 글
[R] EDA with ggplot2 (0) | 2024.02.27 |
---|---|
[R] K-Means Clustering (0) | 2024.02.26 |
[R] 여러 개의 ggplot 한번에 저장 (ggplot, ggsave) (1) | 2024.02.16 |
[R] 그룹 별로 정규성 검정 (shapiro_test, group_by, qqplot) (0) | 2024.01.17 |
[R] Decision Tree (의사결정나무) (0) | 2024.01.15 |