Pathview包:整合表达谱数据可视化KEGG通路
Pathview
是一个用于整合表达谱数据并用于可视化KEGG通路的一个R
包,其会先下载KEGG
官网上的通路图,然后整合输入数据对通路图进行再次渲染,从而对KEGG
通路图进行一定程度上的个性化处理,并且丰富其信息展示。(KEGG在线数据库使用攻略)
Pathview的安装
一种方法是通过Bioconductor安装,需要Bioconductor版本3.9,R的版本3.6 (推荐)。
if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager")
BiocManager::install("pathview")
另一种方法是去网上下载包的压缩包,https://bioconductor.org/packages/release/bioc/html/pathview.html。
下载完压缩包之后,进入Rstudio
,选择Tools
——Install Packages
——Browse
,找到下载压缩包的位置,安装即可。
什么是KEGG pathway?
KEGG (Kyoto Encyclopedia of Genes and Genomes)
是系统分析基因功能、基因组信息的数据库。它有助于研究者把基因及表达信息作为一个整体网络进行研究。KEGG
将基因组信息和基因功能信息有机地结合起来,通过对细胞内已知生物学过程进行计算机化处理和将现有的基因功能解释标准化,对基因的功能进行系统化的分析。KEGG
的另一个用途是将基因组中的一系列基因用一个细胞内的分子相互作用网络连接起来,如一个通路或是一个复合物,通过它们来展现更高一级的生物学功能。
为什么要用KEGG
的代谢通路?KEGG
提供的整合代谢途径(pathway)查询十分出色,包括碳水化合物、核苷、氨基酸等的代谢及有机物的生物降解,不仅提供了所有可能的代谢途径,而且对催化各步反应的酶进行了全面的注解,包含有氨基酸序列、PDB库的链接等等。(没钱买KEGG怎么办?REACTOME开源通路更强大)
KEGG
是进行生物体内代谢分析、代谢网络研究的强有力工具。与其他数据库相比,KEGG
的一个显著特点就是具有强大的图形功能,它利用图形而不是繁缛的文字来介绍众多的代谢途径以及各途径之间的关系。
在KEGG
中有两种代谢图。
-
参考代谢通路图
reference pathway
,是根据已有的知识绘制的具有一般参考意义的代谢图;这种图上所有小框都是无色的,不会有绿色的小框,并且都可以点击查看更详细的信息; -
特定物种的代谢图
species-specific pathway
,会用绿色来标出这个物种所有的基因或酶,只有这些绿色的框点击以后才会给出更详细的信息。
这两种图很好区分,reference pathway
在KEGG中的名字是以map
开头的,比如map00010
,就是糖酵解途径的参考图;而特定物种的代谢通路图开头三个字符不是map
而是种属英文单词的缩写(一个属的首字母+2个种的首字母)比如酵母的糖酵解通路图,就是sce00010
,大肠杆菌的糖酵解通路图就应该是eco00010
吧。
对差异基因进行pathway
分析 (代谢通路),就是把基因表达变化映射到具体的代谢网络中,可以研究某个实验条件下显著改变的代谢通路,在机制研究中显得尤为重要。
研究pathway
的原因是:生物学问题中设定一个“蝴蝶效应”假设,1个Pathway
上游基因的改变,会导致下游相关基因改变,从而改变通路中大量基因的表达。
准备开始
Pathview
主要用于可视化pathway
图上的数据。pathview
可以生成KEGG视图
和Graphviz视图
,前者将用户数据呈现在原生KEGG pathway
图上,更自然,更易于阅读。后者使用Graphviz
引擎对pathway
图进行布局,可以更好地控制节点或边缘属性和pathway
拓扑。
首先我们在R
里面调用该包,使用该包自带的数据集。这是一个乳腺癌数据集,可以查看下演示数据是什么格式的。
列名是每个样本名,行名是每个基因的entrez id。自己准备的数据要符合这个格式,因为entrez id
是行名字,而entrez id
都是数字,读取需设置check.names=F
。其它类型的ID
也支持,需要做一些参数设置或转换,具体文后有介绍。
library(pathview)
data(gse16873.d)
head(gse16873.d)# 读取自己的文件可以使用类似下面的命令
# gse16873.d <- read.table("filename", sep="\t", row.names=1, check.names=F, header=T)
先看下Pathview
最常见的一种用法:将某个样本的表达量(读入的数据需要是归一化后的表达量);其实也可以任何列数据,不仅仅是表达量数据,也可以是fold change
, p-value, 组蛋白修饰数据等,人为指定的数值型数据也行 (关键是要懂需要展示什么数据、说明什么问题,原理最重要,就像GSEA基因集富集分析也是一样);最后以color bar
的形式在KEGG
通路图上的对应节点 (一定注意节点名字的匹配)展示;
如下例子所示,我们通过指定gene.data
和pathway.id
来观察单个样本在典型信号通路细胞周期
上的表达变化。该基因芯片是在人体组织上进行的,因此species=“hsa”
。
p <- pathview(gene.data = gse16873.d[, 1], pathway.id = "04110", species = "hsa",out.suffix = "gse16873", kegg.native = T)
如何获取自己关注的通路的ID呢? 如下动图,可以得到Cell cyle
的ID04110
。
该例子中的图只有一个单层,在原始图层修改节点颜色,保留原始KEGG
节点标签 (节点名)。这样输出的文件大小与原始的KEGG PNG
文件一样小,但是计算时间相对较长。如果我们想要一个快速的视图,并且不介意将输出文件大小,我们可以通过same.layer = F
使用两层图。通过这种方式,节点颜色和标签被添加到原始KEGG
的额外图层上。原来的KEGG
基因标签(或EC编号)被替换为官方基因符号。
p <- pathview(gene.data = gse16873.d[, 1], pathway.id = "04110", species = "hsa",out.suffix = "gse16873.2layer", kegg.native = T, same.layer = F)
上面的两个例子中,我们查看了KEGG pathway
图的数据,在KEGG
图上我们可以得到所有注释和meta-data
,因此数据更具可读性和解释性。然而输出的是PNG格式的栅格图像。我们也可以使用Graphviz engine
重新绘制pathway
图来查看数据,这样我们对节点和边缘属性能有更多的控制,更重要的是可以保存为PDF格式的矢量图像。
p <- pathview(gene.data = gse16873.d[, 1], pathway.id = "04110", species = "hsa",out.suffix = "gse16873", kegg.native = F, sign.pos="bottomleft")
该图的主图和图例都在一个图层或者说一个页面中,我们只列出KEGG边的类型
,忽略图例中的节点类型
,以节省空间。如果我们想要完整的图例,我们可以使用两个层来创建Graphviz
视图: 第1页是主图,第2页是图例。
注意,对于Graphviz
视图 (PDF文件),“层”的概念与KEGG
视图 (PNG文件)略有不同。在这两种情况下,我们都为两层图设置参数same.layer=F
。
p <- pathview(gene.data = gse16873.d[, 1], pathway.id = "04110", species = "hsa",out.suffix = "gse16873.2layer", kegg.native = F, sign.pos="bottomleft", same.layer = F)
图形布局样式调整
在Graphviz
视图中,我们对图形布局有更多的控制,比如可以将节点组拆分为独立的节点,甚至可以将多基因节点扩展为单个基因。分裂的节点或扩展的基因可能从未分裂的组或未扩展的节点继承边。这样我们就可以得到一个基因/蛋白-基因/蛋白相互作用网络。
-
生信宝典之傻瓜式 (四) 蛋白蛋白互作网络在线搜索
-
生信宝典之傻瓜式 (五) 文献挖掘查找指定基因调控网络
可以更好地查看网络特性(模块化等)和基因方面(而不是节点方面)的数据。注意在KEGG
视图中,一个基因节点可能代表多个功能相似或重复的基因/蛋白。成员基因的数量从1到几十不等。
为了更好的清晰度和可读性,一般将它们作为路径图上的单个节点放在一起。因此,默认情况下,我们不分割节点并单独标记每个成员基因。但是,我们可以通过总结基因数据来可视化节点数据,用户可以使用node.sum
参数指定摘要方法。
p <- pathview(gene.data = gse16873.d[, 1], pathway.id = "04110", species = "hsa",out.suffix = "gse16873.split", kegg.native = F, sign.pos="bottomleft",split.group = T)
下面的图更复杂了,对简单通路适用,复杂通路就头秃了!!
p <- pathview(gene.data = gse16873.d[, 1], pathway.id = "04110", species = "hsa",out.suffix = "gse16873.split.expanded", kegg.native = F, sign.pos="bottomleft",split.group = T, expand.node = T)
数据整合
Pathview
为数据集成提供了强大的支持。它可以用来整合、分析和可视化各种各样的生物数据:基因表达、遗传关联、代谢产物、基因组数据、文献和其他可映射到通路的数据类型。当数据映射到KEGG ortholog pathways
时,它可以直接用于宏基因组、微生物组或未知物种的数据。
化合物和基因集同时绘制在通路上
在上面的例子中,我们查看了具有典型的信号通路的基因数据。有时候我们也想研究代谢通路。除了基因节点外,这些通路还有复合节点。因此,我们可以将基因数据和化合物数据与代谢途径进行整合或可视化。这里的基因数据是一个广泛的概念,包括基因、转录本、蛋白质、酶及其表达、修饰和任何可测量的属性。化合物数据也是如此,包括代谢物、药物、它们的测量值和属性。这里我们仍然使用乳腺癌微阵列数据集作为基因数据。然后生成模拟的化合物或代谢组数据,并加载适当的化合物ID类型(具有足够数量的惟一条目)进行演示。
sim.cpd.data=sim.mol.data(mol.type="cpd", nmol=3000)
data(cpd.simtypes)
head(sim.cpd.data)
我们查看该数据部分内容如下:
C00232 C01881 C02424 C07418 C13756 C07378
-1.09759772 0.12891537 2.07851027 0.93299245 -0.00786048 -0.09023300
我们生成了一个包含基因数据和化合物数据的KEGG
视图。pathview
生成的代谢通路图与原始KEGG
图相同,只是为了更好地查看颜色,将复合节点放大。
p <- pathview(gene.data = gse16873.d[, 1], cpd.data = sim.cpd.data,pathway.id ="00640", species = "hsa", out.suffix = "gse16873.cpd",keys.align = "y", kegg.native = T, key.pos = "topright")
我们还生成了相同pathway
和数据的Graphviz
视图。Graphviz
视图更好地显示了层次结构。对于代谢通路,解析xml文件中的反应条目,并将其转换为基因和复合节点之间的关系。对复合节点使用省略号。标签是从CHEMBL
数据库中检索到的标准化合物名称 (KEGG在pathway数据库文件中没有提供它)。化学名称是长字符串,我们需要对它们进行换行,以使其符合图上指定的宽度。
p <- pathview(gene.data = gse16873.d[, 1], cpd.data = sim.cpd.data, pathway.id ="00640",species = "hsa", out.suffix = "gse16873.cpd", keys.align = "y", kegg.native = F,key.pos = "bottomright", sign.pos ="topright", cpd.lab.offset =-0.8)
多状态或样本同时或分开绘制
在前面的所有示例中,我们查看了单个样本数据,这些数据要么是向量,要么是单列矩阵。Pathview
还可以处理多个样本数据,用于为每个样本生成图形。从1.1.6版开始,Pathview
就可以整合并绘制多状态或样本到一个图中。
set.seed(10)
sim.cpd.data2 = matrix(sample(sim.cpd.data, 18000, replace = T), ncol = 6)
rownames(sim.cpd.data2) = names(sim.cpd.data)
colnames(sim.cpd.data2) = paste("exp", 1:6, sep = "")
head(sim.cpd.data2, 3)
在下面的例子中,gene.data
有三个样本,而cpd.data
有两个。我们可以把所有这些样品放在一张图里,绘制KEGG
视图或Graphviz
视图。在这些图中,我们看到基因节点和化合物节点被分割成多个对应于不同状态或样本的片段 (注意颜色块,之前是一个节点一个颜色,现在一个节点是有多个颜色,每个对应一个样本,基因有3个,化合物有2个,注意下面代码中的1:3
和1:2
)。如果两种数据类型中的样本实际配对,需要选择匹配数据,即gene.data
和cpd.data
的第一列来自同一个实验/样本,等等。
# KEGG view
p <- pathview(gene.data = gse16873.d[, 1:3], cpd.data = sim.cpd.data2[, 1:2],pathway.id = "00640", species = "hsa", out.suffix = "gse16873.cpd.3-2s",keys.align = "y", kegg.native = T, match.data = F, multi.state = T,same.layer = T)
查看下绘图的数据
head(p$plot.data.cpd)
基因表达和化合物都展示前3个样品,一一对应。
#KEGG view with data match
p <- pathview(gene.data = gse16873.d[, 1:3], cpd.data = sim.cpd.data2[, 1:2],pathway.id = "00640", species = "hsa", out.suffix = "gse16873.cpd.3-2s.match",keys.align = "y", kegg.native = T, match.data = T, multi.state = T, same.layer = T)
同样,也可以使用graphviz view
。
#graphviz view
p <- pathview(gene.data = gse16873.d[, 1:3], cpd.data = sim.cpd.data2[, 1:2],pathway.id ="00640", species = "hsa", out.suffix = "gse16873.cpd.3-2s",keys.align = "y", kegg.native = F, match.data = F, multi.state = T,same.layer = T, key.pos = "bottomright", sign.pos = "topright")
同样,我们可以选择分别绘制样本,即每个图形一个样本。请注意,在这种情况下,必须匹配gene.data
和cpd.data
中的样本,以便将其分配给同一图表。因此,参数match.data
在这里并不是很有效。(图3就没有化合物的映射了)
#plot samples/states separately
p <- pathview(gene.data = gse16873.d[, 1:3], cpd.data = sim.cpd.data2[, 1:2],pathway.id = "00640", species = "hsa", out.suffix = "gse16873.cpd.3-2s",keys.align = "y", kegg.native = T, match.data = F, multi.state = F, same.layer = T)
如上所述,同一层上的KEGG
视图可能需要一些时间。同样,如果我们不介意丢失原始的KEGG
基因标签(或EC编号),我们可以选择使用两层的KEGG
视图来加快这个过程。
p <- pathview(gene.data = gse16873.d[, 1:3], cpd.data = sim.cpd.data2[, 1:2],pathway.id = "00640", species = "hsa", out.suffix = "gse16873.cpd.3-2s.2layer",keys.align = "y", kegg.native = T, match.data = F, multi.state = T, same.layer = F)
离散数据标记上下调或是否存在
到目前为止,我们一直在处理连续数据。但我们也经常处理离散数据。例如,我们根据一些统计数据(p值、折叠变化等)选择显著基因或化合物列表。输入数据可以命名为两个层次的向量,1或0(显着或不显着),也可以是一个更短的显着基因/化合物名称列表。在接下来的两个例子中,我们只使gene.data
和cpd.data
或gene.data
离散。
require(org.Hs.eg.db)
gse16873.t <- apply(gse16873.d, 1, function(x) t.test(x, alternative = "two.sided")$p.value)
sel.genes <- names(gse16873.t)[gse16873.t < 0.1]
sel.cpds <- names(sim.cpd.data)[abs(sim.cpd.data) > 0.5]
我们分别查看下sel.genes
和sel.cpds
的数据结构:
选择高亮的基因
head(sel.genes)
[1] "10000" "10003"
[3] "10007" "100128414"
[5] "100129271" "100129762"
选择高亮的化合物
head(sel.cpds)
[1] "C00232" "C02424" "C07418"
[4] "C06633" "C00251" "C01059"
p <- pathview(gene.data = sel.genes, cpd.data = sel.cpds, pathway.id ="00640",species = "hsa", out.suffix = "sel.genes.sel.cpd", keys.align = "y", kegg.native = T,key.pos = "topright", limit = list(gene = 1, cpd = 1), bins = list(gene = 1, cpd = 1),na.col = "gray", discrete = list(gene = T, cpd = T))
p <- pathview(gene.data = sel.genes, cpd.data = sim.cpd.data, pathway.id = "00640",species = "hsa", out.suffix = "sel.genes.cpd", keys.align = "y", kegg.native = T,key.pos = "topright", limit = list(gene = 1, cpd = 1), bins = list(gene = 1, cpd = 10),na.col = "gray", discrete = list(gene = T, cpd = F))
不同来源的ID的转换和映射
pathview
的一个显著特点是它强大的ID映射能力。集成的Mapper
模块将10多种基因或蛋白ID、20多种化合物或代谢物ID映射到标准KEGG
基因或化合物ID。换句话说,使用这些不同ID类型命名的用户数据可以精确地映射到目标KEGG
路径。Pathview
适用于大约4800个物种的路径,物种可以以多种格式指定:KEGG代码
、科学名称
或常用名称
。
cpd.cas <- sim.mol.data(mol.type = "cpd", id.type = cpd.simtypes[2], nmol = 10000)
gene.ensprot <- sim.mol.data(mol.type = "gene", id.type = gene.idtype.list[4], nmol = 50000)
同样查看cpd.simtypes
、cpd.cas
和gene.ensport
的数据结构:
head(cpd.simtypes)
[1] "Beilstein Registry Number"
[2] "CAS Registry Number"
[3] "ChEMBL COMPOUND"
[4] "KEGG COMPOUND accession"
[5] "KEGG DRUG accession"
[6] "Patent accession"
head(cpd.cas)
是一个named vactor
,128470-16-6
、465-42-9
、25812-30-0
为化合物名字,下面的数字0.9594129
是含量。(不知道为什么会模拟出负值?可能是归一化(scale
)后的数据。具体见R语言 - 热图美化)。
128470-16-6 465-42-90.9594129 0.688276025812-30-0 4790-08-3-1.5775357 1.257996995789-30-3 138-14-7-1.9112655 -0.1616219
head(gene.ensprot)
是一个named vactor
,ENSP00000414006
是基因名字,-0.1609490
基因表达量
ENSP00000414006 ENSP00000403857-0.1609490 1.5800692
ENSP00000444905 ENSP000004343120.2108686 -0.6047296
ENSP00000493916 ENSP00000338796-0.9955757 0.5357721
注意参数中的gene.idtype
和cpd.idtype
,用来指定基因和化合物的ID类型。
p <- pathview(gene.data = gene.ensprot, cpd.data = cpd.cas, gene.idtype = gene.idtype.list[4],cpd.idtype = cpd.simtypes[2], pathway.id = "00640", species = "hsa", same.layer = T,out.suffix = "gene.ensprot.cpd.cas", keys.align = "y", kegg.native = T,key.pos ="bottomright", sign.pos = "topright", limit = list(gene = 3, cpd = 3),bins = list(gene = 6, cpd = 6))
对于不在自动映射列表中的外部ID,我们可以使用mol.sum
函数 (也是Mapper模块的一部分)显式地进行ID和数据映射。这里我们需要提供id.map
(外部ID和KEGG标准ID之间的映射矩阵)。我们使用ID映射函数id2eg
和cpdidmap
等来得到id.map
矩阵。注意,这些ID映射函数可以独立于pathview 主函数使用。
id.map.cas <- cpdidmap(in.ids = names(cpd.cas), in.type = cpd.simtypes[2],out.type = "KEGG COMPOUND accession")
cpd.kc <- mol.sum(mol.data = cpd.cas, id.map = id.map.cas)
id.map.ensprot <- id2eg(ids = names(gene.ensprot), category = gene.idtype.list[4], org = "Hs")
gene.entrez <- mol.sum(mol.data = gene.ensprot, id.map = id.map.ensprot)
p <- pathview(gene.data = gene.entrez, cpd.data = cpd.kc, pathway.id = "00640",species = "hsa", same.layer = T, out.suffix = "gene.entrez.cpd.kc", keys.align = "y",kegg.native = T, key.pos ="bottomright", sign.pos = "topright",limit = list(gene = 3, cpd = 3), bins = list(gene = 6, cpd = 6))
不同物种使用时名称的处理
当对KEGG
处理时,物种是一个棘手但重要的问题。KEGG
拥有自己的物种专用命名法和数据库,其中包括大约4800个基因组完整的生物体。换句话说,这些生物体的基因数据都可以通过pathview
进行映射、可视化和分析。这种全面的物种覆盖是pathview数据集成能力的一个突出特点。然而,KEGG
并不以同样的方式对待所有这些生物体/基因组。KEGG
使用NCBI GeneID(或Entrez基因)作为最常见的模型动物的默认ID,包括人类、小鼠、大鼠等,以及一些作物,如大豆、葡萄和玉米。另一方面,KEGG
对所有其他生物体使用 Locus 标记和其他id,包括动物、植物、真菌、原生生物以及细菌和古生菌。
Pathview带有一个数据矩阵korg
,其中包括支持的KEGG物种数据和默认基因ID的完整列表。让我们探索korg
数据矩阵,以便对KEGG
物种及其Gene ID
的使用有所了解。
data(korg)
head(korg)
ktax.id tax.id kegg.code scientific.name common.name entrez.gnodes kegg.geneid
[1,] "T01001" "9606" "hsa" "Homo sapiens" "human" "1" "374659"
[2,] "T01005" "9598" "ptr" "Pan troglodytes" "chimpanzee" "1" "474020"
[3,] "T02283" "9597" "pps" "Pan paniscus" "bonobo" "1" "100989900"
[4,] "T02442" "9595" "ggo" "Gorilla gorilla gorilla" "western lowland gorilla" "1" "101125212"
[5,] "T01416" "9601" "pon" "Pongo abelii" "Sumatran orangutan" "1" "100172878"
[6,] "T03265" "61853" "nle" "Nomascus leucogenys" "northern white-cheeked gibbon" "1" "105739221"ncbi.geneid ncbi.proteinid uniprot
[1,] "374659" "NP_001273380" "Q8N4P3"
[2,] "474020" "XP_001140087" "Q1XHV8"
[3,] "100989900" "XP_003811308" NA
[4,] "101125212" "XP_018886437" "G3QNH0"
[5,] "100172878" "NP_001125944" "Q5R9G0"
[6,] "105739221" "XP_012359712" "G1RK33"
#number of species which use Entrez Gene as the default ID
sum(korg[,"entrez.gnodes"]=="1",na.rm=T) #204#number of species which use other ID types or none as the default ID
sum(korg[,"entrez.gnodes"]=="0",na.rm=T) #5041#new from 2017: most species which do not have Entrez Gene annotation any more
na.idx=is.na(korg[,"ncbi.geneid"])
sum(na.idx) #4674
从上面的korg
的探索中,我们看到4800个KEGG
物种中,只有少数没有NCBI(Entrez)基因ID或基因ID(注释)其中的一个。几乎所有物种都具有默认的KEGG
基因ID(通常是Locus标签)和Entrez Gene ID注释。因此,pathview接受所有这些物种的gene.idtype =“kegg”或“Entrez”
(不区分大小写)。用户需要确保正确的gene.idtype
是特定的,因为除了35种常见物种外,KEGG
和Entrez
基因ID不同。对于19种,Bioconductor提供基因注释包。用户可以自由地输入gene.data
和其他gene.idtype
。有关这些Bioconductor注释物种和额外基因ID类型的列表允许:
data(bods)
bods
package species kegg code id.type[1,] "org.Ag.eg.db" "Anopheles" "aga" "eg"[2,] "org.At.tair.db" "Arabidopsis" "ath" "tair"[3,] "org.Bt.eg.db" "Bovine" "bta" "eg"[4,] "org.Ce.eg.db" "Worm" "cel" "eg"[5,] "org.Cf.eg.db" "Canine" "cfa" "eg"[6,] "org.Dm.eg.db" "Fly" "dme" "eg"[7,] "org.Dr.eg.db" "Zebrafish" "dre" "eg"[8,] "org.EcK12.eg.db" "E coli strain K12" "eco" "eg"[9,] "org.EcSakai.eg.db" "E coli strain Sakai" "ecs" "eg"
[10,] "org.Gg.eg.db" "Chicken" "gga" "eg"
[11,] "org.Hs.eg.db" "Human" "hsa" "eg"
[12,] "org.Mm.eg.db" "Mouse" "mmu" "eg"
[13,] "org.Mmu.eg.db" "Rhesus" "mcc" "eg"
[14,] "org.Pf.plasmo.db" "Malaria" "pfa" "orf"
[15,] "org.Pt.eg.db" "Chimp" "ptr" "eg"
[16,] "org.Rn.eg.db" "Rat" "rno" "eg"
[17,] "org.Sc.sgd.db" "Yeast" "sce" "orf"
[18,] "org.Ss.eg.db" "Pig" "ssc" "eg"
[19,] "org.Xl.eg.db" "Xenopus" "xla" "eg"
data(gene.idtype.list)
gene.idtype.list
"SYMBOL" "GENENAME" "ENSEMBL" "ENSEMBLPROT" "UNIGENE" "UNIPROT" "ACCNUM" "ENSEMBLTRANS" "REFSEQ" "ENZYME" "TAIR" "PROSITE" "ORF"
所有先前的例子用了人类数据,其中Entrez Gene
是KEGG
的默认基因ID。Pathview
现在(从版本1.1.5开始)显式处理使用Locus标签或其他基因ID作为KEGG
默认ID的物种。以下是大肠杆菌菌株K12数据的几个例子。首先,我们使用大肠杆菌K12的默认KEGG ID
(基因座标签)处理基因数据。
eco.dat.kegg <- sim.mol.data(mol.type="gene",id.type="kegg",species="eco",nmol=3000)
head(eco.dat.kegg)
查看部分eco.dat.kegg
数据:
b3649 b0486 b3312 b3566 b3945 b29360.3116743 0.9873035 -1.5734323 1.8890136 0.2399454 0.4556519
p <- pathview(gene.data = eco.dat.kegg, gene.idtype="kegg", pathway.id = "00640",species = "eco", out.suffix = "eco.kegg", kegg.native = T, same.layer=T)
我们也可以用与人类相同的方法对大肠杆菌K12的Entrez Gene ID
进行基因数据处理。
eco.dat.entrez <- sim.mol.data(mol.type="gene",id.type="entrez",species="eco",nmol=3000)
head(eco.dat.entrez)
查看部分eco.dat.entrez
数据:
948629 945263 948265 948536 948973 947881
-0.2516281 0.3116743 0.9873035 -1.5734323 1.8890136 0.2399454
p <- pathview(gene.data = eco.dat.entrez, gene.idtype="entrez", pathway.id = "00640",species = "eco", out.suffix = "eco.entrez", kegg.native = T, same.layer=T)
基于上述bods数据,大肠杆菌K12在Bioconductor中有注释。因此,我们可以进一步研究其基因数据与其他ID类型,例如,官方基因符号。在调用pathview
时,首先需要将这些数据映射到Entrez Gene ID
(如果还没有),然后再映射到默认的KEGG ID
(Locus标签)。因此,它比上一个例子花费更长的时间。
egid.eco=eg2id(names(eco.dat.entrez), category="symbol", pkg="org.EcK12.eg.db")
eco.dat.symbol <- eco.dat.entrez
names(eco.dat.symbol) <- egid.eco[,2]
head(eco.dat.kegg)
p <- pathview(gene.data = eco.dat.symbol, gene.idtype="symbol", pathway.id = "00640", species = "eco", out.suffix = "eco.symbol.2layer", kegg.native = T, same.layer=F)
未注释物种的处理 (直接用于宏基因组或微生物组数据)
重要的是,当数据被映射到KEGG ortholog pathways
时,pathview
可以直接用于宏基因组或微生物组数据。来自KEGG
中未注释和未包含的任何新物种(非KEGG物种)的数据也可以通过pathview
用同样的方法映射到KEGG ortholog pathways
中进行分析和可视化。在下一个例子中,我们首先模拟映射的KEGG ortholog
基因数据。然后将数据作为gene.data
输入,其中species =“ko”
。
ko.data=sim.mol.data(mol.type="gene.ko", nmol=5000)
head(ko.data)
查看一下ko.data
数据
K01859 K15874 K04035 K16205 K16093 K09447
-0.5198690 0.5832773 -1.3411454 0.5746940 0.2157879 -1.1339828
p <- pathview(gene.data = ko.data, pathway.id = "04112", species = "ko", out.suffix = "ko.data", kegg.native = T)
参考
-
https://academic.oup.com/nar/article/45/W1/W501/3804420
-
https://bioconductor.org/packages/release/bioc/html/pathview.html
相关文章:
Pathview包:整合表达谱数据可视化KEGG通路
Pathview是一个用于整合表达谱数据并用于可视化KEGG通路的一个R包,其会先下载KEGG官网上的通路图,然后整合输入数据对通路图进行再次渲染,从而对KEGG通路图进行一定程度上的个性化处理,并且丰富其信息展示。(KEGG在线数…...
利用 Java 爬虫从 yiwugo 根据 ID 获取商品详情
在当今数字化时代,数据是商业决策的关键。对于从事国际贸易的商家来说,精准获取商品的详细信息至关重要。yiwugo 是一个知名的国际贸易平台,拥有海量的商品数据。通过 Java 爬虫技术,我们可以高效地从 yiwugo 根据商品 ID 获取详细…...
Word 转成pdf及打印的开源方案支持xp
Word转成pdf、打印的方案几乎没有免费开源的方案,现在提供一个通过LibreOffice实现的方案 操作依赖LibreOffice需要安装,点此下载老版本 5.4.7.2是最后一个支持xp的 版本如需xp要请安装此版本 LibreOffice官方介绍 LibreOffice 是一款开放源代码的自…...
2025年第三届“华数杯”国际赛B题解题思路与代码(Matlab版)
问题1:产业关联性分析 在 question1.m 文件中,我们分析了中国主要产业之间的相互关系。以下是代码的详细解读: % 问题1:分析中国主要产业之间的相互关系function question1()% 清空工作区和命令窗口clear;clc;% 设置中文显示set…...
pandas与sql对应关系【帮助sql使用者快速上手pandas】
本页旨在提供一些如何使用pandas执行各种SQL操作的示例,来帮助SQL使用者快速上手使用pandas。 目录 SQL语法一、选择SELECT1、选择2、添加计算列 二、连接JOIN ON1、内连接2、左外连接3、右外连接4、全外连接 三、过滤WHERE1、AND2、OR3、IS NULL4、IS NOT NULL5、B…...
<C++> XlsxWriter写EXCEL
XlsxWriter XlsxWriter是一个用于创建和写入Excel 2007及以上版本(.xlsx文件格式)的C库。以下是对XlsxWriter的详细介绍: 主要功能 文本、数字和公式写入:可以向多个工作表中写入文本、数字和公式。格式设置:支持丰…...
PySpark广播表连接解决数据倾斜的完整案例
使用PySpark解决数据倾斜问题的完整案例,通过广播表连接的方式来优化性能。 准备数据 假设我们有两张表,一张大表 big_table 和一张小表 small_table ,小表将作为广播表。 from pyspark.sql import SparkSession# 初始化SparkSession spar…...
seleniun 自动化程序,python编程 我监控 chrome debug数据后 ,怎么获取控制台的信息呢
python 好的,使用 Python 来监控 Chrome 的调试数据并获取控制台信息,可以使用 websocket-client 库来连接 Chrome 的 WebSocket 接口。以下是一个详细的示例: 1. 安装必要的库 首先,你需要安装 websocket-client 库。可以使用…...
Java Web开发进阶——Spring Boot与Thymeleaf模板引擎
Thymeleaf 是一个现代化的、功能强大的 Java 模板引擎,常用于生成 Web 应用程序的视图。它与 Spring Boot 的集成十分方便,并且提供了丰富的功能,能够帮助开发者实现动态渲染数据、处理表单、页面控制等操作。下面,我们将详细探讨…...
【“软件工程”基础概念学习】
基础和相关概念 英文:Software Engineering 软:物体内部的组织疏松,受外力作用后容易改变形状软件: 计算机系统的组成部分,是指挥计算机进行计算、判断、处理信息的程序系统。通常分为系统软件和应用软件。借指某项活…...
C语言基本知识复习浓缩版:控制语句--分支
选择结构 if语句 if控制语句 #include <stdio.h>int main() { int hour; float money; printf("请输入上网小时数:"); scanf("%d", &hour); if (hour <10) { money 30; }else if (hour >10 && hour <50) { mone…...
Oracle Dataguard(主库为双节点集群)配置详解(1):安装 Oracle11g RAC 双节点集群
Oracle Dataguard(主库为双节点集群)配置详解(1):安装 Oracle11g RAC 双节点集群 目录 Oracle Dataguard(主库为双节点集群)配置详解(1):安装 Oracle11g RAC …...
深度学习知识点:LSTM
文章目录 1.应用现状2.发展历史3.基本结构4.LSTM和RNN的差异 1.应用现状 长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多,很容易出现梯度爆炸或者梯度消失的问…...
XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传
代码结构说明 这段代码的主要功能是: 从指定文件夹中读取所有 XML 文件。 将每个 XML 文件的内容通过 HTTP POST 请求发送到指定的 API 地址。 处理服务器的响应,并记录每个文件的处理结果。 using System; using System.IO; using System.Net; usin…...
初学者关于对机器学习的理解
一、机器学习: 1、概念:是指从有限的观测数据中学习(或“猜 测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法.机器学 习是人工智能的一个重要分支,并逐渐成为推动人工智能发展的关键因素。 2、使用机器学习模型…...
【源码解析】Java NIO 包中的 ByteBuffer
文章目录 1. 前言2. ByteBuffer 概述3. 属性4. 构造器5. 方法5.1 allocate 分配 Buffer5.2 wrap 映射数组5.3 slice 获取子 ByteBuffer5.4 duplicate 复刻 ByteBuffer5.5 asReadOnlyBuffer 创建只读的 ByteBuffer5.6 get 方法获取字节5.7 put 方法往 ByteBuffer 里面加入字节5.…...
vue video重复视频 设置 srcObject 视频流不占用资源 减少资源浪费
// 直接设置srcObject减少获取视频流:通过 captureStream() 方法从下方视频元素获取视频流。 // 设置 srcObject:将获取到的视频流设置为上方视频的 srcObject 减少资源浪费 // 获取到需要复制到的dom元素 const firstVideoElement proxy.$refs.firs…...
LayaAir3.2来了:性能大幅提升、一键发布安装包、支持WebGPU、3D导航寻路、升级为真正的全平台引擎
前言 LayaAir3的每一个分支版本都是一次较大的提升,在3.1彻底完善了引擎生态结构之后,本次的3.2会重点完善全平台发布相关的种种能力,例如,除原有的安卓与iOS系统外,还支持Windows系统、Linux系统、鸿蒙Next系统&#…...
计算机网络(四)网络层
4.1、网络层概述 简介 网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输 这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可 但是如果要将这些异构型网络互连起来,形成一个更大的互…...
时空笔记:CBEngine(微观交通模拟引擎)
CBEngine 是一个微观交通模拟引擎,可以支持城市规模的道路网络交通模拟。CBEngine 能够快速模拟拥有数千个交叉路口和数十万辆车辆的道路网络交通。 以下内容基本翻译自CBEngine — CBLab 1.0.0 documentation 1 模拟演示 1.0 模拟演示结构 config.cfg 定义了 roa…...
Apache Sedona和Spark将geojson瓦片化例子
Apache Sedona很方便读取geojson、ShapeFile、geopackage等文件,提供了很多spark sql函数和rdd算子。下面例子主要用于熟悉spark和sedona的使用。 引入的maven包 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.or…...
5种IO模型
目录 一、认识IO二、5种IO模型三、非阻塞IO代码 一、认识IO 什么是IO? Input(输入)和Output(输出)。 冯诺依曼体系结构中,数据从输入设备拷贝到内存,经过处理后,再从内存拷贝到输出设备。现实情况中,数据并不是那么流…...
ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技
本文核心 正常跑步动画端枪动画跑起来也端枪 正常跑步动画 端枪动画的上半身 跑起来也端枪 三步走: 第一步制作动画蒙太奇和插槽 第二步动画蓝图选择使用上半身动画还是全身动画,将上半身端枪和下半身走路结合 第三步使用动画蒙太奇 1.开始把&a…...
面试题
1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 3、编写个shel 脚本将/usr/local 目录下大于10M的文件转移到…...
工厂方法模式
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一个接口,用于创建对象,但允许子类决定实例化的类是哪一个。这样,工厂方法模式将对象的创建逻辑委托给子类,从而实现了创建…...
web前端学习总结(一)
web前端使用三项技术:html、css、javascript. 一、html:超文本标记语言,用于展示网页的框架。 <html> <head><title> </title></head><body><div> </div> <!--用于布局,占1行 --><span&g…...
【深度学习入门_基础篇】概率论
开坑本部分主要为基础知识复习,新开坑中,学习记录自用。 学习目标: 随机事件与概率、随机变量及其分布、多维随机变量及其分布、大数定律与中心极限定理。 强烈推荐此视频: 概率论_麻省理工公开课 废话不多说,直接…...
SpringMVC根据url校验权限,防止垂直越权
思路是加一个拦截器,对除登录接口的所有请求进行拦截。拦截到请求后,查询当前用户都拥有哪些url的权限(这个需要权限表有url字段),然后与当前请求的url对比,如果相同则说明有权限,否则没有。 首…...
istio-proxy oom问题排查步骤
1. 查看cluster数量 cluster数量太多会导致istio-proxy占用比较大的内存,此时需检查是否dr资源的host设置有配置为* 2. 查看链路数据采样率 若采样率设置过高,在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。 检查iop中…...
openstack下如何生成centos9 centos10 和Ubuntu24 镜像
如何生成一个centos 10和centos 9 的镜像1. 下载 对应的版本 wget https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-x86_64-10-latest.x86_64.qcow2 wget https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-Gener…...
Yolov8训练方式以及C#中读取yolov8+onnx模型进行目标检测.NET 6.0
目录 首先你要定义v8的模型特征文件 下方是完整的模型编写函数 然后你要在控件窗体中定义应用这些方法以及函数 一、定义你的标签 二、下方是定义模块和坐标的方法 三、画框 完整推理函数代码块 效果展示 完整源码 训练其实和yolov10差不多 因为v10就是在v8的基础上做了优…...
C#中序列化的选择:JSON、XML、二进制与Protobuf详解
C#中序列化的选择:JSON、XML、二进制与Protobuf详解 在C#开发中,序列化是将对象转换为可存储或传输的格式的过程,而反序列化则是将存储或传输的数据重新转换为对象的过程。选择合适的序列化方式对应用程序的性能、可维护性和兼容性至关重要。…...
深入理解 Java 设计模式之策略模式
一、引言 在 Java 编程的世界里,设计模式就如同建筑师手中的蓝图,能够帮助我们构建出更加健壮、灵活且易于维护的代码结构。而策略模式作为一种经典的行为型设计模式,在诸多实际开发场景中都发挥着至关重要的作用。它能够让算法的定义与使用…...
如何快速导出Python包和安装?
pip freeze > requirements.txt导出: 安转 : pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple...
记录一个在增量更新工具类
1. 应用场景 比方说我现在有一个商品,这个商品可以上传图片用来展示,之前已经上传过5张图片 ABCDE,现在其中BC这两张图片不想要了要换成FG,这个时候就可以使用这个工具类进行更新。 在最后一步,可以不管ADE直接只管新增…...
VUE3 常用的组件介绍
Vue 组件简介 Vue 组件是构建 Vue 应用程序的核心部分,组件帮助我们将 UI 分解为独立的、可复用的块,每个组件都有自己的状态和行为。Vue 组件通常由模板、脚本和样式组成。组件的脚本部分包含了各种配置选项,用于定义组件的逻辑和功能。 组…...
UML系列之Rational Rose笔记二:包图
rose绘制包图,有简单的有复杂的; 正常图简单的话,直接新建package使用就行,改变package的大小,改变名称当作不同的包就行;基本没有什么学习难度;在此,笔者直接介绍一下回执标准一点…...
第34天:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法
时间轴: Java反射相关类图解: 反射: 1、什么是 Java 反射 参考: https://xz.aliyun.com/t/9117 Java 提供了一套反射 API ,该 API 由 Class 类与 java.lang.reflect 类库组成。 该类库包含了 Field 、 Me…...
cuda实现flash_attn_mma_share_kv源码分析
一 源码分析 1.1 函数入口 void flash_attn_mma_stages_split_q_shared_kv(torch::Tensor Q, torch::Tensor K, torch::Tensor V, torch::Tensor O, int stages) {CHECK_TORCH_TENSOR_DTYPE(Q, torch::kHalf) // Q [B,H,N,D]CHECK_TORCH_TENSOR_DTYPE(K, torch::kHalf) // K …...
Python操作Excel的库openpyxl使用入门
openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。以下是一些 openpyxl 的基本使用方法: 安装 openpyxl 首先,确保已经安装了 openpyxl。如果没有安装,可以使用以下命令进行安装: pip install openp…...
《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)
《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…...
信息网络安全考试gjdw
序号 一级纲要 二级纲要 题目分类 题型 题干 选项 答案 题目依据 试题分数 试题编码 备注 说明 1 信息安规 \ 专业题库 单选题 根据信息安规规定,试验和推广信息新技术,应制定相应的( ),经本单位…...
S变换matlab实现
S变换函数 function [st,t,f] st(timeseries,minfreq,maxfreq,samplingrate,freqsamplingrate) % S变换 % Code by huasir Beijing 2025.1.10 % Reference is "Localization of the Complex Spectrum: The S Transform" % from IEEE Transactions on Signal Proc…...
【OLAP和PLTP】—— 浅谈两者的应用场景和区别
大家好,我是摇光~ OLAP(Online Analytical Processing)和OLTP(Online Transaction Processing)是两种不同的数据处理技术,分别用于不同的业务场景。以下是关于OLAP和OLTP的详细介绍: 一、OLAP&…...
计算机组成原理(1)王道学习笔记
一、 引言 计算机硬件唯一能识别的数据是二进制-----0/1。 用低/高电平表示0/1。 通过很多条电路,可以传递多个二进制数位。 每个二进制数位称为1bit(比特)。 计算机硬件的基本组成 早期的ENIAC计算机是通过手动接线来控制计算。冯诺依曼首次…...
LLaMA模型:自然语言处理的革新者
引言 在人工智能的领域中,自然语言处理(NLP)是一个充满挑战的分支,它的目标是让计算机能够理解和生成人类语言。Transformer模型,作为NLP的基石,已经极大地推动了这一领域的发展。然而,为了进一…...
各种特种无人机快速发展,无人机反制技术面临挑战
随着科技的飞速发展,各种特种无人机在军事、民用等领域得到了广泛应用,其性能不断提升,应用场景也日益丰富。然而,无人机反制技术的发展确实面临一定的挑战,难以完全跟上无人机技术的快速发展步伐。以下是对这一问题的…...
1555银行账户概要_pandas解答
目录 题目链接(无_力扣VIP_略过)一.读题(建议使用这种表结构_数据对比看)题目SQL Schema & Pandas Schema 建表语句_数据 二.答案_MySQL一图解MySQL一图解__可只需看此!!!!!!!!!!!!!!!!答案-----------------------------------------------------------------------------…...
【C++补充】第一弹---位图技术揭秘:内存优化与快速访问
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1 位图 1.1 位图相关面试题 1.2 位图的设计及实现 1.3 C库中的位图 bitset 1.4 位图的模拟实现 1.5 位图的优缺点 1.6 位图相关考察题目 1 …...
node.js中实现token的生成与验证
Token(令牌)是一种用于在客户端和服务器之间安全传输信息的加密字符串。在Web开发中,Token常用于身份验证和授权,确保用户能够安全地访问受保护的资源。 作用与意义 身份验证:Token可以用来验证用户的身份࿰…...