标签:数据分析
数据分析中一个很重要的内容就是数据可视化,目的就是让人们能够对整体数据有一个非常直观清晰的了解。
那么传统数据库是如何处理数据可视化的呢?我们知道数据通常是多个维度的,数据库中的表格存储多个维度的数据,每一列代表一个维度。处理这些数据可以使用数据合并(grouping/aggregation)语句,包括AVG(),COUNT(), SUM()等。使用这些基本语句可以执行一些基本的数据运算,例如计算一个月的平均气温。
除了这些最基本的语法之外,某些系统允许用户使用预设好的语料库来设计添加自己的计算方程(aggregate function)。这些系统包括Red Brick和Illustra。
但即便如此,SQL任然不能满足高维度数据分析的某些要求,我们需要一个可以对高维度数据做类似于SQL GROUP BY那样的操作。于是数据立方应运而生。
GROUP BY是数据库系统中使用频率最高的一个运算。然而这个运算却存在着很多局限。如果要生成柱状图数据,则需要相对复杂的SQL语句来实现。类似的,roll-up,drill-down,cross-tab这样重要的运算也需要用冗长的语句来实现。
数据仓库(data warehouse)是以数据立方的形式存数数据的。数据仓库的数据通常是高维度,而数据立方恰好是处理这类数据的最好选择。
那么什么是数据立方呢?我们先来通过一个简单地例子让大家有一个大概的了解:
假设我们有一组汽车销量数据。根据汽车的不同颜色,品牌和销售时间段,我们可以做不同方面的数据汇总,比如说迄今为止红色汽车的销售额一共是多少?
首先在上图的左上角位置是总销售额。根据汽车颜色,我们分成了红色,白色,蓝色,这样我们就知道在这个总销售额下,红色,白色,蓝色汽车的总销售额各是多少。如果再往下细分,我们可以知道红色的福特车总销售额是多少等等。如果再往下分,我们还可以知道销售额在不同年份的数据。
对数据立方有一个大致认知之后,我们来做进一步的深化理解。我们换一个例子,假设我们有一堆销售数据,数据记录了不同产品在不同地域和不同时间的销售额。在接下来的讨论中,我们用这个例子作为讲解范例:
这是一个立方的维度包括产品,时间,地区。立方中,存在很多小的数据方块(cuboid):
例如,(product, time, location)是一个方块,(product,time)是另外一个方块。每一个方块对应了一个数据汇总的方式,比如说(product, time, location)记录了某一产品在某时间段某个地点的销售总额。一个方块实际上一个不同的GROUP BY。处在最底层的那个方块叫做基方块(base cuboid),这是维度最高的方块,依次向上,维度递减,如下图,基方块对应了整个三维立方,基方块上面一层(例如(time, location))对应了一个立方的面,再上面对应了一条线,最顶层对应了一个点(All,All,All)。
在了解了数据立方的构造之后,接下来看看我们如何在这个结构基础上做一些基本的数据分析。
Roll up用来做数据汇总:
在以上这个例子中,我们将销售总额从不同城市汇总到不同国家。
Drill down是Roll up的反相运算:
这我们将每一季度的销售总额下分成每一个月的销售总额,这样可以展示出更多的细节。
Slice相当于SQL的projection运算:
Dice相当于SQ的SELECT运算:
Pivot比较简单,只是将空间旋转,换一个角度看数据。
说了这么多数据立方的用途,最后我们来看看数据立方的实现。如何建造一个数据立方呢?一个立方实际上是由一组方块组成。我们需要将所有可能的方块计算出来。首先我们来看看一个立方到底有多少个方块。
在我们的例子中,产品,地点,时间这三个维度可以下分成以上多个维度,那么数据方块在这个例子中的总个数(所有可能的GROUP BY)为
找到了所有数据方块之后,我们就可以给每个方块放入数据组(tuple)了,但是这里有一个问题,举个例子:
假设维度是N,每个维度下有一个变量叫做
左图中的需要计算的数组个数为
我们在上文提到数据立方的计算成本过大,面对这种情况,我们可以选择只计算立方的部分数据(iceberg cube),举个例子:
Select month, city, product, sum(sales)
from Sales-Info
cube by month, city, product
having sum(sales) >= 10000$
这里只有总销售额大于10000的方块数据点才会被读取进来搭建立方,这样大大减少了计算量。
目前为止我们详细介绍了数据立方和数据方块,我们讨论了如何进行数据汇总来得到不同数据方块,那么汇总究竟是如何进行的呢?这里我们通过例题来让大家体会:
对于每一个维度,我们有两种选择:具体数值或者汇总(*),除开基数据和其中一个重合的(*, *, ……,*),我们有
唯一满足条件的只有两个(*, *, ……,*)。
对于
当
标签:数据分析
原文地址:http://blog.csdn.net/quantum_bit/article/details/45575551