DepMap — 암 의존성 맵
개요
암 의존성 맵(DepMap) 프로젝트는 Broad Institute에서 운영하며, 전장 유전체 CRISPR knockout 스크리닝(DepMap CRISPR), RNA 간섭(RNAi), 및 화합물 민감도 분석(PRISM)을 통해 수백 개의 암 세포주에 걸친 유전적 의존성을 체계적으로 특성화합니다. DepMap 데이터는 다음 작업에 필수적입니다:
- 특정 암 유형에 필수적인 유전자 확인
- 암 선택적 의존성(치료 표적) 발견
- 항암제 표적 검증
- 합성 치사 상호작용 발견
주요 리소스:
- DepMap 포털: https://depmap.org/portal/
- DepMap 데이터 다운로드: https://depmap.org/portal/download/all/
- Python 패키지:
depmap(또는 API/다운로드를 통한 접근) - API: https://depmap.org/portal/api/
이 스킬을 사용해야 하는 경우
다음과 같은 상황에서 DepMap을 사용하세요:
- 표적 검증: 특정 돌연변이(예: KRAS 돌연변이)를 가진 암 세포주에서 유전자가 생존에 필수적인가?
- 바이오마커 발견: 어떤 유전체 특징이 유전자 녹아웃에 대한 민감성을 예측하는가?
- 합성 치사: 다른 유전자가 돌연변이/결실되었을 때 선택적으로 필수적인 유전자를 찾는다.
- 약물 민감도: 어떤 세포주 특징이 화합물에 대한 반응을 예측하는가?
- 범암 필수성: 유전자가 모든 암 유형에서 광범위하게 필수적인가(나쁜 표적) 아니면 선택적으로 필수적인가?
- 상관관계 분석: 어떤 유전자 쌍이 상관된 의존성 프로필(공동 필수성)을 가지는가?
핵심 개념
의존성 점수
| 점수 | 범위 | 의미 |
|---|---|---|
| Chronos (CRISPR) | ~ -3 ~ 0 이상 | 더 음수일수록 더 필수적. 일반적 필수 임계값: −1. 전범위 필수 유전자 ~−1 ~ −2 |
| RNAi DEMETER2 | ~ -3 ~ 0 이상 | Chronos와 유사한 척도 |
| 유전자 효과 | 정규화됨 | 정규화된 Chronos; −1 = 일반 필수 유전자의 중간 효과 |
주요 임계값:
- Chronos ≤ −0.5: 의존 가능성 있음
- Chronos ≤ −1: 강하게 의존 (일반 필수 유전자 범위)
세포주 주석
각 세포주에는 다음 정보가 있습니다:
DepMap_ID: 고유 식별자 (예:ACH-000001)cell_line_name: 사람이 읽을 수 있는 이름primary_disease: 암 유형lineage: 광범위한 조직 계통lineage_subtype: 특정 하위 유형
핵심 기능
1. DepMap API
import requests
import pandas as pd
BASE_URL = "https://depmap.org/portal/api"
def depmap_get(endpoint, params=None):
url = f"{BASE_URL}/{endpoint}"
response = requests.get(url, params=params)
response.raise_for_status()
return response.json()
2. 유전자 의존성 점수
def get_gene_dependency(gene_symbol, dataset="Chronos_Combined"):
"""모든 세포주에 대해 특정 유전자의 CRISPR 의존성 점수를 가져옵니다."""
url = f"{BASE_URL}/gene"
params = {
"gene_id": gene_symbol,
"dataset": dataset
}
response = requests.get(url, params=params)
return response.json()
# 또는 /data 엔드포인트 사용:
def get_dependencies_slice(gene_symbol, dataset_name="CRISPRGeneEffect"):
"""데이터셋에서 특정 유전자의 의존성 슬라이스를 가져옵니다."""
url = f"{BASE_URL}/data/gene_dependency"
params = {"gene_name": gene_symbol, "dataset_name": dataset_name}
response = requests.get(url, params=params)
data = response.json()
return data
3. 다운로드 기반 분석 (대규모 질의에 권장)
대규모 분석을 위해서는 DepMap 데이터 파일을 다운로드하여 로컬에서 분석하세요:
import pandas as pd
import requests, os
def download_depmap_data(url, output_path):
"""DepMap 데이터 파일을 다운로드합니다."""
response = requests.get(url, stream=True)
with open(output_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
# DepMap 24Q4 데이터 파일 (필요시 버전 업데이트)
FILES = {
"crispr_gene_effect": "https://figshare.com/ndownloader/files/...",
# 또는 https://depmap.org/portal/download/all/ 에서 다운로드
# 사용 가능한 파일:
# CRISPRGeneEffect.csv - Chronos 유전자 효과 점수
# OmicsExpressionProteinCodingGenesTPMLogp1.csv - mRNA 발현
# OmicsSomaticMutationsMatrixDamaging.csv - 돌연변이 이진 행렬
# OmicsCNGene.csv - 복제수
# sample_info.csv - 세포주 메타데이터
}
def load_depmap_gene_effect(filepath="CRISPRGeneEffect.csv"):
"""
DepMap CRISPR 유전자 효과 행렬을 로드합니다.
행 = 세포주 (DepMap_ID), 열 = 유전자 (Symbol (EntrezID))
"""
df = pd.read_csv(filepath, index_col=0)
# 열 이름을 유전자 기호로만 변경
df.columns = [col.split(" ")[0] for col in df.columns]
return df
def load_cell_line_info(filepath="sample_info.csv"):
"""세포주 메타데이터를 로드합니다."""
return pd.read_csv(filepath)
4. 선택적 의존성 식별
import numpy as np
import pandas as pd
def find_selective_dependencies(gene_effect_df, cell_line_info, target_gene,
cancer_type=None, threshold=-0.5):
"""특정 유전자에 선택적으로 의존하는 세포주를 찾습니다."""
# 대상 유전자의 점수 가져오기
if target_gene not in gene_effect_df.columns:
return None
scores = gene_effect_df[target_gene].dropna()
dependent = scores[scores <= threshold]
# 세포주 정보 추가
result = pd.DataFrame({
"DepMap_ID": dependent.index,
"gene_effect": dependent.values
}).merge(cell_line_info[["DepMap_ID", "cell_line_name", "primary_disease", "lineage"]])
if cancer_type:
result = result[result["primary_disease"].str.contains(cancer_type, case=False, na=False)]
return result.sort_values("gene_effect")
# 예제 사용 (데이터 로드 후)
# df_effect = load_depmap_gene_effect("CRISPRGeneEffect.csv")
# cell_info = load_cell_line_info("sample_info.csv")
# deps = find_selective_dependencies(df_effect, cell_info, "KRAS", cancer_type="Lung")
5. 바이오마커 분석 (유전자 효과 vs 돌연변이)
import pandas as pd
from scipy import stats
def biomarker_analysis(gene_effect_df, mutation_df, target_gene, biomarker_gene):
"""
biomarker_gene의 돌연변이가 target_gene에 대한 의존성을 예측하는지 테스트합니다.
Args:
gene_effect_df: CRISPR 유전자 효과 DataFrame
mutation_df: 이진 돌연변이 DataFrame (1 = 돌연변이 있음)
target_gene: 의존성을 평가할 유전자
biomarker_gene: 돌연변이가 의존성을 예측할 수 있는 유전자
"""
if target_gene not in gene_effect_df.columns or biomarker_gene not in mutation_df.columns:
return None
# 세포주 정렬
common_lines = gene_effect_df.index.intersection(mutation_df.index)
scores = gene_effect_df.loc[common_lines, target_gene].dropna()
mutations = mutation_df.loc[scores.index, biomarker_gene]
mutated = scores[mutations == 1]
wt = scores[mutations == 0]
stat, pval = stats.mannwhitneyu(mutated, wt, alternative='less')
return {
"target_gene": target_gene,
"biomarker_gene": biomarker_gene,
"n_mutated": len(mutated),
"n_wt": len(wt),
"mean_effect_mutated": mutated.mean(),
"mean_effect_wt": wt.mean(),
"pval": pval,
"significant": pval < 0.05
}
6. 공동 필수성 분석
import pandas as pd
def co_essentiality(gene_effect_df, target_gene, top_n=20):
"""의존성 프로필이 가장 상관관계가 높은 유전자(공동 필수 파트너)를 찾습니다."""
if target_gene not in gene_effect_df.columns:
return None
target_scores = gene_effect_df[target_gene].dropna()
correlations = {}
for gene in gene_effect_df.columns:
if gene == target_gene:
continue
other_scores = gene_effect_df[gene].dropna()
common = target_scores.index.intersection(other_scores.index)
if len(common) < 50:
continue
r = target_scores[common].corr(other_scores[common])
if not pd.isna(r):
correlations[gene] = r
corr_series = pd.Series(correlations).sort_values(ascending=False)
return corr_series.head(top_n)
# 공동 필수 유전자는 종종 동일한 생물학적 복합체 또는 경로를 공유합니다
질의 워크플로우
워크플로우 1: 암 유형에 대한 표적 검증
CRISPRGeneEffect.csv와sample_info.csv다운로드- 암 유형별로 세포주 필터링
- 암 세포주와 다른 모든 세포주에서 표적 유전자의 평균 유전자 효과 계산
- 선택성 계산: 의존성이 특정 암 유형에 얼마나 특이적인가?
- 바이오마커로서 돌연변이, 발현 또는 CNA 데이터와 교차 참조
워크플로우 2: 합성 치사 스크리닝
- 관심 유전자(예: BRCA1 돌연변이)의 돌연변이/결실이 있는 세포주 식별
- 돌연변이 세포주와 야생형 세포주에서 모든 유전자의 유전자 효과 점수 계산
- 돌연변이 세포주에서 유의하게 더 필수적인 유전자(합성 치사 파트너) 식별
- 선택성과 효과 크기로 필터링
워크플로우 3: 화합물 민감도 분석
- PRISM 화합물 민감도 데이터 다운로드 (
primary-screen-replicate-treatment-info.csv) - 화합물 AUC/log2(폴드 변화)와 유전체 특징 간 상관관계 분석
- 화합물 민감도에 대한 예측 바이오마커 식별
DepMap 데이터 파일 참조
| 파일 | 설명 |
|---|---|
CRISPRGeneEffect.csv | CRISPR Chronos 유전자 효과 (주 의존성 데이터) |
CRISPRGeneEffectUnscaled.csv | 스케일링되지 않은 CRISPR 점수 |
RNAi_merged.csv | DEMETER2 RNAi 의존성 |
sample_info.csv | 세포주 메타데이터 (계통, 질병 등) |
OmicsExpressionProteinCodingGenesTPMLogp1.csv | mRNA 발현 |
OmicsSomaticMutationsMatrixDamaging.csv | 유해 체세포 돌연변이 (이진) |
OmicsCNGene.csv | 유전자당 복제수 |
PRISM_Repurposing_Primary_Screens_Data.csv | 약물 민감도 (재창출 라이브러리) |
모든 파일 다운로드: https://depmap.org/portal/download/all/
모범 사례
- Chronos 점수 사용 (DEMETER2 아님) — 절단 효율에 대해 더 잘 제어됨
- 전범위 필수 유전자와 암 선택적 유전자 구분: 분산이 낮은(모든 세포주에서 필수인) 표적 유전자는 좋은 약물 표적이 아님
- 발현 데이터로 검증: 세포주에서 발현되지 않는 유전자는 실제 기능과 관계없이 비필수로 점수 매겨짐
- 세포주 식별에 DepMap ID 사용 — cell_line_name은 모호할 수 있음
- 복제수 고려: 증폭된 유전자는 복제수 효과(정크 DNA 가설)로 인해 필수로 나타날 수 있음
- 다중 검정 보정: 전장 유전체 바이오마커 연관성을 계산할 때 FDR 보정 적용
추가 리소스
- DepMap 포털: https://depmap.org/portal/
- 데이터 다운로드: https://depmap.org/portal/download/all/
- DepMap 논문: Behan FM et al. (2019) Nature. PMID: 30971826
- Chronos 논문: Dempster JM et al. (2021) Nature Methods. PMID: 34349281
- GitHub: https://github.com/broadinstitute/depmap-portal
- Figshare: https://figshare.com/articles/dataset/DepMap_24Q4_Public/27993966