用VSCode Jupyter 學習Scanpy——軌跡推斷

參考官網 https://scanpy-tutorials.readthedocs.io/en/latest/paga-paul15.html 學習
重建髓樣和紅系分化 數據為 Paul et al. (2015).

引入包
[1]

import numpy as np
import pandas as pd
import matplotlib.pyplot as pl
from matplotlib import rcParams
import scanpy as sc

[2]

sc.settings.verbosity = 3             # verbosity: errors (0), warnings (1), info (2), hints (3)
sc.logging.print_header()
results_file = './write/paul15.h5ad'
sc.settings.set_figure_params(dpi=80, facecolor='white')

[3]
數據是包里用一下命運引用,不用自己再下載哦

adata = sc.datasets.paul15()

[4]

adata

以比默認的“ float32”更高的精度進行工作,以確保在不同的計算平臺上獲得完全相同的結果。
[5]

adata.X = adata.X.astype('float64')  # this is not required and results will be comparable without it

預處理和可視化

可參考之前講解的預處理方法也可以參考此應用簡單的預處理方法
[6]

sc.pp.recipe_zheng17(adata)

[7]

sc.tl.pca(adata, svd_solver='arpack')

[8]

sc.pp.neighbors(adata, n_neighbors=4, n_pcs=20)
sc.tl.draw_graph(adata)

[9]

sc.pl.draw_graph(adata, color='paul15_clusters', legend_loc='on data')

看起來很亂
需要降噪

選擇性:對圖形進行降噪

為了使圖去噪,在擴散圖空間(而不是在PCA空間)中表示它。計算幾個擴散分量內的距離就等于對圖進行去噪-只考慮第一個一些分量。這與使用PCA去噪數據矩陣非常相似。該方法已在幾篇論文中使用,例如參見Schiebinger(2017)Tabaka(2018)。這也與MAGIC Dijk背后的原理有關(2018)

對于PAGA,聚類或偽時間估計,這都不是必需的步驟。可以繼續使用非去噪圖。在許多情況下(也在此處),這將為您帶來非常不錯的效果。
[10]

sc.tl.diffmap(adata)
sc.pp.neighbors(adata, n_neighbors=10, use_rep='X_diffmap')

[11]

sc.tl.draw_graph(adata)

[12]

sc.pl.draw_graph(adata, color='paul15_clusters', legend_loc='on data')

這看起來仍然很雜亂,但是方式卻不同:許多分支都被過度繪制。

分群 和 PAGA

請注意,在這里使用了sc.tl.leiden,現在 使用sc.tl.louvain為了復現論文結果。
[13]

sc.tl.louvain(adata, resolution=1.0)

使用基因marker 注釋細胞群

cell type marker
HSCs Procr
Erythroids Gata1, Klf1, Epor, Gypa, Hba-a2, Hba-a1, Spi1
Neutrophils Elane, Cebpe, Ctsg, Mpo, Gfi1
Monocytes Irf8, Csf1r, Ctsg, Mpo
Megakaryocytes Itga2b (encodes protein CD41), Pbx1, Sdpr, Vwf
Basophils Mcpt8, Prss34
B cells Cd19, Vpreb2, Cd79a
Mast cells Cma1, Gzmb, CD117/C-Kit
Mast cells & Basophils Ms4a2, Fcer1a, Cpa3, CD203c (human)

對于簡單的粗粒度可視化,計算PAGA圖,粗粒度和簡化(抽象)的圖形。粗粒度圖中的非重要邊緣將被閾值化。
[14]

sc.tl.paga(adata, groups='louvain')

[15]

sc.pl.paga(adata, color=['louvain', 'Hba-a2', 'Elane', 'Irf8'])

[16]

sc.pl.paga(adata, color=['louvain', 'Itga2b', 'Prss34', 'Cma1'])

實際注釋細胞 -注意Cma1是肥大細胞標記,僅出現在祖細胞/干細胞簇8的一小部分細胞中,參見下面的單細胞分解圖。
[17]

adata.obs['louvain'].cat.categories

[18]

adata.obs['louvain_anno'] = adata.obs['louvain']

[19]

adata.obs['louvain_anno'].cat.categories = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10/Ery', '11', '12',
       '13', '14', '15', '16/Stem', '17', '18', '19/Neu', '20/Mk', '21', '22/Baso', '23', '24/Mo']

對PAGA使用帶注釋的群集

[20]

sc.tl.paga(adata, groups='louvain_anno')

[21]

sc.pl.paga(adata, threshold=0.03, show=False)

使用PAGA初始化重計算嵌入

對于UMAP而言,以下是可能的
[22]

sc.tl.draw_graph(adata, init_pos='paga')

現在可以在有意義的布局中以單細胞分辨率查看所有基因marker。
[23]

sc.pl.draw_graph(adata, color=['louvain_anno', 'Itga2b', 'Prss34', 'Cma1'], legend_loc='on data')

選擇與群集更加一致的顏色
[24]

pl.figure(figsize=(8, 2))
for i in range(28):
    pl.scatter(i, 1, c=sc.pl.palettes.zeileis_28[i], s=200)
pl.show()

[25]

zeileis_colors = np.array(sc.pl.palettes.zeileis_28)
new_colors = np.array(adata.uns['louvain_anno_colors'])

[26]

new_colors[[16]] = zeileis_colors[[12]]  # Stem colors / green
new_colors[[10, 17, 5, 3, 15, 6, 18, 13, 7, 12]] = zeileis_colors[[5, 5, 5, 5, 11, 11, 10, 9, 21, 21]]  # Ery colors / red
new_colors[[20, 8]] = zeileis_colors[[17, 16]]  # Mk early Ery colors / yellow
new_colors[[4, 0]] = zeileis_colors[[2, 8]]  # lymph progenitors / grey
new_colors[[22]] = zeileis_colors[[18]]  # Baso / turquoise
new_colors[[19, 14, 2]] = zeileis_colors[[6, 6, 6]]  # Neu / light blue
new_colors[[24, 9, 1, 11]] = zeileis_colors[[0, 0, 0, 0]]  # Mo / dark blue
new_colors[[21, 23]] = zeileis_colors[[25, 25]]  # outliers / grey

[27]

adata.uns['louvain_anno_colors'] = new_colors

并在某些群集名稱中添加一些空格。這里顯示的布局不同于原paper的布局,可以在此處看到。但是這些差異只是表面上的。從隨機PCA和float32精度提高到float64精度,不得不更改布局。
[28]

sc.pl.paga_compare(
    adata, threshold=0.03, title='', right_margin=0.2, size=10, edge_width_scale=0.5,
    legend_fontsize=12, fontsize=12, frameon=False, edges=True, save=True)

針對給定的一組基因,沿PAGA路徑重建基因變化

選擇一個根細胞群進行偽時間擴散
[29]

adata.uns['iroot'] = np.flatnonzero(adata.obs['louvain_anno']  == '16/Stem')[0]

[30]

sc.tl.dpt(adata)

選擇一些基因marker名稱
[31]

gene_names = ['Gata2', 'Gata1', 'Klf1', 'Epor', 'Hba-a2',  # erythroid
              'Elane', 'Cebpe', 'Gfi1',                    # neutrophil
              'Irf8', 'Csf1r', 'Ctsg']                     # monocyte

使用完整的原始數據進行可視化
[31]

adata_raw = sc.datasets.paul15()
sc.pp.log1p(adata_raw)
sc.pp.scale(adata_raw)
adata.raw = adata_raw

[33]

sc.pl.draw_graph(adata, color=['louvain_anno', 'dpt_pseudotime'], legend_loc='on data')

[34]

paths = [('erythrocytes', [16, 12, 7, 13, 18, 6, 5, 10]),
         ('neutrophils', [16, 0, 4, 2, 14, 19]),
         ('monocytes', [16, 0, 4, 11, 1, 9, 24])]

[35]

adata.obs['distance'] = adata.obs['dpt_pseudotime']

[36]

adata.obs['clusters'] = adata.obs['louvain_anno']  # just a cosmetic change

[37]

adata.uns['clusters_colors'] = adata.uns['louvain_anno_colors']

[38]

!mkdir write

[39]

_, axs = pl.subplots(ncols=3, figsize=(6, 2.5), gridspec_kw={'wspace': 0.05, 'left': 0.12})
pl.subplots_adjust(left=0.05, right=0.98, top=0.82, bottom=0.2)
for ipath, (descr, path) in enumerate(paths):
    _, data = sc.pl.paga_path(
        adata, path, gene_names,
        show_node_names=False,
        ax=axs[ipath],
        ytick_fontsize=12,
        left_margin=0.15,
        n_avg=50,
        annotations=['distance'],
        show_yticks=True if ipath==0 else False,
        show_colorbar=False,
        color_map='Greys',
        groups_key='clusters',
        color_maps_annotations={'distance': 'viridis'},
        title='{} path'.format(descr),
        return_data=True,
        show=False)
    data.to_csv('./write/paga_path_{}.csv'.format(descr))
pl.savefig('./figures/paga_path_paul15.pdf')
pl.show()
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容