前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据处理基础—什么是整齐数据和Rich Data

数据处理基础—什么是整齐数据和Rich Data

作者头像
生信技能树jimmy
发布2020-03-31 12:15:51
1.3K0
发布2020-03-31 12:15:51
举报
文章被收录于专栏:单细胞天地单细胞天地
5.6.1 什么是整齐的数据?

整齐的数据是Hadley Wickham (Wickham 2014)主要定义的概念。整齐的数据具有以下三个特征:

  1. 每个变量都有自己的列。
  2. 每个观察值都有自己的行。
  3. 每个值都有自己的单元格。

以下是一些整齐数据的示例:

代码语言:javascript
复制
##   Students   Subject Years Score
## 1     Mark     Maths     1     5
## 2     Jane   Biology     2     6
## 3 Mohammed   Physics     3     4
## 4      Tom     Maths     2     7
## 5    Celia Computing     3     9

以下是一些不整齐数据的示例:

代码语言:javascript
复制
##    Students    Sport Category Counts
## 1      Matt   Tennis     Wins      0
## 2      Matt   Tennis   Losses      1
## 3     Ellie    Rugby     Wins      3
## 4     Ellie    Rugby   Losses      2
## 5       Tim Football     Wins      1
## 6       Tim Football   Losses      4
## 7    Louise Swimming     Wins      2
## 8    Louise Swimming   Losses      2
## 9     Kelly  Running     Wins      5
## 10    Kelly  Running   Losses      1

任务1:不整齐的数据在哪些方面不整洁?我们怎么能把不整齐的数据整理整齐?

整齐的数据通常比不整齐的数据更容易使用,特别是如果您正在使用ggplot等软件包。幸运的是,可以使用软件包来整理不整齐的数据。今天我们将探讨tidyr包中可用的一些功能,这些功能可用于使不整齐的数据变得整齐。如果您有兴趣了解有关整理数据的更多信息,我们建议您阅读Garrett Grolemund和Hadley Wickham撰写的“R for Data Science”。电子版可在此处获取:http://r4ds.had.co.nz/

上面的不整齐数据是不整齐的,因为两个变量(WinsLosses)存储在一列(Category)中。这是数据不整齐的常见方式。为了整理这些数据,我们需要制作WinsLosses插入列,并将值存储Counts在这些列中。幸运的是,tidyverse包中有一个函数来执行此操作。该函数叫spread,它需要两个参数,keyvalue。您应该将包含多个变量的列的名称传递给key,并将包含多个变量值的列的名称传递给value。例如:

代码语言:javascript
复制
library(tidyverse)
sports<-data.frame(Students=c("Matt", "Matt", "Ellie", "Ellie", "Tim", "Tim", "Louise", "Louise", "Kelly", "Kelly"), Sport=c("Tennis","Tennis", "Rugby", "Rugby","Football", "Football","Swimming","Swimming", "Running", "Running"), Category=c("Wins", "Losses", "Wins", "Losses", "Wins", "Losses", "Wins", "Losses", "Wins", "Losses"), Counts=c(0,1,3,2,1,4,2,2,5,1))
sports
代码语言:javascript
复制
##    Students    Sport Category Counts
## 1      Matt   Tennis     Wins      0
## 2      Matt   Tennis   Losses      1
## 3     Ellie    Rugby     Wins      3
## 4     Ellie    Rugby   Losses      2
## 5       Tim Football     Wins      1
## 6       Tim Football   Losses      4
## 7    Louise Swimming     Wins      2
## 8    Louise Swimming   Losses      2
## 9     Kelly  Running     Wins      5
## 10    Kelly  Running   Losses      1
代码语言:javascript
复制
spread(sports, key=Category, value=Counts)
代码语言:javascript
复制
##   Students    Sport Losses Wins
## 1    Ellie    Rugby      2    3
## 2    Kelly  Running      1    5
## 3   Louise Swimming      2    2
## 4     Matt   Tennis      1    0
## 5      Tim Football      4    1

