R 언어의 핵심 기능과 웹 스타일링 통합
이 튜토리얼은 R 언어를 사용하여 데이터 분석을 수행하고, 그 결과를 CSS를 통해 시각적으로 향상된 형태로 표현하는 방법을 다룹니다. R은 통계 계산과 데이터 시각화에 특화된 오픈소스 프로그래밍 언어로, 데이터 과학자와 연구자들에게 널리 사용됩니다. 반면 CSS는 정적 또는 동적 HTML 출력에서 시각적 디자인을 제어하는 데 필수적인 요소입니다. 두 기술을 결합하면, 단순한 그래프를 넘어서 사용자 중심의 인터랙티브 보고서를 제작할 수 있습니다.
R 설치 및 개발 환경 설정
R을 시작하려면 CRAN에서 최신 버전을 다운로드하고 설치해야 합니다. 이후 RStudio와 같은 통합 개발 환경(IDE)을 도입하면 코드 작성, 데이터 탐색, 그래프 미리보기 등이 한층 수월해집니다. RStudio는 패키지 관리, 디버깅, R Markdown 문서 작성까지 원스톱으로 지원합니다.
기본 문법과 데이터 구조
R에서는 변수에 값을 할당할 때 `<-` 연산자를 주로 사용합니다.
score <- 85
names_list <- c("김민수", "이지영", "박준호")
벡터 외에도 행렬(matrix), 데이터프레임(data frame), 리스트(list), 팩터(factor) 등 다양한 데이터 구조를 제공합니다. 특히 데이터프레임은 CSV나 엑셀 파일과 유사한 표 형식 데이터를 처리할 때 핵심 역할을 합니다.
# 데이터프레임 생성 예시
student_data <- data.frame(
이름 = c("김민수", "이지영"),
나이 = c(24, 26),
성적 = c(85, 92)
)
데이터 전처리 기법
실제 데이터는 종종 누락값(missing value)을 포함하고 있으며, 이를 적절히 처리하는 것이 중요합니다. R에서는 `is.na()` 함수로 NA 값을 식별하고, `na.omit()`으로 해당 행을 제거하거나 평균값으로 대체할 수 있습니다.
# NA 값 확인 및 대체
ifelse(is.na(student_data$성적), mean(student_data$성적, na.rm = TRUE), student_data$성적)
또한 `dplyr` 패키지를 활용하면 데이터 변환 작업이 매우 직관적이 됩니다.
library(dplyr)
cleaned_data <- student_data %>%
filter(나이 > 20) %>%
mutate(등급 = ifelse(성적 >= 90, "A", "B"))
데이터 병합 및 재구조화
여러 출처의 데이터를 통합할 때는 `merge()` 함수 또는 `dplyr`의 조인 함수(`inner_join`, `left_join`)를 사용합니다.
result <- left_join(table1, table2, by = "공통_키")
장형(long format)과 가로형(wide format) 간 전환은 `tidyr` 패키지의 `pivot_longer()`와 `pivot_wider()`로 쉽게 수행 가능합니다.
library(tidyr)
long_format <- pivot_longer(student_data, cols = c(나이, 성적), names_to = "항목", values_to = "값")
기초 시각화: 기본 그래프 생성
R은 내장된 함수를 통해 다양한 그래프를 빠르게 생성할 수 있습니다.
- 히스토그램: `hist(rnorm(100))` – 데이터 분포 시각화
- 상자그림: `boxplot(성적 ~ 그룹, data = student_data)` – 이상치 탐지
- 산점도: `plot(나이, 성적, data = student_data)` – 변수 간 관계 분석
ggplot2를 이용한 고급 시각화
`ggplot2`는 그래픽 문법(Grammar of Graphics) 기반의 강력한 시각화 도구입니다. 다음은 산점도를 그리는 예제입니다.
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "steelblue", size = 3) +
labs(title = "차량 무게와 연비 관계", x = "무게 (1000파운드)", y = "연비 (mpg)") +
theme_minimal()
레이어(layer) 방식으로 구성되기 때문에, 여러 기하 객체(geoms)를 조합해 복잡한 차트도 만들 수 있습니다.
인터랙티브 시각화: plotly 활용
정적 그래프를 넘어서 마우스 오버나 확대/축소가 가능한 인터랙티브 차트를 원한다면 `plotly`가 이상적입니다.
library(plotly)
p <- ggplot(mtcars, aes(x = wt, y = mpg, text = paste("모델:", rownames(mtcars)))) +
geom_point() + labs(title = "인터랙티브 산점도")
ggplotly(p, tooltip = "text")
CSS와의 통합 전략
R Markdown이나 Shiny 앱에서 HTML 출력을 생성할 때 CSS를 적용하면 보고서의 전반적인 디자인 품질을 크게 향상시킬 수 있습니다. 예를 들어, R Markdown 문서 상단에 다음과 같이 CSS 파일을 연결할 수 있습니다.
---
output:
html_document:
css: style.css
---
CSS 파일에서는 제목 색상, 폰트, 테이블 스타일 등을 자유롭게 정의할 수 있습니다.
/* style.css */
h1 { color: #2c3e50; font-family: 'Helvetica', sans-serif; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
Shiny 앱에서의 CSS 사용
Shiny를 통해 웹 대시보드를 만들 경우, UI 측정에서 `tags$head(tags$link(rel = "stylesheet", type = "text/css", href = "custom.css")))`와 같이 커스텀 스타일시트를 포함시킬 수 있습니다. Flexbox 또는 Grid 레이아웃을 활용하면 반응형 디자인도 가능해집니다.
통계 분석 및 모델링 입문
R은 t-검정, ANOVA, 회귀분석 등 다양한 통계 검정을 기본으로 지원합니다.
t.test(성적 ~ 그룹, data = experiment_data)
lm(연봉 ~ 경력 + 학위, data = salary_data)
머신러닝 모델은 `caret` 패키지를 통해 훈련 및 검증이 가능하며, 교차검증(cross-validation) 설정도 간단합니다.
library(caret)
train_control <- trainControl(method = "cv", number = 5)
model <- train(target ~ ., data = train_set, method = "rf", trControl = train_control)
패키지 관리와 문서화
CRAN에서 패키지를 설치하는 기본 명령어는 다음과 같습니다.
install.packages("dplyr")
Bioconductor와 같은 전문 플랫폼에서는 `BiocManager`를 사용합니다.
if (!require("BiocManager")) install.packages("BiocManager")
BiocManager::install("DESeq2")
설치 후에는 `library()`로 불러오고, `help()` 또는 `?함수명`으로 도움말을 확인할 수 있습니다. 주기적으로 `update.packages()`를 실행해 최신 상태를 유지하는 것이 좋습니다.