草庐IT

Seurat对象数据结构

oceanandshore 2023-03-28 原文

1、标准流程里面的过滤三步骤,也可以用 SCTransform 代替

Seurat基本教程
seurat对象结构
单细胞转录组分析中的各种数据结构




image.png

2、Seurat 每一步处理类似流水线传送带上的容器(Container),每个函数会依次进行处理。每个函数输入一种数据都会输出另外一个数据,并且把输出数据也存放在这个容器中。 需要时可以提取某一步骤的数据。 还有一类函数,不参与数据转换,类似质检员(Inspector),在每一个数据转换后,查看容器中的内容,帮助判断质量、评估处理后的效果。

image.png

3、Seurat 流程第一步就是创建 Seurat 对象,首先要明白 Seurat 对象的构成。Seurat 对象进一步细分为: Assay Object 对象 和 DimReduc Object 对象。

Assay Object 对象存放的多组学的表达数据, DimReduc Object 对象存放的是对 Assay Object 对象进行降维分析后的结果。

Seurat Object

Assay Object

DimReduc Object

4、专门下载和管理 Seurat示例数据对象的软件包:SeuratData

SeuratData 先把 datasets 变成 Seurat 对象,再把 Seurat 对象以软件包的形式分发和管理。

image.png

5、以pbmc为例,展开Seurat流程。

在Seurat对象后面加个@ 可以查看Seurat对象的内容。弹出小窗口,可以查看里面的内容。


Seurat对象组成
image.png

5.1 mata.data
Seurat对象中的mata.data 是一个用来对所有细胞做注释的数据框。每一行代表一个细胞,每一列代表细胞的属性。当需要根据细胞的属性和类型对细胞进行筛选的时候,经常会用到mata.data。当然也可以把分析得到的结果,添加到mata.data中。


mata.data

5.2 assay
一个Seurat对象可以包括多个assay对象,但是在某个时刻,只有一个assay对象是默认激活的。可以通过函数 active.assay 查询当前默认激活的是哪个assay对象。也可以用 DefaultAssay 来设置默认的 assay。


image.png

5.3 ident
可以理解为细胞的类型,在Seurat对象中,细胞可能有好几种不同方法注释的类型,但是在某一时刻,只有一种细胞类型是默认激活的。可以用active.ident来查询当前默认的细胞类型是什么。


image.png

5.4 reduction
和assay一样,reduction返回的也是一个列表。里面包含的是一个或多个 DimReduc object 对象。 每个DimReduc object 对象对应的是 assay 对象进行某种降维分析后得到的结果。降维也就是PCA 、tsen 、umap 三种。 下面这个例子里面的列表中,有两个DimReduc object 对象,分别是PCA 和umap


image.png

5.5 version
是创建这个对象时,所使用的Seurat版本。

5.6 commands
是一个列表,里面保存的是workflow中每个步骤所使用的命令和参数。还有命令执行的日期和时间。


image.png
5.7 Assay Object 的内部结构
image.png

counts 保存的是未经处理的原始数据。适合存放稀疏矩阵。


image.png

原始数据经过标准化后,会存放在@data中,和counts 一样也是一个特殊的 Matrix 对象。

image.png

当数据进行scale后,存放在名为scale.data中


image.png

key : 每个active对象都有一个key值,可以用fetch函数来获取。。。没声音这里

image.png

var.features : 是一个普通的向量,里面存放的是高表达变异的基因名。可以用函数VaribleFeatures来获得这个向量。


image.png

meta.features : Seurat对象中的mata.data 是对所有细胞做注释的数据框。 而在assay对象中,meta.features 是对每个 features 做的注释。 如果要对 features 的功能进行注释、打分、筛选都需要用到meta.features。对于不同的assay来说,每个features的含义是不同的。


image.png
5.8 DimReduc Object 的内部结构

和assay对象一样,也是存放在一个列表中。

image.png
image.png

6、正式开始Seurat流程的workflow的每一个步骤

看视频,讲的挺详细的。这里只记录一些关键的细节。


image.png
image.png

%>% 是管道的意思
dplyr包:grpup_by top_n

image.png

patchwork 包 可以整合成一个图


image.png
image.png

画图函数的特点比较


image.png

有关Seurat对象数据结构的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  3. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  6. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

  7. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  8. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

  9. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  10. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

随机推荐