2.3.4 Use Bins

什么是Bin?


Bin 如果单独翻译成中文的话, 就是桶的意思.


Bin是继Group, Set之后的第三种分组方式

我们现在简单的回顾一下前两种:

Group: 在一个Dimension内部, 手动的对里边的每一个值进行进一步的归类, 创建一个更细分的Dimension.

Set: 在Dimension内部, 通过计算对与Dimension所对应的Measure是否满足条件, 将Dimension的值进行分组. 比如用Sales给Subcategory分组.

Bin: 在一个Measure内部, 通过设定数值的范围对Measure进行分组.

我来举一个例子:

在Sample Superstore这个数据集当中, Sales的范围是从最小0到最大22,638. 这其中我们可以每隔10把这个Measure进行分组. 0-10是一组, 10-20是一组, 20-30是一组等等, 0-10就是一个Bin, 10-20就是一个Bin. 这个概念看上去非常好理解.

如何创建一个Bin

如果我们选择一个Measure, 然后右键点击Create, 你就会在菜单当中看到Bins的这个选项.

如果你尝试选择一个Dimension, 你会发现Dimension的右键菜单当中不会出现Bins.

只有Measure才能创建Bins

当我们点击Bins的这个选项, 就来到了这个设置页面

这个页面里边你能选择的就两个选项, 一个叫做New Field Name. 一个叫做Size of Bins.

New Field Name是你创建的这个新Bin的名字, 它会作为一个新的field出现在左侧的Data Pane当中.

而第二个选项叫做Size of Bins. 也就是你设置的这个数据范围是多大. Size of Bin决定了你最后这个创建的这个Bin的里有少个Group. 换句话说, Size of Bins或者是Bin Size越小, 那你分出来的组就越多, 你分的就越细

创建Bin的全过程展示


灵魂拷打环节: Bin真的有看起来那么简单吗?

1.我们创建的Bin到底是什么的Bin?

很多同学肯定会说, 老师这个有什么难的, Sales的Bin啊. Sales从0-10一个Bin, 10-20一个Bin, 这不是非常简单吗.

好了下一道题, 这是什么的Sales?

是一个Product的Sales吗, 一天的Sales? 一个Order的Sales? , 一个Customer一天的Sales? 给你五秒钟好好想想

1秒

2秒

3秒

4秒

5秒

答案是 这是一个Order下边一个注意啊, ☝️1个产品的销售额. 不是整个order的销售额, 也不是一天的销售额. 一个消费者在下单那一刻产生了一个订单, 订单里可能1个到100个产品, 这一大推产品当中, 每一个产品都有一个对应的Sales. 你咔嚓购物车一清零, 一口气干出去一千块钱, 这是那个购物车的总销售额吗, 不是, 这是你那个购物车里每一个单项的销售额.

你几十块钱买个数据线, 那这数据线进入一个Bin. 你几百块买个充电宝, 🔋宝进入另一个Bin, 你一个订单里可能有十几样东西, 十几样东西搞不好就是十几个Bin. 那么有同学可能就问, 老师你是怎么知道的.

首先我们创建的是Sales的Bin, 注意啊 不是Sum([Sales])的Bin. Sales来源于数据当中这个叫做[Sales]的Column. 那么Sales的每一行代表什么, 我们的Bin就代表什么. 在原始数据当中, Sales所代表的就是一个order下边一个产品的销售额. 我会在Certified Data Analyst课程专门有一课来讲这个问题. 在这里我只是要提醒你的是:

一定要注意你所创建的Bin是基于哪个Measure, 这个Measure的真正含义是什么. 所有直接来自于数据的Measure, 很有可能不是你要创建Bin的对象.

比如你要分析一个订单消费额的分布, 你需要另创建一个Measure来计算每个订单的总销售额是多少, 这不是[Sales], 这是Sum([Sales]) by Order ID.

2.每个Bin里到底包含的是什么?

在上边的部分, 我们创建了以Sales为基础的Bin, 在创建的过程当中, 我们选择了Bin Size=10, 然后咔咔的就创建完了.

那么有没有细心的同学看到每个Bin里边的值都包含什么

有的同学到这里又困惑了, 老师, 这个有啥问题吗? Bin Size =10, 那就从0-10一个档, 10-20一个档, 20-30一个档呗.

非常好, 我问的就是这个, 既然0-10和10-20都包含10, 那么10这个值到底在哪边呢? 嗯?

现在你再给我回去看看创建Bin的全过程展示的这个动图里边最后的那几秒, 你给我盯住每个Bin右侧的那些值, 你看看跟你想象的有没有一点不一样

第一个Sales Bin的名字叫0, 但是它里边的值是从10开始

第二个Sales Bin的名字叫10, 但是它的值包含20

到这你现在是不是发现这个有点反直觉了, 唉怎么叫10的Bin里边没有10呢? 反而在0的那个Bin里

乍看上去, Tableau是不是有点问题啊? 20怎么也应该出现在20的那个Bin里边啊.

其实在Tableau里, 眼见不一定为实. 你在上边之所以看到20在10的那个Group里, 是因为Tableau默认显示的是整数.
如果我把小数点加上, 然后计算每个Bin里的最大值和最小值, 你就能清楚的看到每个Bin内部的数值范围.

理解使用Bin的局限性 - 单一Bin Size

在创建Bin的时候, Bin只有唯一的一个可以设置的参数,就是Bin Size. 但是在很多时候, 我们需要一个更灵活的Bin, 换句话说, 也就是每一个Bin之间稍微有那么一点点不一样.

比如0-100是第一个Bin, 100-500到二个Bin, 500-1000是第三个Bin, 也就是数据越集中的部分,我们越想细分, 数据越少的时候, 我们越想归到一起.

如果你需要的是这种分类, BIN这个功能是做不了的, 啥也做不了, 你就手写IF ELSEIF吧