当前位置:文档之家› 高通量数据处理的一些经验和建议

高通量数据处理的一些经验和建议

高通量数据处理的一些经验和建议
高通量数据处理的一些经验和建议

高通量数据处理的一些经验和建议

最近一年时间里收到很多同学和朋友关于454数据处理的询问,通过QQ,微信,人人网和邮件等各种途径,当然不少也是面对面的讨论。这些同学和朋友包括同组的,跨组的,同所的,跨所的,其他大学的,来自北京的、南京的、广州的、西安的,甚至也有国外的中国朋友。有些朋友我素未谋面,也不知长相如何,不知男女。有时候同一天能收到五六份邮件,问题之五花八门,有时已经超越了我所能够解答的范围。

这些现象也反映了当前生物信息学的急剧变革,第二代测序技术就像Iphone问世一些,彻底席卷和重新定义了当前生态学研究的方法和手段。而几年前费用昂贵的第二代测序如今已“旧时王谢堂前燕,飞入寻常百姓家”,于是乎大潮裹挟之下的硕士生博士生们都想出来耍耍,扔个十几万块钱,希望能够轻松的收获几篇文章。

科研论文的发表讲究“猎奇性”,大家都喜欢看到新奇的方法和漂亮的图表。但我认为这其实也是当今科研界的弊端之一,讲究创新和手段的先进,而忽视了研究的重要性。以微生物生态学的旗舰杂志ISMEJ为例,最近一年多发表的学术论文里,第二代测序技术已经是寻常方法,所谓第三代的单细胞测序技术也开始出现。研究生物信息学的来自美国科罗拉多的Rob Knight能够作为ISMEJ的高级主编,方法对于微生物生态学研究的重要性可见一斑。

前几天读到阿伯丁大学的James Prosser教授在Nature上发表的一篇观点文章“Think before you sequence“,在这里面他讲到,第二代测序只不过是一个工具而已,我们的研究依旧要从扎扎实实的假设出发,设计实验来解决问题和验证假设。高通量测序并不能弥补实验设计的缺陷。我在阅读文章的过程中也发现,设计合理和完整的实验,即使使用传统的Sanger 测序技术,依旧能够说明和解决问题,并能够发表到高档次期刊上。而如果使用第二代测序技术,但是数据处理有问题,数据质量控制不好,文章也很难得到发表,相当于花钱买罪受。

我从2011年秋天开始学习454数据的处理,在学习的起始阶段,能够和师弟袁超磊一起探讨和交流,并且几乎阅读了ISMEJ上所有与第二代测序技术有关的文章,所以能够很快的上手。在此我也对师弟袁超磊表示正式的感谢,祝愿他在阿德雷德大学能吃上可口的饭菜。

很多朋友的问题我未能一一解答,在此也表示歉意。我经历过学习454数据处理的漫长和痛苦的过程,我很清楚有时候一句话或者一段话很难解决所问的问题。去年我自己投出的文章经历了很多次的拒稿,十几位审稿人和生物信息学家对数据处理提出了建议,现在经过在悉尼和生物信息学专家的讨论,我也能够更加合理地看待数据处理的问题。摸着石头过河的一些经验和建议,在这里进行分享,希望正在摸索和思考中的你,觉得并不孤单。

1. Mothur和QIIME那个软件更好?

Mothur是美国密歇根大学的Patrick Schloss在2009年开发的数据处理平台,它的前身是Dothur软件,相信大家都听说过。这两个软件的发音分别为Mother和Daughter,是Dr Parick献给他的妻子和女儿的。另一个被广泛使用的数据处理平台是QIIME,也是美国科罗拉多Rob Knight等人于2009年开发出来的。截至今天,Mothur的方法文献已经被引用1229次,而QIIME被引用574次。这说明Mothur比QIIME有更广泛的群众基础。

我刚开始学习使用的就是Mothur,我个人非常喜欢这个开源的数据处理平台,基本能够实现我的所有数据处理目的。Mothur软件无需安装,在Windos, Linix,和MacOS系统上都可以运行。我研究了Mothur每一个中间导出文件的格式和原理,所以我能够将这些中间产生的文件导入其他软件进行处理和做图,比如R语言。很多人不喜欢Mothur,都是因为Mothur不能够直接出图,必须依赖于其他软件。而这正式我所喜欢的原因,我现在也正在进一步学习R语言,R的做图功能是非常强大的,其实大家平时看到文章上那些非常漂亮的图,大都是R语言做出来的。所以,如果将Mothur和R结合,我认为是一个能正确处理数据并完美展现数据的途径。除了罗氏454数据处理之外,Mothur现在也有了针对Illumina 数据的处理方式,大家从Mothur的网页上就可以读到Dr. Patick写的标准数据处理流程。

现在QIIME携苹果电脑的时髦,也得到了很多人的青睐。这个软件我本人没有真正使用过,但是知道QIIME只能在MacOS和Linix系统上运行,当然也可以通过在Windos系统上安装Virtual Box来运行。这个软件出图的效果比较好,很多人把直接出的图用来发表文章。我所在的悉尼这边的研究所的生物信息学专家也是用QIIME来处理数据。我就这个软件问题和他讨论了好多次。基本来说,两个软件都可以帮助我们实现正确的数据处理,并不存在哪个更好的问题,只有个人在使用上的喜好。

我希望你无论使用那个软件,都仔仔细细阅读软件网页上的教程,并熟悉所有的命令。自己一一试试各个命令,合理组合命令,这样才会通过修改命令来正确处理自己的数据。这个过程没人可以帮你,只有你自己能够救赎自己。

2. 数据处理难学吗?

这是一个我一直以来很想告诉所有人的问题。说实话,那两个软件都很好使用,有标准的处理流程在那里等着你,把所有数据处理下来绝对不超过十天时间。但是,为什么我们几个月甚至一年都拿不下来数据处理?

因为数据处理的难点不在于软件的使用,而在于你对微生物生态学基本概念的了解。我认为我们需要在数据处理之前就应该特别清楚的是1)α多样性的各种指标。数据条数的多少会直接影响α多样性的计算结果,它们之间是正相关关系。所以计算α多样性必须统一序列条数。而我们知道统一序列条数就会舍弃很多条数不足的样品,这个取舍就涉及到很多的经验问题,需要你阅读很多的文献来了解;2)β多样性的表征方式。我研究β多样性的时候,阅读了很多相关的文献,对Bray-Curtis指数,UniFrac等都非常了解。选择能够最好表现你多样性差异的指数,需要花很多很多的汗水。3)多元统计方法。这个又是更大的难点了,Mothur 不会告诉你,QIIME也不会告诉你。你只有去阅读教材,阅读文章,才能弥补这些缺陷。不然你连那些命令都读不懂,还谈什么数据处理,修改命令。4)文章的构思。这又是更高一级的知识预储备了。在你的数据处理之前,请阅读所有高质量期刊上的相关文章,至少需要预估计,你可以出哪些图,做哪些分析。其实在数据处理的过程中已经是你不断验证假设和推翻假设的过程。

希望你在数据处理之前踏踏实实地做好这些功课,不然你很难完美运行各个命令。另外,要仔细研究各个软件的原理,做到人机合一的效果。因为有时候软件并不能解决所有问题,比如在alignment的时候,有时候在部分区域比对效果不好,你需要使用合适的软件打开这些中间文件,手动进行删除,不然会影响后续的多样性计算。所以,你需要把自己练成一台机器。2010年我做过同位素超高速离心,尽管已经有很多文献可供参考,我当时还是研究了离心机的原理和等密度梯度离心的原理,所以自己就很清楚应当如何优化实验条件,获得最好的数据。

3 细菌和古菌16S数据和功能基因数据处理的不同?

如果你处理的是细菌16S数据,那么恭喜你,你应该很容易完成数据处理,因为Mothur 和QIIME都包含了细菌16S比对和分类的数据库。因为细菌的研究已经非常多,所以分类的效果也很好,未知的类别一般也很少。

如果是古菌16S的话,RDP,Greengenes,SILVA等数据库我都用过,分类效果都很差,但是不影响你的多样性分析。因为古菌的纯培养仍然很少,分类问题仍然是处于发展阶段。你基本也可以顺利按照标准流程完成数据处理。

但是功能基因的话,就面临很大很大的难题。如果想测序功能基因的同学,一定要三思而后行,我自己在这方面进行了很多的尝试,虽然知道处理的方式,但是解释起来真的很难。就像我在上面所说的,如果你不了解Mothur和QIIME的文件格式,基本架构,我很难告诉你怎么去实现自己的目的。所以大家也可以看到,现在发表的关于功能基因测序的文章很少很少。大家基本都是DIY,都是一些很熟悉生物信息学的国外实验室发表的。希望你能认识到功能基因处理的难点1)第一步是比对alignment,一开始就做不了。因为没有可供使用的alignment reference数据库。我的经验是自己做一些,从NCBI上下载功能基因序列,然后自己通过MUSCLE或者ARB比对的很齐,然后作为参比序列;2)分类。这个更难,需要经过alignment之后,分成不同的OTU,然后从每个OTU中选择一个代表序列,通过BLAST 进行分类。3)分OTU。对于细菌和古菌16S而言,97%代表species水平,但是功能基因就完全不一样。以氨氧化微生物研究为例,AOA的species-level OTU应当是87%,而AOB

应当是80%,所以和16S数据完全不同。

对于必须要做功能基因的同学,我建议可以考虑基因芯片(microarray)的方法。现在针对pmoA和amoA基因的基因芯片都已经开发的非常完善,国际合作也不是难题。Microarray 通过设计的探针合理解决了分类的问题,价格比454测序也便宜,数据处理简单。所以我认为是一种更好的方式。

以上所写,难免有错误之处。我以分享知识为乐趣,也祝各位同学和朋友数据处理顺利。

Mothur 命令手册-Mothur命令中文解释(一)

Align.check

这个命令使你计算16S rRNA基因序列中潜在的错配碱基对数目。如果你对

