DepMap — 癌症依賴性圖譜
概述
Cancer Dependency Map (DepMap) 專案由 Broad Institute 主導,利用全基因組 CRISPR 剔除篩選 (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 比例相近 |
| Gene Effect | 標準化 | 標準化後 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),欄 = 基因 (GeneSymbol (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 的依賴性。
參數:
gene_effect_df: CRISPR 基因效應資料框
mutation_df: 二元突變資料框 (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)
# 共必需基因通常共享生物複合物或 pathways
查詢工作流程
工作流程 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)進行當前 CRISPR 分析 — 對切割效率有更好的校正
- 區分泛必需與選擇性必需:變異度低的目標基因(所有細胞株皆必需)是不良的藥物標靶
- 以表現資料驗證:在細胞株中未表現的基因無論其實際功能為何,都會被評為非必需
- 使用 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