[33bf40]: / myeloid / myeloid_fig1ABCDE_publish.ipynb

Download this file

283 lines (282 with data), 10.2 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import scanpy as sc # v1.6\",\n",
    "import sys\n",
    "import matplotlib.pyplot as plt\n",
    "import os.path\n",
    "import anndata\n",
    "from matplotlib import rcParams\n",
    "import seaborn as sns\n",
    "import numba\n",
    "import mnnpy\n",
    "import scipy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#import full COVID-19 PBMC dataset\n",
    "os.chdir('/home/ngr18/covid/')\n",
    "covid_total = sc.read_h5ad('covid.h5ad')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Import BAL data GSE145926 (reannotated for DC subsets)\n",
    "\n",
    "os.chdir('/home/ngr18/covid/external_dataset/BAL')\n",
    "bal = sc.read_h5ad('full_bal.h5ad')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Subset PBMC data to myeloid populations and reorder categories (for dotplot visualisations)\n",
    "\n",
    "blood_myeloid = covid_total[covid_total.obs.full_clustering.isin(['CD83_CD14_mono', 'CD14_mono', \n",
    "                                                                  'CD16_mono', 'C1_CD16_mono',\n",
    "                                                                 'DC1', 'DC2', 'DC3', 'ASDC', 'pDC', 'DC_prolif',\n",
    "                                                                 'Mono_prolif']),:]\n",
    "\n",
    "blood_myeloid.obs.full_clustering = blood_myeloid.obs.full_clustering.cat.reorder_categories([\n",
    "'DC1', 'DC2', 'DC3', 'ASDC', 'pDC', 'DC_prolif', \n",
    "    'CD83_CD14_mono', 'CD14_mono', 'CD16_mono', 'C1_CD16_mono', 'Mono_prolif'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Concatenate PBMC and BAL data for visualisations\n",
    "\n",
    "myeloid = anndata.concat([bal_myeloid, blood_myeloid], index_unique = None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "##myeloid figure dotplot - fig 2A (left - RNA)\n",
    "\n",
    "sc.pl.DotPlot(myeloid, [\n",
    "'CLEC9A', 'CADM1', 'CLEC10A','CD1C', 'CD14', 'VCAN',\n",
    "    'CCR7', 'LAMP3',\n",
    "                            'AXL', 'SIGLEC6',\n",
    "                            'LILRA4', 'ITM2C', 'GZMB',\n",
    "    'IL1B', 'IER3', 'LDLR', 'CD83',\n",
    "                         'S100A12', 'CSF3R', \n",
    "                        'FCGR3A', 'MS4A7', 'LILRB1', 'CSF1R', 'CDKN1C',\n",
    "                         'C1QA', 'C1QB', 'C1QC', 'CCR1',\n",
    "    \n",
    "    'MARCO', 'MKI67', 'TOP2A'], \n",
    "              log = True, \n",
    "              groupby='full_clustering').style(cmap='Blues',dot_edge_color='black', dot_edge_lw=1).swap_axes(False).show(True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "##myeloid figure dotplot - fig 2A (right - protein) - using only PBMC data (no CITEseq data for BAL)\n",
    "\n",
    "sc.pl.DotPlot(blood_myeloid, ['AB_CD141', 'AB_CLEC9A', 'AB_KIT','AB_BTLA',\n",
    "                            'AB_CD1C', 'AB_CD101', 'AB_FcERIa',\n",
    "                            'AB_CD5', \n",
    "                            'AB_CD123', 'AB_CD45RA', 'AB_CD304',\n",
    "                            'AB_CD14', 'AB_CD99', 'AB_CD64',  \n",
    "                            'AB_CR1', 'AB_ITGAM',\n",
    "                            'AB_CD16', 'AB_C5AR1',\n",
    "                              'AB_CX3CR1'], \n",
    "              log = True, \n",
    "              groupby='full_clustering',  expression_cutoff=0.15).style(cmap='YlOrRd',dot_edge_color='black', dot_edge_lw=1).swap_axes(False).show(True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#subset data again to blood monocyte and BAL macrophages\n",
    "\n",
    "monos = myeloid[myeloid.obs.full_clustering.isin(['CD83_CD14_mono', 'CD14_mono', 'CD16_mono', 'C1_CD16_mono', \n",
    "                                                 'bal_Mac']),:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Figure 2C left/upper - analysis of healthy only\n",
    "healthy = monos[monos.obs.Status_on_day_collection_summary.isin(['bal_healthy', 'Healthy']),:]\n",
    "\n",
    "sc.pp.normalize_total(healthy, target_sum=1e4)\n",
    "\n",
    "sc.pp.log1p(healthy)\n",
    "\n",
    "sc.pp.highly_variable_genes(healthy, n_top_genes = 3000, flavor = 'seurat')\n",
    "\n",
    "healthy.raw = healthy\n",
    "\n",
    "healthy = healthy[:, healthy.var.highly_variable]\n",
    "\n",
    "sc.pp.scale(healthy, max_value=10)\n",
    "\n",
    "sc.tl.pca(healthy, svd_solver='arpack')\n",
    "\n",
    "sc.external.pp.harmony_integrate(healthy, 'sample_id', basis='X_pca', adjusted_basis='X_pca_harmony')\n",
    "\n",
    "sc.pp.neighbors(healthy, n_neighbors=10, n_pcs=50, use_rep = 'X_pca_harmony')\n",
    "\n",
    "sc.tl.paga(healthy, groups='full_clustering')\n",
    "\n",
    "#recolor clusters for consistency with bar graph\n",
    "\n",
    "healthy.uns['full_clustering_colors'][0] = '#76DDC9'\n",
    "healthy.uns['full_clustering_colors'][1] = '#E28686'\n",
    "healthy.uns['full_clustering_colors'][2] = '#C2A3E2'\n",
    "healthy.uns['full_clustering_colors'][3] = '#991111'\n",
    "healthy.uns['full_clustering_colors'][4] = '#ffff00'\n",
    "\n",
    "\n",
    "sc.pl.paga(test, color=['full_clustering'], threshold = 0.11, save = 'healthy_myeloid_PAGA.pdf',\n",
    "           fontsize = 0, node_size_scale = 10, min_edge_width = 5, frameon = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Figure 2C left/lower - limit to only covid samples\n",
    "covid_mono = covid_mono[covid_mono.obs.Status_on_day_collection_summary.isin(['Asymptomatic', 'Critical', \n",
    "                                                            'Mild', 'Moderate', 'Severe',\n",
    "                                                            'bal_mild', 'bal_severe']),:]\n",
    "\n",
    "sc.pp.normalize_total(covid_mono, target_sum=1e4)\n",
    "\n",
    "sc.pp.log1p(covid_mono)\n",
    "\n",
    "sc.pp.highly_variable_genes(covid_mono, n_top_genes = 3000, flavor = 'seurat')\n",
    "\n",
    "covid_mono.raw = covid_mono\n",
    "\n",
    "covid_mono = covid_mono[:, covid_mono.var.highly_variable]\n",
    "\n",
    "sc.pp.scale(covid_mono, max_value=10)\n",
    "\n",
    "sc.tl.pca(covid_mono, svd_solver='arpack')\n",
    "\n",
    "sc.external.pp.harmony_integrate(covid_mono, 'sample_id', basis='X_pca', adjusted_basis='X_pca_harmony')\n",
    "\n",
    "sc.pp.neighbors(covid_mono, n_neighbors=10, n_pcs=50, use_rep = 'X_pca_harmony')\n",
    "\n",
    "sc.tl.paga(covid_mono, groups='full_clustering')\n",
    "\n",
    "#Again, recolor for consistency with bar graph\n",
    "\n",
    "covid_mono.uns['full_clustering_colors'][0] = '#76DDC9'\n",
    "covid_mono.uns['full_clustering_colors'][1] = '#E28686'\n",
    "covid_mono.uns['full_clustering_colors'][2] = '#C2A3E2'\n",
    "covid_mono.uns['full_clustering_colors'][3] = '#991111'\n",
    "covid_mono.uns['full_clustering_colors'][4] = '#ffff00'\n",
    "\n",
    "\n",
    "sc.pl.paga(covid_mono, color=['full_clustering'], threshold = 0.2, save = 'covid_myeloid_PAGA.pdf',\n",
    "           fontsize = 0, node_size_scale = 10, min_edge_width = 5, frameon = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Pseudotime plot\n",
    "\n",
    "covid_mono.uns['iroot'] = np.flatnonzero(covid_mono.obs['full_clustering']  == 'CD83_CD14_mono')[0]\n",
    "\n",
    "\n",
    "sc.pp.log1p(covid_mono)\n",
    "sc.pp.scale(covid_mono)\n",
    "           \n",
    "           gene_names = ['NFKBIA',  'KLF6', 'VIM', 'CD14', 'S100A8',\n",
    "    'HLA-DPA1', 'HLA-DPB1', 'FCGR3A','CTSC', 'CTSL', \n",
    "    'CCR1','RSAD2', 'CCL2', 'CXCL10', 'CCL7', 'TNFSF10']                              # monocyte\n",
    "\n",
    "paths = [('erythrocytes', ['mono1', 'mono2', 'mono3', 'mono4', 'bal_Mac']),\n",
    "             ('neutrophils', ['mono1', 'mono2', 'mono3', 'mono4', 'bal_Mac']),\n",
    "             ('monocytes', ['mono1', 'mono2', 'mono3', 'mono4', 'bal_Mac'])]\n",
    "\n",
    "test.obs['distance'] = test.obs['dpt_pseudotime']\n",
    "\n",
    "_, axs = plt.subplots(ncols=3, figsize=(6, 5), gridspec_kw={'wspace': 0.05, 'left': 0.12})\n",
    "plt.subplots_adjust(left=0.05, right=0.98, top=0.82, bottom=0.2)\n",
    "for ipath, (descr, path) in enumerate(paths):\n",
    "    _, data = sc.pl.paga_path(\n",
    "            test, path, gene_names,\n",
    "            show_node_names=False,\n",
    "            ax=axs[ipath],\n",
    "            ytick_fontsize=12,\n",
    "            left_margin=0.15,\n",
    "            n_avg=50,\n",
    "            annotations=['distance'],\n",
    "            show_yticks=True if ipath==0 else False,\n",
    "            show_colorbar=False,\n",
    "            color_map='coolwarm',\n",
    "            color_maps_annotations={'distance': 'viridis'},\n",
    "            title='{} path'.format(descr),\n",
    "            return_data=True,\n",
    "            show=False, normalize_to_zero_one = True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "covid_py",
   "language": "python",
   "name": "covid_py"
  },
  "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.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}