name: depmap description: Interroger la Cancer Dependency Map (DepMap) pour obtenir des scores de dépendance génique des lignées cellulaires cancéreuses (CRISPR Chronos), des données de sensibilité aux médicaments et des profils d'effet génique. À utiliser pour identifier les vulnérabilités spécifiques au cancer, les interactions synthétiquement létales et valider les cibles de médicaments en oncologie. license: CC-BY-4.0 tags: [scientific-skills, depmap, cheminformatics, security] metadata: skill-author: Kuan-lin Huang ----|-------|---------| | Chronos (CRISPR) | ~ -3 à 0+ | Plus négatif = plus essentiel. Seuil essentiel commun : −1. Les gènes pan-essentiels ~−1 à −2 | | RNAi DEMETER2 | ~ -3 à 0+ | Échelle similaire à Chronos | | Gene Effect | 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 essentielle commune)
Annotations des lignées cellulaires
Chaque lignée cellulaire possède :
DepMap_ID: identifiant unique (ex.ACH-000001)cell_line_name: nom lisibleprimary_disease: type de cancerlineage: large lignée tissulairelineage_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 sur 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()
# Alternativement, utilisez le endpoint /data :
def get_dependencies_slice(gene_symbol, dataset_name="CRISPRGeneEffect"):
"""Obtenir une tranche de dépendance d'un gène à partir d'un dataset."""
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 l'analyse à grande échelle, téléchargez les fichiers de données DepMap et analysez-les 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 selon les besoins)
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 (Symbol (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. Identification des 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 sélectivement dépendantes 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 le 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 une mutation dans biomarker_gene prédit la dépendance envers 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 peut 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 ayant les profils de dépendance 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 biologiques ou des voies
Workflows de requête
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 par rapport aux autres
- Calculer la sélectivité : la dépendance est-elle spécifique à votre type de cancer ?
- Référencer croisé avec les données de mutation, expression ou CNA comme biomarqueurs
Workflow 2 : Écran de létalité synthétique
- Identifier les lignées cellulaires avec mutation/délétion dans le gène d'intérêt (ex. 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 synthétiquement létaux)
- Filtrer par sélectivité et amplitude 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 |
Effet génique CRISPR Chronos (données de dépendance primaires) |
CRISPRGeneEffectUnscaled.csv |
Scores CRISPR non normalisés |
RNAi_merged.csv |
Dépendance RNAi DEMETER2 |
sample_info.csv |
Métadonnées des lignées cellulaires (lignée, maladie, etc.) |
OmicsExpressionProteinCodingGenesTPMLogp1.csv |
Expression ARNm |
OmicsSomaticMutationsMatrixDamaging.csv |
Mutations somatiques nuisibles (binaires) |
OmicsCNGene.csv |
Nombre de copies par gène |
PRISM_Repurposing_Primary_Screens_Data.csv |
Sensibilité aux médicaments (bibliothèque de redynamisation) |
Télécharger tous les fichiers depuis : https://depmap.org/portal/download/all/
Bonnes pratiques
- Utiliser les scores Chronos (pas DEMETER2) pour les analyses CRISPR actuelles — meilleur contrôle de l'efficacité de coupure
- Distinguer pan-essentiel de cancer-sélectif : Les gènes cibles avec faible variance (essentiels dans toutes les lignées) sont de mauvaises cibles de médicaments
- 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 la fonction réelle
- Utiliser DepMap ID pour l'identification des lignées cellulaires — cell_line_name peut être ambigu
- Tenir compte du nombre de copies : Les gènes amplifiés peuvent apparaître essentiels en raison de l'effet du nombre de copies (hypothèse de l'ADN indésirable)
- Correction pour tests multiples : Lors du calcul d'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