Analyzing KEGG and chembl (PBMC)
Analyzing KEGG and chembl (PBMC)
import piasoimport cosg
import osimport numpy as npimport pandas as pdimport scanpy as scimport anndata as adimport loggingfrom matplotlib import rcParamsimport warnings
# modifying the default figure size, use rcParams.rcParams['figure.figsize'] = 4, 4rcParams['font.sans-serif'] = "Arial"rcParams['font.family'] = "Arial"sc.settings.verbosity = 3sc.logging.print_header()sc.set_figure_params(dpi=80,dpi_save=300, color_map='viridis',facecolor='white')
warnings.simplefilter(action='ignore', category=FutureWarning).../site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html from .autonotebook import tqdm as notebook_tqdmadata = sc.read_h5ad('.../SEA-AD_RNA_MTG_subsample_excludeReference_20k_piaso.h5ad')import gseapy as gpnames = gp.get_library_name()kegg_libs = [n for n in names if "KEGG" in n]print(kegg_libs)['KEGG_2013', 'KEGG_2015', 'KEGG_2016', 'KEGG_2019_Human', 'KEGG_2019_Mouse', 'KEGG_2021_Human', 'KEGG_2026']# choosing 'KEGG_2021_Human'
kegg = gp.parser.get_library('KEGG_2021_Human')%%timescore_matrix, gene_set_names = piaso.tl.calculateScoreParallel(adata, kegg)CPU times: user 2.14 s, sys: 991 ms, total: 3.13 sWall time: 2min 21sadata_score = ad.AnnData( X=score_matrix, obs=adata.obs.copy(), var=pd.DataFrame(index=gene_set_names))adata_score.obsm = adata.obsm.copy()cosg.cosg( adata_score, key_added='cosg', groupby='Subclass', n_genes_user=100,)# save current adataadata_score.write_h5ad('.../kegg2021_human_sea20k.h5ad')adata_score = sc.read_h5ad('.../kegg2021_human_sea20k.h5ad')cosg_names = pd.DataFrame(adata_score.uns['cosg']['names'])cosg_scores = pd.DataFrame(adata_score.uns['cosg']['scores'])import matplotlib.pyplot as pltnames_df = cosg_names.iloc[:5]scores_df = cosg_scores.iloc[:5]
top_drugs = names_df.values.flatten().tolist()
# Use scanpy dotplot directlysc.pl.dotplot( adata_score, var_names=names_df.to_dict(orient='list'), # grouped by cell type groupby='Subclass', cmap='Spectral_r', standard_scale='var', swap_axes=True, dendrogram=False, show=False)
## save the plot as pdf#plt.savefig('.../kegg_sea20k_dotplot.pdf', bbox_inches='tight')
plt.show()%%timescore_matrix, gene_set_names, p_score_matrix = piaso.tl.calculateScoreParallel(adata, kegg, return_pvals = True)CPU times: user 2.52 s, sys: 973 ms, total: 3.49 sWall time: 2min 22sp_adata = ad.AnnData( X=p_score_matrix, obs=adata.obs.copy(), var=pd.DataFrame(index=gene_set_names))p_adata.obsm = adata.obsm.copy()cosg.cosg( p_adata, key_added='cosg', groupby='Subclass', n_genes_user=100,)p_adata.write_h5ad('.../p_kegg2021_human_sea20k')p_adata = sc.read_h5ad('.../p_kegg2021_human_sea20k')cosg_names = pd.DataFrame(p_adata.uns['cosg']['names'])cosg_scores = pd.DataFrame(p_adata.uns['cosg']['scores'])
names_df = cosg_names.iloc[:5]scores_df = cosg_scores.iloc[:5]
top_drugs = names_df.values.flatten().tolist()
# Use scanpy dotplot directlysc.pl.dotplot( p_adata, var_names=names_df.to_dict(orient='list'), # grouped by cell type groupby='Subclass', cmap='Spectral_r', standard_scale='var', swap_axes=True, dendrogram=False, show=False)#plt.savefig('.../p_kegg2021_human_sea20k_dotplot.pdf', bbox_inches='tight')plt.show()# !wget ftp://ftp.sanger.ac.uk/pub/users/kp9/chembl_30_merged_genesymbols_humans.pklimport warningsimport numpy as np
warnings.filterwarnings('ignore', category=RuntimeWarning)warnings.simplefilter("ignore")
import pandas as pdimport drug2cell as d2c# original = pd.read_pickle("chembl_30_merged_genesymbols_humans.pkloriginal = pd.read_pickle(".../chembl_30_merged_genesymbols_humans.pkl")#pChEMBL is -log10() as per https://chembl.gitbook.io/chembl-interface-documentation/frequently-asked-questions/chembl-data-questions#what-is-pchembl#the threshold values were updated on 21Dec2024thresholds_dict={ 'none':6, #1uM 'NHR':7, #100nM 'GPCR':7, #100nM 'Ion Channel':5, #10uM 'Kinase':7.53, #30nM}filtered_df = d2c.chembl.filter_activities( dataframe=original, drug_max_phase=4, assay_type='F', add_drug_mechanism=True, remove_inactive=True, include_active=True, pchembl_target_column="target_class", pchembl_threshold=thresholds_dict)print(filtered_df.shape)(39660, 55)chembldict = d2c.chembl.create_drug_dictionary( filtered_df, drug_grouping='ATC_level')new_chembldict = {}for outer_key, inner_dict in chembldict.items(): for inner_key, gene_list in inner_dict.items(): if inner_key in new_chembldict: new_chembldict[inner_key] = list(set(new_chembldict[inner_key]) | set(gene_list)) else: new_chembldict[inner_key] = gene_list%%time
score_matrix, gene_set_names = piaso.tl.calculateScoreParallel(adata, new_chembldict)CPU times: user 16.3 s, sys: 2.89 s, total: 19.2 sWall time: 17min 46sadata_score = ad.AnnData( X=score_matrix, obs=adata.obs.copy(), var=pd.DataFrame(index=gene_set_names))adata_score.obsm = adata.obsm.copy()cosg.cosg( adata_score, key_added='cosg', groupby='Subclass', n_genes_user=100, expressed_pct=0.1, remove_lowly_expressed=True,)adata_score.write_h5ad('.../chembl_sea20k.h5ad')adata_score = sc.read_h5ad('.../chembl_sea20k.h5ad')cosg_names = pd.DataFrame(adata_score.uns['cosg']['names'])cosg_scores = pd.DataFrame(adata_score.uns['cosg']['scores'])names_df = cosg_names.iloc[:5]scores_df = cosg_scores.iloc[:5]
top_drugs = names_df.values.flatten().tolist()
# Use scanpy dotplot directlysc.pl.dotplot( adata_score, var_names=names_df.to_dict(orient='list'), # grouped by cell type groupby='Subclass', cmap='Spectral_r', standard_scale='var', swap_axes=True, dendrogram=False, show=False)
plt.savefig('.../chembl_sea20k_dotplot.pdf', bbox_inches='tight')plt.show()%%timescore_matrix, gene_set_names, p_score_matrix = piaso.tl.calculateScoreParallel(adata, new_chembldict, return_pvals = True)CPU times: user 19.6 s, sys: 2.42 s, total: 22 sWall time: 18minp_adata = ad.AnnData( X=p_score_matrix, obs=adata.obs.copy(), var=pd.DataFrame(index=gene_set_names))p_adata.obsm = adata.obsm.copy()cosg.cosg( p_adata, key_added='cosg', groupby='Subclass', n_genes_user=100, expressed_pct=0.1, remove_lowly_expressed=True,)# Save current adata
p_adata.write_h5ad('.../p_chembl_sea20k.h5ad')p_adata = sc.read_h5ad('.../p_chembl_sea20k.h5ad')cosg_names = pd.DataFrame(p_adata.uns['cosg']['names'])cosg_scores = pd.DataFrame(p_adata.uns['cosg']['scores'])
names_df = cosg_names.iloc[:5]scores_df = cosg_scores.iloc[:5]
top_drugs = names_df.values.flatten().tolist()
# Use scanpy dotplot directlysc.pl.dotplot( p_adata, var_names=names_df.to_dict(orient='list'), # grouped by cell type groupby='Subclass', cmap='Spectral_r', standard_scale='var', swap_axes=True, dendrogram=False, show=False)
# plt.savefig('.../p_chembl_sea20k_dotplot.pdf', bbox_inches='tight')plt.show()