사용자 도구

사이트 도구


wiki:hr:r_programming_guide

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
wiki:hr:r_programming_guide [2025/07/03 05:08] – 만듦 - 바깥 편집 127.0.0.1wiki:hr:r_programming_guide [알 수 없는 날짜] (현재) – 제거됨 - 바깥 편집 (알 수 없는 날짜) 127.0.0.1
줄 1: 줄 1:
-====== R 프로그래밍 실무 가이드 ====== 
  
-**이 문서는 업무에서 R을 활용한 데이터 분석을 위한 실용적인 가이드입니다.** 
- 
----- 
- 
-===== 🚀 R 시작하기 ===== 
- 
-==== R 설치 및 환경 설정 ==== 
- 
-**R 설치** 
-  * [[https://cran.r-project.org/|CRAN 공식 사이트]]에서 다운로드 
-  * Windows, macOS, Linux 지원 
-  * 최신 안정 버전 권장 
- 
-**RStudio 설치** 
-  * [[https://posit.co/download/rstudio-desktop/|RStudio 공식 사이트]]에서 다운로드 
-  * 통합 개발 환경 (IDE) 
-  * 코드 편집, 시각화, 패키지 관리 등 편리한 기능 제공 
- 
-**필수 패키지 설치** 
-<code> 
-# 데이터 처리 
-install.packages("dplyr") 
-install.packages("tidyr") 
-install.packages("readr") 
- 
-# 시각화 
-install.packages("ggplot2") 
-install.packages("plotly") 
- 
-# 통계 분석 
-install.packages("car") 
-install.packages("psych") 
- 
-# 머신러닝 
-install.packages("caret") 
-install.packages("randomForest") 
-</code> 
- 
----- 
- 
-===== 📊 데이터 불러오기 및 전처리 ===== 
- 
-==== 데이터 불러오기 ==== 
- 
-**CSV 파일 읽기** 
-<code> 
-# 기본 방법 
-data <- read.csv("data.csv") 
- 
-# readr 패키지 사용 (더 빠름) 
-library(readr) 
-data <- read_csv("data.csv") 
- 
-# 엑셀 파일 읽기 
-library(readxl) 
-data <- read_excel("data.xlsx", sheet = 1) 
-</code> 
- 
-**데이터베이스 연결** 
-<code> 
-# MySQL 연결 
-library(RMySQL) 
-con <- dbConnect(MySQL(),  
-                 host = "localhost", 
-                 dbname = "database_name", 
-                 user = "username", 
-                 password = "password") 
-data <- dbGetQuery(con, "SELECT * FROM table_name") 
-</code> 
- 
-==== 데이터 탐색 ==== 
- 
-**기본 정보 확인** 
-<code> 
-# 데이터 구조 확인 
-str(data) 
-dim(data) 
-head(data) 
-tail(data) 
- 
-# 요약 통계 
-summary(data) 
- 
-# 결측치 확인 
-colSums(is.na(data)) 
-</code> 
- 
-**데이터 타입 변환** 
-<code> 
-# 문자형을 숫자형으로 
-data$column <- as.numeric(data$column) 
- 
-# 숫자형을 문자형으로 
-data$column <- as.character(data$column) 
- 
-# 문자형을 날짜형으로 
-library(lubridate) 
-data$date <- ymd(data$date) 
-</code> 
- 
----- 
- 
-===== 🔧 데이터 전처리 ===== 
- 
-==== 결측치 처리 ==== 
- 
-**결측치 확인 및 처리** 
-<code> 
-# 결측치 개수 확인 
-sum(is.na(data$column)) 
- 
-# 결측치 제거 
-data_clean <- na.omit(data) 
- 
-# 평균으로 대체 
-data$column[is.na(data$column)] <- mean(data$column, na.rm = TRUE) 
- 
-# 중앙값으로 대체 
-data$column[is.na(data$column)] <- median(data$column, na.rm = TRUE) 
-</code> 
- 
-==== 이상치 탐지 및 처리 ==== 
- 
-**IQR 방법으로 이상치 탐지** 
-<code> 
-# 박스플롯으로 시각적 확인 
-boxplot(data$column) 
- 
-# IQR 계산 
-Q1 <- quantile(data$column, 0.25, na.rm = TRUE) 
-Q3 <- quantile(data$column, 0.75, na.rm = TRUE) 
-IQR <- Q3 - Q1 
- 
-# 이상치 경계 
-lower_bound <- Q1 - 1.5 * IQR 
-upper_bound <- Q3 + 1.5 * IQR 
- 
-# 이상치 제거 
-data_clean <- data[data$column >= lower_bound & data$column <= upper_bound, ] 
-</code> 
- 
-**Z-score 방법** 
-<code> 
-# Z-score 계산 
-z_scores <- scale(data$column) 
- 
-# 절댓값이 3 이상인 경우 이상치로 간주 
-outliers <- abs(z_scores) > 3 
-data_clean <- data[!outliers, ] 
-</code> 
- 
----- 
- 
-===== 📈 기술통계 및 시각화 ===== 
- 
-==== 기술통계 ==== 
- 
-**기본 통계량** 
-<code> 
-# 기술통계 
-mean(data$column, na.rm = TRUE) 
-median(data$column, na.rm = TRUE) 
-sd(data$column, na.rm = TRUE) 
-var(data$column, na.rm = TRUE) 
- 
-# 사분위수 
-quantile(data$column, probs = c(0.25, 0.5, 0.75), na.rm = TRUE) 
- 
-# psych 패키지로 상세 통계 
-library(psych) 
-describe(data) 
-</code> 
- 
-**그룹별 통계** 
-<code> 
-# dplyr 패키지 사용 
-library(dplyr) 
- 
-data %>% 
-  group_by(group_column) %>% 
-  summarise( 
-    mean_value = mean(value_column, na.rm = TRUE), 
-    sd_value = sd(value_column, na.rm = TRUE), 
-    count = n() 
-  ) 
-</code> 
- 
-==== 데이터 시각화 ==== 
- 
-**ggplot2 기본 사용법** 
-<code> 
-library(ggplot2) 
- 
-# 히스토그램 
-ggplot(data, aes(x = column)) + 
-  geom_histogram(bins = 30, fill = "steelblue", alpha = 0.7) + 
-  labs(title = "히스토그램", x = "값", y = "빈도") + 
-  theme_minimal() 
- 
-# 박스플롯 
-ggplot(data, aes(x = group, y = value)) + 
-  geom_boxplot(fill = "lightblue") + 
-  labs(title = "박스플롯", x = "그룹", y = "값") + 
-  theme_minimal() 
- 
-# 산점도 
-ggplot(data, aes(x = x_column, y = y_column)) + 
-  geom_point(alpha = 0.6) + 
-  geom_smooth(method = "lm", se = TRUE) + 
-  labs(title = "산점도", x = "X", y = "Y") + 
-  theme_minimal() 
-</code> 
- 
-**상관관계 분석** 
-<code> 
-# 상관계수 계산 
-cor(data$column1, data$column2, use = "complete.obs") 
- 
-# 상관관계 행렬 
-cor_matrix <- cor(data[, c("col1", "col2", "col3")], use = "complete.obs") 
- 
-# 상관관계 히트맵 
-library(corrplot) 
-corrplot(cor_matrix, method = "color", type = "upper") 
-</code> 
- 
----- 
- 
-===== 🔍 통계 검정 ===== 
- 
-==== t-검정 ==== 
- 
-**독립표본 t-검정** 
-<code> 
-# 두 그룹 간 평균 비교 
-t_test_result <- t.test(value ~ group, data = data) 
-print(t_test_result) 
- 
-# 결과 해석 
-cat("t-통계량:", t_test_result$statistic, "\n") 
-cat("p-value:", t_test_result$p.value, "\n") 
-cat("신뢰구간:", t_test_result$conf.int, "\n") 
-</code> 
- 
-**대응표본 t-검정** 
-<code> 
-# 같은 대상의 전후 비교 
-t_test_paired <- t.test(data$before, data$after, paired = TRUE) 
-print(t_test_paired) 
-</code> 
- 
-==== 분산분석 (ANOVA) ==== 
- 
-**일원배치 분산분석** 
-<code> 
-# 세 그룹 이상의 평균 비교 
-anova_result <- aov(value ~ group, data = data) 
-summary(anova_result) 
- 
-# 사후검정 (Tukey HSD) 
-library(multcomp) 
-tukey_result <- glht(anova_result, linfct = mcp(group = "Tukey")) 
-summary(tukey_result) 
-</code> 
- 
-==== 카이제곱 검정 ==== 
- 
-**독립성 검정** 
-<code> 
-# 교차표 생성 
-contingency_table <- table(data$row_var, data$col_var) 
- 
-# 카이제곱 검정 
-chi_test <- chisq.test(contingency_table) 
-print(chi_test) 
-</code> 
- 
----- 
- 
-===== 📊 회귀분석 ===== 
- 
-==== 선형회귀 ==== 
- 
-**단순선형회귀** 
-<code> 
-# 모델 적합 
-model <- lm(y ~ x, data = data) 
- 
-# 모델 요약 
-summary(model) 
- 
-# 회귀계수 
-coef(model) 
- 
-# R² 값 
-summary(model)$r.squared 
- 
-# 잔차 확인 
-residuals(model) 
-</code> 
- 
-**다중선형회귀** 
-<code> 
-# 여러 독립변수 
-model_multiple <- lm(y ~ x1 + x2 + x3, data = data) 
-summary(model_multiple) 
- 
-# 변수 선택 (단계적 회귀) 
-step_model <- step(model_multiple, direction = "both") 
-</code> 
- 
-==== 회귀진단 ==== 
- 
-**잔차 분석** 
-<code> 
-# 잔차 플롯 
-par(mfrow = c(2, 2)) 
-plot(model) 
- 
-# 정규성 검정 
-shapiro.test(residuals(model)) 
- 
-# 다중공선성 검정 
-library(car) 
-vif(model_multiple) 
-</code> 
- 
----- 
- 
-===== 🤖 머신러닝 ===== 
- 
-==== 분류 ==== 
- 
-**로지스틱 회귀** 
-<code> 
-# 이진 분류 
-logistic_model <- glm(target ~ ., data = train_data, family = "binomial") 
-summary(logistic_model) 
- 
-# 예측 
-predictions <- predict(logistic_model, newdata = test_data, type = "response") 
-predicted_class <- ifelse(predictions > 0.5, 1, 0) 
-</code> 
- 
-**랜덤 포레스트** 
-<code> 
-library(randomForest) 
- 
-# 모델 학습 
-rf_model <- randomForest(target ~ ., data = train_data, ntree = 500) 
- 
-# 예측 
-rf_predictions <- predict(rf_model, newdata = test_data) 
- 
-# 변수 중요도 
-importance(rf_model) 
-varImpPlot(rf_model) 
-</code> 
- 
-==== 클러스터링 ==== 
- 
-**K-means 클러스터링** 
-<code> 
-# 데이터 정규화 
-scaled_data <- scale(data[, c("col1", "col2", "col3")]) 
- 
-# K-means 실행 
-kmeans_result <- kmeans(scaled_data, centers = 3, nstart = 25) 
- 
-# 결과 확인 
-kmeans_result$cluster 
-kmeans_result$centers 
-</code> 
- 
----- 
- 
-===== 📋 실무 프로젝트 예제 ===== 
- 
-==== 고객 만족도 분석 ==== 
- 
-**데이터 불러오기 및 전처리** 
-<code> 
-# 데이터 불러오기 
-satisfaction_data <- read_csv("customer_satisfaction.csv") 
- 
-# 결측치 확인 
-colSums(is.na(satisfaction_data)) 
- 
-# 기술통계 
-summary(satisfaction_data) 
- 
-# 만족도 점수 분포 
-ggplot(satisfaction_data, aes(x = satisfaction_score)) + 
-  geom_histogram(bins = 20, fill = "steelblue", alpha = 0.7) + 
-  labs(title = "고객 만족도 점수 분포", x = "만족도 점수", y = "빈도") + 
-  theme_minimal() 
-</code> 
- 
-**그룹별 분석** 
-<code> 
-# 연령대별 만족도 비교 
-age_satisfaction <- satisfaction_data %>% 
-  group_by(age_group) %>% 
-  summarise( 
-    mean_satisfaction = mean(satisfaction_score, na.rm = TRUE), 
-    sd_satisfaction = sd(satisfaction_score, na.rm = TRUE), 
-    count = n() 
-  ) 
- 
-# 시각화 
-ggplot(age_satisfaction, aes(x = age_group, y = mean_satisfaction)) + 
-  geom_bar(stat = "identity", fill = "lightblue") + 
-  geom_errorbar(aes(ymin = mean_satisfaction - sd_satisfaction, 
-                    ymax = mean_satisfaction + sd_satisfaction), width = 0.2) + 
-  labs(title = "연령대별 평균 만족도", x = "연령대", y = "평균 만족도") + 
-  theme_minimal() 
-</code> 
- 
-**통계 검정** 
-<code> 
-# 연령대별 만족도 차이 검정 (ANOVA) 
-anova_result <- aov(satisfaction_score ~ age_group, data = satisfaction_data) 
-summary(anova_result) 
- 
-# 성별 만족도 차이 검정 (t-검정) 
-t_test_result <- t.test(satisfaction_score ~ gender, data = satisfaction_data) 
-print(t_test_result) 
-</code> 
- 
----- 
- 
-===== 💡 실무 팁 ===== 
- 
-==== 코드 효율성 ==== 
- 
-**함수 작성** 
-<code> 
-# 재사용 가능한 함수 만들기 
-analyze_satisfaction <- function(data, group_var) { 
-  result <- data %>% 
-    group_by(!!sym(group_var)) %>% 
-    summarise( 
-      mean_score = mean(satisfaction_score, na.rm = TRUE), 
-      sd_score = sd(satisfaction_score, na.rm = TRUE), 
-      count = n() 
-    ) 
-  return(result) 
-} 
- 
-# 함수 사용 
-age_analysis <- analyze_satisfaction(satisfaction_data, "age_group") 
-</code> 
- 
-**결과 저장** 
-<code> 
-# 결과를 파일로 저장 
-write.csv(analysis_result, "analysis_result.csv", row.names = FALSE) 
- 
-# 그래프 저장 
-ggsave("satisfaction_plot.png", plot = my_plot, width = 10, height = 6) 
-</code> 
- 
-==== 성능 최적화 ==== 
- 
-**대용량 데이터 처리** 
-<code> 
-# data.table 패키지 사용 (더 빠름) 
-library(data.table) 
-dt <- as.data.table(data) 
- 
-# 병렬 처리 
-library(parallel) 
-library(doParallel) 
-cl <- makeCluster(detectCores() - 1) 
-registerDoParallel(cl) 
-</code> 
- 
----- 
- 
-===== 📚 학습 리소스 ===== 
- 
-**온라인 강의** 
-  * Coursera: "R Programming" by Johns Hopkins 
-  * edX: "Introduction to R Programming" 
-  * DataCamp: R 트랙 
- 
-**도서** 
-  * "R을 이용한 데이터 분석" - 김진성 
-  * "R Cookbook" - Paul Teetor 
-  * "ggplot2: Elegant Graphics for Data Analysis" - Hadley Wickham 
- 
-**커뮤니티** 
-  * Stack Overflow: R 태그 
-  * R-bloggers: R 관련 블로그 모음 
-  * 한국 R 사용자 그룹 
- 
----- 
- 
-===== 🔗 관련 문서 ===== 
- 
-  * [[wiki:hr:statistics_glossary|통계 용어집]] 
-  * [[wiki:it:excel_vba|Excel VBA 가이드]] 
-  * [[wiki:it:excel_sumif|Excel SUMIF 함수]] 
- 
----- 
- 
-> **💡 팁**: R은 처음에는 어려워 보이지만, 기본 문법을 익히면 강력한 데이터 분석 도구가 됩니다. 작은 프로젝트부터 시작해서 점진적으로 복잡한 분석을 시도해보세요!  
wiki/hr/r_programming_guide.1751519284.txt.gz · 마지막으로 수정됨: (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki