單細胞轉錄組之Scanpy - 軌跡推斷/擬時序分析

什么是擬時序分析?擬時序(pseudotime)分析,又稱細胞軌跡(cell trajectory)分析,通過擬時分析可以推斷出發育過程細胞的分化軌跡或細胞亞型的演化過程。
我們可以理解為在一堆細胞中包含各種各樣不同的發育狀態的細胞,有的發育早,有的發育晚,有的分化了,有的未分化,有的處于中間態。利用算法基于基因表達推斷每個細胞的相對分化時間,從而確定分化軌跡。

monocle是 進行擬時序分析常用的包,這是基于R完成的。但是之前也說了,monocle對于內存消耗很大,很容易出現內存不足的問題,scanpy則不會出現這個問題,而且scanpy內嵌軌跡推斷函數,可以無縫銜接之前的單細胞分析。

scanpy作者使用了小鼠造血髓樣數據進行了軌跡分析,我們這兒為了方便,我們直接使用pbmc3k數據進行測試。
注:pbmc這套數據集因為本身就是基本分化完全的細胞,分化軌跡沒有啥實際生物學意義,這兒只是做測試。

單細胞轉錄數據分析之Scanpy:http://www.lxweimin.com/p/e22a947e6c60
單細胞轉錄組之Scanpy - 軌跡推斷/擬時序分析:http://www.lxweimin.com/p/0b2ca0e0b544
單細胞轉錄組之Scanpy - 樣本整合分析:http://www.lxweimin.com/p/beef8a8be360
單細胞空間轉錄分析之Scanpy:
單細胞空間轉錄分析之Scanpy-結合單細胞轉錄組:

Scanpy trajectory inference

導入相關包:

