콘텐츠로 이동

04. 시퀀서 출력에서 세포×유전자 행렬까지

단일세포 RNA 측정의 1차 분석은 시퀀서가 읽은 짧은 서열 조각인 read 두 종류를 조인하는 작업입니다. 한 read에는 세포 주소인 cell barcode와 원래 RNA 분자 표지인 UMI(unique molecular identifier, 고유 분자 식별자)가 있고, 다른 read에는 RNA를 복사한 DNA인 cDNA 서열이 있습니다. 각 read의 서열과 품질 점수를 저장한 파일 형식이 FASTQ입니다. 같은 분자에서 나온 두 FASTQ 레코드를 짝지어 feature-barcode count matrix를 만듭니다. 여기서 feature는 측정 대상인 유전자, barcode는 세포 후보, 각 칸의 값은 중복을 제거한 RNA 분자 수입니다.

이 수업의 질문: 세포 주소 read와 cDNA read가 어떻게 세포별 유전자 count로 바뀌는가?

10x gene expression 데이터의 구체적인 read 길이와 barcode 위치는 시퀀싱할 분자 묶음인 library를 만드는 실험 규격, 즉 chemistry 버전에 따라 달라질 수 있습니다. 여러 library를 한 번에 읽을 때 출처 묶음을 구분하는 별도 주소를 sample index라고 합니다. 정렬에는 참조 유전체 서열과 유전자 좌표를 적은 Gene Transfer Format(GTF) 주석도 필요합니다. 하지만 자료형의 역할은 같습니다.

입력담긴 정보
Read 1 FASTQcell barcode + UMI
Read 2 FASTQmRNA에서 복사한 cDNA 서열
sample index어느 라이브러리인지
reference genome + GTF 유전자 주석정렬할 게놈 서열과 유전자 좌표

출력의 핵심은 각 칸이 이 세포 후보에서 이 유전자에 배정된 원래 RNA 분자 수인 희소 행렬입니다. 대부분의 유전자가 한 세포에서 검출되지 않아 값이 0이므로 희소하다고 부릅니다.

다섯 단계로 count 하나를 만든다

섹션 제목: “다섯 단계로 count 하나를 만든다”

관측한 barcode를 해당 chemistry의 알려진 barcode 목록과 대조합니다. 목록에 정확히 맞지 않더라도 염기 품질과 가까운 유효 barcode를 이용해 시퀀싱 오류를 보정할 수 있습니다. 어느 후보로도 자신 있게 고칠 수 없으면 그 read를 제외합니다.

cDNA 서열을 reference genome과 transcriptome annotation에 맞춥니다. 벌크 RNA-seq와 마찬가지로 엑손 경계와 splice junction을 고려해야 합니다.

정렬 위치와 GTF annotation을 대조해 read가 어느 gene의 전사체와 겹치는지 판단합니다. 여러 gene에 애매하게 걸리면 확실한 count로 쓰지 않을 수 있습니다.

read를 cell barcode + gene + UMI로 그룹화합니다. 같은 그룹의 read 여러 개는 DNA 사본을 늘리는 중합효소연쇄반응(polymerase chain reaction, PCR)에서 복제된 한 원래 분자일 수 있으므로 count 1로 접습니다. 가까운 UMI 서열의 오류도 read 지지도를 이용해 보정합니다.

5. 실제 세포와 연결된 barcode를 고른다

섹션 제목: “5. 실제 세포와 연결된 barcode를 고른다”

Barcode가 존재한다고 모두 세포는 아닙니다. 세포가 없는 방울(empty droplet)에도 깨진 세포에서 나와 용액에 떠다니는 ambient RNA가 들어갈 수 있습니다. 각 barcode의 UMI 수와 발현 패턴을 이용해 실제 세포와 연결된 것으로 보이는 barcode를 고르는 단계를 cell calling이라고 합니다.

cell calling 전후 행렬을 둘 다 남긴다

섹션 제목: “cell calling 전후 행렬을 둘 다 남긴다”

Cell Ranger는 cell calling 전의 raw matrix와 실제 세포 후보만 남긴 filtered matrix를 따로 출력합니다.

출력열에 포함되는 barcode
raw feature-barcode matrixread가 하나 이상 관측된 유효 barcode, background 포함
filtered feature-barcode matrixcell-associated라고 판정한 barcode

filtered matrix가 바로 분석 시작점처럼 보이지만 raw matrix도 중요합니다. empty droplet의 RNA 분포를 알아야 ambient RNA를 추정하거나 기본 cell calling에서 놓친 낮은 RNA 함량 세포를 검토할 수 있기 때문입니다.

10x의 Matrix Exchange 형식(MEX) 출력은 다음 세 파일이 한 행렬을 구성합니다.

filtered_feature_bc_matrix/
matrix.mtx.gz
features.tsv.gz
barcodes.tsv.gz
  • features.tsv.gz: 행 번호와 gene ID·gene name·feature type을 연결합니다.
  • barcodes.tsv.gz: 열 번호와 barcode 서열을 연결합니다.
  • matrix.mtx.gz: 0이 아닌 칸의 행 번호, 열 번호와 UMI count만 저장합니다.

10x 원본 파일은 feature가 행, barcode가 열입니다. Python 분석 패키지 Scanpy의 데이터 객체인 AnnData로 읽으면 보통 cell이 관측 행, gene이 변수 열n_obs × n_vars 형태로 다룹니다. 파일 형식에 따라 축이 바뀔 수 있으므로 shape만 보고 어느 축이 세포인지 추측하지 않습니다.

Cell Ranger는 구현이고 행렬은 개념이다

섹션 제목: “Cell Ranger는 구현이고 행렬은 개념이다”

Cell Ranger는 10x Chromium 데이터를 처리하는 공식 pipeline입니다. 2026년 8월 확인한 v10.1 문서는 barcode 처리, 정렬, UMI counting과 feature-barcode matrix 생성을 설명합니다.

같은 자료형은 STARsolo, alevin-fry 같은 다른 구현으로도 만들 수 있습니다. 도구가 달라도 다음 정보를 기록해야 결과를 재현할 수 있습니다.

  • library chemistry와 read 구조
  • pipeline과 버전
  • reference genome·GTF 버전
  • cell calling과 UMI 보정 설정
  • raw·filtered matrix를 구분한 파일 경로

싱글셀 1차 분석은 barcode read에서 세포와 분자 주소를 읽고, cDNA read를 유전자에 배정한 뒤, 같은 UMI 그룹을 하나로 접는 과정입니다. 마지막 cell calling을 거치면 raw matrix에서 filtered matrix가 만들어집니다.

다음 빈 방울과 저품질 세포 걸러내기에서는 filtered라는 이름을 그대로 신뢰하지 않고, barcode와 세포별 지표를 직접 확인합니다.