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

> 시퀀서 출력에서 세포 주소와 분자 표지를 읽고 RNA에서 복사된 서열을 유전자에 배정해, 세포별 유전자 count 행렬을 만드는 과정.

단일세포 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 FASTQ | cell barcode + UMI |
| Read 2 FASTQ | mRNA에서 복사한 cDNA 서열 |
| sample index | 어느 라이브러리인지 |
| reference genome + [GTF 유전자 주석](/reference/gtf/) | 정렬할 게놈 서열과 유전자 좌표 |

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

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

### 1. cell barcode를 읽고 검증한다

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

### 2. cDNA read를 reference에 정렬한다

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

### 3. read를 gene에 배정한다

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

### 4. UMI 중복을 접는다

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

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

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

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

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

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

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

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

```text
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는 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가 만들어집니다.

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

---

### 출처

- Cell Ranger 역할과 현재 버전: [10x Genomics Cell Ranger](https://www.10xgenomics.com/support/software/cell-ranger/latest)
- barcode·UMI counting 알고리즘: [Cell Ranger gene expression algorithm](https://www.10xgenomics.com/support/software/cell-ranger/latest/algorithms-overview/cr-gex-algorithm)
- raw·filtered MEX 구조: [Cell Ranger feature-barcode matrices](https://www.10xgenomics.com/support/software/cell-ranger/latest/analysis/outputs/cr-outputs-mex-matrices)