|
数据分析讲堂
第三课 维度的内部结构
第二讲 非层次结构(2)
3)排序 有些读者可能已经从一些统计方面的书籍中知道了名词(nominal)、序数(ordinal)和基数(cardinal)序列之间的差别。一组政党或者赛跑者的列表是一个典型的名词序列。赛跑者在公路赛跑中的名次则是一个序数序列。而整数则是基数序列的一个例子。 由于维度层次的某些区别是由于排序不同造成的,排序的不同对于类型上的可行的操作有很大的影响,排序在维度分析中是一个非常重要的概念,因此我们将对不同的排序做详细的介绍。这里使用的矩阵应该被看做关系左边的实例I和关系右边所有可能实例iªn的一种简洁的表示方法。矩阵单元中的每一个等号表示了代表左边元素的行号i和代表右边元素的列号j之间的关系。 l 名词排序实例 如果实例是名词排序的,那么任何两个实例之间的关系只能是等于(=)或者不等于(≠)。表3.2.1描述了由4个实例组成的维度,以及每两个实例之间可定义的关系。实例中的上标a表示了其位于关系的左边。而带有上标的实例表示其位于关系的右边。 由名词排序实例组成的类型可以使用类似集合的操作,如连接、交叉和联合。它们支持的唯一的比较操作是相等比较。名词排序实例无法使用差别比较操作或者方向性操作,例如向前、下一个、第一个、最后一个。大多数的OLAP维度,例如商店、产品、客户和渠道对于用户来说都是名词排序的(虽然OLAP工具可以自动将一个序数值如装载时间或数组顺序和一个用户定义的名词维度联系起来)。 l 序数排序实例 如果你可以对实例进行排序,但是不能衡量它们之间的具体的差别,那么这些实例就是序数排序实例。 现在除了可以对两个实例比较是否相等,序数实例还支持传递比较:i2大于i1并且小于i3。这也正是使用下一个、上一个、第一个、最后一个等常用维度应用方法的基础。这些操作可以泛化成开始点、偏移量和方向。开始点经常是当前游标的位置或者序列的第一个或最后一个实例。 通常来说,维度可以被定义成带有等级的序数,或者带有基数特征的名词维度。例如:商店维度,一个典型的名词维度,可以根据大小和年代来进行排序,或者根据销售额和利润度量来排序,等待。 当特征和度量用来对一个维度进行排序的时候,可以使用很多有用的排序方法。更进一步的是,相对排序函数例如前一个、后一个、前三个,当使用维度的不同排序方法的时候,会返回不同的结果。因此,有必要为每一种排序起一个名字,然后在相对位置函数中引用这些排序。例如,表达式: Store.(size_order,this-1) 将会引用根据大小排序的商店维度中当前位置的前一个实例,而表达式: Store.(age_order,first+3) 将会引用按照时间排序的商店维度中的第四个实例。 当你为名词维度中的实例创建一个排序的时候,需要注意避免将多个排序实例与单个确定的位置联系起来。因此,如果你将商店按照占地面积做了排序,同时又有多个商店具有相同的占地面积,你必须考虑如何避免多个实例对应于同一个排名的问题。你可以将这些具有相同占地面积的商店如图3.2.1所示那样随机排列,或者采用第二个排序字段,例如按照每平米的租金对这些商店进行排序——虽然这种方法还不能保证解决这个问题,因为所有商店的租金并非完全不同,或者你也可以将这些具有相同占地面积的商店就看作是相同的实例。其他维度的值可以按照图3.2.2所示的类型进行汇总。
Store ID | Store size | Saies | A | 1000 | 12,500.00 | B | 1500 | 14,000.00 | C | 2000 | 30,000.00 | D | 2000 | 38,000.00 | E | 2500 | 40,000.00 | F | 3000 | 55,000.00 | 图3.2.1
Store Size | Cnt(store) | Avg.(saies) | 1000 | 1 | 12,500.00
| 1500 | 1 | 14,000.00
| 2000 | 2 | 34,000.00
| 2500 | 1 | 40,000.00
| 3000 | 1 | 55,000.00
| 图3.2.2 l 基数排序实例 如果你可以在实例之间分配距离和比较它们的差别,那么这些实例之间的关系就是基数关系。 虽然对一个名词维度进行基数排序有很多方法,但是在OLAP的标准应用中,一般都是将基数的特性直接在维度的定义中体现,而很少将名词维度基数化。在高级的OLAP应用中,基数序列维度是更为常见的一种形式。 商店本来是一个名词字段,但是我们也可以按照大小、时间、销售额、利润等进行基数排序,从而转换成一个基数字段。基数排序和序列的差别可以从下面的例子中发现。表3.2.1显示了某个商店在一段时间内的交易总数,以及不同金额的交易出现的次数。 表3.2.1原始的销售情况表
销售金额 | 交易次数 | 50 | 1 | 100 | 2 | 125 | 4 | 150 | 4 | 300 | 5 | 325 | 4 | 375 | 2 | 400 | 2 | 图3.2.3显示了按照销售额排序的交易次数的柱状图。其中的X轴按照从小到大的方式显示了交易的金额。整个柱状图显示了交易次数的分布基本上是满足正态分布的,排在中部的4个数据拥有最大的概率。 与之相对比,图3.2.4中的柱状图根据销售额的基数排序方式显示了次数的分布情况。图中X轴从0元到500元按照等距的方式显示了销售额。在按照基数方式显示的时候,那些销售次数为0的销售额依然会显示在图形中。从图中我们可以看出整个分布呈现双曲线的样式,经常出现的是在125元左右到325元左右的数额。
除此之外,在基数维度上你还可以进行各种数学计算。例如,你可以采用如下公式计算客户生命周期内产生的收入和该客户的生存时间的比例: First_sale{date}- First_contact{date} / Last_sale{date}- First_sale{date} 你还可以使用如下的表达式定义区间和增长函数,该函数是基于两个事件之间的时间定义的,例如,第一次合同的时间和最后一次销售的时间,然后可以乘上其他一些条件函数,例如经济增长情况或者是产品价格等。 Time.{First_sale{date} – First_conact{date} * Growth_Factor per day{Integers}}。
|
一共有 1 条评论