DepMap — Carte de dépendance au cancer
Présentation
Le projet Carte de dépendance au cancer (DepMap), dirigé par le Broad Institute, caractérise systématiquement les dépendances génétiques à travers des centaines de lignées cellulaires cancéreuses en utilisant des cribles CRISPR à l'échelle du génome (CRISPR DepMap), l'interférence ARN (ARNi) et des tests de sensibilité aux composés (PRISM). Les données de DepMap sont essentielles pour :
- Identifier quels gènes sont essentiels pour des types de cancer spécifiques
- Trouver des dépendances sélectives au cancer (cibles thérapeutiques)
- Valider des cibles médicamenteuses en oncologie
- Découvrir des interactions létales synthétiques
Ressources clés :
- Portail DepMap : https://depmap.org/portal/
- Téléchargements de données DepMap : https://depmap.org/portal/download/all/
- Paquet Python :
depmap(ou accès via API/téléchargements) - API : https://depmap.org/portal/api/
Quand utiliser ce skill
Utilisez DepMap lorsque :
- Validation de cible : Un gène est-il essentiel à la survie dans des lignées cellulaires cancéreuses avec une mutation spécifique (par exemple, KRAS-mutant) ?
- Découverte de biomarqueurs : Quelles caractéristiques génomiques prédisent la sensibilité à l'inactivation d'un gène ?
- Létalité synthétique : Trouver des gènes qui sont sélectivement essentiels lorsqu'un autre gène est muté/supprimé
- Sensibilité aux médicaments : Quelles caractéristiques des lignées cellulaires prédisent la réponse à un composé ?
- Essentialité pancan : Un gène est-il largement essentiel dans tous les types de cancer (mauvaise cible) ou sélectivement essentiel ?
- Analyse de corrélation : Quelles paires de gènes ont des profils de dépendance corrélés (co-essentialité) ?
Concepts de base
Scores de dépendance
| Score | Plage | Signification |
|---|---|---|
| Chronos (CRISPR) | ~ -3 à 0+ | Plus négatif = plus essentiel. Seuil d'essentialité commune : −1. Gènes pan-essentiels ~−1 à −2 |
| ARNi DEMETER2 | ~ -3 à 0+ | Échelle similaire à Chronos |
| Effet génique | normalisé | Chronos normalisé ; −1 = effet médian des gènes essentiels communs |
Seuils clés :
- Chronos ≤ −0,5 : probablement dépendant
- Chronos ≤ −1 : fortement dépendant (plage d'essentialité commune)
Annotations des lignées cellulaires
Chaque lignée cellulaire possède :
DepMap_ID: identifiant unique (par exempleACH-000001)cell_line_name: nom lisible par l'hommeprimary_disease: type de cancerlineage: lignée tissulaire largelineage_subtype: sous-type spécifique
Capacités principales
1. API DepMap
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. Scores de dépendance génique
def get_gene_dependency(gene_symbol, dataset="Chronos_Combined"):
"""Obtenir les scores de dépendance CRISPR pour un gène dans toutes les lignées cellulaires."""
url = f"{BASE_URL}/gene"
params = {
"gene_id": gene_symbol,
"dataset": dataset
}
response = requests.get(url, params=params)
return response.json()
# Autrement, utiliser le point d'accès /data :
def get_dependencies_slice(gene_symbol, dataset_name="CRISPRGeneEffect"):
"""Obtenir une tranche de dépendance d'un gène à partir d'un jeu de données."""
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. Analyse basée sur le téléchargement (recommandée pour les grandes requêtes)
Pour une analyse à grande échelle, téléchargez les fichiers de données DepMap et analysez localement :
import pandas as pd
import requests, os
def download_depmap_data(url, output_path):
"""Télécharger un fichier de données 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)
# Fichiers de données DepMap 24Q4 (mettre à jour la version si nécessaire)
FILES = {
"crispr_gene_effect": "https://figshare.com/ndownloader/files/...",
# OU télécharger depuis : https://depmap.org/portal/download/all/
# Fichiers disponibles :
# CRISPRGeneEffect.csv - scores d'effet génique Chronos
# OmicsExpressionProteinCodingGenesTPMLogp1.csv - expression ARNm
# OmicsSomaticMutationsMatrixDamaging.csv - matrice binaire de mutations
# OmicsCNGene.csv - nombre de copies
# sample_info.csv - métadonnées des lignées cellulaires
}
def load_depmap_gene_effect(filepath="CRISPRGeneEffect.csv"):
"""
Charger la matrice d'effet génique CRISPR DepMap.
Lignes = lignées cellulaires (DepMap_ID), Colonnes = gènes (Symbole (EntrezID))
"""
df = pd.read_csv(filepath, index_col=0)
# Renommer les colonnes en symboles de gènes uniquement
df.columns = [col.split(" ")[0] for col in df.columns]
return df
def load_cell_line_info(filepath="sample_info.csv"):
"""Charger les métadonnées des lignées cellulaires."""
return pd.read_csv(filepath)
4. Identifier les dépendances sélectives
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):
"""Trouver les lignées cellulaires dépendantes de manière sélective d'un gène."""
# Obtenir les scores pour le gène cible
if target_gene not in gene_effect_df.columns:
return None
scores = gene_effect_df[target_gene].dropna()
dependent = scores[scores <= threshold]
# Ajouter les informations de la lignée cellulaire
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")
# Exemple d'utilisation (après chargement des données)
# 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. Analyse de biomarqueurs (effet génique vs mutation)
import pandas as pd
from scipy import stats
def biomarker_analysis(gene_effect_df, mutation_df, target_gene, biomarker_gene):
"""
Tester si la mutation dans biomarker_gene prédit la dépendance à target_gene.
Args :
gene_effect_df : DataFrame d'effet génique CRISPR
mutation_df : DataFrame binaire de mutations (1 = muté)
target_gene : Gène dont on évalue la dépendance
biomarker_gene : Gène dont la mutation pourrait prédire la dépendance
"""
if target_gene not in gene_effect_df.columns or biomarker_gene not in mutation_df.columns:
return None
# Aligner les lignées cellulaires
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. Analyse de co-essentialité
import pandas as pd
def co_essentiality(gene_effect_df, target_gene, top_n=20):
"""Trouver les gènes dont les profils de dépendance sont les plus corrélés (partenaires co-essentiels)."""
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)
# Les gènes co-essentiels partagent souvent des complexes ou des voies biologiques
Workflows de requêtes
Workflow 1 : Validation de cible pour un type de cancer
- Télécharger
CRISPRGeneEffect.csvetsample_info.csv - Filtrer les lignées cellulaires par type de cancer
- Calculer l'effet génique moyen pour le gène cible dans le cancer vs tous les autres
- Calculer la sélectivité : à quel point la dépendance est-elle spécifique à votre type de cancer ?
- Recouper avec les données de mutation, d'expression ou de CNA comme biomarqueurs
Workflow 2 : Crible de létalité synthétique
- Identifier les lignées cellulaires avec mutation/suppression du gène d'intérêt (par exemple, BRCA1-mutant)
- Calculer les scores d'effet génique pour tous les gènes dans les lignées mutantes vs WT
- Identifier les gènes significativement plus essentiels dans les lignées mutantes (partenaires de létalité synthétique)
- Filtrer par sélectivité et taille d'effet
Workflow 3 : Analyse de sensibilité aux composés
- Télécharger les données de sensibilité aux composés PRISM (
primary-screen-replicate-treatment-info.csv) - Corréler l'AUC/log2(fold-change) du composé avec les caractéristiques génomiques
- Identifier les biomarqueurs prédictifs de la sensibilité aux composés
Référence des fichiers de données DepMap
| Fichier | Description |
|---|---|
CRISPRGeneEffect.csv | Effect génique CRISPR Chronos (données de dépendance principales) |
CRISPRGeneEffectUnscaled.csv | Scores CRISPR non mis à l'échelle |
RNAi_merged.csv | Dépendance ARNi DEMETER2 |
sample_info.csv | Métadonnées des lignées cellulaires (lignée, maladie, etc.) |
OmicsExpressionProteinCodingGenesTPMLogp1.csv | Expression ARNm |
OmicsSomaticMutationsMatrixDamaging.csv | Mutations somatiques dommageables (binaire) |
OmicsCNGene.csv | Nombre de copies par gène |
PRISM_Repurposing_Primary_Screens_Data.csv | Sensibilité aux médicaments (bibliothèque de repositionnement) |
Téléchargez tous les fichiers depuis : https://depmap.org/portal/download/all/
Bonnes pratiques
- Utilisez les scores Chronos (pas DEMETER2) pour les analyses CRISPR actuelles — mieux contrôlés pour l'efficacité de coupure
- Distinguer pan-essentiel de sélectif au cancer : Les gènes cibles avec une faible variance (essentiels dans toutes les lignées) sont de mauvaises cibles médicamenteuses
- Valider avec les données d'expression : Un gène non exprimé dans une lignée cellulaire sera noté comme non essentiel indépendamment de sa fonction réelle
- Utiliser le DepMap ID pour l'identification des lignées cellulaires — le
cell_line_namepeut être ambigu - Tenir compte du nombre de copies : Les gènes amplifiés peuvent sembler essentiels en raison de l'effet du nombre de copies (hypothèse de l'ADN poubelle)
- Correction pour tests multiples : Lors du calcul des associations de biomarqueurs à l'échelle du génome, appliquer une correction FDR
Ressources supplémentaires
- Portail DepMap : https://depmap.org/portal/
- Téléchargements de données : https://depmap.org/portal/download/all/
- Article DepMap : Behan FM et al. (2019) Nature. PMID : 30971826
- Article 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