常常遇到有人问起看到分享的教程导入数据的方式是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发帖讨论;自己努力后,带着问题和思路的讨论更容易获得解答。

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

往期精品(点击图片直达文字对应教程)

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

我是不会运行你的代码吗?不,我是不会导入自己的数据!相关推荐

  1. c语言说我是猪不然自动关机,【整蛊代码】说我是猪,不说60秒就强制关机

    第一步:新建个文本文档,在文本里写上下面的代码: on error resume next dim WSHshellA set WSHshellA = wscript.createobject(&qu ...

  2. ie运行不了java脚本界面_IE浏览器不能运行js JS代码失效不能运行了如何解决

    IE浏览器不能运行js JS代码失效不能运行了如何解决 发布时间:2012-02-20 16:39:23   作者:佚名   我要评论 IE不能运行js,在IE浏览器js代码失效,js不能运行了怎么办 ...

  3. 浅析 Node.js 的 vm 模块以及运行不信任代码

    为什么80%的码农都做不了架构师?>>>    在一些系统中,我们希望给用户提供插入自定义逻辑的能力,除了 RPC 和 REST 之外,运行客户提供的代码也是比较常用的方法,好处是可 ...

  4. R语言使用tryCatch函数调试R代码实战:tryCatch函数运行正常R代码、tryCatch函数运行有错误(error)的R代码示例/tryCatch函数运行有警告(warning)的R代码示例

    R语言使用tryCatch函数调试R代码实战:tryCatch函数运行正常R代码.tryCatch函数运行有错误(error)的R代码示例/tryCatch函数运行有警告(warning)的R代码示例 ...

  5. python打完代码怎么运行-Python的代码是如何去进行运行的?

    近年来,Python语言迅速崛起,其简洁.免费.易学习.兼容性好等特点以及其面向对象.函数式编程.过程编程.面向方面编程,受到众人的喜爱.与其他编程程序的语言基本相同,Python也是需要在相应的程序 ...

  6. deepin终端编译c程序_C/C++知识点之Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译运行,格式化代码)...

    本文主要向大家介绍了 C/C++知识点之Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译&运行,格式化代码),通过具体的内容向大家展示 ...

  7. TypeScript的安装步骤、运行问题及代码的简单运行

    TS 和 JS 相对比的优势 TypeScript的安装步骤.运行问题及代码的简单运行 TypeScript学习笔记1:变量赋值及书写方式 TypeScript学习笔记2:数据类型 TypeScrip ...

  8. VS(visual studio)如何查看预处理后的文件?(查看宏定义展开,头文件展开等)(注意如果要运行或调试代码,要把第一步的改回来!!!!)

    如图,右键点击项目,选择属性: 找到预处理器–>预处理到文件,选择是,点击应用 找到项目中需要查看预处理后的文件,点击编译 打开被编译文件所在文件夹 进入debug文件夹 这个main.i就是我 ...

  9. 运行iDT算法代码及后续特征编码

    DT&IDT算法应该算是行为识别领域中经典中的经典了,自从13年提出以来,在HMDB-51和UCF-101等若干个数据库上得到了非常好的效果,虽然DT&IDT算法做不过深度学习,但是由 ...

最新文章

  1. 98年建模a题论文_2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题,定价评价...
  2. android sqlite 中 创建表 不要使用 IF NOT EXISTS + TA...
  3. arcgis制作空间变化图怎么做_【教程:如何使用ArcGIS10.2制作气温空间分布图】...
  4. linux设备驱动归纳总结
  5. Tesorflow源代码安装方式以及错误的解决方法
  6. asp.net 页面静态化
  7. BZOJ 1295: [SCOI2009]最长距离 spfa
  8. k8s高可用集群_搭建高可用集群(部署master2和node节点)---K8S_Google工作笔记0058
  9. JavaScript学习(七十四)—递归函数
  10. JDK、J2EE、J2SE、J2ME的区别(转-2021-04-30)
  11. Delphi各个版本的官方下载地址
  12. 来自资深程序员的 3 条锦囊:永远不要辞职,除非……
  13. HTTP协议的详细介绍
  14. python 爬虫 简单爬虫教程(requests + selenium )
  15. 奥维互动地图GEE协议历史影像分析与应用
  16. google有自定义文章流畅度的伪原创工具吗
  17. 多用户博客BLOG系统大全
  18. 核心频率个加速频率_今年前 9 个月全工序实现负能炼钢,本钢板材炼钢厂绿色清洁生产频率加快...
  19. 舒亦梵:现货黄金入门小知识,你知道多少
  20. GitHub 术语解释

热门文章

  1. 作者:孙忠富(1957-),男,中国农业科学院农业环境与可持续发展研究所研究员。...
  2. 作者:杜克明(1980-),男,中国农业科学院农业环境与可持续发展研究所助理研究员。...
  3. 作者:熊森林(1988-),男,中国科学院国家空间科学中心助理研究员
  4. 【2016年第5期】多“源”异“构”培养大数据创新型人才
  5. 【2015年第4期】基于电力运营大数据分析实现节能减排
  6. 《大数据》2015年第3期“专题”——网络表示学习(上)
  7. 软件测试——0319作业
  8. 笔记:后端 - Redis
  9. Spring Boot 使用 AOP 实现页面自适应
  10. 【转】SyntaxError: Non-ASCII character ‘\xe5′ in file