> Modules non standards > Autres modules non standards > gseapy
gseapy
Msigdb :
- msig = gseapy.Msigdb() : construit l'objet.
- msig.list_dbver() : donne la liste des versions, comme par exemple '2023.2.Hs'
- msig.list_category() : donne la liste des catégories, comme par exemple 'c2.all'.
- gmt = msig.get_gmt(category = 'c2.all', dbver = '2023.2.Hs') : renvoie un dictionnaire pathway vers liste de gènes.
Enrichr :
- gseapy.get_library_name(organism = Human') : renvoie la liste des librairies enrichr pour l'homme.
- gseapy.get_library_name() : renvoie la liste des librairies enrichr (c'est le défaut).
- gseapy.get_library(name = 'Reactome_2022', organism = 'Human') : renvoie un dictionnaire pathway vers liste de gènes.
Overrepresentationa analysis :
- result = gseapy.enrich(myGeneList, myGeneSets) : fait de l'overreprésentation analysis, avec myGeneList la liste de gènes à étudier, et myGeneSets un dictionnaire pathway vers liste de gènes et renvoie un objet gseapy.enrichr.Enrichr avec result.res2d contenant un dataframe avec les résultats ayant les colonnes suivantes :
- Term : le pathway.
- Overlap : 5/27 (nombre de gènes présents dans la liste sur nombre de gènes total du pathway.
- P-value : la p-value
- Adjusted P-value : la p-value ajustée
- Genes : les gènes présents dans la liste (numérateur de Overlap).
paramètres de enrich :
- background = myBackgroundListOfGenes : optionellement la liste de gènes exprimés dans l'expérience (recommandé, sinon, c'est la réunion des gènes présents dans tous les genesets qui sont utilisés).
- cutoff = 0.05 : la p-value à utiliser (défaut = 0.05).
- verbose = True : mode verbeux (défaut est False).
- outdir = '.', format = 'png', figsize = (6.5, 6) : écrit un barplot avec les p-values et aussi un fichier txt (mais pas le choix du nom des fichiers ...
- dotplot : gseapy.dotplot(result.res2d, column = 'Adjusted P-value', x = 'Gene_set', top_term = 10, figsize = (3, 5), cutoff = 0.05, cmap = 'viridis_r', title = 'myTitle', xticklabels_rot = 45, show_ring = True, marker = 'o') :
- x = 'Gene_set' : c'est la colonne du dataframe si celui-ci contient plusieurs séries de GeneSet, sinon peut aussi être égal à 'Combined Score', une autre colonne du dataframe (défaut si non présent)
GSEA :
- si df est un dataframe obtenu avec scanpy.tl.rank_genes_groups, il est trié par valeur - numpy.log(df['pvals']) * numpy.sign(df['logfoldchanges']) décroissante.
- créer un nouveau dataframe df2 = pandas.DataFrame({'score': - numpy.log(df['pvals'].values) * numpy.sign(df['logfoldchanges'].values)}, index = df['gene'].values)
- attention, s'il y a des pvals à 0, les remplacer par des valeurs > 0 : df['pvals'] = df['pvals'].apply(lambda x: sys.float_info.min if x == 0 else x)
- lancer le GSEA avec : result = gseapy.prerank(df2, myGeneSets). Quelques paramètres :
- threads = 4
- outdir = '.' : directory pour les graphes (défaut est None, pas de graphes générés). Ils sont générés dans un sous-directory pre-rank
- format = 'png' : pour les images
- graph_num = 5 : le nombre de graphes à générer.
- seed = 0
- verbose = True : défaut est False
- le résultat est un objet gseapy.gsea.Prerank et result.results est un dictionnaire dont les clefs sont les noms des genesets et les valeurs un dictionnaire avec notamment les clefs :
- es : enrichment score
- nes : normalized enrichment score
- pval : p-value
- fdr : false discovery rate ajustée
- fwerp : family wise error rate p-value
- matched_genes : les gènes matchés dans le geneSet.
- lead_genes : les gènes avant le pic (si positif) ou après le pic (si négatif)
- tag % : nombre de lead genes / nombre de matched genes.
- RES : ce sont les valeurs qui permettrent de tracer le graphe.
- result.res2d est aussi un dataframe triés par valeur absolue de NES descendant, avec notamment les colonnes Term, ES, NES, "FDR q-val", "FWER p-val", "Tag %", Lead_genes.
- ax = result.plot(terms = myPathway) : plot le graphe du pathway indiqué.
- ax = result.plot(terms = [pathway1,pathway2], colors = ['red', 'green']) : on peut donner plusieurs pathways et aussi indiquer un fichier où sauver l'image.
- result.plot(terms = [pathway1,pathway2], colors = ['red', 'green'], ofname = 'myImage.png') : indique un fichier où sauver l'image.
- dotplot :
- ax = gseapy.dotplot(result.res2d, column = 'FDR q-val', title = 'myTitle', cmap = 'viridis_r') :
- size = 6 : taille max des points
- cutoff = 0.05 : cutoff sur la colonne donnée dans l'argument column (défaut est 0.05)
- top_term = 10 : nombre maximum de pathways (défaut est 10)
- show_ring = True : anneau avec la taille maximum autour des points.
- marker = 'D' : marqueur diamond plutôt que rond (défaut est 'o')
- figsize = (5, 5) : taille de la figure.
- ofname = 'myImage.png' : fichier pour la sauvegarde.
Visualisation des relations entre pathways à partir d'un résultat GSEA :
- nodes, edges = gseapy.enrichment_map(result.res2d) : examine les relations entre les pathways et renvoie 2 dataframes :
- nodes : pathways sélectionnés (reprend les colonnes de result.res2d)
- edges : arêtes entre les pathways avec comme colonnes notamment :
- src_name
- targ_name
- jaccard_coef
- overlap_coef
- overlap_genes : la liste des gènes communs séparés par des virgules.
- paramètres :
- column = 'Adjusted P-value' : la colonne prise en compte pour sélectionner les pathways (c'est le défaut).
- cutoff = 0.05 : le seuil de sélection des pathways (en fonction de la valeur de column), défaut de 0.05
- top_term = 10 : le nombre maximum de pathways (défaut de 10)
- représentation en utilisant le package networkx :
- graph = networkx.from_pandas_edgelist(edges, source = 'src_idx', target = 'targ_idx', edge_attr=['jaccard_coef', 'overlap_coef', 'overlap_genes'])
- nodeIdsInGraph = set(edges['src_idx'].tolist() + edges['targ_idx'].tolist()); nodes2 = nodes.loc[nodes.index.isin(nodeIdsInGraph)] : attention, si certains sommets n'ont aucune arête, il faut les enlever !
- pos = networkx.layout.spiral_layout(graph)
- networkx.draw_networkx_nodes(graph, pos = pos, cmap = 'RdYlBu', node_color = (nodes2['NES']).tolist(), node_size = (nodes2['Hits_ratio'] * 1000).tolist())
- networkx.draw_networkx_labels(graph, pos = pos, labels = nodes2['Term'].to_dict())
- edgeWeight = networkx.get_edge_attributes(graph, 'jaccard_coef').values()
- networkx.draw_networkx_edges(graph, pos = pos, width = list(map(lambda x: x * 10, edgeWeight)), edge_color = 'gray')
- pyplot.savefig('myImage.png')
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert