使用pyscenic做转录因子分析

前面我们已经是完整的展示了使用R语言的scenic做转录因子分析的流程,但是在公开课演示100个细胞走这个流程,发现居然是耗时20min,实在是不能忍。哪怕是再不喜欢python,也得学一学pyscenic了!

毕竟在文章《A scalable SCENIC workflow for single-cell gene regulatory network analysis》,有这个时间消耗对比,不服不行!

时间消耗对比

一般来说pyscenic是在Linux相关服务器上面操作,所以我也是在自己的ubuntu操作系统演示:

安装自己的conda,每个用户独立操作

安装方法代码如下:

# 首先下载文件,20M/S的话需要几秒钟即可
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 接下来使用bash命令来运行我们下载的文件,记得是一路yes下去
bash Miniconda3-latest-Linux-x86_64.sh 
#  安装成功后需要更新系统环境变量文件
source ~/.bashrc

安装好conda后需要设置镜像。

conda config --add channels r 
conda config --add channels conda-forge 
conda config --add channels bioconda
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes 

使用conda安装pyscenic的一些依赖

极端情况下,建议每个软件都可以独立给一个环境,虽然是这样会导致很多冗余的软件,不过,确实很方便。

# 需要一些依赖,尤其是这个python 版本
conda create -n pyscenic python=3.7 
conda activate pyscenic

conda install -y numpy
conda install -y -c anaconda cytoolz
conda install -y scanpy

pip install pyscenic 

有时候会遇到网络报错,换个时间点就好了

pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.

然后,有意思的地方就来了,我测试了五台服务器,发现并不是所有的服务器都可以成功安装它!后面我们会讲解一个docker的解决方案,假如你确实只有的conda无法安装,也可以等明天的教程哈!

提取单细胞表达量矩阵csv忘记并且导入Linux服务器

首先我们对文章《Single-cell RNA sequencing highlights the role of inflammatory cancer-associated fibroblasts in bladder urothelial carcinoma》的单细胞转录组数据进行降维聚类分群,然后提取fibo这个子亚群,然后再随机挑取1000个fibo细胞,这样的表达量矩阵进行后续分析。

在seurat里面将矩阵筛选,然后输出成csv,再用python读入,然后打包成 loom

#注意矩阵一定要转置,不然会报错
write.csv(t(as.matrix(fibo@assays$RNA@counts)),file = "fibo_1000.csv")

自己制作一个python 脚本,可以命名为 change.py , 内容如下所示:

import os, sys
os.getcwd()
os.listdir(os.getcwd())

import loompy as lp;
import numpy as np;
import scanpy as sc;
x=sc.read_csv("fibo_1000.csv");
row_attrs = {"Gene": np.array(x.var_names),};
col_attrs = {"CellID": np.array(x.obs_names)};
lp.create("sample.loom",x.X.transpose(),row_attrs,col_attrs);

然后运行这个脚本即可,   python change.py ,这个命令就会读取当前文件夹的  fibo_1000.csv 文件,进行一些转为,保存为 sample.loom 文件,供后续流程。(这个时候的sample.loom 文件是后续一切分析的开始)

再次强调,使用conda安装的这个pyscenic,它依赖于一系列的python模块,就会在这里报错!比如我遇到的就是pandas的报错:

ImportError: cannot import name 'DtypeArg' from 'pandas._typing' (/home/x10/miniconda3/envs/pyscenic/lib/python3.7/site-packages/pandas/_typing.py)

不过,我使用了docker镜像的pyscenic,所以绕过了这个报错!

需要自己准备好如下所示的文件:

 54M 7月  18 11:18 fibo_1000.csv
1.1G 7月  18 11:30 hg19-tss-centered-10kb-7species.mc9nr.feather
12K 7月  18 11:29 hs_hgnc_tfs.txt
99M 7月  18 11:29 motifs-v9-nr.hgnc-m0.001-o0.0.tbl 

pyscenic 的3个步骤之 grn

代码如下所示,复制粘贴后运行即可:

pyscenic grn \
--num_workers 20 \
--output adj.sample.tsv \
--method grnboost2 \
sample.loom \
hs_hgnc_tfs.txt #转录因子文件,1839  个基因的名字列表

转录因子的基因列表文件下载 :pySCENIC/resources at master · aertslab/pySCENIC · GitHub

pyscenic 的3个步骤之 cistarget

代码如下所示,复制粘贴后运行即可:

同样的需要下载数据库文件,https://resources.aertslab.org/cistarget/

pyscenic ctx \
adj.sample.tsv \
hg38__refseq-r80__10kb_up_and_down_tss.mc9nr.feather \
--annotations_fname motifs-v9-nr.hgnc-m0.001-o0.0.tbl \
--expression_mtx_fname sample1.loom \
--mode "dask_multiprocessing" \
--output reg.csv \
--num_workers 3 \
--mask_dropouts