ARB(http://www.arb-home.de/)的编辑窗口熟悉的话,这与计算~,#,-和=这些符号的数目相同。用greengenes的二级结构图谱和esophagus dataset运行这个命令。要运行这个命令,你必须提供FASTA格式的序列文件。

Align.seqs

这个命令把用户提供的FASTA格式的候选序列文件对齐到用户提供的同样格式的模板序列。通用的方法是:

1.采用kmer searching(https://www.doczj.com/doc/5d11549423.html,/apps/mediawiki/kmer/index.php?title=Main_Page),blastn或suffix tree searching找到每个候选序列的最接近模板

2.在候选序列文件和空位模板序列之间进行碱基配对,采用Needleman-Wunsch,Gotoh,或者blastn算法规则。

3.重新在候选和模板序列对之间插入间隔(空位),采用NAST算法,这样候选序列就能与原始模板序列兼容。

我们提供了一些16S和18S基因序列的数据库,这些是与greengenes和SILVA队列兼容的。然而,自定义的任何DNA序列的排列都可以用作模板,所以鼓励用户分享他们的排列供其他人使用。普遍来说,进行排列是很快的-我们能在3小时内将超过186000个的全长序列排序到SILVA排列中,而且质量像SINA aligner做的一样好。另外,这个速率可以由多个处理器加倍。

Amova

分子方差分析(Analysis of molecular variance)是一种传统方差分析的非参数模拟。这种方法被广泛应用在种群遗传学以检测关于两个种群的遗传多样性不是显著不同于由这两个种群的共同联合导致的多样性这样一个假设。

Anosim

参考文献:Clarke, K. R. (1993). Non-parametric multivariate analysis of changes in community structure. _Australian Journal of Ecology_ 18, 117-143. 群落结构变化的非参数多元分析《澳大利亚生态学报》

Bin.seqs

这个命令输出一个fasta格式的文件,其中序列根据它们所属的OTU进行排序。这样的输出也许对一个OTU生成特异性引物有帮助,用来对序列进行分类。

Catchall

这个命令使mothur与Linda Woodard,Sean Connolly和John Bunge开发的catchall程序连接。

获取更多信息,请参看https://www.doczj.com/doc/5d11549423.html,/catchall/index.html。catchall的可执行程序必须与你的mothur在同一个文件夹里。如果你是一个Mac或Linux用户,你必须也安装了mono,在catchall的网页中有一个关于mono的链接。

Chimera.bellerophon

采用Bellerophon方法生成一个挑选的优先嵌合序列的得分列表。

https://www.doczj.com/doc/5d11549423.html,ode

采用Ccode方法。对每个词语,在查询序列和参考序列之间对比距离的差异,以及参考序列与它们自己。

Chimera.check

采用chimeraCheck方法...注意:从RDP模型中,这个方法不能决定一个序列是否是嵌合的,但是让你决定那些基于产生的IS值的序列。

查看“查询的序列的左边到它的最近的匹配的距离+查询的右边到它最近的匹配的距离-整个查询序列到它最近的匹配的距离”,通过多个窗口

Chimera.perseus

这个命令读取并命名一个fasta文件,输出潜在的嵌合序列。

Chimera.pintail

采用Pintall 方法。在不同的窗口中查询一个序列,查看期望的差异与观察到的差异之间的不同

Chimera.seqs

这个命令已经被拆分为6个分离的命令。

目前,mothur执行六种方法以确定一个序列是不是嵌合的。如果有一个你喜欢看到的算法可以实施,请考虑一下或者贡献给mothur项目,或者联系开发者,我们将会考虑我们能做什么。

chimera.bellerophon

chimera.pintail

chimera.check

https://www.doczj.com/doc/5d11549423.html,ode

chimera.slayer

chimera.uchime

Chimera.slayer

这个命令读取一个fasta文件和参照文件,并输出潜在的嵌合序列。原始算法的开发者建议采用一个特殊的模版参照(例如,gold)。我们用silva参照文件提供silva-based 排列的数据库。你将需要在blast/bin文件夹中有megablast和formatdb可执行文件的拷贝,这里blast 文件夹与mothur可执行程序相邻。megablast/formatdb的版本可以在这里

ftp://https://www.doczj.com/doc/5d11549423.html,/blast/executables/release/2.2.25/找到,或者它们就包含在mothur的程序版本中。

Chimera.uchime

这个命令读取一个fasta文件和参考文件,并输出潜在的嵌合序列。原始的uchime程序是由Robert C. Edgar编写的,并且贡献为公共所有。

https://www.doczj.com/doc/5d11549423.html,/uchime/

Chop.seqs

这个命令读取一个fasta文件,输出一个.chop.fasta,包含着修剪的整理的序列。它可以用于排序的和未排序的序列。

Classify.otu

这个命令用来为一个OTU得到一个共有序列分类.

Classify.seqs

这个命令允许用户使用多个不同的方法把他们的序列分配到他们选择的分类提纲(轮廓)中。当前的方法包括采用一个k-nearest邻近共有序列和Bayesian方法。分类提纲和参考序列可以在taxonomy outline(https://www.doczj.com/doc/5d11549423.html,/wiki/Taxonomy_outline)的页面中获得。这个命令需要你提供一个fasta格式的输入文件和数据库序列文件,还要有一个为了参考序列的分类文件。

Classify.tree

这个命令用来为一个进化树的每个节点获得一个共有序列。

Clear.memory

这个命令从内存中删除保存的参考数据,你可以在已经用以下命令(align.seqs, https://www.doczj.com/doc/5d11549423.html,ode, chimera.check, chimera.pintail, chimera.slayer和classify.seqs)之一使用过保存参数之后使用chear.memory.

Clearcut

这个让mothur用户在mothur内部运行clearcut程序。chearcut程序是由Idaho大学的Initiative for Bioinformatics和Evolutionary Studies(IBEST)编写。了解更多clearcut相关信息,参看https://www.doczj.com/doc/5d11549423.html,/clearcut/。注意,在版本1.13.0中,clearcut源码已经加进mothur,所以你不再需要clearcut的可执行程序。当然,如果你愿意,你仍可以从这里下载clearcut的可执行文件https://www.doczj.com/doc/5d11549423.html,/wiki/Download_Clearcut

Cluster

一旦一个距离矩阵读进mothur,cluster命令就能用来给OTUs分派序列。目前,mothur采用三个分簇方式。

最近邻:从OTU的最相似序列,一个OTU内的每一个序列都最多x%的距离

最远邻:一个OTU内的所有序列与OTU内的所有其它序列最多有X%的距离

平均邻近:这个方法介于另外两个算法的中间水平

如果您有一个算法,请考虑一下贡献给mothur项目。

Cluster.classic

这个命令可用于把序列分配到OTUs.它是cluster的dotur工具,目前mothur采用三个分簇方式。

Cluster.fragments

这个命令需要一个fasta格式的文件,也要提供

一个命名的文件而且当一个序列被确定为一个更大的序列的一部分时,列出的与序列名相关的指明文件就会被合并。

Cluster.split

这个命令用来分配序列到OTUs并输出一个.list, .rabund, .sabund文件.它把大的距离矩阵拆分为小的部分。

Collect.shared

这个命令给计算器生成一个收集曲线,描绘出不同群落间的相似性或它们的共有丰度。Collector's curves描绘随着你样本增加的个体,丰富度和多样性的变化。如果Collector's curves 变得与x轴平行,你可以合理的确信你在采样这个工作上做的很好,并且相信曲线上的最终值。否则,你需要继续抽样(采样),mothur能为collector's curves生成数据,就像sons做的那样。当时sons将数据呈现在sons文件中,实际上不可能被新手分析解读。mothur解决了许多这样的问题,因为mothur为每一个估计值产生分离的文件。

Collect.single

Collect.single利用计算器(https://www.doczj.com/doc/5d11549423.html,/wiki/Calculators)生成collector's curves,描述了丰度,多样性和样本的其他特征。Collector's curves描绘了你抽取额外的个体时丰度和多样性的变化。

Consensus.seqs

这个命令可以以两种方式使用:从fasta文件创建一个共有序列,或者由一个list文件为每个OTU创建一个共有序列。序列必须进行排列。

Consensus.seqs的参数(特征,因素)是fasta, list, name和label

Cooccurrence

这个命令计算四个度量并且测试他们的显著性以评估是否样式的存在与否比起那些随机期待的有所不同。

Corr.axes

这个命令将会计算在shared/relabund文件中每一行(或列)的相关系数,记录在一个pcoa 文件所显示的轴线上。

Count.groups

这个命令从一个特定的组(group)或者一套组算出序列,从下面这些文件类型:group或者shared文件.

Count.seqs

这个命令计算在一个name文件中的代表性序列所代表的序列的数目。如果提供了一个group 文件,它也会提供使group计数崩溃。

Create.database

这个命令读取一个list文件,*.cons.taxonomy, *.rep.fasta, *https://www.doczj.com/doc/5d11549423.html,s和可选的group文件,并且创建一个数据库(database)文件.

Degap.seqs

这个命令读取一个fasta文件并输出一个.ng.fasta文件,它包含所有间隔字符都被移除后的序列。

Deunique.seqs

这个命令是unique.seqs的反向命令,从一个fasta和name文件创建一个fasta文件。Deunique.tree

这个命令把冗余序列标识符重新插入一个唯一的系统树。

Dist.seqs

这个命令将计算两个排序的DNA序列间不正确的成对距离。这个方法比通用的DNADIST 更好,因为这些距离不是存储在RAM(随机存储器)中,它们直接打印到一个文件。而且,通过它可以忽略可能不感兴趣的“大的”距离。这个命令将产生一个列格式的距离矩阵,这个矩阵与read.dist命令中的“列选项”相互兼容。这个命令也能生成一个phylip格式的距离矩阵。它有多个如何操纵gap比较和末端gap的选项。

Dist.shared

这个命令将会生成一个phylip格式的距离矩阵,描述多个组的差异性。这个命令将会计算任何一个描述群落成员或结构相似性的计算子(calculator)。

https://www.doczj.com/doc/5d11549423.html,

这个命令读取一个fastq文件,并创建一个fasta和quality文件。

Filter.seqs

filter.seqs从基于一个由用户定义标准的排列删除列。例如,生成的与参照排列相对的排列经常有一些列的每一个字符是“.”或者“-”。这些列不会包含用于计算距离,因为他们本身没有信息。通过删除这些列,计算大量的距离这一过程就会加快。同样,人们也喜欢用温和的

或强制的屏蔽方式(比如Lane' mask)屏蔽他们的序列来移除可变区域。这类屏蔽只在深层次系统进化分析时鼓励使用,而在精细水平的分析比如需要计算OTUs中不建议。

Get.coremicrobiome

这个命令决定可变数目的样本中的OTUs的片段,为了不同的最小相关丰富度。

Get.current

这个命令允许你找出mothur已经为每个类型保存为current的一些文件,你也可以清空current文件。

Get.group

这个命令允许你为储存在内存中的多个样本的OTU数据获得一个已有的不同群组的目录。这个特征应该在为其它命令使用group选项时有帮助。

Get.groups

这个命令从一个特定group或一套groups选择序列。group来自以下文件类型:fasta,name,group,list,taxonomy.

https://www.doczj.com/doc/5d11549423.html,bel

这个命令是你为当前储存在内存中的每行OTU数据获得一个标签的目录。这个特征应该在为其他命令使用label选项时有帮助。

Get.lineage

这个命令读取一个taxonomy文件和一个分类(taxon),并产生一个新的文件只包含有来自分类的序列。你也许也会把一个fasta, name, group, list或者align.report 文件包括到这个命令中,mothur将会为那些只包含有选定序列的文件生成新的文件。

Get.otulist

这个命令解析一个list文件并且为每一个包含两列的距离创建一个.otu文件。第一列是OTU 数目,第二列是那个OTU中的序列的列表(list)。

Get.oturep

bin.seqs命令能为所有序列报告OTU号码(即编号),get.oturep命令生成一个fasta格式的序列文件,为每个OTU只包含一个代表性序列。为每个OTU的定义生成一个.rep.fasta

和https://www.doczj.com/doc/5d11549423.html,s文件。

Get.otus

这个命令选择出包含有来自一个特定group或一副groups的序列的OTUs.

Get.rabund

这个命令将生成一个rabund文件,它基于你输入到mothur的OTU数据。

Get.relabund

这个命令计算一个样本中的每个OTU的相对丰富度。它将输出一个.relabund文件。

Get.sabund

这个命令将产生一个sabund文件,基于你读入mothur的OTU数据。例如,如果你读入一个list文件,get.sabund将产生对应的sabund文件。

Get.seqs

这个命令把一个序列名字的列表(list)和一个fasta,name,group,list或align.report文件生成一个新的文件,只包含在list中出现的文件。这个命令也许用于和list.seqs命令结合以帮助显示一个序列结合。

Get.sharedseqs

这个命令取一个list和group文件并为每个距离输出一个*.shared.seqs文件。这对于那些情况有用,即你或许对于确定特殊groups中特定的或共有的序列感兴趣。这样接下来你就可以分类。

这些是mothur H-Z的目前所有命令的说明的翻译,第二部分。(使用Ctrl+F搜索你所查命令)

参看https://www.doczj.com/doc/5d11549423.html,/wiki/Category:Commands 页面上查阅的所有命令

我查了一下网上的中文教程,似乎没有。

现在国内使用Mothur的人还很少,不过国外有不少做生态的都用到mothur了。毕竟有很多都是命令行操作。

前天我还搜到了一个印度人在网上发的询问帖子,想问哪里有关于mothur的简单教程呢,他说mothur官方网站的教程有点难,看不太懂。

今天这些命令里有三个可能会比较常用,一个是help,就类似于Linux中的man命令,也就是你在windows中常见的帮助文件。

还有两个,sffinfo和pipeline.pds,在处理sff文件时会用上。

其中sffinfo就能将sff文件转化为fasta格式的文件,fasta是mothur处理的文件中最常见的格式。

由于最近我要处理一个sff文件,所以特别关注了与sff有关的命令,呵呵。

Hcluster

这个命令可以用来给OTUs分配序列,并输出一个.list, .rabund, .sabund和.sorted.dist文件。它不会像cluster命令那样把距离矩阵(distance matrix)保存在RAM(随机存储器)中,允许大距离文件被处理。Hcluster对小文件的处理比cluster要慢,但在大文件上更有竞争力。目前,hcluster实行4种成簇方式:

1.最近相邻:一个OTU内的每个序列与OTU中最相似的序列有最多X%的距离。

2.最远相邻:一个OTU内的所有序列与OTU内的其它序列有最多X%的距离。

3.平均相邻:这个方法介于其他两种方法之间的水平

4.重量相邻:

Heatmap.bin

这个命令从一个*.list或*.shared文件提供的数据生成一个heat map。heatmap中的每一行呈现一个不同的OTU,每个组中的OTU的颜色根据那个组内那个OTU的丰富度在黑与红之间形成成比例。这个命令会生成一个SVG文件(图片格式),它可以在GIMP或Adobe Illustrator中被进一步修改。有一些选项用于为每个采取不同方法的OTU相对丰度按比例绘制或排列。

Heatmap.sim

这个命令将会产生一个表明多个样本之间成对相似性的heatmap,采用了多个对比群落成员和结构的calculators(https://www.doczj.com/doc/5d11549423.html,/wiki/Calculators)

Help

help命令将会输出mothur中有效命令的表单。或者,如果你想要针对一个特定命令的帮助信息,用help作为选项,比如mothur > read.list(help),就会输出read.list的帮助信息。Homova

分子方差的同质性(Homogeneity of molecular variance)是一个为方差同质的Bartlett's test 的非参数模拟,这已经被用于种群遗传学,检测以下假设:两个或多个种群的基因多样性是同类的或同质的(Stewart and Excoffier,1996);这个测试还没有用于微生物生态学文献。Indicator

这个命令可以三种方式运行:

1.用一个shared或relabund文件和一个design文件

2.用一个shared或relabund文件和一个tree文件

3.用一个shared或relabund,tree文件和design文件

Indicator命令输出一个.indicator.summary文件和一个.indicator.tre文件,如果给了一个tree。新的tree在每个内部的节点包含了标签。标签是节点号码,所以你可以把tree关联到summary 文件。Summary文件为每个OTU的每个节点列出了indicator的值。

Libshuff

这个命令像以前在s-libshuff和libshuff程序中那样实施libshuff方法。libshuff法是一个描述两个或更多群落是否拥有相同结构的通用测试,采用Cramer-von Mises检测统计。这个检测统计值的显著性表明了群落(偶然)拥有同样结构的可能性。因为每个成对的对比需要两个显著测试,所以为多个对比进行一个矫正(比如Bonferroni's correction)。

List.seqs

这个命令将会写出在一个fasta,name,group,list或align.report文件中发现的序列名字。这对于使用get.seqs,remove.seqs命令和生成group文件时有用。

Make.biom

make.biom命令让你把你的shared文件转换为一个biom文件。关于biom格式:

https://www.doczj.com/doc/5d11549423.html,/documentation/biom_format.html

Make.fastq

这个命令读取一个fasta和一个quality文件并创建一个fastq文件。

Make.group

这个命令读取一个fasta文件或一系列fasta文件,并创建一个group文件。

Make.shared

这个命令读取一个list和group或biom文件,并为每个group创建一个.shared和一个rabund 文件。

Mantel

Mantel命令计算两个矩阵的mantel相关系数。Sokal, R. R., & Rohlf, F. J. (1995). Biometry, 3rd edn. New York: Freeman.

Merge.files

这个命令将把多个文件连结(使连续)起来并把结果输出到一个新文件。这对于合并多个fasta格式的序列文件,454 quality文件,group文件,name文件或其它等等是有用的。Merge.groups

这个命令读取一个shared文件和一个design文件并把shared文件中同样也在design文件中分组的groups合并。

Metastats

这个命令基于White.J.R.,Nagarajan.N.和Pop.M.开发的Metastats程序。统计方法用来检测客观宏基因组样本的差异丰度特征。

Mgcluster

该命令解释暂无,需要blast参数,官方网站有使用方法。

https://www.doczj.com/doc/5d11549423.html,/wiki/Mgcluster

Nmds

这个命令是Sarah Goslee在R(https://www.doczj.com/doc/5d11549423.html,/)中所写nmds代码的模型化。采用非矩阵多维尺度分析功能,使用的Borg & Groenen的优化算法。

Normalize.shared

这个命令创建一个.norm.shared文件。

Otu.association

这个命令计算一个shared/relabund文件中的OTUs的相关系数。

Otu.hierarchy

这个命令把不同距离上的OTUs关联起来。

Pairwise.seqs

这个命令将计算序列之间不正确的成对距离。这会生成一个列格式的距离矩阵,与read.dist 中的列选项兼容。这个命令也能产生一个phylip格式的距离矩阵,关于如何操作gap对比和末端gaps有多个选项。

Parse.list

这个命令读取一个list文件和group文件,并为group文件中的每个group生成一个list。Parsimony

这个命令采用parsimony方法(aka P-test),以前在TreeClimber中使用过,现在在MacClade 和UniFac网站中也有。这个Parsimony方法是一个通用的检测,用来描述两个或更多群落是否拥有同样的结构。检测统计值的显著性只表明群落随机具有相同结构的可能性。这个值不表明相似度水平。

Pca

运行这个命令需要一个shared或relabund文件。

Pcoa

需要一个plylip格式的距离矩阵文件。

Pcr.seqs

这个命令将根据用户自定义的选项修剪输入的序列。

Phylo.diversity

这个命令需要输入一个tree文件。两个文件将被输出:phylo.diversity和(如果你设置rarefy=T).rarefaction。

Phylotype

这个命令可根据他们的分类用于给OTUs分配序列,输出一个.list,.rabund和.sabund文件。Pipeline.pds

这个命令被设计用于指导你使用mothur(完成)通过你的分析。为了展示这个命令的各种特性,我们将使用Pat's Pipeline Files(点击下载

https://www.doczj.com/doc/5d11549423.html,/w/images/0/0f/Pipeline.tutorial.zip)

Pre.cluster

这个命令执行一个移除序列这个目标的假单链接算法,之所以移除这些序列,由于焦磷酸测序过程的错误。这个算法的一个版本是由Sue Huse开发,将在接下来的环境微生物学一篇论文中发表。基本的理念是丰富的序列比稀少序列更可能产生一些错误序列。考虑到这些,这个算法根据它们的丰富度给序列排名。然后大略读过序列表单在原始序列的一些阈值内以寻找更稀少的序列。在阈值内的那些序列与更大的序列合并。最初的Huse方法在一个距离矩阵上完成这个任务,然而现在我们基于原始序列做这个。我们的方法的优点是这个算法在排列的序列上完成而不是距离矩阵。因为通过pre-clustering你移除了大量的序列使距离计算更为快速。

Quit

quit 命令没有选项,可带或不带括号调用。

Rarefaction.shared

这个命令将产生使用,无需更换方法重新取样的样品间稀疏曲线。生态学家用稀薄(rarefaction)的传统方式是没有内随机样本的抽样秩序,而样本之间。举例来说,如果我们想知道OTU在人类结肠癌的数量,我们可以从结肠内,不同地点取样和测定一堆16S

rRNA基因序列。通过确定个OTU在每个样品的数量,并比较这些样品的组成,就有可能确定你们在单个范围内的生物多样性的采样的好坏。mothur有能力观察到的物种数量的样品间稀疏曲线生成数据。对于本教程,你应该下载并解压缩Patient70Data.zip

(https://www.doczj.com/doc/5d11549423.html,/w/images/b/b2/Patient70Data.zip)

Rarefaction.single

这个命令将会产生样本内的rarefaction曲线,采取无需更换方法的重新采样。Rarefaction曲线提供一个对比不同样品中的观察到的丰度的方法。大体来说,如果你没有采的许多个体作样本你将期望已经观察了你平均获得的OTUs的数目。尽管有一个公式可产生rarefaction曲线(参看https://www.doczj.com/doc/5d11549423.html,/wiki/Rarefaction),但mothur使用随机步骤。它也能帮你评估你的样本密度(强度)。如果一个rarefaction曲线变得与X轴平行,你可以合理相信你的采样工作做的很好,而且相信观察到的丰富度水平。否则,你需要继续采样。Rarefaction实际上对多样性的测量比它对丰度的测定更好。

Read.dist

注意:从mothur1.18.0开始,read.list命令不复存在。你可以直接输入你的距离矩阵文件的名称到命令行中来使用它们。

Read.tree

注意:从mothur1.18.0开始,这个命令不复存在,你可以直接输入文件名字到命令行来使用它们。

Remove.groups

这个命令从一个特定的group或一套groups中移除序列。你可以输入一下这些文件类型:fasta, name, group, list, taxonomy和shared。

Remove.lineage

这个命令读取一个taxonomy文件和一个taxon,并生成一个新的文件,只包含不在taxon中的序列。你也可以把一个fasta,name,group,list,或align.report文件包括到这个命令中,mothur将会为每个生成新的“只包含不在taxon中的序列”的文件。

Remove.otus

这个命令删除这样的OTUs,它们含有“来自特定group或一套groups的序列”。Remove.rare

这个命令读取以下文件类型之一:list,rabund,sabund或者shared文件,它输出一个删除了稀有OTUs的新文件。

Remove.seqs

这个命令把一个list中的序列名称和一个fasta, name, group, list或align,report文件生成一个新的文件,不包含list中的序列。这个命令与list.seqs连结对于显示序列集群(collection)有帮助。

Reverse.seqs

提供一个fasta格式的文件,reverse.seqs将生成一个包含有它们互补序列的文件。Screen.seqs

这个命令使你保留满足特定用户所定标准的序列。而且,它能使你剔除那些不符合来自names,group或align.report文件的标准的序列。

Sens.spec

说明暂无。

Seq.error

这个命令读取一个查询的alignment文件和一个参考的alignment文件,并创建...(后面未说明)

Set.current

这个命令使你为mothur的使用设置current文件,你也可以清空current文件。

Set.dir

这个命令使你重新指向mothur创建的output文件,或者设置mothur将要查找input文件的所在目录。如果它不能在input位置找到你的文件你也可以设置一个缺省的(或默认的)位置供mothur查找。这使你把你的参考文件保留在一个位置。

Set.logfile

你或许想给你的logfile(日志文件)起一个特定的名字或者附加一系列的logfiles。set.logfile 可以使你做这件事。

Sffinfo

这个命令从一个.sff文件释放读取序列。

Shhh.flows

这个命令是Chris Quince的PyroNoise算法的Pat Schloss翻译,使用的mothur的bells和whistles的合并从C到C++。基于Qunice提供的测试数据资料组的处理,shhh.flows把同样或相似的输出结果给AmpliconNoise. 这个命令采用期望最大算法以纠正流程图,确认每个流程图的理想化形式。并且把流程图转译到DNA序列。我们的测试表明当使用trim.flows 命令把Titanium数据消减到450flows时,shhh.flows为任何其他已有的方法提供质量最高的数据。对比之下,当我们使用Quince建议的最小/最大数目(360/720)flows时,错误率没有那么大。这较大提高的错误率不是来自计算花费。然而,在trim.seqs的特征采取分钟的顺序,shhh.flows可以采取小时的次序。没有多个处理器或MPI时不建议对较大数据资料组运行shhh.flows命令。你可以为你的操作系统获得合适版本的MPI(https://www.doczj.com/doc/5d11549423.html,/).你也需要一个lookup文件告诉shhh.flows对一个给定同源多聚长度观察到一个强度值的可能性。你可以在这儿(https://www.doczj.com/doc/5d11549423.html,/wiki/Lookup_files)获得mothur兼容的文件,你将需要把这些文件与你的数据或mothur可执行程序放在一起。

Shhh.seqs

这个命令是基于mothur的,对Chris Quince's序列表示程序——SeqNoise的重新编写。Sort.seqs

这个命令把来自fasta,name,group,quality,flow或taxonomy文件的序列放在同样的次序(order)下。

Split.abund

这个命令读取一个fasta文件,和一个list或一个names文件,把序列分割为稀有和丰富groups. Split.groups

这个命令读取一个fasta和group文件,并为group文件中的每个group生成一个fasta文件。Sub.sample

这个命令用来作为一个使你的数据标准化的路径,或者从你的原始set创建一个小的set。它把以下这些文件类型作为输入:fasta, list, shared, rabund和sabund,并产生一个包含你原始文件样本的新文件。

Summary.qual

这个命令读取一个quality文件和一个作为选项的name,并概括总结quality信息。Summary.seqs

这个命令将会总结(概述)一个未排序或排序过的fasta格式文件的序列质量。Summary.shared

这个命令将会产生一个summary文件,对OTU数据的每一行都有calculator值,为group

文件中不同groups间有所有可能的对比。这个命令在你对你的多样本数据分析产生collector's或者rarefaction曲线不感兴趣时有用。但是,如果你对于确定这些值对于样本有多敏感感兴趣,这值得你花点时间查看那些为calculators生成的collector…s曲线。如果这些值对样本不敏感,那么你可以相信这些值。否则,你需要继续采样(抽样)。Summary.single

这个命令将产生一个summary文件,其它解释同summary.shared命令,不过使用方法有所不同。

Summary.tax

这个命令读取一个taxonomy文件和一个作为选项的名字或者group文件,总结taxonomy的信息。

System

这个命令使用户在不离开mothur环境的情况下,运行mothur以外的程序。这个命令对于改变目录和重命名文件有用。这个命令的语法不同于其它命令——实际需要运行的命令应该放在括号内。如果你对于shell程序不熟悉,你也许可以使你在不同的Mac/Linux和Windows 的已有的shell程序中熟悉一下。

Tree.shared

这个命令将会产生一个newick格式的tree文件,描述多个groups之间的差异性(1-similarity)。采用UPGMA算法的groups使用群落间的距离被分簇,就像使用描述群落成员或结构相似性的任何calculators 那样被计算。差异性作为相似性的一个负值被计算。

Trim.flows

这个命令是与trim.seqs命令的功能是相似的,除了他使用由454测序产生的sff文件中汇集的flowgram数据。trim.flows的主要用法是作为运行shhh.seqs的一个预备步骤。Chris Qunice

有一系列的perl脚本可以完成类似的任务。这个命令使你根据基于条形码的样本把你的flowgram数据分块,削减flows到一个特定的长度范围,剔除太短或有太多错配而不能编入条形码和引物的序列。

Trim.seqs

这个命令提供对需要显示和排序的pyrosequences(一种测序方法)的预处理功能。

RDP(https://www.doczj.com/doc/5d11549423.html,/)可以提供类似的分析,这里我们给你增加了灵活性和速度。这个命令将是你能修剪掉引物和条形码序列,使用条形码信息生成一个group文件并把一个fasta文件分割为次级文件,显示基于来自454测序方法的qual文件序列,剔除基于序列长度和当前不明碱基的序列,获得你的序列的反向互补。当这个分析清楚的朝着pyrosequencing 汇集(collection)开始工作,它也可以和传统的Sanger 测序方法一起使用。

Unifrac.unweighted

这个命令执行unweighted UniFrac算法。unifac.weighted命令实行这个命令weighted版本。这两个方法在UniFrac网站(https://www.doczj.com/doc/5d11549423.html,/unifrac/)都有。UniFac方法是通用的测试,描绘两个或多个群落是不是具有同样的结构。这个测试统计值的显著性只能表明群落随机具有同样结构的可能性。这个值不表明相似度水平。

Unifrac.weighted

解释见Unifrac.unweighted

Unique.seqs

这个命令只返回这样的特定序列,它们来自一个fasta格式的序列文件和一个表明这些序列与参考序列相同的文件。经常有一些序列的集合有相当数目的相同序列。它占用大量的处理时间来排序,计算距离以及给每个单独的序列分簇。

Venn

这个命令从一个提供的*.shared文件的数据生成一个Venn示意图。这个命令能产生示意图(以SVG格式)以对比2个,3个或4个group共有的丰富度。这个SVG文件可以进一步在像Gimp或Adobe Illustrator的程序中修改,根据面积的部分按比例显示由区域表示的丰富度。基于观察到的丰富度或估计的丰富度(采用chao和sharedchao calculators)这里有一些选项来测定丰度。

海量数据处理面试题

1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。 s 遍历文件b,采取和a相同的方式将url分别存储到1000各小文件(记为)。这样处理后,所有可能相同的url都在对应的小文件()中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。 s 求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。 方案2:如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。 2. 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。 方案1: s 顺序读取10个文件,按照hash(query)%10的结果将query写入到另外10个文件(记为 )中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。

(重点学习)海量数据处理方法总结

海量数据处理方法总结 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu,google,腾讯这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。 1 Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集。 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。 还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任意n个元素的集合。但m还应该更大些,因为还要保证bit 数组里至少一半为0,则m应该>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。 举个例子我们假设错误率为0.01,则此时m应大概是n的13倍。这样k大概是8个。 注意这里m与n的单位不同,m是bit为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多bit的。所以使用bloom filter内存上通常都是节省的。 扩展: Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为

混凝土电通量测定步骤

混凝土电通量测定步骤 在规定的56d试验龄期前,对预留的试块进行钻芯制作,试件直径为95~102mm,厚度为51±3mm,试验时以三块试件为一组。 1、将试件暴露于空气中至表面干燥,以硅橡胶或树脂密封材料涂于试件侧面,必要时填补涂层中的孔道以保证试件侧面完全密封。 2、测试前应进行真空饱水。将试件放入1000ml烧杯中,然后一起放入真空干燥器中,启动真空泵,数分钟内真空度达133pa以下,保持真空3小时后,维持这一真空度并注入足够的蒸馏水,直到淹没试件。试件浸泡1小时后恢复常压,再继续浸泡18±2h。 3、从水中取试件,抹掉多余水分,将试件安装于试验槽内,用橡胶密封环或其它密封,并用螺杆将两试验槽和试件夹紧,以确保不会渗漏,然后将

试验装置放在20~23℃的流动水槽中,其水面宜低于装置顶面5mm,试验应在20~25℃恒温室内进行. 4、将浓度为3.0%的氯化钠和0.3mol/L 的氢化纳溶液分别注入试件两侧的试验槽中,注入氯化钠溶液的试验槽内的铜网连接电源负极,注入氢化纳溶液的试验槽中的铜网连接电源正极。 5、接通电源,对上述两铜网施加60V 直流恒电压,并记录电流初始读数Io,通电并保持试验槽中充满溶液。开始时每隔5min记录一次电流值,当电流值变化不大时,每隔10min记录有次电流值,当电流变化很小时,每隔30min记录一次电流值,直至通电6h。 6、绘制电流与时间的关系图,将各点数数据以光滑曲线联系起来,对曲线作面积积分,或按梯形法进行面积积分,即可得到试验6h通过的电量。 7、取同组3个试件通过的电量的平均值,作为该组试件的电流量

混凝土电通量测定步骤 在规定的56d试验龄期前,对预留的试块进行钻芯制作,试件直径为95~102mm,厚度为51±3mm,试验时以三块试件为一组。 8、将试件暴露于空气中至表面干燥,以硅橡胶或树脂密封材料涂于试件侧面,必要时填补涂层中的孔道以保证试件侧面完全密封。 9、测试前应进行真空饱水。将试件放入1000ml烧杯中,然后一起放入真空干燥器中,启动真空泵,数分钟内真空度达133pa以下,保持真空3小时后,维持这一真空度并注入足够的蒸馏水,直到淹没试件。试件浸泡1小时后恢复常压,再继续浸泡18±2h。

基于一种海量数据处理分析系统设计文档

中科基于一种海量数据处理分析 系统的设计文档 一、海量数据处理的背景分析 在当前这个信息量飞速增长的时代,业的成功已经越来越多地与其海量数据处理能力相关联。高效、迅速地从海量数据中挖掘出潜在价值并转化为决策依据的能力,将成为企业的核心竞争力。数据的重要性毋庸置疑,但随着数据的产生速度越来越快,数据量越来越大,数据处理技术的挑战自然也越来越大。如何从海量数据中挖掘出价值所在,分析出深层含义,进而转化为可操作的信息,已经成为各互联网企业不得不研究的课题。数据量的增长,以及分析需求的越来越复杂,将会对互联网公司的数据处理能力提出越来越高的要求、越来越大的挑战。但每一个场景都有其特点与功能,充分分析其数据特性,将合适的软件用在合适的场景下,才能更好地解决实际问题。 二、海量数据处理分析的特点 (一)、数据量大,情况多变 现在的数据量比以前任何时期更多,生成的速度更快,以前如果说有10条数据,繁琐的操作时每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿,那不是手工能解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,情况多变,手工操作是完不成任务的。例如,数据中某处格式出了问题,尤其在程序处理时,前面还能正常处理,突然到了某个地方问题出现了,程序将会终止。海量数据处理系统的诞生是输入层每个神经元的输入是同一个向量的一个分量,产生的输出作

为隐藏层的输入,输出层每一个神经元都会产生一个标量结果,所以整个输出层所有神经元的输出构成一个向量,向量的维数等于输出层神经元的数目在人工神经网络模型中,各个神经元通过获取输入和反馈,相对独立地进行训练和参数计算。其拓扑结构的重要特点便是每一层内部的神经元之间相互独立,各个层次间的神经元相互依赖。 由于各个层次内部神经元相互独立,使得各个层次内部的神经元的训练可以并行化。但由于不同层之间的神经元具有相互依赖关系,因此各个层次之间仍然是串行处理的。可以将划分出的每一层内部的不同神经元通过map操作分布到不同的计算机上。各个神经元在不同的计算终端上进行训练,在统一的调度和精度控制下进行多个层次的神经元的训练,这样神经网络算法的训练就可以实现并行化。训练结束后,同样可以通过每层内节点的并行化处理快速地得到输出结果。在神经网络算法中,每层内的节点都可以进行并行化处理,并行化程度非常高。 (二)、软硬件要求高,系统资源占用率高 各种应用对存储系统提出了更多的需求,数据访问需要更高的带宽,不仅要保证数据的高可用性,还要保证服务的高可用性;可扩展性:应用在不断变化,系统规模也在不断变化,这就要求系统提供很好的扩展性,并在容量、性能、管理等方面都能适应应用的变化;对海量的数据进行处理,除了好的方法,最重要的就是合理使用工具,合理分配系统资源。一般情况,如果处理的数据过TB级,小型机是要考虑的,普通的机子如果有好的方法可以考虑,不过也必须加大CPU和内存,对电脑的内存、显卡、硬盘及网络都要求相对较高!其中对网络要求高的原因是因为其引入目前最前沿的“云端计算”好多东西都要从网络上调用;对硬盘要求是最高的,用SATA6.0的固态硬盘,对整机性能限制比较大的就是高速系统总线对低速硬盘传输,32位的系统,最大只能认到3.5G内存,就是说,不论你装几根内存条,装多大容量的内存条,你装8G的,它也只能用到3.5G,64位的系统就可以突破了这个限制。如果你的电脑配置不是特别高的话,XP是比较好的选择。32位的XP是最低要求。基于23G互操作测试生成23G互操作测试报告测试起始点时间、测试终止点时间、 3G网络驻留时间(秒)、2G网络驻留时间(秒)、3G覆盖总采样点、3G覆盖总采样点不同区间数量统计、3G覆盖总采样点不同门限范围内数量统计、2G覆盖总采样点、2G覆盖总采样点不同区间数量统计、2G覆盖总采样点不同门限范围内数量统计、3G到2G重选成功次数、2G到3G重选成功次数、3G到2G切换尝试次数、3G到2G切换成功次数、切换掉话次数和其它掉话次数。

常用大数据量、海量数据处理方法 (算法)总结

大数据量的问题是很多面试笔试中经常出现的问题,比如baidu goog le 腾讯这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。 1.Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。 还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m 的大小及hash函数个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任

意n个元素的集合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应该>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg 表示以2为底的对数)。 举个例子我们假设错误率为0.01,则此时m应大概是n的13倍。这样k大概是8个。 注意这里m与n的单位不同,m是bit为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多bit的。所以使用bloom filter内存上通常都是节省的。 扩展: Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率。 问题实例:给你A,B两个文件,各存放50亿条URL,每条URL占用6 4字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢? 根据这个问题我们来计算下内存的占用,4G=2^32大概是40亿*8大概是340亿,n=50亿,如果按出错率0.01算需要的大概是650亿个

如何处理数据库中海量数据,以及处理数据库海量数据的经验和技巧

如何处理数据库中海量数据,以及处理数据库海量数据的经验和技巧 疯狂代码 https://www.doczj.com/doc/5d11549423.html,/ ?:http:/https://www.doczj.com/doc/5d11549423.html,/DataBase/Article11068.html 海量数据是发展趋势,对数据分析和挖掘也越来越重要,从海量数据中提取有用信息重要而紧迫,这便要求处理要准确,精度要高,而且处理时间要短,得到有价值信息要快,所以,对海量数据的研究很有前途,也很值得进行广泛深入的研究。 基于海量数据的数据挖掘正在逐步兴起,面对着超海量的数据,一般的挖掘软件或算法往往采用数据抽样的方式进行处理,这样的误差不会很高,大大提 高了处理效率和处理的成功率。在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面:一、数据量过大,数据中什么情况都可能存在。 ;如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿,那不是手解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,什么情况都可能存在,例如,数据中某处格式出了问题,尤其在程序处理时,前面还能正常处理,突然到了某个地方问题出现了,程序终止了。二、软硬件要求高,系统资源占用过高 对海量的数据进行处理,除了好的方法,最重要的就是合理使用工具,合理分配系统资源。一般情况,如果处理的数据过TB级,小型机是要考虑的,普通的机子如果有好的方法可以考虑,不过也必须加大CPU和内存,就象面对着千军万马,光有勇气没有一兵一卒是很难取胜的。三、要求很高的处理方法和技巧。 这也是本文的写作目的所在,好的处理方法是一位工程师长期工作经验的积累,也是个人的经验的总结。没有通用的处理方法,但有通用的原理和规则。下面我们来详细介绍一下处理海量数据的经验和技巧:一、选用优秀的数据库工具 现在的数据库工具厂家比较多,对海量数据的处理对所使用的数据库工具要求比较高,一般使用 Oracle或者DB2,微软公 司最近发布的SQL Server 2005性能也不错。另外在BI领域:数据库,数据仓库,多维数据库,数据挖掘,傲博知识库等相关工具也要进行选择,象好的ETL工具和好的OLAP工具都十分必要, 例如Informatic,Eassbase等。笔者在实际数据分析项目中,对每天6000万条的日志数据进行处理,使用SQL Server 2000需要花费6小时,而使用SQL Server 2005则只需要花费3小时。二、编写优良的程序代码 处理数据离不开优秀的程序代码,尤其在进行复杂数据处理时,必须使用程序。好的程序代码对数据的处理至关重要,这不仅仅是数据处理准确度的问题,更是数据处理效率的问题。良好的程序代码应该包含好的算法,包含好的处理流程,包含好的效率,包含好的异常处理机制等。三、对海量数据进行分区操作 对海量数据进行分区操作十分必要,例如针对按年份存取的数据,我们可以按年进行分区,不同的数据库有不同的分区方式 ,不过处理机制大体相同。例 如SQL Server的数据库分区是将不同的数据存于不同的文件组下,而不同的文件组存于不同的磁盘分区下,这样将数据分散开,减小磁盘I/O,减小了系统负荷, 而且还可以将日志,索引等放于不同的分区下。四、建立广泛的索引 对海量的数据处理,对大表建立索引是必行的,建立索引要考虑到具体情况,例如针对大表的分组、排序等字段,都要建立相应索引,一般还可以建立复 合索引,对经常插入的表则建立索引时要小心,笔者在处理数据时,曾经在一个ETL流程中,当插入表时,首先删除索引,然后插入完毕,建立索引,并实施聚合 操作,聚合完成后,再次插入前还是删除索引,所以索引要用到好的时机,索引的填充因子和聚集、非聚集索引都要考虑。五、建立缓存机制 当数据量增加时,一般的处理工具都要考虑到缓存问题。缓存大小设置的好差也关系到数据处理的成败,例如,笔者在处理2亿条数据聚合操作时,缓存设置为100000条/Buffer,这对于这个级别的数据量是可行的。六、加大虚拟内存 如果系统资源有 限,内存提示不足,则可以靠增加虚拟内存来解决。笔者在实际项目中曾经遇到针对18亿条的数据进行处理,内存为

膜法水处理实验——超滤膜通量测定

膜法水处理实验(一)——超滤膜通量测量 一、 实验目的 (1) 掌握中空纤维超滤膜通量测量的标准方法。 (2) 理解中空纤维超滤膜过滤过程中的膜污染现象。 (3) 掌握中空纤维膜组件运行过程跨膜压差的调控方法。 (4) 根据Darcy 定律计算中空纤维膜过滤阻力。 二、 实验原理 通量是指在一定流速、温度、压力下,单位时间、单位膜面积的液体(或气体)透过量,是衡量膜组件性能及运行状况的重要参数。根据上述定义,膜通量可由式(1)计算 Q J At = (1) 其中,F 表示通量,m 3/(m 2?h);Q 表示液体(或气体)透过量,m 3;A 表示膜 面积,m 2;t 表示收集透过液体(或气体)的时间,h 。对于液体,透过量通常通过直接测量一段时间内透过膜的液体体积或质量的方法获得。 在超滤进行的过程中,由于膜孔对水溶液中溶质或悬浮物的截留和吸附作用,以及溶质的浓差极化作用或凝胶层的形成,均会导致超滤过滤性能的下降,即在恒压操作下表现为膜通量的下降而在恒流操作下表现为跨膜压差的升高。这就是所谓的膜污染现象,是膜过滤过程中不可避免的现象。 根据形成膜污染的原因,膜过滤阻力可表示为: t m p f m p ef if m c if R R R R R R R R R R R =++=+++=++ (2) 其中,R t 表示膜过滤过程的总阻力;R m 表示清洁膜的固有阻力;R p 表示浓差极化阻力;R f (=R ef + R if )表示污染阻力;R ef 表示凝胶层阻力;R if 表示内部污染阻力;R c (=R p + R ef )表示沉淀阻力。 以Darcy 定律为基础得出下列过滤通量的表达式: () t m p ef if P P J R R R R R μμ??= = +++ (3) 其中,μ表示溶液的粘度,Pa ?s ,24 °C 时纯水粘度μw =9.186×10-4 Pa ?s 。J 0表示新膜纯水通量,J 1表示过滤原水的稳定通量,J 2表示纯水冲洗后的纯水通量,J 3表示刷洗后的纯水通量。 0m w P J R μ?= (4)

高通量测序NGS数据分析中的质控

高通量测序错误总结 一、生信分析部分 1)Q20/Q30 碱基质量分数与错误率是衡量测序质量的重要指标,质量值越高代表碱基被测错的概率越小。Q30代表碱基的正确判别率是99.9%,错误率为0.1%。同时我们也可以理解为1000个碱基里有1个碱基是错误的。Q20代表该位点碱基的正确判别率是99%,错误率为1%。对于整个数据来说,我们可以认为100个碱基里可能有一个是错误的, 在碱基质量模块报告的坐标图中,背景颜色沿y-轴将坐标图分为3个区:最上面的绿色是碱基质量很好的区,Q值在30以上。中间的橘色是碱基质量在一些分析中可以接受的区,Q值在20-30之间。最下面红色的是碱基质量很差的区。在一些生信分析中,比如以检查差异表达为目的的RNA-seq分析,一般要求碱基质量在Q在Q20以上就可以了。但以检查变异为目的的数据分析中,一般要求碱基质量要在Q30以上。 一般来说,测序质量分数的分布有两个特点: 1.测序质量分数会随着测序循环的进行而降低。 2.有时每条序列前几个碱基的位置测序错误率较高,质量值相对较低。 在图中这个例子里,左边的数据碱基质量很好,而右边的数据碱基质量就比较差,需要做剪切(trimming),根据生信分析的目的不同,要将质量低于Q20或者低于Q30的碱基剪切掉。 2)序列的平均质量 这个是碱基序列平均质量报告图。横坐标为序列平均碱基质量值,纵坐标代表序列数量。通过序列的平均质量报告,我们可以查看是否存在整条序列所有的碱基质量都普遍过低的情况。一般来说,当绝大部分碱基序列的平均质量值的峰值大于30,可以判断序列质量较好。如这里左边的图,我们可以判断样品里没有显着数量的低质量序列。但如果曲线如右边的图所示,在质量较低的坐标位置出现另外一个或者多个峰,说明测序数据中有一部分序列质量较差,需要过滤掉。 3)GC含量分布 这个是GC含量分布报告图。GC含量分布检查是检测每一条序列的GC含量。将样品序列的GC 含量和理论的GC含量分布图进行比较,用来检测样品数据是否有污染等问题。理论上,GC含量大致是正态分布,正态分布曲线的峰值对应基因组的GC含量。如果样品的GC含量分布图不是正态分布,如右图出现两个或者多个峰值,表明测序数据里可能有其他来源的DNA序列污染,或者有接头序列的二聚体污染。这种情况下,需要进一步确认这些污染序列的来源,然后将污染清除。 4)序列碱基含量

史上最全的数据来源和数据分析平台

史上最全的数据来源(数据分析)平台 网站分析类: 百度指数- 以百度海量网民行为数据为基础的数据分享平台 Google趋势- 了解Google中热度上升的搜索 360指数- 基于360搜索的大数据分享平台 Alexa - 网站排名 Google Analytics - Google出品,可以对目标网站进行访问数据统计和分析百度统计- 百度推出的一款免费的专业网站流量分析工具 腾讯云分析- 是腾讯数据云,腾讯大数据战略的核心产品 移动应用分析类: 友盟指数- 以友盟海量数据为基础的观察移动互联网行业趋势的数据平台移动观象台- 20亿独立智能设备为依据,提供应用排行榜 ASOU趋势- 每日跟踪超过100万款应用,分析超过6亿条数据 蝉大师- App数据分析与ASO优化专家,应用与游戏推广平台 百度移动统计- 基于移动APP统计的分析工具 QuestMobile - 国内知名的移动大数据服务提供商 应用雷达- 专业的APP排行历史跟踪软件实时榜单排名分析 Appannie - 移动应用和数字内容时代数据分析和市场数据的行业领导者CQASO - 国内最专业的APP数据分析平台 媒体传播类: 微博指数 优酷指数 微票儿票房分析 BOM票房数据 爱奇艺指数 数说传播 百度风云榜 微博风云榜 爱奇艺风云榜 豆瓣电影排行榜 新媒体排行榜 品牌微信排行榜 清博指数 易赞- 公众号画像 电商数据类:

阿里价格指数 淘宝魔方 京东智圈 淘宝排行榜 投资数据类: Crunchbase - 一个免费的科技公司、技术行业知名人物和投资者相关信息的数据库 清科投资界- 风险投资,私募股权,创业者相关投资,私募,并购,上市的研究 IT桔子- 关注TMT领域创业与投资的数据库 创投库- 提供最全的投资公司信息 Angel - 美国创业项目大全 Next - 36kr子站,每天更新新产品介绍 Beta List - 介绍初创公司 金融数据类: 积木盒子- 全线上网络借贷信息中介平台 网贷中心- 告网贷行业危机,公正透明地披露网贷平台数据 网贷之家- P2P网贷平台排名 网贷数据- 网贷天下- 行业过去30天详细交易数据,网贷天下统计、发布,每天6点更新中国P2P网贷指数 零壹数据-专业互联网金融数据中心 大公金融数据 全球股票指数 爱股说-基金经理分析找股平台 私募基金管理人综合查询 中财网数据引擎 游戏数据: 百度网游风云榜 360手机游戏排行榜 360手游指数 CGWR排行榜 App Annie游戏指数 小米应用商店游戏排名 TalkingData游戏指数 游戏玩家排名&赛事数据 国家社会数据: 中国综合社会调查 中国人口普查数据 中国国家数据中心

海量数据处理小结

海量的数据处理问题,对其进行处理是一项艰巨而复杂的任务。原因有以下几个方面: 一、数据量过大,数据中什么情况都可能存在。如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿,那不是手工能解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,什么情况都可能存在,例如,数据中某处格式出了问题,尤其在程序处理时,前面还能正常处理,突然到了某个地方问题出现了,程序终止了。 二、软硬件要求高,系统资源占用率高。对海量的数据进行处理,除了好的方法,最重要的就是合理使用工具,合理分配系统资源。一般情况,如果处理的数据过TB级,小型机是要考虑的,普通的机子如果有好的方法可以考虑,不过也必须加大CPU和内存,就象面对着千军万马,光有勇气没有一兵一卒是很难取胜的。 三、要求很高的处理方法和技巧。这也是本文的写作目的所在,好的处理方法是一位工程师长期工作经验的积累,也是个人的经验的总结。没有通用的处理方法,但有通用的原理和规则。那么处理海量数据有哪些经验和技巧呢,我把我所知道的罗列一下,以供大家参考: 一、选用优秀的数据库工具现在的数据库工具厂家比较多,对海量数据的处理对所使用的数据库工具要求比较高,一般使用Oracle或者DB2,微软公司最近发布的SQL Server 2005性能也不错。另外在BI领域:数据库,数据仓库,多维数据库,数据挖掘等相关工具也要进行选择,象好的ETL工具和好的OLAP工具都十分必要,例如Informatic,Eassbase等。笔者在实际数据分析项目中,对每天6000万条的日志数据进行处理,使用SQL Server 2000需要花费6小时,而使用SQL Server 2005则只需要花费3小时。 二、编写优良的程序代码处理数据离不开优秀的程序代码,尤其在进行复杂数据处理时,必须使用程序。好的程序代码对数据的处理至关重要,这不仅仅是数据处理准确度的问题,更是数据处理效率的问题。良好的程序代码应该包含好的算法,包含好的处理流程,包含好的效率,包含好的异常处理机制等。 三、对海量数据进行分区操作对海量数据进行分区操作十分必要,例如针对按年份存取的数据,我们可以按年进行分区,不同的数据库有不同的分区方式,不过处理机制大体相同。例如SQL Server的数据库分区是将不同的数据存于不同的文件组下,而不同的文件组存于不同的磁盘分区下,这样将数据分散开,减小磁盘I/O,减小了系统负荷,而且还可以将日志,索引等放于不同的分区下。 四、建立广泛的索引对海量的数据处理,对大表建立索引是必行的,建立索引要考虑到具体情况,例如针对大表的分组、排序等字段,都要建立相应索引,一般还可以建立复合索引,对经常插入的表则建立索引时要小心,笔者在处理数据时,曾经在一个ETL流程中,当插入表时,首先删除索引,然后插入完毕,建立索引,并实施聚合操作,聚合完成后,再次插入前还是删除索引,所以索引要用到好的时机,索引的填充因子和聚集、非聚集索引都要考虑。 五、建立缓存机制当数据量增加时,一般的处理工具都要考虑到缓存问题。缓存大小设置的好差也关系到数据处理的成败,例如,笔者在处理2亿条数据聚合操作时,缓存设置为100000条/Buffer,这对于这个级别的数据量是可行的。 六、加大虚拟内存如果系统资源有限,内存提示不足,则可以靠增加虚拟内存来解决。笔者在实际项目中曾经遇到针对18亿条的数据进行处理,内存为1GB,1个P4 2.4G的CPU,对这么大的数据量进行聚合操作是有问题的,提示内存不足,那么采用了加大虚拟内存的方法来解决,在6块磁盘分区上分别建立了6个4096M的磁盘分区,用于虚拟内存,这样虚拟的内存则增加为4096*6 + 1024 = 25600 M,解决了数据处理中的内存不足问题。 七、分批处理海量数据处理难因为数据量大,那么解决海量数据处理难的问题其中一个技巧是减少数据量。可以对海量数据分批处理,然后处理后的数据再进行合并操作,这样逐个击破,有利于小数据量的处理,不至于面对大数据量带来的问题,不过这种方法也要因时因势进行,如果不允许拆分数据,还需要另想办法。不过一般的数据按天、按月、按年等存储的,都可以采用先分后合的方法,对数据进行分开处理。八、使用临时表和中间表数据量增加时,处理中要考虑提前汇总。这样做的目的是化整为零,大表变小表,分块处理完成后,再利用一定的规则进行合并,处理过程中的临时表的使用和中间结果的保存都非常重要,如果对于超海量的数据,大表处理不了,只能拆分为多个小表。如果处理过程中需要多步汇总操作,可按

大数据处理综合处理服务平台的设计实现分析范文

大数据处理综合处理服务平台的设计与实现 (广州城市职业学院广东广州510405) 摘要:在信息技术高速发展的今天,金融业面临的竞争日趋激烈,信息的高度共享和数据的安全可靠是系统建设中优先考虑的问题。大数据综合处理服务平台支持灵活构建面向数据仓库、实现批量作业的原子化、参数化、操作简单化、流程可控化,并提供灵活、可自定义的程序接口,具有良好的可扩展性。该服务平台以SOA为基础,采用云计算的体系架构,整合多种ETL技术和不同的ETL工具,具有统一、高效、可拓展性。该系统整合金融机构的客户、合约、交易、财务、产品等主要业务数据,提供客户视图、客户关系管理、营销管理、财务分析、质量监控、风险预警、业务流程等功能模块。该研究与设计打破跨国厂商在金融软件方面的垄断地位,促进传统优势企业走新型信息化道路,充分实现了“资源共享、低投入、低消耗、低排放和高效率”,值得大力发展和推广。 关键词:面向金融,大数据,综合处理服务平台。 一、研究的意义 目前,全球IT行业讨论最多的两个议题,一个是大数据分析“Big Data”,一个是云计算“Cloud Computing”。中

国五大国有商业银行发展至今,积累了海量的业务数据,同时还不断的从外界收集数据。据IDC(国际数据公司)预测,用于云计算服务上的支出在接下来的5 年间可能会出现3 倍的增长,占据IT支出增长总量中25%的份额。目前企业的各种业务系统中数据从GB、TB到PB量级呈海量急速增长,相应的存储方式也从单机存储转变为网络存储。传统的信息处理技术和手段,如数据库技术往往只能单纯实现数据的录入、查询、统计等较低层次的功能,无法充分利用和及时更新海量数据,更难以进行综合研究,中国的金融行业也不例外。中国五大国有商业银行发展至今,积累了海量的业务数据,同时还不断的从外界收集数据。通过对不同来源,不同历史阶段的数据进行分析,银行可以甄别有价值潜力的客户群和发现未来金融市场的发展趋势,针对目标客户群的特点和金融市场的需求来研发有竞争力的理财产品。所以,银行对海量数据分析的需求是尤为迫切的。再有,在信息技术高速发展的今天,金融业面临的竞争日趋激烈,信息的高度共享和数据的安全可靠是系统建设中优先考虑的问题。随着国内银行业竞争的加剧,五大国有商业银行不断深化以客户为中心,以优质业务为核心的经营理念,这对银行自身系统的不断完善提出了更高的要求。而“云计算”技术的推出,将成为银行增强数据的安全性和加快信息共享的速度,提高服务质量、降低成本和赢得竞争优势的一大选择。

数据分析程序

数据分析程序流程图

数据分析程序 1 目的 确定收集和分析适当的数据,以证实质量管理体系的适宜性和有效性,评价和持续改进质量管理体系的有效性。 2 适用范围 本程序适用于烤烟生产服务全过程的数据分析。 3 工作职责 3.1 分管领导:负责数据分析结果的批准。 3.2 烟叶科:负责数据分析结果的审核。 3.3 相关部门:负责职责范围内数据的收集和分析。 4 工作程序 4.1 数据的分类 4.1.1 烟用物资采购发放数据:烟用物资盘点盘存、烟用物资需求、烟用物资采购、烟用物资发放、烟用物资分户发放、烟用物资供应商等相关数据。 4.1.2 烤烟生产收购销售数据。 4.1.3 烟叶挑选整理数据:烟叶挑选整理数据。 4.1.4 客户满意:烟厂(集团公司)和烟农满意度测量数据和其他反馈信息。 4.1.5 过程和质量监测数据:产购销过程各阶段检查数据及不合格项统计等。 4.1.6 持续改进数据。 4.2 数据的收集 4.2.1 烟用物资采购数据的收集 a) 烟草站于当年10月底对当年烟用物资使用情况进行收集,对库存情况进行盘点,并填写烟用物 资盘点情况统计表保存并送烟叶科; b) 储运科于当年10月底前将烟用物资库存情况进行盘点,送烟叶科; c) 储运站于当年挑选结束后对库存麻片、麻绳、缝口绳进行盘点,据次年生产需要,制定需求计 划表,送烟叶科。 d) 烟草站于当年10月底据次年生产需求填报烟用物资需求表,上报烟叶科,烟叶科据烟用物资需 求和库存盘点情况,拟定烟用物资需求计划,报公司烤烟生产分管领导批准; e) 烟叶科将物资采购情况形成汇总表,送财务科、报分管领导; f) 烟叶科形成烟用物资发放情况登记表,归档、备案; g) 烟草站形成烟用物资分户发放情况表,烟草站备案。 4.2.2 烤烟产购销数据的收集 a) 烟用物资采购数据收集完成后,由烟叶科填报《烟用物资采购情况汇总表》,于管理评审前上 报分管领导和经理。 b) 烤烟生产期间,烟草站每10天向烟叶科上报《烤烟生产情况统计表》,烟叶科汇总后定期上报 公司领导层。对所收集的进度报政府或上级部门时,必须由分管领导签字后才能送出。

