{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "YkHzXhTHvXUc" }, "source": [ "# Querying data using the gget cellxgene module\n", "\n", "*By Laura Luebbert, lauraluebbert@caltech.edu.*\n", "\n", "[gget](https://github.com/pachterlab/gget) is a free, open-source command-line tool and Python package that enables efficient querying of genomic databases. gget consists of a collection of separate but interoperable modules, each designed to facilitate one type of database querying in a single line of code.\n", "\n", "The [gget cellxgene](https://pachterlab.github.io/gget/cellxgene.html) module builds on the [CZ CELLxGENE Discover Census](https://chanzuckerberg.github.io/cellxgene-census/) to query data from [CZ CELLxGENE Discover](https://cellxgene.cziscience.com/). This notebook briefly introduces the [gget cellxgene](https://pachterlab.github.io/gget/cellxgene.html) module by providing one simple example for each supported query type.\n", "\n", "If you use gget cellxgene in a publication, please [cite gget](https://pachterlab.github.io/gget/cite.html) in addition to [citing CZ CELLxGENE](https://cellxgene.cziscience.com/docs/08__Cite%20cellxgene%20in%20your%20publications).\n", "\n", "You can also [open this notebook in Google Colab](https://colab.research.google.com/github/chanzuckerberg/cellxgene-census/blob/main/api/python/notebooks/api_demo/census_gget_demo.ipynb).\n", "\n", "**Contents** \n", "\n", "1. Install gget.\n", "2. Fetch an [AnnData](https://anndata.readthedocs.io/en/latest/) object by selecting gene(s), tissue(s) and cell type(s).\n", "3. Plot a dot plot similar to those shown on the CZ CELLxGENE Discover [Gene Expression](https://cellxgene.cziscience.com/gene-expression).\n", "4. Fetch only cell metadata (corresponds to AnnData.obs).\n", "5. Use [gget cellxgene](https://pachterlab.github.io/gget/cellxgene.html) from the command line." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "gaPshWPxwzo9" }, "source": [ "## Install gget and set up cellxgene module" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2023-07-28T16:16:11.920035Z", "iopub.status.busy": "2023-07-28T16:16:11.919631Z", "iopub.status.idle": "2023-07-28T16:16:22.202695Z", "shell.execute_reply": "2023-07-28T16:16:22.202036Z" }, "id": "bKTgv7hCQxS1" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\r\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\r\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\r\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Fri Jul 28 16:16:17 2023 INFO Installing cellxgene-census package (requires pip).\n", "Fri Jul 28 16:16:22 2023 INFO cellxgene_census installed succesfully.\n" ] } ], "source": [ "# The cellxgene module was added to gget in version 0.25.7\n", "!pip install -q gget >=0.25.7\n", "\n", "import gget\n", "\n", "gget.setup(\"cellxgene\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "execution": { "iopub.execute_input": "2023-07-28T16:16:22.205662Z", "iopub.status.busy": "2023-07-28T16:16:22.205208Z", "iopub.status.idle": "2023-07-28T16:16:22.209709Z", "shell.execute_reply": "2023-07-28T16:16:22.209150Z" }, "id": "f4hLtaBPToWG", "outputId": "e81057ba-578a-464b-caa5-32edcdd206b4" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function cellxgene in module gget.gget_cellxgene:\n", "\n", "cellxgene(species='homo_sapiens', gene=None, ensembl=False, column_names=['dataset_id', 'assay', 'suspension_type', 'sex', 'tissue_general', 'tissue', 'cell_type'], meta_only=False, tissue=None, cell_type=None, development_stage=None, disease=None, sex=None, is_primary_data=True, dataset_id=None, tissue_general_ontology_term_id=None, tissue_general=None, assay_ontology_term_id=None, assay=None, cell_type_ontology_term_id=None, development_stage_ontology_term_id=None, disease_ontology_term_id=None, donor_id=None, self_reported_ethnicity_ontology_term_id=None, self_reported_ethnicity=None, sex_ontology_term_id=None, suspension_type=None, tissue_ontology_term_id=None, census_version='stable', verbose=True, out=None)\n", " Query data from CZ CELLxGENE Discover (https://cellxgene.cziscience.com/) using the\n", " CZ CELLxGENE Discover Census (https://github.com/chanzuckerberg/cellxgene-census).\n", " \n", " NOTE: Querying large datasets requires a large amount of RAM. Use the cell metadata attributes\n", " to define the (sub)dataset of interest.\n", " The CZ CELLxGENE Discover Census recommends >16 GB of memory and a >5 Mbps internet connection.\n", " \n", " General args:\n", " - species Choice of 'homo_sapiens' or 'mus_musculus'. Default: 'homo_sapiens'.\n", " - gene Str or list of gene name(s) or Ensembl ID(s), e.g. ['ACE2', 'SLC5A1'] or ['ENSG00000130234', 'ENSG00000100170']. Default: None.\n", " NOTE: Set ensembl=True when providing Ensembl ID(s) instead of gene name(s).\n", " See https://cellxgene.cziscience.com/gene-expression for examples of available genes.\n", " - ensembl True/False (default: False). Set to True when genes are provided as Ensembl IDs.\n", " - column_names List of metadata columns to return (stored in AnnData.obs when meta_only=False).\n", " Default: [\"dataset_id\", \"assay\", \"suspension_type\", \"sex\", \"tissue_general\", \"tissue\", \"cell_type\"]\n", " For more options see: https://api.cellxgene.cziscience.com/curation/ui/#/ -> Schemas -> dataset\n", " - meta_only True/False (default: False). If True, returns only metadata dataframe (corresponds to AnnData.obs).\n", " - census_version Str defining version of Census, e.g. \"2023-05-15\" or \"latest\" or \"stable\". Default: \"stable\".\n", " - verbose True/False whether to print progress information. Default True.\n", " - out If provided, saves the generated AnnData h5ad (or csv when meta_only=True) file with the specified path. Default: None.\n", " \n", " Cell metadata attributes:\n", " - tissue Str or list of tissue(s), e.g. ['lung', 'blood']. Default: None.\n", " See https://cellxgene.cziscience.com/gene-expression for examples of available tissues.\n", " - cell_type Str or list of celltype(s), e.g. ['mucus secreting cell', 'neuroendocrine cell']. Default: None.\n", " See https://cellxgene.cziscience.com/gene-expression and select a tissue to see examples of available celltypes.\n", " - development_stage Str or list of development stage(s). Default: None.\n", " - disease Str or list of disease(s). Default: None.\n", " - sex Str or list of sex(es), e.g. 'female'. Default: None.\n", " - is_primary_data True/False (default: True). If True, returns only the canonical instance of the cellular observation.\n", " This is commonly set to False for meta-analyses reusing data or for secondary views of data.\n", " - dataset_id Str or list of CELLxGENE dataset ID(s). Default: None.\n", " - tissue_general_ontology_term_id Str or list of high-level tissue UBERON ID(s). Default: None.\n", " Also see: https://github.com/chanzuckerberg/single-cell-data-portal/blob/9b94ccb0a2e0a8f6182b213aa4852c491f6f6aff/backend/wmg/data/tissue_mapper.py\n", " - tissue_general Str or list of high-level tissue label(s). Default: None.\n", " Also see: https://github.com/chanzuckerberg/single-cell-data-portal/blob/9b94ccb0a2e0a8f6182b213aa4852c491f6f6aff/backend/wmg/data/tissue_mapper.py\n", " - tissue_ontology_term_id Str or list of tissue ontology term ID(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - assay_ontology_term_id Str or list of assay ontology term ID(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - assay Str or list of assay(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - cell_type_ontology_term_id Str or list of celltype ontology term ID(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - development_stage_ontology_term_id Str or list of development stage ontology term ID(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - disease_ontology_term_id Str or list of disease ontology term ID(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - donor_id Str or list of donor ID(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - self_reported_ethnicity_ontology_term_id Str or list of self reported ethnicity ontology ID(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - self_reported_ethnicity Str or list of self reported ethnicity as defined in the CELLxGENE dataset schema. Default: None.\n", " - sex_ontology_term_id Str or list of sex ontology ID(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " - suspension_type Str or list of suspension type(s) as defined in the CELLxGENE dataset schema. Default: None.\n", " \n", " Returns AnnData object (when meta_only=False) or dataframe (when meta_only=True).\n", "\n" ] } ], "source": [ "# Display all options of the cellxgene gget module\n", "help(gget.cellxgene)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "6j6vqbOXw9X3" }, "source": [ "## Fetch an [AnnData](https://anndata.readthedocs.io/en/latest/) object by selecting gene(s), tissue(s) and cell type(s)\n", "You can use all of the options listed above to filter for data of interest. Here, we will demonstrate the module by fetching a small dataset containing only three genes and two lung cell types:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "execution": { "iopub.execute_input": "2023-07-28T16:16:22.212324Z", "iopub.status.busy": "2023-07-28T16:16:22.211965Z", "iopub.status.idle": "2023-07-28T16:16:43.724382Z", "shell.execute_reply": "2023-07-28T16:16:43.723763Z" }, "id": "OnDHwjjSQ2uD", "outputId": "9cdb068d-300a-4cdc-f0cb-cf62d0eb3097" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Fri Jul 28 16:16:22 2023 INFO Fetching AnnData object from CZ CELLxGENE Discover. This might take a few minutes...\n", "The \"stable\" release is currently 2023-07-25. Specify 'census_version=\"2023-07-25\"' in future calls to open_soma() to ensure data consistency.\n", "Fri Jul 28 16:16:22 2023 INFO The \"stable\" release is currently 2023-07-25. Specify 'census_version=\"2023-07-25\"' in future calls to open_soma() to ensure data consistency.\n" ] } ], "source": [ "# Fetch AnnData object based on specified genes, tissue and cell types\n", "adata = gget.cellxgene(\n", " gene=[\"ACE2\", \"ABCA1\", \"SLC5A1\"], tissue=\"lung\", cell_type=[\"mucus secreting cell\", \"neuroendocrine cell\"]\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "6krDnFMLyeRl" }, "source": [ "Let's look at some of the features of the AnnData object we just fetched:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "execution": { "iopub.execute_input": "2023-07-28T16:16:43.727629Z", "iopub.status.busy": "2023-07-28T16:16:43.727173Z", "iopub.status.idle": "2023-07-28T16:16:43.733167Z", "shell.execute_reply": "2023-07-28T16:16:43.732546Z" }, "id": "MqZM-2uNTt1L", "outputId": "7b14f3e9-8264-428d-b6d4-3320e17776d5" }, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 3679 × 3\n", " obs: 'dataset_id', 'assay', 'suspension_type', 'sex', 'tissue_general', 'tissue', 'cell_type', 'is_primary_data'\n", " var: 'soma_joinid', 'feature_id', 'feature_name', 'feature_length'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "Yl34ulk7ziH8" }, "source": [ "A few thousand cells from CZ CELLxGENE Discover matched the filters specified above and their ACE2, ABCA1, and SLC5A1 expression matrix in lung mucus secreting and neuroendocrine cells was fetched. The `.var` and `.obs` layers contain additional information about each gene and cell, respectively:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 143 }, "execution": { "iopub.execute_input": "2023-07-28T16:16:43.735745Z", "iopub.status.busy": "2023-07-28T16:16:43.735429Z", "iopub.status.idle": "2023-07-28T16:16:43.742939Z", "shell.execute_reply": "2023-07-28T16:16:43.742344Z" }, "id": "qzdc41PdTwDN", "outputId": "a1a48a86-14bc-4559-ab3b-19d7f29fa153" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
soma_joinidfeature_idfeature_namefeature_length
038ENSG00000165029ABCA111343
15332ENSG00000130234ACE29739
224539ENSG00000100170SLC5A15081
\n", "
" ], "text/plain": [ " soma_joinid feature_id feature_name feature_length\n", "0 38 ENSG00000165029 ABCA1 11343\n", "1 5332 ENSG00000130234 ACE2 9739\n", "2 24539 ENSG00000100170 SLC5A1 5081" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata.var" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 424 }, "execution": { "iopub.execute_input": "2023-07-28T16:16:43.745331Z", "iopub.status.busy": "2023-07-28T16:16:43.745024Z", "iopub.status.idle": "2023-07-28T16:16:43.754989Z", "shell.execute_reply": "2023-07-28T16:16:43.754357Z" }, "id": "lIebiJ0CTxDn", "outputId": "dcf64476-daf1-4355-ab77-724e54cbacbe" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dataset_idassaysuspension_typesextissue_generaltissuecell_typeis_primary_data
09f222629-9e39-47d0-b83f-e08d610c747910x 3' v2cellunknownlunglungmucus secreting cellTrue
19f222629-9e39-47d0-b83f-e08d610c747910x 3' v2cellunknownlunglungmucus secreting cellTrue
29f222629-9e39-47d0-b83f-e08d610c747910x 3' v2cellunknownlunglungmucus secreting cellTrue
39f222629-9e39-47d0-b83f-e08d610c747910x 3' v2cellunknownlunglungmucus secreting cellTrue
49f222629-9e39-47d0-b83f-e08d610c747910x 3' v2cellunknownlunglungmucus secreting cellTrue
...........................
36748c42cfd0-0b0a-46d5-910c-fc833d83c45e10x 3' v2cellfemalelunglungmucus secreting cellTrue
36758c42cfd0-0b0a-46d5-910c-fc833d83c45e10x 3' v2cellfemalelunglungmucus secreting cellTrue
36768c42cfd0-0b0a-46d5-910c-fc833d83c45e10x 3' v2cellfemalelunglungmucus secreting cellTrue
36778c42cfd0-0b0a-46d5-910c-fc833d83c45e10x 3' v2cellfemalelunglungmucus secreting cellTrue
36788c42cfd0-0b0a-46d5-910c-fc833d83c45e10x 3' v2cellfemalelunglungmucus secreting cellTrue
\n", "

