|
发表于 2022-7-1 16:00:59
|
查看: 1983 |
回复: 1
一、结构化数据与非结构化数据
什么是数据?数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。数据可以是连续的值,也可以是离散的。
通常数据被认为是数字,但现在数据的含义被拓宽了,它不仅指狭义上的数字,还可以是广义上具有一定意义的文字、字母、数字符号的组合、图形、图像、音频、视频等等,是客观事物的属性、数量、位置及其相互关系的抽象表示。
什么是生物数据?生物数据主要是从生物体上获取的数据,包括基因组,转录组以及蛋白质组等数据。根据数据的组成方式可以分为结构化的数据与非结构化的数据。
结构化数据:信息能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号;
非结构化数据:信息无法用数字或统一的结构表示,如文本、图像、声音、网页等,我们称之为非结构化数据。
简单来说,有规则的表格一般都属于结构化数据,在生物信息分析中,基因组数据是非结构化的,需要通过生物软件处理得到结构化的表格。
二、字符串与数值
数据类型主要表示数据代表哪种内容,是字符串还是数值,逻辑值,或者时间日期等。数值可以用于计算,字符串不能用来计算,逻辑值用来判断等。
在生物信息分析,基因组数据主要都是字符串类型,所以,生物信息分析往往也被认为是字符串处理。
三、CSV 文件与 TSV 文件
生物信息中会有大量表格文件产生,例如 gff 文件,gtf 文件,bed 文件,sam 文件,vcf 文件,blast 比对结果,blat 结果,以及很多生物软件产生的结果都是表格格式。表格文件主要分成逗号分割的csv格式和制表符分割的tsv文件。注意制表符分割与空格分割是不同的,要注意区分分隔符,例如 bed 格式文件,如果换成空格分隔符会出现问题。
3.1 csv 文件
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV 文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。
3.2 tsv
TSV:tab separated values;即“制表符分隔值”,制表符分割的文件在生物信息分析中更加常见。tsv 的文件扩展名有多种,可以是 tsv,txt 等。
四、换行符
在文本文件处理过程中,换行是一个非常重要的概念。由于我们常常需要在 Linux 和 windows不同平台之间切换操作,常常就会遇到换行引起的问题,这给文件处理造成很多麻烦,有时候还会出现错误的结果。
顾名思义,换行符就是另起一行,在一样文本结束的时候给系统一个标示。用“\n”标示,否则输出结果都连接到一起了。回车符就是回到一行的开头,用反”\r”标示,所以我们平时编写文件的回车符应该确切来说叫做回车换行符。无论是回车还是换行符都是没有显示的,都属于空白。问题是不同系统之间用来控制换行的标识符不同。
- 在 linux 系统下是换行\n;
- 在 mac 系统下是回车\r;
- 而在 windows 系统下回车加换行两个字符\r\n;
复制代码 在 linux 下用 cat 命令加-A 选项就会显示出文件结尾换行标识符。换行现实为 dollar 符,而回车则显示为倒三角大 M 标识。我们可以比较三种系统平台结尾标识符的差异,其中windows 系统文件结尾是回车加换行两个符号。
那么怎么解决这个问题呢。Linux 下有 dos2unix,unix2dos,unix2mac,mac2unix 等命令来进行格式转换,使用起来非常的方便,直接输入文件即可。在源文件上进行转换。
五、生物信息常见文件格式
生物信息本质上是利用生物软件处理生物数据,不过在执行的过程中就变成了各种文件格式的相互转换。有生物信息学家开玩笑说自己每天的工作就是文本格式转换,其实是这样的,例如测序就是将 DNA 样品转换为 fastq 格式,拼接就是从 fastq 到 fasta,比对就是从 fastq到 bam,编译检测从 bam 到 vcf 等。数据分析就是从文本到表格,表格到图表。所以,了解生物数据的文件格式,并且能够使用相应的工具处理很重要。生物信息最常用的就是 fastq,fasta,bam 以及 vcf 四种格式,此外还有 genbank,maf,psl,axt,gff,gtf,bed 等格式。UCSC 上有一个页面专门介绍每一种生物信息文件格式的具体内容。当需要了解每种格式的内容,可以到该网站进行查看。
文件格式介绍:https://genome.ucsc.edu/FAQ/FAQformat.html#format1
六、管理数据流
1 重定向
linux 系统软件的标准输入,标准输出以及错误输出。标准输入输出是软件工具设计原理里最基本的观念。程序需要有一个数据来源,数据出口,以及报告问题的地方。我们使用生物软件来处理生物数据。输入文件就是我们要处理的原始文件,比如测序的序列,将数据交给软件,最终软件正确输出的结果就是我们要的结果。如果软件执行有问题,则会输出错误提示。我们拿一条序列去 NCBI 做 blast 比对也是一样的道理,输入一个序列,交给后台软件处理,等待返回结果。
Linux 启动后,会默认打开 3 个文件描述符,分别是:标准输入 standard input 0,标准输出;standard output 1,错误输出:error output 2。 标准输入 (stdin) :代码为 0 ,可以直接从键盘输入,也可以通过文件输入。在所有的编程语言中,也会涉及到这三个内容。
如果不需要输出内容,既不让屏幕输出,也不想要保存到一个文件中,这个时候可以使用/dev/null 这个“黑洞”文件。这样输出内容将直接丢弃。
- #写入黑洞文件
- ll ../data/demo.sam 1>/dev/null
- #使用错误输出
- ll ../data/demo.sam 1>/dev/null 2>stderr.txt
复制代码
2 管道
管道就是一条竖线,是键盘上位于退格键与回车键之间的键,同时按下键盘上的 Shift+反斜杠(\)键即可输入管道符,其执行格式为“命令 A | 命令 B”。管道命令符的作用也可以用一句话概括为“把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入”。
其实管道的作用与现实中的管道意义相似,都是改变“流”的方向,一个是改变水流电流风流等,另外一个是改变数据流的方向。通过管道可以将很多软件连接起来,例如一个软件的输入作为下一个软件的输出。使用管道符无需保存中间文件,将很多命令连接起来极大的提高的工作效率。
- #使用管道
- ps -aux | grep "root" | wc
复制代码
3 参数传递 xargs
xargs 命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs 能够处理管道或者 stdin 并将其转换成特定命令的命令参数。
xargs 是一个强大的命令,它能够捕获一个命令的输出结果,然后传递给另外一个命令。之前管道也是传输数据的作用,但是 xargs 与管道不同,管道传递的是数据流,而 xargs 则能够进行参数传递。所以,xargs 也是一个非常高效的命令。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是 echo,空格是默认定界符。这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是构建单行命令的重要组件之一。
- #1 将内容拆成多列显示
- cat ../data/xargs.txt | xargs
- cat ../data/xargs.txt | xargs -n 3
- #2分割符
- cat /etc/passwd | xargs -d ":"
- #将一行内容分成三列
- echo {a..z} | xargs -n 3
- #4 将目录下全部fa找出来,拷贝到当前目录下
- find ../corona/ -name "*.fa" | xargs -t -I{} cp {} ./
- #搜索名字为sleep的进程,然后kill掉
- sleep 20 &
- ps -u $USER | awk '/sleep/ {print $1}' | xargs echo kill #echo显示下命令再去掉后执行
- ps -u $USER | awk '/sleep/ {print $1}' | xargs kill -9
- pidof sleep | xargs kill -9
复制代码
|
|