十七道海量数据处理面试题与Bit-map详解

十七道海量数据处理面试题与Bit-map详解 第一部分、十七道海量数据处理面试题 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文 件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 1. 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个 小文件(记为,这里漏写个了a1)中。这样每个小文件的大约为300M。 2. 遍历文件b,采取和a相同的方式将url分别存储到1000小文件中(记为)。这样 处理后,所有可能相同的url都在对应的小文件()中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。 3. 求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。 方案2:如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。 读者反馈@crowgns: 1. hash后要判断每个文件大小,如果hash分的不均衡有文件较大,还应继续hash分文件,换个hash 算法第二次再分较大的文件,一直分到没有较大的文件为止。这样文件标号可以用A1-2表示(第一次hash 编号为1,文件较大所以参加第二次hash,编号为2) 2. 由于1存在,第一次hash如果有大文件,不能用直接set的方法。建议对每个文件都先用字符串 自然顺序排序,然后具有相同hash编号的(如都是1-3,而不能a编号是1,b编号是1-1和1-2),可 以直接从头到尾比较一遍。对于层级不一致的,如a1,b有1-1,1-2-1,1-2-2,层级浅的要和层级深的每个文件都比较一次,才能确认每个相同的uri。 2. 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能 重复。要求你按照query的频度排序。 方案1: 1.顺序读取10个文件,按照hash(query)%10的结果将query写入到另外10个文件(记为)中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。 2.找一台内存在2G左右的机器,依次对用hash_map(query, query_count)来统计每个query出现的次数。利用快速/堆/归并排序按照出现次数进行排序。将排序好的query和对应的query_cout 输出到文件中。这样得到了10个排好序的文件(,此处有误,更正为b0,b1,b2,b9)。 3.对这10个文件进行归并排序(内排序与外排序相结合)。 方案2:

