본문 바로가기

bioinformatics

Scanpy tutorials - preprocessing and clustering (anndata, pooch 개념설명)

 

# Core scverse libraries
import scanpy as sc
import anndata as ad

# Data retrieval
import pooch

 

AnnData single cell rna 데이터를 체계적으로 저장하기 위한 구조로, 유전자 발현 행렬을 X라는 속성에 저장하고, 유전자 ID와 세포 바코드 정보를 var(변수)obs(관측값)에 각각 저장한다.

 

obs (Observations):

  • obs는 세포에 대한 메타데이터를 (실험 조건, 세포의 특성, 클러스터링 결과 등) 저장하는 곳입니다. 데이터프레임 형태를 가지며, 각 행이 하나의 세포를 나타냅니다.
  • 예를 들어, 각 세포에 대해 클러스터 레이블, 샘플 조건, 배치 정보 등 다양한 정보를 이곳에 저장할 수 있습니다.

var (Variables):

  • var는 유전자에 대한 메타데이터를 (유전자 이름, 기능적 주석, 유전자 발현 패턴, 유전자 기능 분류, 발현 위치 등) 저장하는 부분입니다. 데이터프레임 형식이며, 각 행이 하나의 유전자에 해당한다.

세포, 유전자 메타 데이터에 대한 개념
AnnData 와 데이터프레임 비교

 

pooch - 데이터 파일을 지정된 URL에서 다운로드하고, 로컬 캐시에 저장합니다.

sc.settings.set_figure_params(dpi=50, facecolor="white")

 

EXAMPLE_DATA = pooch.create(
    path=pooch.os_cache("scverse_tutorials"),
    base_url="doi:10.6084/m9.figshare.22716739.v1/",
)
EXAMPLE_DATA.load_registry_from_doi()

 

pooch.create() : pooch 객체를 생성하여 데이터를 다운로드하는 역할

path = pooch.os_cache('scverse_tutorials') : 운영 체제의 캐시 디렉터리 내에 "scverse_tutorials"라는 폴더를 자동으로 생성

base_url = 'doi~' : 다운로드할 파일이 위치한 URL

load_registry_from_doi() : base_url에 지정된 DOI에서 파일 레지스트리(파일 목록)를 가져온다. 이 파일안에 pooch가 다운로드 해야 하는 파일 이름과 파일 해시 정보가 포함되어 있다.

 

samples = {
    "s1d1": "s1d1_filtered_feature_bc_matrix.h5",
    "s1d3": "s1d3_filtered_feature_bc_matrix.h5",
}
adatas = {}

for sample_id, filename in samples.items():
    path = EXAMPLE_DATA.fetch(filename)
    sample_adata = sc.read_10x_h5(path)
    sample_adata.var_names_make_unique()
    adatas[sample_id] = sample_adata

# EXAMPLE_DATA 는 pooch 객체
# EXAMPLE_DATA 는 로컬에서 캐시를 찾아서 경로설정

adata = ad.concat(adatas, label="sample")
adata.obs_names_make_unique()
print(adata.obs["sample"].value_counts())
adata

 

h5 확장자

  • 보통 .h5 형식의 파일에는 유전자 ID, 세포 바코드, 발현 값 등이 포함됩니다.
  • 파이썬의 Scanpy 라이브러리에서는 .h5 파일을 sc.read_10x_h5() 함수로 읽는다.
  • 불러온 데이터는 anndata 객체로 저장한다.

 

path = EXAMPLE_DATA.fetch(filename) : 로컬에서 filename 경로를 찾아서 저장한다.

sample_adata = sc.read_10x_h5(path) : h5 데이터를 anndata 저장한다. 

sample_adata.var_names_make_unique() : 유전자 이름 중복을 방지한다. ex) GAPDH-1, GAPDH-2

adatas[sample_id] = sample_adata : 각 색플의 AnnData 객체를 adatas 딕셔너리에 저장하는 역할

 

 

adata.obs_names_make_unique() : 중복된 세포 이름에 고유한 숫자를 추가하여 중복 제거

adata = ad.concat(adatas, label="sample") : 여러 개의 AnnData 객체를 하나의 통합된 객체로 결합, 즉 adatas에 여러개의 AnnData 객체를 결합함. label 은 각 샘플의 출처를 구분하는 레이블

 

 

샘플 s1d1 8785개 , s1d3 8340개 합쳐서 17125개의 AnnData 객체 생성

adata 출력하면 obs만 나오지만 adata.var로 var데이터에 접근할 수 있다.

 

 

 

X 행렬의 구조

X행렬의 행은 obs의 인덱스를 따라 세포 순서가 결정되고, 열은 var의 인덱스를 따라 유전자 순서가 결정됨. X 행렬을 통해 세포별 유전자 발현 데이터를 obs와 var 메타데이터와 함께 저장함. 

 

adata.obs['group'] = adata.obs['sample'].map({"s1d1": "control", "s1d3": "exp"})

 

s1d1을 control, s1d3를 exp 로 추가 ( obs는 cell 정보를 포함하는 메타데이터)