3679 rows × 8 columns

\n", "
" ], "text/plain": [ " dataset_id assay suspension_type \\\n", "0 9f222629-9e39-47d0-b83f-e08d610c7479 10x 3' v2 cell \n", "1 9f222629-9e39-47d0-b83f-e08d610c7479 10x 3' v2 cell \n", "2 9f222629-9e39-47d0-b83f-e08d610c7479 10x 3' v2 cell \n", "3 9f222629-9e39-47d0-b83f-e08d610c7479 10x 3' v2 cell \n", "4 9f222629-9e39-47d0-b83f-e08d610c7479 10x 3' v2 cell \n", "... ... ... ... \n", "3674 8c42cfd0-0b0a-46d5-910c-fc833d83c45e 10x 3' v2 cell \n", "3675 8c42cfd0-0b0a-46d5-910c-fc833d83c45e 10x 3' v2 cell \n", "3676 8c42cfd0-0b0a-46d5-910c-fc833d83c45e 10x 3' v2 cell \n", "3677 8c42cfd0-0b0a-46d5-910c-fc833d83c45e 10x 3' v2 cell \n", "3678 8c42cfd0-0b0a-46d5-910c-fc833d83c45e 10x 3' v2 cell \n", "\n", " sex tissue_general tissue cell_type is_primary_data \n", "0 unknown lung lung mucus secreting cell True \n", "1 unknown lung lung mucus secreting cell True \n", "2 unknown lung lung mucus secreting cell True \n", "3 unknown lung lung mucus secreting cell True \n", "4 unknown lung lung mucus secreting cell True \n", "... ... ... ... ... ... \n", "3674 female lung lung mucus secreting cell True \n", "3675 female lung lung mucus secreting cell True \n", "3676 female lung lung mucus secreting cell True \n", "3677 female lung lung mucus secreting cell True \n", "3678 female lung lung mucus secreting cell True \n", "\n", "[3679 rows x 8 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata.obs" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "e4zaccqDUVon" }, "source": [ "## Plot a dot plot similar to those shown on the CZ CELLxGENE Discover [Gene Expression](https://cellxgene.cziscience.com/gene-expression)\n", "Using the data we just fetched, we can plot a dot plot using [scanpy](https://scanpy.readthedocs.io/en/stable/):" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2023-07-28T16:16:43.757485Z", "iopub.status.busy": "2023-07-28T16:16:43.757177Z", "iopub.status.idle": "2023-07-28T16:16:44.018040Z", "shell.execute_reply": "2023-07-28T16:16:44.017433Z" }, "id": "qGHq2q3wT3gw" }, "outputs": [], "source": [ "import scanpy as sc\n", "\n", "# retina increases the resolution of plots displayed in notebooks\n", "%config InlineBackend.figure_format=\"retina\"" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 283 }, "execution": { "iopub.execute_input": "2023-07-28T16:16:44.021494Z", "iopub.status.busy": "2023-07-28T16:16:44.020733Z", "iopub.status.idle": "2023-07-28T16:16:44.242741Z", "shell.execute_reply": "2023-07-28T16:16:44.242197Z" }, "id": "p1FTT-OiUa4k", "outputId": "ca64020b-6c2e-4f61-973f-657bbefa078c" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "... storing 'dataset_id' as categorical\n", "... storing 'assay' as categorical\n", "... storing 'suspension_type' as categorical\n", "... storing 'sex' as categorical\n", "... storing 'tissue_general' as categorical\n", "... storing 'tissue' as categorical\n", "... storing 'cell_type' as categorical\n" ] }, { "data": { "image/png": "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/KrjEELg+PHj+bbPeSw5tW/fHosWLQKQ/YQ8bUEsp5xBXdO627dva53hQts5KOrrYmlpiSNHjmD27NnYuHEj9uzZgz179gAAHB0dMXbsWHz22WfSUAKZTIZdu3bhq6++wrp163Dw4EEcPHhQqm3QoEH46quvYGdnl2cNAKRjdHd319pG9dCLwp4P1XuioO8HXSixvwVzTgdy5coV9O7dG66urrC2tkZwcDC2b98utb137x5GjhyJSpUqwcLCAtWrV8d3332ncbsFeZZ0zukzNAkPD8fAgQNRpUoVWFpawsnJCfXr18dHH32kdrn91alJNBk0aBBkMhlmzpyZa93Zs2fRt29fVKpUCWZmZrC1tYWvry+6dOmC5cuXa92mJoWdxkTl9OnT6NevH7y9vWFubg4nJye0a9cOmzdvznN/sbGxmDx5MmrXrg1bW1vY2NggICAAQ4YMyfVVkuoxm2vWrMGdO3fw/vvvw9vbG6amprlep8LUU7lyZQwePBgAcPjwYem1ePU1UX2N9eo4JqD4U6ns378f7du3h729PWxtbdGoUSOsXbtWqu/VKWoK6vnz5/j222/RrFkzODk5wcLCApUrV0a3bt2wbt06jX2ioqIwfPhw+Pn5wcLCAvb29mjWrBl++OEHrWPtDMF3Cxfgo54dNIbenBxsbTBnUA8s+PqrUqqs7IiOvATrUpi+LD8Wj54i/JUplChvffv2hbm5OdauXYsdO3bAw8MDHTp0yLefjY0NAGDDhg0Q2Teya/3J+W/lnj17kJCQgEqVKuGPP/5Au3bt4OrqKoVeIQSePn1aIsea13GYmZnlexxCCI3/FickJGDo0KEAsoPWrl27sGnTpnz3/fDhw3zXaRuukN/xFPZ1AQBXV1d89913SEhIwIULF/D999+ja9euePbsGb744gtMnjw5176++uorxMXF4dq1a1i1ahXeffddyOVyLFu2DP369StQzapjzOtJgQ8ePFBrW5aV+Mf/M2fOICQkBPv27YO3tzcsLS1x9uxZvP3229i0aROio6MRHByMdevWwc3NDY6Ojrh27RrGjRtXIk8PmT59Oho1aoT169cjISEBNWvWhJubG6KiojB37lz8/PPPOtnPnj170KRJE2zcuBFJSUmoXr06/P39kZycjN27d2PatGkF3pZCoUCHDh0wdepUnDlzBhUqVEC9evVgbW2N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", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 266, "width": 351 } }, "output_type": "display_data" } ], "source": [ "sc.pl.dotplot(adata, adata.var[\"feature_name\"].values, groupby=\"cell_type\", gene_symbols=\"feature_name\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "lIqvA3pc0iJA" }, "source": [ "## Fetch only cell metadata (corresponds to AnnData.obs)\n", "By setting `meta_only=True` and again filtering by the cell metadata attributes listed above, you can also fetch only the cell metadata:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 424 }, "execution": { "iopub.execute_input": "2023-07-28T16:16:44.245498Z", "iopub.status.busy": "2023-07-28T16:16:44.245237Z", "iopub.status.idle": "2023-07-28T16:16:45.534877Z", "shell.execute_reply": "2023-07-28T16:16:45.534303Z" }, "id": "RQJyn-mKU_oh", "outputId": "feb8e251-d619-491b-88a0-2cda9adc2af6" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Fri Jul 28 16:16:44 2023 INFO Fetching metadata from CZ CELLxGENE Discover...\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dataset_idassaysuspension_typesextissue_generaltissuecell_typeis_primary_data
0047d57f2-4d14-45de-aa98-336c6f58375010x 3' v2cellunknownlunglungmesenchymal stem cellTrue
1047d57f2-4d14-45de-aa98-336c6f58375010x 3' v2cellunknownlunglungprogenitor cellTrue
2047d57f2-4d14-45de-aa98-336c6f58375010x 3' v2cellunknownlunglungmesenchymal cellTrue
3047d57f2-4d14-45de-aa98-336c6f58375010x 3' v2cellunknownlunglungmesenchymal stem cellTrue
4047d57f2-4d14-45de-aa98-336c6f58375010x 3' v2cellunknownlunglungmesenchymal cellTrue
...........................
9754748b37086-25f7-4ecd-be66-f5bb378e3aea10x 3' v2cellmalelunglungfibroblast of lungTrue
9754848b37086-25f7-4ecd-be66-f5bb378e3aea10x 3' v2cellmalelunglungnatural killer cellTrue
9754948b37086-25f7-4ecd-be66-f5bb378e3aea10x 3' v2cellmalelunglungpulmonary interstitial fibroblastTrue
9755048b37086-25f7-4ecd-be66-f5bb378e3aea10x 3' v2cellmalelunglungadventitial cellTrue
9755148b37086-25f7-4ecd-be66-f5bb378e3aea10x 3' v2cellmalelunglungfibroblast of lungTrue
\n", "

97552 rows × 8 columns

\n", "
" ], "text/plain": [ " dataset_id assay suspension_type \\\n", "0 047d57f2-4d14-45de-aa98-336c6f583750 10x 3' v2 cell \n", "1 047d57f2-4d14-45de-aa98-336c6f583750 10x 3' v2 cell \n", "2 047d57f2-4d14-45de-aa98-336c6f583750 10x 3' v2 cell \n", "3 047d57f2-4d14-45de-aa98-336c6f583750 10x 3' v2 cell \n", "4 047d57f2-4d14-45de-aa98-336c6f583750 10x 3' v2 cell \n", "... ... ... ... \n", "97547 48b37086-25f7-4ecd-be66-f5bb378e3aea 10x 3' v2 cell \n", "97548 48b37086-25f7-4ecd-be66-f5bb378e3aea 10x 3' v2 cell \n", "97549 48b37086-25f7-4ecd-be66-f5bb378e3aea 10x 3' v2 cell \n", "97550 48b37086-25f7-4ecd-be66-f5bb378e3aea 10x 3' v2 cell \n", "97551 48b37086-25f7-4ecd-be66-f5bb378e3aea 10x 3' v2 cell \n", "\n", " sex tissue_general tissue cell_type \\\n", "0 unknown lung lung mesenchymal stem cell \n", "1 unknown lung lung progenitor cell \n", "2 unknown lung lung mesenchymal cell \n", "3 unknown lung lung mesenchymal stem cell \n", "4 unknown lung lung mesenchymal cell \n", "... ... ... ... ... \n", "97547 male lung lung fibroblast of lung \n", "97548 male lung lung natural killer cell \n", "97549 male lung lung pulmonary interstitial fibroblast \n", "97550 male lung lung adventitial cell \n", "97551 male lung lung fibroblast of lung \n", "\n", " is_primary_data \n", "0 True \n", "1 True \n", "2 True \n", "3 True \n", "4 True \n", "... ... \n", "97547 True \n", "97548 True \n", "97549 True \n", "97550 True \n", "97551 True \n", "\n", "[97552 rows x 8 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = gget.cellxgene(\n", " meta_only=True,\n", " census_version=\"2023-05-15\", # Specify Census version for reproducibility over time\n", " gene=\"ENSMUSG00000015405\",\n", " ensembl=True, # Setting 'ensembl=True' here since the gene is passed as an Ensembl ID\n", " tissue=\"lung\",\n", " species=\"mus_musculus\", # Let's switch up the species\n", ")\n", "\n", "df" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "2QjJEJdS-He7" }, "source": [ "## Use [gget cellxgene](https://pachterlab.github.io/gget/cellxgene.html) from the command line\n", "All gget modules support use from the command line. Note that the command line interface requires the `-o/--out` argument to specify a path to save the fetched data. Here are the command line versions of the queries demonstrated above:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2023-07-28T16:16:45.537414Z", "iopub.status.busy": "2023-07-28T16:16:45.537157Z", "iopub.status.idle": "2023-07-28T16:16:45.539753Z", "shell.execute_reply": "2023-07-28T16:16:45.539253Z" }, "id": "hDcS0fZ--BnB" }, "outputs": [], "source": [ "# # Fetch AnnData object based on specified genes, tissue and cell types\n", "# !gget cellxgene --gene ACE2 ABCA1 SLC5A1 --tissue lung --cell_type 'mucus secreting cell' 'neuroendocrine cell' -o example_adata.h5ad" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2023-07-28T16:16:45.542060Z", "iopub.status.busy": "2023-07-28T16:16:45.541662Z", "iopub.status.idle": "2023-07-28T16:16:45.544200Z", "shell.execute_reply": "2023-07-28T16:16:45.543724Z" }, "id": "f683tvIg-oEz" }, "outputs": [], "source": [ "# # Fetch only metadata\n", "# !gget cellxgene --meta_only --gene ENSMUSG00000015405 --ensembl --tissue lung --species mus_musculus -o example_meta.csv" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.10" } }, "nbformat": 4, "nbformat_minor": 1 }