海量数据处理

海量数据处理 1 背景 我们生活在一个数据时代: (1) 每天有10 TB的视频数据被上传到世界上最大的视频分享网站Youtube上。 (2) 美国的纽约证劵交易所每天大约产生1 TB的交易数据。 (3) 中国深圳市拥有20万个交通监控摄像头,每天产生的数据大于 1 PB。 (4) 瑞士日内瓦附近的大型强子对撞机,每年大约产生15 PB的数据。 …… 已经很难衡量现今的社会中存储的电子数据总量,但是 据IDC(Internet Data Center)估计,2006年“数字全球”项目(digital universe)的数据总量为0.18 ZB,并且预测到2011年这个数字将达到1.8 ZB,为2006年的10倍。1 ZB相当于10的21次方字节,或者相当于1 000 EB、1 000 000 PB,或者大家更为熟悉的10亿TB。这相当于世界上每个人一个磁盘驱动器的数量级[1]。 如图1所示[2],股票交易、商品零售、交通、通信、生产、Web、音像业等多数据源使得数据类型复杂化,包括有结构、无结构(文本、图像、音频、视频等)数据。数据本身也越来越趋于复杂化、高维化。

图 1海量数据及其复杂类型 技术的进步已经使得数据存储变得相对便宜,带宽相对充足,导致了这一系列的海量数据被存储下来,继而在大数据集上的建模和仿真。这样的大数据存储普遍存在于一个多样化的应用领域中,包括科学研究(生物信息,气候变化)。从这样海量数据中提取珍贵知识的挑战,随着多类型数据、多数据源、多种多样的规模,越来越使人变得畏缩,更不要提最终目标是去实时处理。有句话说得好:“算法再好,通常也难敌更多的数据。”意思就是说对于某些问题(譬如基于既往偏好生成的电影和音乐推荐),不论你的算法有多厉害,它们总会在更多的数据面前变得无能为力(更不用说没有优化过的算法)。为了剖析与研究问题,科学与技术目标可归为下面主要的三种:管理数据爆炸性、从海量数据中提取知识、归纳数据使得人类易于理解和反应。如图2所示①。 图 2海量数据的处理过程

