Zarathu Co., Ltd
회사: 차라투 (Zarathu Co.,Ltd)
경력
jinseob2kim@gmail.com, github.com/jinseob2kim
AI 코딩 에이전트를 활용하여 R 데이터분석을 수행한다
Claude Code: Anthropic의 공식 CLI 기반 AI 코딩 에이전트
터미널에서 자연어로 지시하면 코드를 작성/실행/수정
R 분석 전 과정을 지원: 데이터 전처리, 통계분석, 시각화, 논문 테이블
Windows에서 바로 사용 가능
기존 ChatGPT/Copilot과의 차이
| 구분 | ChatGPT / Copilot | Claude Code |
|---|---|---|
| 방식 | 코드 제안/복붙 | 직접 파일 읽기/수정/실행 |
| 환경 | 웹 브라우저 / IDE | 터미널 (내 컴퓨터) |
| 범위 | 한 번에 한 질문 | 프로젝트 전체 이해 |
| 실행 | 사용자가 복붙 후 실행 | 에이전트가 직접 실행 |
“코드를 알려주는 AI”에서 “코드를 대신 짜고 실행하는 AI”로
실제 동작 모습
$ claude
> colon 데이터로 sex별 생존분석 해줘.
Kaplan-Meier plot이랑 Cox regression table 만들어서
ppt로 저장해.
✓ R 코드 작성 중...
✓ survival, jskm, jstable 패키지 로드
✓ survfit, coxph 모델 적합
✓ KM plot 생성 → results/km_plot.pptx
✓ Cox table 생성 → results/cox_table.xlsx
완료! results/ 폴더를 확인하세요.
의학연구자에게 특히 유용한 이유
R 생태계 이해도 높음: survival, jskm, jstable, meta 등 의학통계 패키지 지원
CLAUDE.md로 분석 스타일 고정: 한 번 설정하면 매번 동일한 코딩 컨벤션 유지
반복 작업 자동화: Table 1, regression table, forest plot 등 패턴화된 작업
논문 수준 출력: flextable, officer 패키지로 바로 논문에 쓸 수 있는 결과물
Tip
핵심: 통계를 모르는 게 아니라, 코딩에 시간을 쓰기 싫은 교수님들을 위한 도구
총 3단계
1. Git for Windows 설치 ← Claude Code가 내부적으로 Git Bash 사용
↓
2. Claude Code 설치 ← PowerShell 한 줄로 끝
↓
3. R 설치 확인 ← 이미 있으면 skip
이미 Git이 설치되어 있으면 건너뛰기
git-scm.com/downloads/win 에서 다운로드
설치 시 기본 옵션 그대로 진행 (Next만 계속 클릭)
확인:
Note
Git for Windows에 Git Bash가 포함됨 → Claude Code가 이걸 사용
CMD 열고 한 줄 실행:
~/.local/bin에 설치됨설치 확인:
Warning
claude is not recognized 에러 시 → 터미널 재시작, 또는 PATH에 %USERPROFILE%\.local\bin 추가
PowerShell 또는 Git Bash에서:
| 인증 방법 | 가격 | 특징 |
|---|---|---|
| Claude Max | $100/월 | Code 무제한, 추천 |
| Claude Max 5x | $200/월 | 더 많은 사용량 |
| API key | 종량제 | 분석 1건당 약 $0.5-2 |
이미 Windows에 R이 설치되어 있으면 그대로 사용!
R이 없다면: cran.r-project.org 에서 다운로드
R 패키지 설치 (R 콘솔 또는 RStudio에서):
install.packages(c("data.table", "magrittr", "survival",
"jskm", "jstable", "flextable",
"officer", "rvg", "ggplot2", "openxlsx2"))Tip
기존 RStudio에서 설치한 패키지를 Claude Code가 그대로 사용합니다
자주 발생하는 문제와 해결
| 문제 | 해결 |
|---|---|
claude is not recognized |
터미널 재시작 또는 PATH 추가 |
| Git 없다는 에러 | Git for Windows 설치 |
| 인증 실패 | claude doctor로 진단 |
| R 못 찾음 | Rscript이 PATH에 있는지 확인 |
| 한글 깨짐 | 시스템 UTF-8 설정 (아래 참고) |
한글 깨짐 해결: 설정 → 시간 및 언어 → 언어 및 지역 → 관리 언어 설정 → 시스템 로캘 변경 → Beta: 세계 언어 지원을 위해 Unicode UTF-8 사용 체크 → 재부팅
프로젝트 구조
my_research/
├── CLAUDE.md ← 분석 스타일 지시
├── data/ ← 원본 데이터 (xlsx, csv 등)
├── global.R ← 데이터 전처리
├── analysis.R ← 분석 코드
└── results/ ← 결과물 (pptx, xlsx)
프로젝트 루트에 두는 AI 지시 파일
# 분석 스타일
## 기본 원칙
- data.table을 메인 패키지로 사용 (dplyr 사용 안 함)
- pipe operator(%>%)만 사용 (magrittr)
- global.R에서 전처리, analysis.R에서 분석 (파일 분리)
## global.R 구조
1. 데이터 읽기
2. 전처리 + 파생변수 생성
3. varlist에 분석 변수 저장
4. out = 분석용 데이터, out.label = 라벨 정보
5. **varlist와 out 나오기 전에 파생변수 모두 완료**
## 테이블 저장
- flextable으로 포맷팅 (논문에 바로 쓸 수 있는 형태)
- flexlsx + openxlsx2로 Excel 여러 시트에 저장## 그림 저장
- 기본은 ppt (rvg::dml + officer 패키지)
- 벡터 그래픽, fullsize
## 주요 패키지
- jstable: CreateTableOneJS, cox2.display, glmshow.display
- jskm: Kaplan-Meier plot (jskm, svyjskm)
- 라벨 적용: LabeljsCox, LabeljsTable 등
## 주의사항
- survfit/coxph는 eval(substitute()) 패턴 필수
- 테이블 부등호: >= → ≥, <= → ≤ (유니코드)
- Table 1 footer는 실제 사용된 검정과 일치시키기Tip
이 CLAUDE.md를 한 번 만들어두면, “Table 1 만들어줘”라고만 해도 항상 같은 스타일로 생성
자연어로 지시:
> data 폴더의 엑셀 파일 읽어서 global.R 만들어줘.
성별은 factor, 나이/BMI는 numeric으로.
DM은 0/1 코딩이고 label은 No/Yes로.
Claude Code가 생성하는 코드:
library(data.table);library(magrittr);library(jstable)
a <- readxl::read_excel("data/patient_data.xlsx") %>% data.table
a[, DM := factor(DM, levels = c(0, 1), labels = c("No", "Yes"))]
varlist <- list(
Base = c("Sex", "Age", "BMI", "DM", "HbA1c")
)
out <- a[, .SD, .SDcols = c(unlist(varlist))]
factor_vars <- c("Sex", "DM")
out[, (factor_vars) := lapply(.SD, factor), .SDcols = factor_vars]
conti_vars <- setdiff(names(out), factor_vars)
out[, (conti_vars) := lapply(.SD, as.numeric), .SDcols = conti_vars]
out.label <- jstable::mk.lev(out)자연어로 지시:
> DM 기준으로 Table 1 만들어줘.
nonnormal 변수는 Age, BMI로.
Excel로 저장.
Claude Code가 실행하는 코드:
source("global.R")
tb1 <- jstable::CreateTableOneJS(
vars = names(out), strata = "DM", data = out,
nonnormal = c("Age", "BMI"),
labeldata = out.label, Labels = TRUE,
testNonNormal = wilcox.test
)
ft <- tb1$table %>%
cbind(Variable = rownames(.), .) %>%
flextable::flextable() %>%
flextable::set_caption("Table 1. Baseline characteristics") %>%
flextable::add_footer_lines(
"P by Wilcoxon rank-sum test / Chi-squared or Fisher's exact test"
)자연어로 지시:
> DM 여부에 따른 Kaplan-Meier plot 그려줘.
p-value 표시하고, JAMA 스타일로.
ppt로 저장.
Claude Code가 실행하는 코드:
library(survival);library(jskm);library(officer);library(rvg)
dd <- out # 분석 데이터
fmla <- Surv(time, event) ~ DM
fit <- eval(substitute(survfit(f, data = dd), list(f = fmla)))
p <- jskm(fit, data = dd, pval = TRUE, table = TRUE,
marks = FALSE, theme = "jama",
ystratalabs = c("No DM", "DM"),
ystrataname = "DM status")
# PPT 저장
doc <- read_pptx() %>%
add_slide(layout = "Blank") %>%
ph_with(dml(ggobj = p), location = ph_location_fullsize())
print(doc, target = "results/km_plot.pptx")자연어로 지시:
> DM의 사망 위험을 Cox regression으로 분석해줘.
Age, Sex, BMI 보정하고, label 적용해서 Excel로 저장.
Claude Code가 실행하는 코드:
fmla <- Surv(time, event) ~ DM + Age + Sex + BMI
fit <- eval(substitute(coxph(f, data = dd), list(f = fmla)))
cox_result <- jstable::cox2.display(fit)
cox_labeled <- jstable::LabeljsCox(cox_result, ref = out.label)
ft <- cox_labeled$table %>%
flextable::flextable() %>%
flextable::set_caption("Table 2. Cox proportional hazards model") %>%
flextable::add_footer_lines("HR, hazard ratio; CI, confidence interval")
# Excel 저장
library(flexlsx);library(openxlsx2)
wb <- wb_workbook()
wb$add_worksheet("Cox")
wb <- wb_add_flextable(wb, "Cox", ft)
wb$save("results/Tables.xlsx")Claude Code의 강점: 맥락을 기억
> 위의 Cox 모델에서 DM 유의하면,
subgroup 분석도 해줘. Sex, Age 65세 기준으로.
forestploter로 그려서 ppt에 추가.
> Table 1이랑 Cox table을 한 엑셀 파일에
각각 다른 시트로 저장해줘.
> 결과 요약해서 professor_reply.md 만들어줘.
Statistical Analysis는 영어로.
구체적일수록 좋다
| 나쁜 예 | 좋은 예 |
|---|---|
| “분석해줘” | “DM 기준 Table 1 만들어줘, nonnormal은 Age” |
| “그래프 그려” | “KM plot 그려줘, JAMA 스타일, p-value 표시” |
| “저장해” | “ppt로 저장, fullsize, 벡터그래픽” |
단계별 지시가 안전
Claude Code 기본 명령
유용한 자연어 패턴
> global.R 읽어보고 어떤 변수가 있는지 알려줘
> analysis.R의 에러 고쳐줘
> 이 코드 리뷰해줘
> 결과를 professor_reply.md로 정리해줘
Claude Code 사용 비용
| 플랜 | 가격 | 특징 |
|---|---|---|
| API (종량제) | 사용량 기반 | 분석 1건당 약 $0.5-2 |
| Claude Pro | $20/월 | 웹 + 제한적 Code 사용 |
| Claude Max | $100/월 | Code 무제한 사용 |
| Claude Max (5x) | $200/월 | 더 많은 사용량 |
Tip
추천: 처음엔 API key로 시작 → 자주 쓰면 Max로 전환
의학연구 분석 기준, 월 $100이면 RA 인건비 대비 압도적
반드시 확인할 것
코드 리뷰: AI가 만든 코드를 반드시 확인
환자 데이터 보안: Claude Code는 로컬에서 실행
재현성: global.R + analysis.R + CLAUDE.md를 함께 보관
Warning
AI는 도구일 뿐: 통계적 판단과 결과 해석은 연구자의 몫
설치가 잘 됐는지 한 번에 진단
그래도 안 되면?
| 상황 | 해결 |
|---|---|
| claude 명령어 안 됨 | PATH에 ~/.local/bin 추가 |
| R 못 찾음 | Rscript PATH 확인 |
| 한글 깨짐 | Windows 설정에서 UTF-8 활성화 |
| 패키지 설치 에러 | Rtools 설치 |
Claude Code + R 데이터분석 워크플로우
1. CLAUDE.md 작성 (분석 스타일 고정)
↓
2. 데이터를 프로젝트 폴더에 준비
↓
3. claude 실행 → 자연어로 지시
↓
4. global.R → analysis.R → 결과물 자동 생성
↓
5. 코드 리뷰 후 최종 확인
기대 효과
실습 및 질문
jinseob2kim@gmail.com
github.com/jinseob2kim
openstat.ai

openstat.ai