任务2:下面foods定义的数据框不整齐。弄清楚原因并用spread()它来整理它

代码语言:javascript
复制
foods<-data.frame(student=c("Antoinette","Antoinette","Taylor", "Taylor", "Alexa", "Alexa"), Category=c("Dinner", "Dessert", "Dinner", "Dessert", "Dinner","Dessert"), Frequency=c(3,1,4,5,2,1))

数据可能不整齐的另一种常见方式是列是值而不是变量。例如,下面的数据框显示了一些学生在5月和6月的测试中获得的百分比。数据是不整洁的,因为列MayJune是值,而不是变量。

代码语言:javascript
复制
percentages<-data.frame(student=c("Alejandro", "Pietro", "Jane"), "May"=c(90,12,45), "June"=c(80,30,100))

幸运的是,tidyverse包中还有一个函数来处理这个问题。gather()获取名称是值的列,keyvalueas为两个参数。这次key是变量的名称,其值为列名,而value是值的名称,其值分布在多个列上。即:

代码语言:javascript
复制
gather(percentages, "May", "June", key="Month", value = "Percentage")
代码语言:javascript
复制
##     student Month Percentage
## 1 Alejandro   May         90
## 2    Pietro   May         12
## 3      Jane   May         45
## 4 Alejandro  June         80
## 5    Pietro  June         30
## 6      Jane  June        100

这些例子与单细胞RNA-seq分析没有多大关系,但旨在帮助说明整齐和不整齐数据的特征。如果您的数据以整齐的格式存储,您会发现分析单细胞RNA-seq数据要容易得多。幸运的是,我们通常用于促进单细胞RNA-seq分析的数据结构通常鼓励以整齐的方式存储您的数据。

5.6.2什么是Rich Data?

如果你谷歌“rich data”,你会发现这个术语有很多不同的定义。在本课程中,我们将使用“丰富数据”来表示通过组合来自多个来源的信息生成的数据。例如,您可以通过在R中创建一个对象来生成丰富的数据,该对象包含单细胞RNA-seq实验中细胞中基因表达值的矩阵,还有关于如何进行实验的信息。我们将在下面讨论的SingleCellExperiment类是丰富数据的一个示例。

5.7

Bioconductor , SingleCellExperiment and scater

5.7.1 Bioconductor

来自维基百科:Bioconductor是一个免费的,开源的开放式开发软件项目,用于分析和理解分子生物学中湿实验室实验产生的基因组数据。Bioconductor主要基于统计R编程语言,但确实包含其他编程语言的贡献。它每年有两个版本,遵循R的半年版本。在任何时候都有一个发布版本,对应于R的发布版本,以及一个对应于R的开发版本的开发版本。大多数用户将找到适合他们需求的发布版本。

我们强烈建议所有新手,甚至经验丰富的高通量数据分析师使用完善和维护的Bioconductor方法和类。

5.7.2 SingleCellExperiment

SingleCellExperiment(SCE)是用于存储来自单细胞实验的数据的S4类。这包括存储和检索spike-in信息的专门方法,每个细胞的降维坐标和尺寸因子,以及基因和文库的常用元数据。

实际上,可以使用其构造函数创建此类的对象:

代码语言:javascript
复制
library(SingleCellExperiment)
counts <- matrix(rpois(100, lambda = 10), ncol=10, nrow=10)
rownames(counts) <- paste("gene", 1:10, sep = "")
colnames(counts) <- paste("cell", 1:10, sep = "")
sce <- SingleCellExperiment(
    assays = list(counts = counts),
    rowData = data.frame(gene_names = paste("gene_name", 1:10, sep = "")),
    colData = data.frame(cell_names = paste("cell_name", 1:10, sep = ""))
)
sce
代码语言:javascript
复制
## class: SingleCellExperiment 
## dim: 10 10 
## metadata(0):
## assays(1): counts
## rownames(10): gene1 gene2 ... gene9 gene10
## rowData names(1): gene_names
## colnames(10): cell1 cell2 ... cell9 cell10
## colData names(1): cell_names
## reducedDimNames(0):
## spikeNames(0):

