常常遇到有人问起看到分享的教程导入数据的方式是data(dune)等直接调用系统的数据,而自己怎么读入自己的数据呢?

对于初学者来讲,这确实是个问题。如何准备数据、拿到正确格式的数据并导入后续的代码进行分析,是学习和应用过程中的第一个拦路虎。

为什么教程会习惯使用内置数据?

  1. 简单省事、便携可重复;这是内置数据的优势之一;

  2. 内置数据模式清晰,通常可以获得较好的结果;这是内置数据的优势之二;

  3. 别人用这个,我也用这个,这是一个偷懒的做法。

  4. 每个人常识不同。作者可能觉得这个太简单而忽略了初学者的需求。(生信学习学的是什么?常识!

但内置数据的频繁使用是导致初学者学习这个教程时经常提出上面这个问题的原因。

我不太赞成教程里面用使用内置数据,原因是:

  1. 对不会读入数据的人不友好;

  2. 不利于探索这篇教程用于实际数据时可能会遇到的问题。示例数据无脑运行,自己的数据无显著差异。

如果要使用内置数据,也需要额外提供一些信息:

  1. 详细描述内置数据的格式和生物含义,及与真实数据的对应,可以参考画一个带统计检验的PCoA分析结果

  2. 提供真实数据的格式示例和读入真实数据的代码,弥补这个“鸿沟”;
    比如写这篇文章:你的adonis用对了吗?不同因素的顺序竟然对结果有很大影响

  3. 提及可能出现的问题的解决;这也是操作了多套实际数据后,才能写出的部分。

那假如教程没有提供这么详细,自己又得用这个教程,怎么做呢?

自己如何根据教程的数据准备并读入自己的数据

1. 查看数据的结构,了解数据的构成

既然教程提供了测试数据集,不妨仔细看看测试数据集的特征,没准就找着规律了。

我们以前面文章提到的dune数据集为例,查看下其结构特征。

行名字是数字,列名字是字符串(如果我们对这些字符串不熟悉,对我们来说就没任何意义;每个字符都认识,串一起就不知道是啥了~~),中间的值是整数。除此外也看不出其它信息了。

library(vegan)
data(dune)
head(dune)##   Achimill Agrostol Airaprae Alopgeni Anthodor Bellpere Bromhord Chenalbu Cirsarve Comapalu Eleopalu Elymrepe Empenigr
## 1        1        0        0        0        0        0        0        0        0        0        0        4        0
## 2        3        0        0        2        0        3        4        0        0        0        0        4        0
## 3        0        4        0        7        0        2        0        0        0        0        0        4        0
## 4        0        8        0        2        0        2        3        0        2        0        0        4        0
## 5        2        0        0        0        4        2        2        0        0        0        0        4        0
## 6        2        0        0        0        3        0        0        0        0        0        0        0        0
##   Hyporadi Juncarti Juncbufo Lolipere Planlanc Poaprat Poatriv Ranuflam Rumeacet Sagiproc Salirepe Scorautu Trifprat Trifrepe
## 1        0        0        0        7        0       4       2        0        0        0        0        0        0        0
## 2        0        0        0        5        0       4       7        0        0        0        0        5        0        5
## 3        0        0        0        6        0       5       6        0        0        0        0        2        0        2
## 4        0        0        0        5        0       4       5        0        0        5        0        2        0        1
## 5        0        0        0        2        5       2       6        0        5        0        0        3        2        2
## 6        0        0        0        6        5       3       4        0        6        0        0        3        5        5
##   Vicilath Bracruta Callcusp
## 1        0        0        0
## 2        0        0        0
## 3        0        2        0
## 4        0        2        0
## 5        0        2        0
## 6        0        6        0

2. 查看数据的帮助

从数据结构和行列名字上得不到有用信息,那我们查看下帮助信息。

?dune

dune is a data frame of observations of 30 species at 20 sites. The
species names are abbreviated to 4+4 letters (see make.cepnames).

这告诉我们什么呢?这套数据包含了30个物种在20个样品的丰度信息。从dim(dune)可以看出这是一个20行X30列的矩阵;可以推测出,每一行是一个样品,每一列是一个物种
(另一个佐证是列名字长度确实为8个字符,与物种名字的4+4缩写一致)。

注:如果对数据还有疑虑,建议谷歌下数据。常见内置数据集都会有文章描述其信息,可用于佐证你的判断。

dim(dune)## [1] 20 30

这个格式跟我们通常的OTU丰度表
(我们的表通常是每一行是一个物种,每一列是一个样品)略有不同。

3. 基本判断后,读入我们的数据,做可能的转换

如果我们有一个OTU丰度表,怎么读入并转成这个格式呢?

text <- "ID\tSamp1\tSamp2\tSamp3\tSamp4
OTU1\t2\t13\t14\t15
OTU2\t12\t13\t8\t10
OTU3\t22\t10\t14\t11"otu_table <- read.table(text=text, sep="\t", row.names=1, header=T)

读入OTU丰度表,第一行为列名字,第一列为行名字。

otu_table <- read.table("otutable_rare",sep="\t", row.names=1, header=T)

根据上面的分析做一个转置,就可以获得可用于后续分析的输入数据了。

otu_table_t <- as.data.frame(t(otu_table))
otu_table_t##       OTU1 OTU2 OTU3
## Samp1    2   12   22
## Samp2   13   13   10
## Samp3   14    8   14
## Samp4   15   10   11

4. 示例数据中的整数代表什么意思?

这个是比较难确定的部分,只有两个判断方法:1)
教程中作者能够提及(这是最准确的方法);2)凭经验猜测。

