diff --git a/appyters/Drug_Gene_Budger2/README.md b/appyters/Drug_Gene_Budger2/README.md index ad40bc15..cebf1832 100644 --- a/appyters/Drug_Gene_Budger2/README.md +++ b/appyters/Drug_Gene_Budger2/README.md @@ -1,6 +1,6 @@ -# Drug Gene Budger (DGB) 2 +# Dr. Gene Budger (DGB) 2 -This appyter takes a single gene as input and identifies up-regulating and down-regulating drugs from three connectivity mapping resources. +The Dr. Gene Budger 2 (DGB2) Appyter takes a single human gene as input, and returns ranked up- and down-regulating drugs from three Connectivity Mapping resources that were shown to maximally increase or decrease the mRNA expression of the gene in human cell lines. The three Connectivity Mapping resources are: - [Ginkgo GDPx1 and GDPx2 datasets](https://huggingface.co/ginkgo-datapoints) diff --git a/appyters/Drug_Gene_Budger2/appyter.json b/appyters/Drug_Gene_Budger2/appyter.json index a3fcf07f..496da784 100644 --- a/appyters/Drug_Gene_Budger2/appyter.json +++ b/appyters/Drug_Gene_Budger2/appyter.json @@ -1,8 +1,8 @@ { "$schema": "https://raw.githubusercontent.com/MaayanLab/appyter-catalog/main/schema/appyter-validator.json", "name": "Drug_Gene_Budger2", - "title": "Drug Gene Budger (DGB) 2", - "version": "0.0.1", + "title": "Dr. Gene Budger (DGB) 2", + "version": "0.0.3", "description": "An appyter that retrieves drugs that up-regulate and down-regulate a single input gene across Connectivity Mapping datasets", "image": "dgb_logo.png", "authors": [ diff --git a/appyters/Drug_Gene_Budger2/drug_gene_budger2_appyter.ipynb b/appyters/Drug_Gene_Budger2/drug_gene_budger2_appyter.ipynb index 65237f47..60108ba4 100644 --- a/appyters/Drug_Gene_Budger2/drug_gene_budger2_appyter.ipynb +++ b/appyters/Drug_Gene_Budger2/drug_gene_budger2_appyter.ipynb @@ -77,7 +77,7 @@ "- Novartis DRUG-seq: Differential: Limma-Trend based differential expression results for 4,343 drugs. \n", "- LINCS L1000 Chemical Perturbations: Queries the [LINCS Reverse Search Dashboard](https://lincs-reverse-search-dashboard.dev.maayanlab.cloud/) for pre-computed characteristic direction-based differential gene expression signatures from RNA-seq-like LINCS L1000 Expression Profiles covering 33,571 drugs.\n", "\n", - "The Ginkgo dataset includes 4 primary cell types (eithelial melanocytes, smooth aortic muscle cells, skeletal muscle myoblasts and dermal fibroblasts) and one cell line (A549 lung carcinoma cell line). Previous analysis showed distinct transcriptional responses by cell type, so the drug rankings for the Ginkgo dataset are separated by cell type." + "The Ginkgo dataset includes 4 primary cell types (epithelial melanocytes, smooth aortic muscle cells, skeletal muscle myoblasts and dermal fibroblasts) and one cell line (A549 lung carcinoma cell line). Previous analysis showed distinct transcriptional responses by cell type, so the drug rankings for the Ginkgo dataset are separated by cell type." ] }, { @@ -103,6 +103,9 @@ "from upsetplot import from_contents, plot\n", "from matplotlib import pyplot\n", "\n", + "## Venn Diagram\n", + "from matplotlib_venn import venn3\n", + "\n", "## Volcano Plot\n", "from bokeh.plotting import figure, show\n", "from bokeh.models import ColumnDataSource, HoverTool, LinearColorMapper\n", @@ -279,7 +282,7 @@ "id": "df830837", "metadata": {}, "source": [ - "## Rank Drugs" + "## Rank Tables" ] }, { @@ -723,6 +726,100 @@ "display(HTML(download_link(overlapping_down_logFC, 'overlapping_drugs_logfc_DnReg.tsv')))\n" ] }, + { + "cell_type": "markdown", + "id": "2e7c13dd", + "metadata": {}, + "source": [ + "## Venn Diagrams\n", + "\n", + "The venn diagrams show the overlap among either up-regulating or down-regulating drugs across the three datasets Novartis DRUG-seq, LINCS L1000, and Ginkgo (all cell types grouped). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a43d7c8d", + "metadata": {}, + "outputs": [], + "source": [ + "# combine top up and down drugs across Ginkgo cell types\n", + "all_ginkgo_up = set()\n", + "all_ginkgo_down = set()\n", + "for k,v in top_up.items():\n", + " if re.search('ginkgo',k):\n", + " all_ginkgo_up = all_ginkgo_up.union(v)\n", + " all_ginkgo_down = all_ginkgo_down.union(top_down[k])\n", + "venn_up = {\n", + " 'novartis': top_up['novartis'],\n", + " 'lincs' : top_up['lincs_l1000'],\n", + " 'ginkgo' : all_ginkgo_up\n", + "}\n", + "venn_down = {\n", + " 'novartis': top_down['novartis'],\n", + " 'lincs' : top_down['lincs_l1000'],\n", + " 'ginkgo' : all_ginkgo_down\n", + "}\n", + "\n", + "def print_overlap(venn_dict):\n", + " gn = venn_dict['ginkgo'].intersection(venn_dict['novartis'])\n", + " gl = venn_dict['ginkgo'].intersection(venn_dict['lincs'])\n", + " nl = venn_dict['novartis'].intersection(venn_dict['lincs'])\n", + " gnl = venn_dict['ginkgo'].intersection(venn_dict['novartis']).intersection(venn_dict['lincs'])\n", + " if len(gn) > 0:\n", + " display_markdown(f'Novartis and Ginkgo: {gn.difference(gnl)}', raw=True)\n", + " if len(nl) > 0:\n", + " display_markdown(f'Novartis and LINCS L1000: {nl.difference(gnl)}', raw=True)\n", + " if len(gl) > 0:\n", + " display_markdown(f'LINCS L1000 and Ginkgo: {gl.difference(gnl)}', raw=True)\n", + " if len(gnl) > 0:\n", + " display_markdown(f'LINCS L1000, Ginkgo and Novartis: {gnl}', raw=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e275310b", + "metadata": {}, + "outputs": [], + "source": [ + "display_markdown(f'Overlap of top {query_gene} up-regulating drugs across sources', raw=True)\n", + "venn3(subsets=(venn_up['novartis'], venn_up['lincs'], venn_up['ginkgo']),\n", + " set_labels=('Novartis', 'LINCS L1000', 'Ginkgo'));" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "951ac257", + "metadata": {}, + "outputs": [], + "source": [ + "print_overlap(venn_up)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f1f3962", + "metadata": {}, + "outputs": [], + "source": [ + "display_markdown(f'Overlap of top {query_gene} down-regulating drugs across sources', raw=True)\n", + "venn3(subsets=(venn_down['novartis'], venn_down['lincs'], venn_down['ginkgo']),\n", + " set_labels=('Novartis', 'LINCS L1000', 'Ginkgo'));" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c53651f3", + "metadata": {}, + "outputs": [], + "source": [ + "print_overlap(venn_down)" + ] + }, { "cell_type": "markdown", "id": "c088c17f", @@ -862,6 +959,26 @@ "source": [ "create_bokeh_volcano_plot(novartis_de, query_gene, '', 'Novartis')" ] + }, + { + "cell_type": "markdown", + "id": "ba0c6439", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "[1] Baugh, Lauren, Sébastien Vigneau, Srijani Sridhar, Sarah Boswell, George Pilitsis, John Bradley, Olga Allen, et al. 2025. “Mapping the Transcriptional Landscape of Drug Responses in Primary Human Cells Using High-Throughput DRUG-Seq.” bioRxiv. https://doi.org/10.1101/2025.06.03.657593.\n", + "\n", + "[2] Datapoints, Ginkgo. n.d. “GDPx1.” Accessed September 5, 2025. https://huggingface.co/datasets/ginkgo-datapoints/GDPx1.\n", + "\n", + "[3] Hadjikyriacou, Andrea, Chian Yang, Martin Henault, Robin Ge, Leandra Mansur, Alicia Lindeman, Carsten Russ, et al. 2025. “Novartis/DRUG-Seq U2OS MoABox Dataset.” Zenodo. https://doi.org/10.5281/ZENODO.14291446.\n", + "\n", + "[4] Subramanian, Aravind, Rajiv Narayan, Steven M. Corsello, David D. Peck, Ted E. Natoli, Xiaodong Lu, Joshua Gould, et al. 2017. “A next Generation Connectivity Map: L1000 Platform and the First 1,000,000 Profiles.” Cell 171 (6): 1437-1452.e17.\n", + "\n", + "[5] “LINCS L1000 Reverse Search.” n.d. Accessed September 5, 2025. https://lincs-reverse-search-dashboard.dev.maayanlab.cloud/.\n", + "\n", + "[6] Wang, Zichen, Edward He, Kevin Sani, Kathleen M. Jagodnik, Moshe C. Silverstein, and Avi Ma’ayan. 2019. “Drug Gene Budger (DGB): An Application for Ranking Drugs to Modulate a Specific Gene Based on Transcriptomic Signatures.” Bioinformatics (Oxford, England) 35 (7): 1247–48." + ] } ], "metadata": { diff --git a/appyters/Drug_Gene_Budger2/requirements.txt b/appyters/Drug_Gene_Budger2/requirements.txt index d81fe56f..32b67753 100644 --- a/appyters/Drug_Gene_Budger2/requirements.txt +++ b/appyters/Drug_Gene_Budger2/requirements.txt @@ -6,4 +6,5 @@ requests IPython upsetplot matplotlib +matplotlib_venn bokeh \ No newline at end of file diff --git a/appyters/Drug_Gene_Budger2/static/dgb_logo.png b/appyters/Drug_Gene_Budger2/static/dgb_logo.png index aaccbe90..794aff94 100644 Binary files a/appyters/Drug_Gene_Budger2/static/dgb_logo.png and b/appyters/Drug_Gene_Budger2/static/dgb_logo.png differ