【精品】海量数据处理分析

海量数据处理分析 北京迈思奇科技有限公司戴子良 笔者在实际工作中,有幸接触到海量的数据处理问题,对其进行处理是一项艰巨而复杂的任务。原因有以下几个方面: 一、数据量过大,数据中什么情况都可能存在。如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿,那不是手工能解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,什么情况都可能存在,例如,数据中某处格式出了问题,尤其在程序处理时,前面还能正常处理,突然到了某个地方问题出现了,程序终止了。 二、软硬件要求高,系统资源占用率高。对海量的数据进行处理,除了好的方法,最重要的就是合理使用工具,合理分配系统资源。一般情况,如果处理的数据过TB级,小型机是要考虑的,普通的机子如果有好的方法可以考虑,不过也必须加大CPU和内存,就象面对着千军万马,光有勇气没有一兵一卒是很难取胜的。 三、要求很高的处理方法和技巧。这也是本文的写作目的所在,好的处理方法是一位工程师长期工作经验的积累,也是个人的经验的总结。没有通用的处理方法,但有通用的原理和规则。 那么处理海量数据有哪些经验和技巧呢,我把我所知道的罗列一下,以供大家参考: 一、选用优秀的数据库工具 现在的数据库工具厂家比较多,对海量数据的处理对所使用的数据库工具要求比较高,一般使用Oracle或者DB2,微软公司最近发布的SQL Server 2005性能也不错。另外在BI领域:数据库,数据仓库,多维数据库,数据挖掘等相关工具也要进行选择,象好的ETL工具和好的OLAP工具都十分必要,例如Informatic,Eassbase等。笔者在实际数据分析项目中,对每天6000万条的日志数据进行处理,使用SQL Server 2000需要花费6小时,而使用SQL Server 2005则只需要花费3小时。 二、编写优良的程序代码 处理数据离不开优秀的程序代码,尤其在进行复杂数据处理时,必须使用程序。好的程序代码对数据的处理至关重要,这不仅仅是数据处理准确度的问题,更是数据处理效率的问题。良好的程序代码应该包含好的算法,包含好的处理流程,包含好的效率,包含好的异常处理机制等。 三、对海量数据进行分区操作 对海量数据进行分区操作十分必要,例如针对按年份存取的数据,我们可以按年进行分区,不同的数据库有不同的分区方式,不过处理机制大体相同。例如SQL Server的数据库分区是将不同的数据存于不同的文件组下,而不同的文件组存于不同的磁盘分区下,这样将数据分散开,减小磁盘I/O,减小了系统负荷,而且还可以将日志,索引等放于不同的分区下。 四、建立广泛的索引 对海量的数据处理,对大表建立索引是必行的,建立索引要考虑到具体情况,例如针对大表的分组、排序等字段,都要建立相应索引,一般还可以建立复合索引,对经常插入的表则建立索引时要小心,笔者在处理数据时,曾经在一个ETL流程中,当插入表时,首先删除索引,然后插入完毕,建立索引,并实施聚合操作,聚合完成后,再次插入前还是删除索引,所以索引要用到好的时机,索引的填充因子和聚集、非聚集索引都要考虑。

