-
anndata의 값이 raw cnt인지 확인하는 법Note 2025. 3. 6. 17:51
AnnData X가 log1p 변환되지 않은 raw count인지 확인하는 방법
1. 최소값 확인
log1p 변환이 된 데이터는 최소값이 0 이상입니다.
하지만 raw count 데이터는 0 또는 자연수(정수) 값이므로, 최소값이 0 이하인지 확인하면 됩니다.import numpy as np min_value = np.min(adata.X) print(f"Minimum value in X: {min_value}")
결과 해석
- min_value >= 0: log1p 변환되었을 가능성이 높음.
- min_value < 0: 비정상적인 데이터. (log1p 변환이 잘못 적용되었을 가능성)
- min_value == 0: 아직 raw count일 가능성이 있음.
2. 정수값 여부 확인
raw count 데이터는 항상 정수값을 가집니다.
반면 log1p 변환된 데이터는 대부분 소수점 값을 포함합니다.is_integer = np.all(adata.X == np.floor(adata.X)) print(f"All values are integers: {is_integer}")
결과 해석
- True: Raw count일 가능성이 높음.
- False: log1p 변환되었을 가능성이 높음.
3. 특정 유전자의 값 직접 확인
gene_name = "GAPDH" # 확인하고 싶은 유전자 이름 if gene_name in adata.var_names: gene_idx = adata.var_names.get_loc(gene_name) print(adata.X[:, gene_idx][:10]) # 처음 10개 샘플 출력
결과 해석
- 값이 0, 1, 2, ...처럼 정수로 되어 있다면 → Raw count 데이터.
- 값이 0.693, 1.099, ...처럼 실수형이면 → log1p 변환됨.
4. log1p 변환 후 차이 비교
log1p 변환을 적용하고 이전 값과 차이를 비교하면, 기존에 변환이 되었는지 확인 가능.
import scanpy as sc adata_copy = adata.copy() sc.pp.log1p(adata_copy) diff = np.abs(adata_copy.X - adata.X).mean() print(f"Mean difference after log1p transformation: {diff}")
결과 해석
- diff ≈ 0: 이미 log1p 변환이 되어 있었음.
- diff > 0: 원본이 raw count였고, log1p를 적용하면 값이 달라짐 → raw count 데이터.
📌 최종 판단 기준
✅ min(X) < 0 → 데이터가 손상되었을 가능성 있음.
✅ X가 정수로만 구성 (is_integer=True) → Raw count 데이터 가능성 높음.
✅ log1p 변환 후 값 차이가 발생 (diff > 0) → Raw count 데이터였을 가능성 높음.➡ 세 가지 방법을 종합적으로 확인하면, adata.X가 raw count인지 log1p 변환된 데이터인지 알 수 있음.
'Note' 카테고리의 다른 글
NVIDIA driver, CUDA, torch (0) 2025.03.05 0203-0217 (0) 2025.02.17 0120-0126 (0) 2025.01.20