last update 25.04.10
이전 글에서 언급하였듯이 TCGA(The Cancer Genome Atlas) 프로젝트는 암 유전체 데이터를 공개하는 대형 연구 프로젝트 입니다.
여기서는 암 환자의 mRNA나 miRNA 발현 데이터를 표준화 된 형식으로 정리해서 제공합니다.
해당 형식은 유전체 연구뿐만 아니라 ML/AI 분석에서도 많이 사용됩니다.
❓ 구조 설명
샘플 당 수많은 유전자의 발현량이 측정됩니다.
측정 방법: (1) Microarray, (2) RNA-seq(RPKM, RSEM 등으로 정규화)
해당 데이터는 엑셀 형태로 정리됩니다. N개의 샘플 * M개의 유전자 matrix 형태로 이해할 수 있습니다.
Row: 유전자 이름 → gene annotaion*
Column: 환자/샘플 ID
값(Cell): 발현량(Expression value) → 정규화된 수치, Normalized intensity(microarray) or RPKM/RSEM(RNA-seq)
🌟 Gene Annotaiton 이란?
Gene annotation은 유전체에서 발견된 DNA 서열이 어떤 유전자인지, 어떤 기능을 하는 지 정보를 부여하는 과정입니다.
쉽게 말하자면
유전체는 시퀀스로 구성되어 있고
시퀀스가 어떤 유전자 이름을 가지는지
어떤 단백질을 만들고
어떤 기능을 하는지 기록하는 과정
유전자 서열만으로는 무슨 유전자인지 알 수 없습니다.
분석하거나 연구하려면 이름이 필요하기 때문에 gene annotation을 사용해야합니다.
➕ HUGO Gene Symbol
HUGO Gene Symbol은 HUman Genome Organization에서 관리하는 공식 유전자 명칭입니다.
HUGO는 유전자 이름을 표준화하는 역할입니다.
☑️ RNA-seq 데이터 활용 시 유의사항
RSEM/FPKM/FPM: RNA-seq 발현 데이터 단위
Log transformation: 보통 log2(RSEM+1) 사용
Quantile normalization 불필요: 데이터 희소성(spasity) 때문에 사용하지 않습니다.
Batch effect 조정 시 COMBAT 사용 가능
샘플 ID 체크 필수(Tumor(01)인지 Normal(10/11)인지)
예전 데이터를 사용할 경우에는 Microarray/GA 버전인지 확인 필요

Consensus clustering은 데이터를 여러번 샘플링 하고 클러스터링을 반복하여 가장 안정적인 군집 수(optimal k)를 찾는 방법입니다.
유전자 발현 데이터는 노이즈가 많고 복잡합니다. 단순 군집화 결과는 신뢰도가 낮을 수도 있습니다. 하지만 Consensus clustering은 여러번 반복해서 군집의 안정성과 신뢰성을 평가합니다.
결과적으로 과적합을 피하면서 의미 있는 군집 수를 찾을 수 있습니다.
❓ 진행 순서
데이터에서 일부를 랜덤 샘플링
클러스터링 수행
1,2번을 여러번 반복
매 반복마다 같은 클러스터에 속한 샘플 쌍의 비율을 계산
다양한 K값에서의 결과를 비교하여 가장 안정적인 군집 수 결정
❓ 실행 방법
대부분 R 패키지 ConsensusClusterPlus 를 사용합니다.
Python을 이용 시에는 sckit-learn + 반복문으로도 구현할 수 있습니다.
➕ 코드 예시
# 1. 데이터 불러오기
data <- read.table("unifiedScaledFiltered.txt", header = TRUE, sep = "\t", row.names = 1)
# 2. 데이터 미리 보기
head(data) # 데이터 상위 6개 행 확인
# 3. 기본적인 데이터 시각화
boxplot(data) # 박스플롯으로 데이터 분포 시각화
heatmap(as.matrix(data)) # 히트맵으로 유전자 발현 패턴 시각화
# 4. Bioconductor 패키지 설치 (처음 한 번만 실행)
source("https://bioconductor.org/biocLite.R")
biocLite("ConsensusClusterPlus")
# 5. 패키지 로드
library(ConsensusClusterPlus)
# 6. Consensus Clustering 실행
result <- ConsensusClusterPlus(
as.matrix(data), # 입력 데이터 (행: 유전자, 열: 샘플)
maxK = 10, # 최대 클러스터 수
reps = 1000, # 반복 횟수 (클러스터링 반복 횟수)
pItem = 0.8, # 각 반복 시 사용할 샘플 비율
title = "TCGA_GBM",# 결과 파일 이름
plot = "pdf" # 출력 형식
)