㈠ 漫谈工业大数据9:开源工业大数据软件简介(上)
今天真是一个美好的时代,有无数的开源系统可以为我们提供服务,现在有许多开发软件可以用到工业大数据中,当然很多系统还不成熟,应用到工业中还需要小心,并且需要开发人员对其进行一定的优化和调整。下面就简单介绍一些开源的大数据工具软件,看看有哪些能够应用到工业大数据领域。
下面这张图是我根据网上流传的一张开源大数据软件分类图整理的:
我们可以把开源大数据软件分成几类,有一些可以逐步应用到工业大数据领域,下面就一一介绍一下这些软件。(以下系统介绍大都来源于网络)
1、数据存储类
(1)关系数据库MySQL
这个就不用太多介绍了吧,关系型数据库领域应用最广泛的开源软件,目前属于 Oracle 旗下产品。
(2)文件数据库Hadoop
Hadoop是大数据时代的明星产品,它最大的成就在于实现了一个分布式文件系统(Hadoop Distributed FileSystem),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上,而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。
Hadoop可以在工业大数据应用中用来作为底层的基础数据库,由于它采用了分布式部署的方式,如果是私有云部署,适用于大型企业集团。如果是公有云的话,可以用来存储文档、视频、图像等资料。
(3)列数据库Hbase
HBase是一个分布式的、面向列的开源数据库,HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
基于Hbase开发的OpenTSDB,可以存储所有的时序(无须采样)来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集所有metrics,支持永久存储,可以做容量规划,并很容易的接入到现有的报警系统里。
这样的话,它就可以替代在工业领域用得最多的实时数据库。
(4)文档数据库MongoDB
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB适合于存储工业大数据中的各类文档,包括各类图纸、文档等。
(5)图数据库Neo4j/OrientDB
图数据库不是存放图片的,是基于图的形式构建的数据系统。
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、 企业级 的数据库的所有好处。
OrientDB是兼具文档数据库的灵活性和图形数据库管理 链接 能力的可深层次扩展的文档-图形数据库管理系统。可选无模式、全模式或混合模式下。支持许多高级特性,诸如ACID事务、快速索引,原生和SQL查询功能。可以JSON格式导入、导出文档。若不执行昂贵的JOIN操作的话,如同关系数据库可在几毫秒内可检索数以百记的链接文档图。
这些数据库都可以用来存储非结构化数据。
2、数据分析类
(1)批处理MapRece/Spark
MapRece是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Rece(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Rece(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。
这些大数据的明星产品可以用来做工业大数据的处理。
(2)流处理Storm
Storm是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流。Storm有很多使用场景:如实时分析,在线机器学习,持续计算,分布式RPC,ETL等等。Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个结点每秒可以处理数以百万计的消息)。Storm的部署和运维都很便捷,而且更为重要的是可以使用任意编程语言来开发应用。
(3)图处理Giraph
Giraph是什么?Giraph是Apache基金会开源项目之一,被定义为迭代式图处理系统。他架构在Hadoop之上,提供了图处理接口,专门处理大数据的图问题。
Giraph的存在很有必要,现在的大数据的图问题又很多,例如表达人与人之间的关系的有社交网络,搜索引擎需要经常计算网页与网页之间的关系,而map-rece接口不太适合实现图算法。
Giraph主要用于分析用户或者内容之间的联系或重要性。
(4)并行计算MPI/OpenCL
OpenCL(全称Open Computing Language,开放运算语言)是第一个面向 异构系统 通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算 服务器 、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在 游戏 、 娱乐 、科研、医疗等各种领域都有广阔的发展前景。
(5)分析框架Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapRece任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapRece统计,不必开发专门的MapRece应用,十分适合数据仓库的统计分析。
(6)分析框架Pig
Apache Pig 是apache平台下的一个免费开源项目,Pig为大型数据集的处理提供了更高层次的抽象,很多时候数据的处理需要多个MapRece过程才能实现,使得数据处理过程与该模式匹配可能很困难。有了Pig就能够使用更丰富的数据结构。[2]
Pig LatinPig Latin 是一个相对简单的语言,一条语句 就是一个操作,与数据库的表类似,可以在关系数据库中找到它(其中,元组代表行,并且每个元组都由字段组成)。
Pig 拥有大量的数据类型,不仅支持包、元组和映射等高级概念,还支持简单的数据类型,如 int、long、float、double、chararray 和 bytearray。并且,还有一套完整的比较运算符,包括使用正则表达式的丰富匹配模式。
㈡ MongoDB的统计查询和条件统计查询问题请教
db.user.find().count(); ==> 这个快是因为 _id作为主键是一个相对小的索引
而对应的mysql里是走的全表扫描
如果你设计的表结构很满足范式,那么其实并不是MongoDB所擅长的场景,你不会觉得mongodb有多快
db.comit在线教育
㈢ mongoDB应用篇-mongo聚合查询
如果我们在日常操作中,将部分数据存储在了MongoDB中,但是有需求要求我们将存储进去的文档数据,按照一定的条件进行查询过滤,得到想要的结果便于二次利用,那么我们就可以尝试使用MongoDB的聚合框架。
前面我们在学习文档查询的过程中,也介绍过一些查询的操作符,其中就有一部分是简单的查询聚合函数,例如 count 、 distinct 、 group 等,如果是简单的数据分析过滤,完全可以使用这些自带的聚合函数以及查询的操作符来完成文档的过滤查询操作
如果我们遇到了一些数据需要跨多个文本或者统计等操作,这个时候可能文档自身也较为复杂,查询操作符已经无法满足的时候,这个时候就需要使用MongoDB的聚合查询框架了。
使用聚合框架可以对集合中的文档进行变换和组合查询,基本上我们使用的时候,都是使用多个构件创建一个管道,用于对一连串的文档进行处理。这里的构件包括 筛选(filter) 、 投射(projecting) 、 分组(grouping) 、 排序(sorting) 、 限制(limiting) 以及 跳过(skipping)
MongoDB中需要使用聚合操作,一般使用 aggregate 函数来完成多个聚合之间的连接,aggregate() 方法的基本语法格式如下 :
现在假设我们有个集合articles,里面存储了文章的集合,大致如下:
但这时我们需要查询出来每一个作者写的文章数量,需要使用aggregate()计算 ,大致如下:
输出的结果为:
通过这个简单的案例我们就能输出想要的数据和属性名,大概分析一下刚刚的聚合查询语句, by_user字段进行分组,代表每个用户一条数据,而num_tutorial则是定义了数值类型计算的结果字段,$sum则是计算总和,相当于每个用户出现一次,都会+1,最终计算出来的总和通过num_tutorial字段进行输出
注:如果管道没有给出预期的结果,就需要进行调试操作,调试的时候,可以尝试先给一个管道操作符的条件,如果这个时候查询出来的结果是我们想要的,那么我们需要再去指定第二个管道操作符,依次操作,最后就会定位到出了问题的操作符
前面我们提到聚合查询会使用管道操作符,而每一个操作符就会接受一连串的文档,对这些文档进行一些类型转换,最后将转换以后的文档结果传递给下一个管道操作符来执行后续的操作,如果当前是最后一个管道操作符,那么则会显示给用户最后的文档数据。不同的管道操作符是可以按照顺序组合在一起使用,并且可以被重复执行多次,例如我们可以先使用$match然后再去、 match操作。
match管道操作符可以使用$gt、$lt、$in等操作符,进行过滤,不过需要注意的是不能在$match管道操作符中使用空间地理操作符。
在实际使用的过程中,尽可能的将 match操作符以后,再去投射或者执行分组操作的话,是可以利用索引的。
相比较一般的查询操作而言,使用管道操作,尤其是其中的投射操作更加强大。我们可以在查询文档结束以后利用 $project 操作符从文档中进行字段的提取,甚至于我们可以重命名字段,将部分字段映射成我们想要展示出去的字段,也可以对一部分字段进行一些有意义的处理。需要注意的是, $project 操作符可以传入两个参数,第一个是需要处理的属性名称,第二个则是0或者1,如果传入1,则代表当前的属性是需要显示出来的,如果是0或者不写,默认都是代表这个字段不需要显示出来
当然第二个参数也可以是一个表达式或者查询条件,满足当前表达式的数据也可以进行显示,接下来我们先准备一点数据:
接下来,我们来查询,条件是item字段为abc,quantity要大于5,并且我们只要item和price字段的结果,其他都排除掉:
可以看到结果为:
如果我们想要在原基础上改变某个字段的名称,例如将item改为item_code,可以利用$来完成,如下:
可以看到我们指定的名称item_code,而这个别名对应的字段item使用$作为前缀标记,代表将item字段映射为item_code,可以看到结果:
我们在投影的时候,除了可以将某个字段映射成其他字段以外,还可以针对某个字段进行一些简单的运算,最常见的就是 四则运算 ,即
加法( subtract )、乘法( divide )、求模( $mod ) ,
除此之外,还支持对字段进行 关系运算 (大小比较( " eq" )、大于( " gte" )、小于( " lte" )、不等于( " ifNull" ) )、
逻辑运算 (与( " or" )、非 ( " concat" )、截取( " toLower" ) )等
我们基于上面的需求,假设每一个价格是按照元为单位,现在要求输出W为单位,那么我们就需要对price进行除法运算,如下:
除此之外,我们也可以将计算完毕的price改名为priceW,即:
可以看到输出的结果为:
这时有一个需求,要求我们返回数据的同时还要yyyy-MM-dd格式的时间字符串,这个时候我们就需要对date字段进行时间函数和字符串混合处理了,如下:
这里需要注意的一点是, year:" substr函数将date字段的结果截取成字符串即可实现拼接
group的_id上,代表按照当前字段进行分组,例如,我们这里根据item进行分组:
在我们针对某个字段进行分组以后,我们可以针对每个分组进行一些操作符的使用,常见的例如: $sum 、 $avg 、 $min 、 $max 、 $first 、 $last 。
$avg 操作符用来返回每一个分组内的平均值
现在我们基于前面item的分组,我们想要算出来每个组内的平均价格是多少,如下:
$min 和 $max 操作符用于返回分组内最大的值和最小的值
除了平均值以外,我们现在将最贵的和最便宜的价格也要列出来,这个时候就可以使用这两个操作符了,如下:
$first 、 $last 则是可以获取当前分组中第一个或者最后一个的某个字段的结果,如下:
除此之外,我们还可以在分组的时候使用数组操作符,例如 $addToSet 可以判断,当前数组如果不包含某个条件,就添加到当前数组中, $push 则不管元素是否存在,都直接添加到数组中
注意:大部分管道操作符都是流式处理的,只要有新的文档进入,就可以对新的文档进行处理,但是 $group 代表必须收到全部文档以后才可以进行分组操作,才会将结果传递给后续的管道操作符,这就意味着,如果当前mongo是存在分片的,会先在每个分片上执行完毕以后,再把结果传递mongos进行统一的分组,剩下的管道操作符也不会在每个分片,而是mongos上执行了
如果我们现在遇到一些文档比较复杂,比如存在内嵌文档的存在,某个属性里面嵌套了一个数组,但是我们需要对内嵌的数组文档进行分析过滤等查询处理,这个时候就可以使用 $unwind 操作符将每一个文档中的嵌套数组文件拆分为一个个独立的文档便于进行后续的处理,例如我们需要将之前的set集合中关于请求的url以及ip的信息拆分出来,原始的格式如下:
我们可以使用命令进行拆分,如下:
结果为:
可以看到数据则是按照每一条信息的方式展示出来了,方便后续的计算以及输出,但是需要注意的一点是,这种方式,如果该文档中没有拆分的字段,或者是空数组,默认会直接排除,如果我们需要空数组等也输出计算出来,则可以指定 preserveNullAndEmptyArrays 参数,设置为true,则代表空数组或者不存在的文档也要拆分输出出来,即:
我们可以在管道查询的过程中,按照某个属性值或者多个属性的结果进行顺序排序,排序的方式与普通查询操作符中的sort操作符表现一致,与其他管道操作符一样,可以在任何阶段使用,但是,需要注意的一点是,建议在管道操作符第一阶段进行排序,因为此时的排序是可以触发索引的,如果在后续阶段进行排序,会消耗大量内存,并且耗时会很久,尤其是在有 $group 的情况下,如果放在 $group 操作符后面,会发现等到的时间很久,不仅仅是无法触发索引的问题,还和 $group 操作符是等待所有数据完毕才会触发的特性有关,因此需要格外注意。
结果如下,按照我们想要的结果进行了排序:
limit,只返回前两条数据,如下:
结果如下:
除了 skip,与之前的查询操作符作用也是一样的,用于在已经查询完毕的结果集中跳过前N条数据以后进行返回,我们将$skip加在刚刚的查询后面,如下:
这个时候可以看到返回的结果为空,什么结果都没有了,这是因为前一步管道已经限制了仅仅返回2条,而接着我们又跳过了前两条文档,因此返回的结果为空,我们将顺序调换一下,看看:
可以看到结果如下,与刚才的结果无异:
管道查询操作符有很多,除了上面学习的常用的部分,还有几十个,需要了解全部的可以参考官网:
https://docs.mongodb.com/manual/reference/command/aggregate/
除此之外,我们在学习的过程中了解到,部分查询操作符是可以触发索引的,例如 $project 、 $group 或者 $unwind 操作符,因此我们也建议 如果可以的话,尽量先使用这类管道操作符进行数据过滤,可以有效减少数据集大小和数量,而且管道如果不是直接从原先的集合中使用数据,那就无
法在筛选和排序中使用索引 ,例如我们先进行管道操作,再去将过滤好的数据进行 $sort 排序,会导致无法使用索引,效率大幅度下降,因此如果我们需要涉及到 $sort 操作的时候,如果可以尽可能在最开始就处理,这个时候可以使用索引,效率较高,然后再去进行管道查询筛选与分组等其他操作,可以有效的提高查询的效率。另外需要注意的一点是,在 MongoDB中会对每一个管道查询做限制,例如某一步管道查询操作导致内存占用超过20%,这个时候就会报错,无法继续使用管道 ,因为mongoDB本身每次最大是16Mb的数据量,为了尽可能避免或者减少这种问题,建议可以考虑尽可能的使用 $match 操作符过滤无用数据,减少数据总大小。同时也 因为管道查询是多步执行,例如 $group 则是等待所有数据完毕才会执行,因此可能会导致整体执行时间较久 ,也因为这样,才不建议在较高的实时查询需求上使用管道和查询,而是在 设计的时候尽可能直接使用查询操作符进行数据查询,触发更多的索引,更快的销量查询出来想要的结果。
㈣ 如何在Java中对MongoDB按日期进行查询统计
方法一:通过构造BasicDBObject对象来进行查询
[java] view plain
int startYear=2015,endYear=2016;
int startMonth=12,endMonth=1;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject("applydate", new BasicDBObject("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).append("$lt", new Date(endYear - 1900, endMonth -1, endDay)));//因为无法确知当前月有多少天,所以就从当月的1号(包含)计到下月1号(不包含)
int iCount = cltApplies.find(query).count();
System.out.println(iCount);
经测试上述代码执行完毕后iCount为9。也就是在2016-1-1至2016-1-31期间有9条记录。
方法二:通过BasicDBObjectBuilder对象来查询:
[java] view plain
int startYear=2016,endYear=2016;
int startMonth=1,endMonth=2;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject();
query.put("applydate", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());
int iCount = cltApplies.find(query).count();
System.out.println(iCount);
上述代码执行后iCount同样为9。
注意:因为java.util.Date(year,month,day)这个构造函数中year是超出1900的年数,所以需要减去1900;month从0开始,所以需要减去1。这个问题容易被初学者忽视。
下面扩展地说一下如果要进行带日期过滤条件的统计,该如何做。
前面的东西都相同,只是在统计的时候需要调用集合的distinct方法。如统计某个字段不重复的值有哪些,可用如下写法:
[java] view plain
int startYear=2016,endYear=2016;
int startMonth=1,endMonth=2;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject();
query.put("applydate", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());
List<String> lstUserIds = cltApplies.distinct("userId", query);
System.out.println(lstUserIds.size());
上面这段代码的执行结果为4。也就是在2016-1-1至2016-1-31之间出现了4个不同的userId。
㈤ 大数据分析方法解读以及相关工具介绍
大数据分析方法解读以及相关工具介绍
要知道,大数据已不再是数据大,最重要的现实就是对大数据进行分析,只有通过分析才能获取很多智能的,深入的,有价值的信息。
越来越多的应用涉及到大数据,这些大数据的属性,包括数量,速度,多样性等等都是呈现了大数据不断增长的复杂性,所以,大数据的分析方法在大数据领域就显得尤为重要,可以说是决定最终信息是否有价值的决定性因素。基于此,大数据分析方法理论有哪些呢?
大数据分析的五个基本方面
(预测性分析能力)
数据挖掘可以让分析员更好的理解数据,而预测性分析可以让分析员根据可视化分析和数据挖掘的结果做出一些预测性的判断。
(数据质量和数据管理)
数据质量和数据管理是一些管理方面的最佳实践。通过标准化的流程和工具对数据进行处理可以保证一个预先定义好的高质量的分析结果。
AnalyticVisualizations(可视化分析)
不管是对数据分析专家还是普通用户,数据可视化是数据分析工具最基本的要求。可视化可以直观的展示数据,让数据自己说话,让观众听到结果。
SemanticEngines(语义引擎)
我们知道由于非结构化数据的多样性带来了数据分析的新的挑战,我们需要一系列的工具去解析,提取,分析数据。语义引擎需要被设计成能够从“文档”中智能提取信息。
DataMiningAlgorithms(数据挖掘算法)
可视化是给人看的,数据挖掘就是给机器看的。集群、分割、孤立点分析还有其他的算法让我们深入数据内部,挖掘价值。这些算法不仅要处理大数据的量,也要处理大数据的速度。
假如大数据真的是下一个重要的技术革新的话,我们最好把精力关注在大数据能给我们带来的好处,而不仅仅是挑战。
大数据处理
大数据处理数据时代理念的三大转变:要全体不要抽样,要效率不要绝对精确,要相关不要因果。具体的大数据处理方法其实有很多,但是根据长时间的实践,笔者总结了一个基本的大数据处理流程,并且这个流程应该能够对大家理顺大数据的处理有所帮助。整个处理流程可以概括为四步,分别是采集、导入和预处理、统计和分析,以及挖掘。
采集
大数据的采集是指利用多个数据库来接收发自客户端的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作。比如,电商会使用传统的关系型数据库MySQL和Oracle等来存储每一笔事务数据,除此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。
在大数据的采集过程中,其主要特点和挑战是并发数高,因为同时有可能会有成千上万的用户来进行访问和操作,比如火车票售票网站和淘宝,它们并发的访问量在峰值时达到上百万,所以需要在采集端部署大量数据库才能支撑。并且如何在这些数据库之间进行负载均衡和分片的确是需要深入的思考和设计。
统计/分析
统计与分析主要利用分布式数据库,或者分布式计算集群来对存储于其内的海量数据进行普通的分析和分类汇总等,以满足大多数常见的分析需求,在这方面,一些实时性需求会用到EMC的GreenPlum、Oracle的Exadata,以及基于MySQL的列式存储Infobright等,而一些批处理,或者基于半结构化数据的需求可以使用Hadoop。统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源,特别是I/O会有极大的占用。
导入/预处理
虽然采集端本身会有很多数据库,但是如果要对这些海量数据进行有效的分析,还是应该将这些来自前端的数据导入到一个集中的大型分布式数据库,或者分布式存储集群,并且可以在导入基础上做一些简单的清洗和预处理工作。也有一些用户会在导入时使用来自Twitter的Storm来对数据进行流式计算,来满足部分业务的实时计算需求。导入与预处理过程的特点和挑战主要是导入的数据量大,每秒钟的导入量经常会达到百兆,甚至千兆级别。
挖掘
与前面统计和分析过程不同的是,数据挖掘一般没有什么预先设定好的主题,主要是在现有数据上面进行基于各种算法的计算,从而起到预测的效果,从而实现一些高级别数据分析的需求。比较典型算法有用于聚类的K-Means、用于统计学习的SVM和用于分类的Naive Bayes,主要使用的工具有Hadoop的Mahout等。该过程的特点和挑战主要是用于挖掘的算法很复杂,并且计算涉及的数据量和计算量都很大,还有,常用数据挖掘算法都以单线程为主。
大数据分析工具详解 IBM惠普微软工具在列
去年,IBM宣布以17亿美元收购数据分析公司Netezza;EMC继收购数据仓库软件厂商Greenplum后再次收购集群NAS厂商Isilon;Teradata收购了Aster Data 公司;随后,惠普收购实时分析平台Vertica等,这些收购事件指向的是同一个目标市场——大数据。是的,大数据时代已经来临,大家都在摩拳擦掌,抢占市场先机。
而在这里面,最耀眼的明星是hadoop,Hadoop已被公认为是新一代的大数据处理平台,EMC、IBM、Informatica、Microsoft以及Oracle都纷纷投入了Hadoop的怀抱。对于大数据来说,最重要的还是对于数据的分析,从里面寻找有价值的数据帮助企业作出更好的商业决策。下面,我们就来看以下八大关于大数据分析的工具。
EMC Greenplum统一分析平台(UAP)
Greenplum在2010年被EMC收购了其EMC Greenplum统一分析平台(UAP)是一款单一软件平台,数据团队和分析团队可以在该平台上无缝地共享信息、协作分析,没必要在不同的孤岛上工作,或者在不同的孤岛之间转移数据。正因为如此,UAP包括ECM Greenplum关系数据库、EMC Greenplum HD Hadoop发行版和EMC Greenplum Chorus。
EMC为大数据开发的硬件是模块化的EMC数据计算设备(DCA),它能够在一个设备里面运行并扩展Greenplum关系数据库和Greenplum HD节点。DCA提供了一个共享的指挥中心(Command Center)界面,让管理员可以监控、管理和配置Greenplum数据库和Hadoop系统性能及容量。随着Hadoop平台日趋成熟,预计分析功能会急剧增加。
IBM打组合拳提供BigInsights和BigCloud
几年前,IBM开始在其实验室尝试使用Hadoop,但是它在去年将相关产品和服务纳入到商业版IBM在去年5月推出了InfoSphere BigI云版本的 InfoSphere BigInsights使组织内的任何用户都可以做大数据分析。云上的BigInsights软件可以分析数据库里的结构化数据和非结构化数据,使决策者能够迅速将洞察转化为行动。
IBM随后又在10月通过其智慧云企业(SmartCloud Enterprise)基础架构,将BigInsights和BigSheets作为一项服务来提供。这项服务分基础版和企业版;一大卖点就是客户不必购买支持性硬件,也不需要IT专门知识,就可以学习和试用大数据处理和分析功能。据IBM声称,客户用不了30分钟就能搭建起Hadoop集群,并将数据转移到集群里面,数据处理费用是每个集群每小时60美分起价。
Informatica 9.1:将大数据的挑战转化为大机遇
Informatica公司在去年10月则更深入一步,当时它推出了HParser,这是一种针对Hadoop而优化的数据转换环境。据Informatica声称,软件支持灵活高效地处理Hadoop里面的任何文件格式,为Hadoop开发人员提供了即开即用的解析功能,以便处理复杂而多样的数据源,包括日志、文档、二进制数据或层次式数据,以及众多行业标准格式(如银行业的NACHA、支付业的SWIFT、金融数据业的FIX和保险业的ACORD)。正如数据库内处理技术加快了各种分析方法,Informatica同样将解析代码添加到Hadoop里面,以便充分利用所有这些处理功能,不久会添加其他的数据处理代码。
Informatica HParser是Informatica B2B Data Exchange家族产品及Informatica平台的最新补充,旨在满足从海量无结构数据中提取商业价值的日益增长的需求。去年, Informatica成功地推出了创新的Informatica 9.1 for Big Data,是全球第一个专门为大数据而构建的统一数据集成平台。
甲骨文大数据机——Oracle Big Data Appliance
甲骨文的Big Data Appliance集成系统包括Cloudera的Hadoop系统管理软件和支持服务Apache Hadoop 和Cloudera Manager。甲骨文视Big Data Appliance为包括Exadata、Exalogic和 Exalytics In-Memory Machine的“建造系统”。Oracle大数据机(Oracle Big Data Appliance),是一个软、硬件集成系统,在系统中融入了Cloudera的Distribution Including Apache Hadoop、Cloudera Manager和一个开源R。该大数据机采用Oracle Linux操作系统,并配备Oracle NoSQL数据库社区版本和Oracle HotSpot Java虚拟机。Big Data Appliance为全架构产品,每个架构864GB存储,216个CPU内核,648TBRAW存储,每秒40GB的InifiniBand连接。Big Data Appliance售价45万美元,每年硬软件支持费用为12%。
甲骨文Big Data Appliance与EMC Data Computing Appliance匹敌,IBM也曾推出数据分析软件平台InfoSphere BigInsights,微软也宣布在2012年发布Hadoop架构的SQL Server 2012大型数据处理平台。
统计分析方法以及统计软件详细介绍
统计分析方法有哪几种?下面我们将详细阐述,并介绍一些常用的统计分析软件。
一、指标对比分析法指标对比分析法
统计分析的八种方法一、指标对比分析法指标对比分析法,又称比较分析法,是统计分析中最常用的方法。是通过有关的指标对比来反映事物数量上差异和变化的方法。有比较才能鉴别。单独看一些指标,只能说明总体的某些数量特征,得不出什么结论性的认识;一经过比较,如与国外、外单位比,与历史数据比,与计划相比,就可以对规模大小、水平高低、速度快慢作出判断和评价。
指标分析对比分析方法可分为静态比较和动态比较分析。静态比较是同一时间条件下不同总体指标比较,如不同部门、不同地区、不同国家的比较,也叫横向比较;动态比较是同一总体条件不同时期指标数值的比较,也叫纵向比较。这两种方法既可单独使用,也可结合使用。进行对比分析时,可以单独使用总量指标或相对指标或平均指标,也可将它们结合起来进行对比。比较的结果可用相对数,如百分数、倍数、系数等,也可用相差的绝对数和相关的百分点(每1%为一个百分点)来表示,即将对比的指标相减。
二、分组分析法指标对比分析法
分组分析法指标对比分析法对比,但组成统计总体的各单位具有多种特征,这就使得在同一总体范围内的各单位之间产生了许多差别,统计分析不仅要对总体数量特征和数量关系进行分析,还要深入总体的内部进行分组分析。分组分析法就是根据统计分析的目的要求,把所研究的总体按照一个或者几个标志划分为若干个部分,加以整理,进行观察、分析,以揭示其内在的联系和规律性。
统计分组法的关键问题在于正确选择分组标值和划分各组界限。
三、时间数列及动态分析法
时间数列。是将同一指标在时间上变化和发展的一系列数值,按时间先后顺序排列,就形成时间数列,又称动态数列。它能反映社会经济现象的发展变动情况,通过时间数列的编制和分析,可以找出动态变化规律,为预测未来的发展趋势提供依据。时间数列可分为绝对数时间数列、相对数时间数列、平均数时间数列。
时间数列速度指标。根据绝对数时间数列可以计算的速度指标:有发展速度、增长速度、平均发展速度、平均增长速度。
动态分析法。在统计分析中,如果只有孤立的一个时期指标值,是很难作出判断的。如果编制了时间数列,就可以进行动态分析,反映其发展水平和速度的变化规律。
进行动态分析,要注意数列中各个指标具有的可比性。总体范围、指标计算方法、计算价格和计量单位,都应该前后一致。时间间隔一般也要一致,但也可以根据研究目的,采取不同的间隔期,如按历史时期分。为了消除时间间隔期不同而产生的指标数值不可比,可采用年平均数和年平均发展速度来编制动态数列。此外在统计上,许多综合指标是采用价值形态来反映实物总量,如国内生产总值、工业总产值、社会商品零售总额等计算不同年份的发展速度时,必须消除价格变动因素的影响,才能正确的反映实物量的变化。也就是说必须用可比价格(如用不变价或用价格指数调整)计算不同年份相同产品的价值,然后才能进行对比。
为了观察我国经济发展的波动轨迹,可将各年国内生产总值的发展速度编制时间数列,并据以绘制成曲线图,令人得到直观认识。
四、指数分析法
指数是指反映社会经济现象变动情况的相对数。有广义和狭义之分。根据指数所研究的范围不同可以有个体指数、类指数与总指数之分。
指数的作用:一是可以综合反映复杂的社会经济现象的总体数量变动的方向和程度;二是可以分析某种社会经济现象的总变动受各因素变动影响的程度,这是一种因素分析法。操作方法是:通过指数体系中的数量关系,假定其他因素不变,来观察某一因素的变动对总变动的影响。
用指数进行因素分析。因素分析就是将研究对象分解为各个因素,把研究对象的总体看成是各因素变动共同的结果,通过对各个因素的分析,对研究对象总变动中各项因素的影响程度进行测定。因素分析按其所研究的对象的统计指标不同可分为对总量指标的变动的因素分析,对平均指标变动的因素分析。
五、平衡分析法
平衡分析是研究社会经济现象数量变化对等关系的一种方法。它把对立统一的双方按其构成要素一一排列起来,给人以整体的概念,以便于全局来观察它们之间的平衡关系。平衡关系广泛存在于经济生活中,大至全国宏观经济运行,小至个人经济收支。平衡种类繁多,如财政平衡表、劳动力平衡表、能源平衡表、国际收支平衡表、投入产出平衡表,等等。平衡分析的作用:一是从数量对等关系上反映社会经济现象的平衡状况,分析各种比例关系相适应状况;二是揭示不平衡的因素和发展潜力;三是利用平衡关系可以从各项已知指标中推算未知的个别指标。
六、综合评价分析
社会经济分析现象往往是错综复杂的,社会经济运行状况是多种因素综合作用的结果,而且各个因素的变动方向和变动程度是不同的。如对宏观经济运行的评价,涉及生活、分配、流通、消费各个方面;对企业经济效益的评价,涉及人、财、物合理利用和市场销售状况。如果只用单一指标,就难以作出恰当的评价。
进行综合评价包括四个步骤:
1.确定评价指标体系,这是综合评价的基础和依据。要注意指标体系的全面性和系统性。
2.搜集数据,并对不同计量单位的指标数值进行同度量处理。可采用相对化处理、函数化处理、标准化处理等方法。
3.确定各指标的权数,以保证评价的科学性。根据各个指标所处的地位和对总体影响程度不同,需要对不同指标赋予不同的权数。
4.对指标进行汇总,计算综合分值,并据此作出综合评价。
七、景气分析
经济波动是客观存在的,是任何国家都难以完全避免的。如何避免大的经济波动,保持经济的稳定发展,一直是各国政府和经济之专家在宏观调控和决策中面临的重要课题,景气分析正是适应这一要求而产生和发展的。景气分析是一种综合评价分析,可分为宏观经济景气分析和企业景气调查分析。
宏观经济景气分析。是国家统计局20世纪80年代后期开始着手建立监测指标体系和评价方法,经过十多年时间和不断完善,已形成制度,定期提供景气分析报告,对宏观经济运行状态起到晴雨表和报警器的作用,便于国务院和有关部门及时采取宏观调控措施。以经常性的小调整,防止经济的大起大落。
企业景气调查分析。是全国的大中型各类企业中,采取抽样调查的方法,通过问卷的形式,让企业负责人回答有关情况判断和预期。内容分为两类:一是对宏观经济总体的判断和预期;一是对企业经营状况的判断和预期,如产品订单、原材料购进、价格、存货、就业、市场需求、固定资产投资等。
八、预测分析
宏观经济决策和微观经济决策,不仅需要了解经济运行中已经发生了的实际情况,而且更需要预见未来将发生的情况。根据已知的过去和现在推测未来,就是预测分析。
统计预测属于定量预测,是以数据分析为主,在预测中结合定性分析。统计预测的方法大致可分为两类:一类是主要根据指标时间数列自身变化与时间的依存关系进行预测,属于时间数列分析;另一类是根据指标之间相互影响的因果关系进行预测,属于回归分析。
预测分析的方法有回归分析法、滑动平均法、指数平滑法、周期(季节)变化分析和随机变化分析等。比较复杂的预测分析需要建立计量经济模型,求解模型中的参数又有许多方法。
㈥ 求解决,使用Spring-data-mongodb写出根据日期时间(按日、周、月、年)进行分组统计数据量,急~在线等
最近在做mongoDB的统计, 有需求是
按照一天24小时分组,
按照一周的7天分组,
按照一个月30天分组,
按照一年12个月分组统计,
mongodb 入库的时间字段是 2016-12-12 这样的字符串格式,并没有用mongodb的格式UTC,有时差问题.
思路是,只能通过mongodb的 管道 进行层层筛选, 分组的时候使用mongodb的自带函数,$substr 进行截取进行分组.
db.advPlaysDetails.aggregate([
{
$match: {advId:"1"}
},
{
$match: {playTime:{$gt: "2016-11-29",$lt:"2016-11-31" }}
},
{
$project :{new_time_stamp :{$substr :["$playTime",11,2]},"_id":0,playTimes:1,}
},
{
$group : {_id :"$new_time_stamp", playTimes : {$sum : "$playTimes"}}
}
])
$substr 第一个参数 要切割的字段, 第二个参数:从第几个字段开始切, 第三个字段:切几个.
至于统计出来, 比如,一周里,可能有一两天根本就没有数据这种情况,可以实现弄一个7天的集合或者数组,里边数据默认为0 或其他初始值. 至于一个月多少天,不能定死30,应该用Calendar自己去算