import numpy as np
import pandas as pd
import matplotlib.pyplot as pt
from matplotlib import rcParams
import scanpy as sc
sc.settings.verbosity = 3 
sc.logging.print_versions()
import os 
os.getcwd()  ##查看當前路徑
os.chdir(./scanpy/pseudo') ##修改路徑
os.getcwd() 
results_file = 'pbmc3k_pseudo.h5ad'
sc.settings.set_figure_params(dpi=80, frameon=False, figsize=(3, 3), facecolor='white')  

讀取數據(這兒我們使用了前面跑完scanpy流程輸出的pbmc3k.h5ad)

#讀取數據,scanpy進行聚類后的對象
data = sc.read_h5ad("./scanpy/pbmc3k.h5ad")

預處理數據,計算距離并可視化

sc.tl.draw_graph(data)
sc.pl.draw_graph(data, color='leiden', legend_loc='on data',title = "")
pt.savefig("draw_graph.pdf")
draw_graph

汗,作者自己認為這兒做的這個圖類別很亂,因此作者進行了優化,就是去噪。

對圖形進行降噪

##去噪,擴散圖空間表示
sc.tl.diffmap(data)
sc.pp.neighbors(data, n_neighbors=10, use_rep='X_diffmap')
sc.tl.draw_graph(data)
sc.pl.draw_graph(data, color='leiden', legend_loc='on data') #legend_loc='right margin'
pt.savefig("draw_graph_diffmap.pdf")
draw_graph +去噪

汗,作者認為仍舊有點亂(我心也亂了)

因此,因此,因此

作者又提供了一種方法:Clustering and PAGA
PAGA(Partition-based Graph Abstraction)是一種基于空間劃分的抽提細胞分化“骨架”的一種算法,用于顯示細胞的分化軌跡,評估cluster之間的關系緊密程度。
在這兒,作者又使用sc.tl.louvain來對細胞進行聚類,想重現使用的數據的結果,好吧,我也試試louvain聚類,發現在pbmc中聚類結果基本一致

sc.tl.louvain(data) #可以使用resolution調節聚類的簇的數據,如resolution=1.0
sc.tl.paga(data, groups='louvain')
sc.pl.paga(data, color=['louvain', 'MS4A1', 'NKG7', 'PPBP']) ##隨便挑選了幾個基因
pt.savefig("paga_celltype.pdf")
papg

當然我們根據已知marker基因識別細胞類別,可以將細胞類型的信息注釋上去

data.obs['louvain'].cat.categories
data.obs['louvain_anno'] = data.obs['louvain']
data.obs['louvain_anno'].cat.categories = ['CD4 T', 'CD14 Monocytes','B', 'CD8 T','NK', 'FCGR3A Monocytes','Dendritic', 'Megakaryocytes']
sc.tl.paga(data, groups='louvain_anno')
sc.pl.paga(data, threshold=0.03, show=False) #細胞與細胞之間的關系,距離越近表示關系越接近
pt.savefig("paga_celltype1.pdf")
paga_celltype
#利用PAGA重新計算細胞之間的距離
sc.tl.draw_graph(data, init_pos='paga')
sc.pl.draw_graph(data, color=['louvain_anno','MS4A1', 'NKG7', 'PPBP'], legend_loc='on data')
pt.savefig("paga_celltype_graph.pdf")
paga_celltype

查看顏色,可以自行定義顏色

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

pt.show()
pt.savefig("colour.pdf")
colour

替換顏色

zeileis_colors = np.array(sc.pl.palettes.zeileis_28)
new_colors = np.array(data.uns['louvain_anno_colors'])
new_colors[[0]] = zeileis_colors[[12]]  # CD4 T colors / green
new_colors[[1]] = zeileis_colors[[5]]  # CD14 Monocytes colors / red
new_colors[[2]] = zeileis_colors[[17]]  # B colors / yellow
new_colors[[3]] = zeileis_colors[[2]]  # CD8 T / grey
new_colors[[4]] = zeileis_colors[[18]]  # NK / turquoise
new_colors[[5]] = zeileis_colors[[6]]  # FCGR3A Monocytes / light blue
new_colors[[6]] = zeileis_colors[[0]]  # Dendritic / dark blue
new_colors[[7]] = zeileis_colors[[25]]  # Megakaryocytes / grey
#new_colors[[10, 17, 5, 3, 15, 6, 18, 13, 7, 12]] = zeileis_colors[[5, 5, 5, 5, 11, 11, 10, 9, 21, 21]]  # CD14 Monocytes colors / red

data.uns['louvain_anno_colors'] = new_colors
sc.pl.paga_compare(
    data, threshold=0.03, title='', right_margin=0.2, size=10, edge_width_scale=0.5,
    legend_fontsize=12, fontsize=12, frameon=False, edges=True)
pt.savefig("paga_compare.pdf")
paga_compare

定義分化起點,計算每個細胞的擬時間,畫擬時間分布(這兒我是隨便取的B細胞作為root,請根據自身數據細胞類別選?。?/p>

data.uns['iroot'] = np.flatnonzero(data.obs['louvain_anno']  == 'B')[0] ##假設分化起點為B cells,當然自己分析的時候需要根據數據實際情況選擇分化起點
sc.tl.dpt(data)
sc.pl.draw_graph(data, color=['louvain_anno', 'dpt_pseudotime'],  legend_loc='on data',title = ['','pseudotime'], frameon=True)
pt.savefig("paga_peudotime.pdf")
sc.pl.draw_graph(data, color=['louvain', 'dpt_pseudotime'],  legend_loc='on data',title = ['','pseudotime'], frameon=True)
pt.savefig("paga_peudotime1.pdf")
data.write(results_file)
paga_peudotime

paga_peudotime

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

adata =sc.read(results_file)
gene_names = ['IL7R', 'CD14', 'LYZ',  'MS4A1', 'CD8A', 'CD8B', 'FCGR3A', 'MS4A7','GNLY', 'NKG7', 'FCER1A', 'CST3']                     # 選取了一列marker 基因,要根據實際情況選取

data_raw = sc.read_10x_mtx('./filtered_gene_bc_matrices/hg19/', var_names='gene_symbols', cache=True)  
data_raw.var_names_make_unique()
sc.pp.filter_cells(data_raw, min_genes=200)   # 去除表達基因200以下的細胞
sc.pp.filter_genes(data_raw, min_cells=3)     # 去除在3個細胞以下表達的基因
mito_genes=data_raw.var_names.str.startswith('MT-')
data_raw.obs['percent_mito']=np.sum(data_raw[:,mito_genes].X,axis=1).A1/np.sum(data_raw.X,axis=1).A1
data_raw.obs['n_counts']=data_raw.X.sum(axis=1).A1
data_raw = data_raw[data_raw.obs.n_genes < 2500, :]
data_raw = data_raw[data_raw.obs.percent_mito < 0.05, :]
sc.pp.normalize_total(data_raw, target_sum=1e4)
sc.pp.log1p(data_raw)
sc.pp.scale(data_raw)
adata.raw = data_raw #使用完整的原始數據進行可視化
paths = [('NK', [2,0,3]), ('FCGR3A Monocytes', [2,6,1])]
adata.obs['distance'] = adata.obs['dpt_pseudotime']
adata.obs['clusters'] = adata.obs['louvain']  # just a cosmetic change
adata.uns['clusters_colors'] = adata.uns['louvain_anno_colors']
_, axs = pt.subplots(ncols=2, figsize=(6, 2.5), gridspec_kw={'wspace': 0.05, 'left': 0.12})
pt.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('./paga_path_{}.csv'.format(descr))
pt.savefig('paga_path_pbmc.pdf')
pt.show()
paga_path_pbmc
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。