SingleCellExperiment中,用户可以为测定条目指定任意名称。为了协助软件包之间的互操作性,作者提供了针对特定类型数据的名称的一些建议:

  • 计数:原始计数数据,例如特定基因的读数或转录物数。
  • normcounts:与原始计数相同的标准化值。例如,计数除以以单位为中心的特定于细胞的大小因子。
  • logcounts:日志转换计数或类似计数的值。在大多数情况下,这将被定义为对数转换的范数,例如,使用log base 2和伪计数1。
  • cpm:每百万计数。这是每个细胞中每个基因的读数,除以每个细胞的文库大小(以百万计)。
  • tpm:每百万的转录本。这是每个细胞中每个基因的转录物数量除以该细胞中转录物的总数(以百万计)。
  • 这些建议名称中的每一个都具有适当的getter / setter方法,以便于操作SingleCellExperiment。例如,我们可以使用(非常具体命名的)counts,对其进行标准化并将其分配给normcounts
代码语言:javascript
复制
normcounts(sce) <- log2(counts(sce) + 1)
sce
代码语言:javascript
复制
## class: SingleCellExperiment 
## dim: 10 10 
## metadata(0):
## assays(2): counts normcounts
## rownames(10): gene1 gene2 ... gene9 gene10
## rowData names(1): gene_names
## colnames(10): cell1 cell2 ... cell9 cell10
## colData names(1): cell_names
## reducedDimNames(0):
## spikeNames(0):
代码语言:javascript
复制
dim(normcounts(sce))
代码语言:javascript
复制
## [1] 10 10
代码语言:javascript
复制
head(normcounts(sce))
代码语言:javascript
复制
##          cell1    cell2    cell3    cell4    cell5    cell6    cell7
## gene1 3.169925 3.169925 2.000000 2.584963 2.584963 3.321928 3.584963
## gene2 3.459432 1.584963 3.584963 3.807355 3.700440 3.700440 3.000000
## gene3 3.000000 3.169925 3.807355 3.169925 3.321928 3.321928 3.321928
## gene4 3.584963 3.459432 3.000000 3.807355 3.700440 3.700440 3.700440
## gene5 3.906891 3.000000 3.169925 3.321928 3.584963 3.459432 3.807355
## gene6 3.700440 3.700440 3.584963 4.000000 3.169925 3.000000 3.459432
##          cell8    cell9   cell10
## gene1 3.321928 3.807355 2.807355
## gene2 3.807355 3.700440 4.000000
## gene3 2.584963 4.000000 3.700440
## gene4 3.169925 3.584963 3.700440
## gene5 3.807355 2.584963 3.584963
## gene6 3.321928 3.459432 4.000000

5.7.3 scater

scater是用于单细胞RNA-seq分析的R包(McCarthy等人,2017)。该软件包含几种有用的方法,用于在进一步下游分析之前对数据进行质量控制,可视化和预处理。

scater 具有以下功能:

  • 自动计算QC指标
  • 来自具有伪比对的read数据的转录物量化
  • 数据格式标准化
  • 丰富的探索性可视化分析
  • 无缝集成到Bioconductor宇宙中
  • 简单的规范化的方法我们强烈建议scater用于所有单细胞RNA-seq分析,并且scater是课程第一部分的基础。

如下图所示,scater将帮助您在比对后对表达式矩阵进行质量控制,过滤和规范化。请记住,此图表示scater使用SCESet类的原始版本。在最新版本中,这个数字仍然是正确的,除了SCESet可以用SingleCellExperiment类代替。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单细胞天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5.6.2什么是Rich Data?
  • 5.7.1 Bioconductor
  • 5.7.2 SingleCellExperiment类
  • 5.7.3 scater包
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档