海量数据处理的几个技术问题及其解决方案

保险职业学院学报2005年第5期 (总第102期)海量数据处理的几个技术问题 及其解决方案 李向阳 李朝庆 [摘 要]本文讨论了海量数据处理的几个技术问题,并从应用实践上提出了一些解决方案。这些措施在应用软件的开发实践中,被证明是有效的。 [关键词]数据处理;I/O界面;开发平台;数据安全性和一致性 [中图分类号]TP39 [文献标识码]A [文章编号]1673—1360(2005)05—0051—02 一、引言 众所周知,大数据量的数据处理(简称海量数据处理)是当今计算机应用的主要领域之一。这类问题的显著特点是输入/输出量很大,而计算(处理)并不复杂。但要恰当解决这类问题,面临一些严峻的技术问题;因为当数据量到达一定规模时,看似很简单的问题,实际操作起来却十分费力。笔者根据多年从事数据处理的实践,提出以下几个问题,同大家共同探讨。 二、关于初始数据的录入 很多数据处理问题都面临大量原始数据的录入。如人口普查、人事档案、人才招聘与考核、保费管理、账务管理、销售管理等,每天发生的数据量是很大的,如何确保这些数据快速、正确进入电脑呢?人们赏试了众多的录入方案,例如汉字信息和数字信息分别采用不同的录入手段。目前通行的做法是:将汉字信息用区位码填制信息卡,然后用OCR(光电阅读器)录入;而数字信息则用键盘录入。我们在开发高考招生系统时就是这样做的。因为每个考生的基本信息(如姓名、性别、类别、科目、地址等)约占200字节,而每年报考的考生人数多达30万左右,信息总量高达60G B。对这些汉字信息的录入,采用分散填制信息卡,用OCR集中录入,然后打印出来分散核对。而数字信息(如试卷分数、经济数据等)则不宜采用信息卡,因为数字信息比汉字信息要求有更高的准确率,而用键盘录入又比较快捷。但如何保证人工录入的正确性呢?我们采用的做法是,由三名训练有素的录入人员分别对同一科目的考分并行录入,然后经程序检验:对同一名考生该科目的成绩,三名录入人员录入的数据是否一致,如果一致,则写入文件记录,否则剔出来,下次重新录入。这种作法的理论依据是:按概率统计规律,如果一名录入人员录入的出错率是1/100,则三名录入员在同一数据上同时出错的概率是三个独立事件概率的乘积,即出错率为百万分之一。据此可以看出出错的几率已大大降低了,实际上可以容许。另外,要尽量减少输入量。凡是能自动生成的数据,如考生号码、职工编码、商品代码等,尽量不用手工录入,而由程序自动生成。在建立表结构时,对某些字段可定义默认值,从而减少录入量(如性别、职务等),提高准确率。人工干预越少,数据出错率越低。 三、关于开发平台的选择 显然,数据库技术是解决数据处理问题的首选平台,目前已有众多的关系数据库管理系统可供选择,如:visual F oxpro、delphi、S Q L server、sybase、oracle、https://www.doczj.com/doc/5d11549423.html,等。在选择平台时,要考虑应用程序的开发和运行环境,目前大部分业务需要在客户机/服务器模式下工作。这时,中小公司可以选用visual F oxpro,因为它的稳定性高,易于操作,面向对象编程,功能也足够强大。大型公司大都涉及到广域网和互连网,选用S Q L server或Oracle为宜。值得注意的是,这些多用户网络数据库系统查询功能很强,其安全性和运行效率都很高,但用户界面不够友好。 为了提高应用系统的图形化界面水平,可以在数据库系统的基础上,引入https://www.doczj.com/doc/5d11549423.html,、java,利用后者的图形界面功能,使开发出来的应用系统更方便用户使用。还要提及一点的是,当系统测试通过以后,应将所有源程序联合编译,生成可执行文件,以便直接在windows操作系统下运行,提供给用户的是一个经压缩打包的系统,这不仅是软件保护的需要,而且可以防止用户有意、无意的错误 15

相关主题
文本预览
相关文档 最新文档