这里涉及到另外一个经常会被问起的问题:

我这一步操作需要提供原始数据,还是标准化之后的数据?

绝大多数情况下,我们需要提供的都是标准化之后的在不同样品之间可比的数据。因为:1)我们的需求是比较不同样品的差异,数据需要在样品间可比;2)绝大部分工具是不会对数据做标准化处理的,要么直接用,要么做一些不影响数值关系的转换;3)如果某个工具自己内部会对数据做标准化,它一定会在帮助中提及,常见的比如DESeq2edgeRlimma,除了这两个半(limma算半个,因为它也可以接收标准化后的数据),一时想不起还有哪些工具是接受原始数据的。单细胞的Seurat包算是个例外,它内部调用了一些标准化算法,可以通过参数关掉。

5. 查看更多教程,总会遇到有详细描述所需数据结构的教程。

6. 跟着感觉走,不管三七二十一读进来试试,出现异常或报错再调整。学程序不是做实验,试错成本没有那么大,光看不练是假把式,大胆试才是王道。

7. 最后一步,跟教程作者沟通。我们的教程问题,欢迎在http://www.ehbio.com/Esx发帖讨论;自己努力后,带着问题和思路的讨论更容易获得解答。

生物教程还是得使用生物数据!!!

猜你喜欢

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发NatureCell专刊肠道指挥大脑

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板: Shell  R Perl

生物科普:  肠道细菌 人体上的生命生命大跃进  细胞暗战 人体奥秘

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

点击阅读原文,跳转最新文章目录阅读