pyscenic 的3个步骤之 AUCell

这个步骤超级快,代码如下所示,复制粘贴后运行即可:

pyscenic aucell \
sample.loom \
reg.csv \
--output sample_SCENIC.loom \
--num_workers 3

sample_SCENIC.loom导入R里面进行可视化

首先再看看文章《Single-cell RNA sequencing highlights the role of inflammatory cancer-associated fibroblasts in bladder urothelial carcinoma》,其降维聚类分群分群,并且拿出来fibo细胞亚群走这个转录因子分析,得到如下所示:

原文fibo细胞亚群走这个转录因子分析

我们的复现分成2步,首先对进行降维聚类分群,代码如下所示:

rm(list = ls())  
library(tidyverse)
library(Seurat)
library(data.table)
ct=fread('fibo_1000.csv',data.table = F)
ct[1:4,1:4]
rownames(ct)=ct[,1]
ct=ct[,-1]
ct=t(ct)
fibo_sce <- CreateSeuratObject(counts = ct, 
                           project = "fibo_1000" )
fibo_sce
#QC
fibo_sce[["percent.mt"]] <- PercentageFeatureSet(fibo_sce, pattern = "^MT-")
# Visualize QC metrics as a violin plot
VlnPlot(fibo_sce, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
fibo_sce <- subset(fibo_sce, subset = nFeature_RNA > 200 & nFeature_RNA < 5000 & percent.mt < 25)
#Normalization
fibo_sce <- NormalizeData(fibo_sce, normalization.method = "LogNormalize", scale.factor = 10000)
#高变基因选择
fibo_sce <- FindVariableFeatures(fibo_sce, selection.method = "vst", nfeatures = 2000)
#标准化
all.genes <- rownames(fibo_sce)
fibo_sce <- ScaleData(fibo_sce, features = all.genes)
#去除MT,重新进行标准化
fibo_sce <- ScaleData(fibo_sce, vars.to.regress = "percent.mt")
#PCA
fibo_sce <- RunPCA(fibo_sce, features = VariableFeatures(object = fibo_sce), verbose = FALSE)
#聚类
fibo_sce <- FindNeighbors(fibo_sce, dims = 1:20)
fibo_sce <- FindClusters(fibo_sce, resolution = 0.5)
#可视化
fibo_sce <- RunUMAP(fibo_sce, dims = 1:20)
fibo_sce<- RunTSNE(fibo_sce, dims = 1:20)
## after we run UMAP and TSNE, there are more entries in the reduction slot
str(fibo_sce@reductions)
DimPlot(fibo_sce, reduction = "umap", label = TRUE)
#查找marker基因
fibo_sce.markers <- FindAllMarkers(fibo_sce, only.pos = TRUE, min.pct = 0.25, 
                               logfc.threshold = 0.25)
saveRDS(fibo_sce, "./fibo_1000.rds")
# 挑选合适的基因,进行可视化

出图如下:

我们的降维聚类分群

文章采取了RGS5和PDGFRA来区分iCAF和mCAF,我们姑且先按照作者的来!我们前面的降维聚类分群操作采取resolution = 0.5的时候确实得到了太多亚群,不过还是尊重作者,进行二分类!

rm(list = ls())  
library(SCENIC)
packageVersion("SCENIC")  
library(SCopeLoomR)
scenicLoomPath='sample_SCENIC.loom'
loom <- open_loom(scenicLoomPath)
# Read information from loom file: 
regulons_incidMat <- get_regulons(loom, column.attr.name="Regulons")
regulons <- regulonsToGeneLists(regulons_incidMat)
regulonAUC <- get_regulons_AUC(loom, column.attr.name="RegulonsAUC") 
sce=readRDS("./fibo_1000.rds")
sce
library(pheatmap) 
n=t(scale(t( getAUC(regulonAUC[,] )))) # 'scale'可以对log-ratio数值进行归一化
n[n>2]=2 
n[n< -2]= -2
n[1:4,1:4]
dim(n) 
ac=data.frame(group= as.character( Idents(sce)))
n[1:4,1:4]
n=n[,colnames(n) %in% colnames(sce)]
rownames(ac)=colnames(n) 
cg=read.table('choose_tf.txt')[,1]
cg
cg_n=n[rownames(n) %in% cg,]
pheatmap(cg_n,show_colnames =F,show_rownames = T,
         annotation_col=ac)
table(ac$group)
# 尊重作者,进行二分类!
ac$group=ifelse(ac$group %in% c(2:5,7,9),'mCAF','iCAF')
pheatmap(cg_n,show_colnames =F,show_rownames = T,
         annotation_col=ac)
pheatmap(cg_n,show_colnames =F,show_rownames = T,
         annotation_col=ac,
         filename = 'heatmap_choose_regulon.png')
dev.off()

出图如下:

复现

可以看到,作者的10个转录因子,在我们这个里面仅仅是剩下了 7 个,不知道是不是因为前面随机抽样1000个细胞导致的。虽然有转录因子的缺失,但是转录组因子的规律并没有变化,在iCAF和mCAF这个亚群特异性激活的转录因子保持原文的样子。

号外: 我们提供单细胞数据分析服务哦

(0)

相关推荐

  • 1-跟着science学习宏基因组-联合数据质控

    数据质控 本小节数据已更新:https://github.com/taowenmicro/Megagenome_learing. 准备conda虚拟环境 我们创建一个虚拟环境,这里python环境为2 ...

  • pytorch慢到无法安装,该怎么办?

    最近几天,后台几个小伙伴问我,无论pip还是conda安装pytorch都太慢了,都是安装官方文档去做的,就是超时装不上,无法开展下一步,卡脖子的感觉太不好受. 这些小伙伴按照pytorch官档提示, ...

  • 零基础教程 | 叶绿体基因组组装 - GetOrganelle

    关键词:零基础:叶绿体基因组:神器:国人佳作:一键成环. 软件官网:https://github.com/Kinggerm/GetOrganelle GetOrganelle 这款软件是建军和郁文彬老 ...

  • Jmeter之参数化

    参数化定义及参数化方式 参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则:这样,脚本在运行时就可以根据需要选取不同的参数值作为输入. jmeter的test ...

  • conda国内源

    清华源.中科大源大部分时间能用,但没事也会被封.最近发现的北外源挺好用.推荐使用: 北外镜像(推荐): conda config --add channels https://mirrors.bfsu ...

  • 没想到自己会放弃conda(docker镜像的pyscenic做单细胞转录因子分析)

    本来是想测试一下,使用pyscenic做转录因子分析,然后记录笔记给大家!所以就有了昨天的:使用pyscenic做转录因子分析,但实际上我在里面埋下了一个伏笔,就是使用conda安装的这个pyscen ...

  • SCENIC单细胞转录因子分析

    SCENIC单细胞转录因子分析

  • SCENIC转录因子分析结果的解读

    单细胞进阶分析主要是拟时序分析,细胞通讯分析,以及SCENIC转录因子分析.但实际上随着越来越多单细胞研究从CNS正刊跌落到CNS子刊,再到普通的数据挖掘文章,所谓的进阶分析也要沦落为标准分析啦. 不 ...

  • 单细胞转录因子分析之SCENIC流程

    去年我们在<生信技能树>公众号带领大家一起学习过:SCENIC转录因子分析结果的解读 ,提到了在做单细胞转录因子分析,首选的工具就是SCENIC流程,其工作流程两次发表在nature系列杂 ...

  • 不同时间点不同药物浓度不同细胞系的转录表达(生信数据分析免费做)

    看到数据集 GSE103115,是关于:Cisplatin-induced gene expression changes in triple-negative breast cancer (TNBC ...

  • 体内湿邪艾灸这样做,方法既简单又安全!你应该知道!

    现在人意识到湿浊才是现代人最大的健康顽敌.这也是我反复强调阳气不足,湿邪不去,吃再多药品补品都如同隔山打牛的意义所在. 老百姓都知道治病要除根,那么怎么才能除病根呢?其实祛除痰湿就是在挖病根,哪怕是认 ...

  • 读书之外这么做, 让孩子更优秀!

    现在很多孩子的运动能力特别强,身为成年人的我们,有时候都会自叹不如.一个来自山东烟台的小女孩,每天下午都会在大广场练习跳绳,行云流水般的花式跳绳,令无数路人驻足观看.小女孩充满自信地说,"我 ...

  • 经常腹胀、腹泻、便秘,做检查却一切正常!

    一吃就饱.嗳气放屁.腹部隐痛,一喝冷饮.吃块冰西瓜就腹痛.腹泻:一进考场就想上厕所:一着急.一生气就肚痛:一吃火锅.麻辣烫,马上就拉肚子...... 很多人做了胃镜.肠镜,一大堆检查,什么问题都没有发 ...

  • 鸽子做药膳用什么药材

    鸽子属于家庭范畴.它们也可以在以吃.药膳鸽子是一种非常好的滋补品,特别是对于骨骼不好的人.鸽子可以在体内补充维生素和蛋白质以,因为鸽子的肉质细嫩,纤维素少,不会给身体带来太多的杂质.药膳鸽子需要桂圆. ...