抄代码的时候总是遇到原始数据应该长什么样的问题??相关推荐

  1. 丢人了!英伟达抄代码也就算了,竟然把人家的License都改成自己的

    今天一早,营长像往常一样打开手机,来Reddit上看看大家都在讨论啥. 网友Ouitos被人抄代码并改License的声讨,顿时激起了营长的义愤. 仔细看看,搞事的这货竟然还是英伟达!! 根据网友Ou ...

  2. c++数据结构代码整理_抄代码对自己编程提高有用嘛

    仅作学术分享,不代表本公众号立场,侵权联系删除 知乎链接:https://www.zhihu.com/question/387940895编辑:深度学习与计算机视觉 自己刚接触数据结构,完成大作业感觉 ...

  3. UG/NX二次开发-阿飞博客专栏目录(九块九抄代码)

    九块九抄代码,小例子,随时用,随时查,ctrl+c to ctrl+v 方便大家抄代码 博客园免费试看部分UF函数 https://www.cnblogs.com/nxopen2018/ 全部内容请九 ...

  4. 抄代码对自己编程提高有用吗?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 自己刚接触数据结构,完成大作业感觉好难,好奇那些项目是怎么完成的, ...

  5. 初学编程,从抄代码开始就够了吗?看看我的故事!

    程序员学的知识分为两种,一种是偏理论的,例如计算机原理,计算机网络.数据库原理.以及操作系统原理,这些知识都是以理论为基础,注重的理解能力. 另一部分主要以实践为主,就是平常当工具用的,例如 linu ...

  6. 开始慢慢抄代码对自己编程提高有用吗?

    链接:https://www.zhihu.com/question/387940895 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 自己刚接触数据结构,完成大作业感觉好难,好奇那些项目是怎么 ...

  7. 为什么说抄代码是学编程的正确打开方式?

    今天看到一个有意思的问题,抄代码对学习编程有没有帮助? 抄代码不但有帮助,而且帮助非常大,特别是抄那些优秀的开源项目. 说到抄,普遍给人的印象不太好,但在学编程这件事上,抄是屡试不爽的奇招.这里的抄, ...

  8. 程序员从网上抄代码,被老板发现后....

    大家好,我是知了姐! 前几天,逛知乎时看到一个很有意思的话题--"程序员被老板发现从网上抄代码,后果是怎么样?",该问题的浏览量已经3W+了,不少程序员在下方留言回答. 这有人就很 ...

  9. 抄代码对自己编程提高有用嘛

    仅作学术分享,不代表本公众号立场,侵权联系删除 知乎链接:https://www.zhihu.com/question/387940895 编辑:深度学习与计算机视觉 自己刚接触数据结构,完成大作业感 ...

最新文章

  1. SpringBoot请求日期参数异常(Failed-to-convert-value-of-type-'java-lang-String'-
  2. UEFI主板GPT方式安装CentOS 6.4
  3. HDU 1856 Brave Game(巴什博奕)
  4. 少儿编程150讲轻松学Scratch(十二)-用Scratch制作石头剪子布游戏
  5. Java集合(二):List列表
  6. php post 丢失,php post大量数据时发现数据丢失问题解决方法,post数据丢失_PHP教程...
  7. ArrayList 面试10连问
  8. AC日记——[NOI2006]最大获利 bzoj 1497
  9. vs+python 更新pip 成功解决You are using pip version 9.0.3, however version 10.0.1 is available.
  10. tensorflow学习笔记——获取训练数据集和测试数据集
  11. 基于深度学习的CNN边缘检测RCF--Richer Convolutional Features for Edge Detection
  12. type c 网卡 外接网卡 禁用后 不见 消失 找不到 的解决办法
  13. 「星火计划沙龙视频」云原生数据湖专场
  14. strcmp函数的两种实现
  15. UGUI实现Joystick
  16. 3月第2周业务风控关注 |上海市网信办依法对“华尔街见闻”作出行政处罚
  17. Linux网络管理员面试题
  18. C语言考试判断题-PTA
  19. (一)性能测试(压力测试、负载测试)、
  20. 2-10偶数乘2奇数乘3

热门文章

  1. 记一次线上商城系统 Tomcat、JVM 高并发的优化
  2. 微服务发现与注册之Eureka源码分析
  3. 大牛实战归纳——Kafka架构原理
  4. 2018年,关于CAP最精彩的小故事!
  5. Wordpress优化:网站用nginx前端缓存+Redis Cache缓存提速网站
  6. 【Leangoo公开课】精益需求管理和Scrum迭代开发
  7. 卷积、傅立叶变换、拉普拉斯变换、Z变换
  8. 批处理 bat 提取项目war包
  9. easyUI清除序号
  10. 分布式存储系统考虑因素-一致性