以前我写过一些画曲线图的文章,但是很多人跟我说,他们仍然无法驾驭曲线图,主要还是因为对其中的数学原理没有弄清楚。Tableau本身是不支持曲线图的,所以画曲线图就必需自己构造数据。其中最常用的方法就是利用sigmoid函数,当然sin或者其他函数也可以。
今天我就来用最简单的例子来讲解一下,用sigmoid函数画曲线图的基本原理。相信大家了解了数据构造原理后,再去理解曲线图就会事半功倍了。
我们假设一个数据源
法国预测排名第2,实际排名2
德国预测排名第3,实际排名第6
西班牙预测排名第6,实际排名第4
那么按照上述排名信息,我们用sigmoid函数画在坐标系里是什么样呢?
大家看上图,我加入了sigmoid函数本身的曲线进行比较,就更清晰了。
sigmoid函数本身是一条在Y轴在(0,1)之间的曲线,在Tableau里用公式表示就是1/(1+EXP(1)^-[T]),T是什么?大家可以看到其实T就是上图中的X轴。
通常状态下,在±6时,就已经接近(0,1)了,所以我们一般来说只取±6这一段来用。但是Tableau不是数学软件,不可能写个公式就画出曲线。我们必须明确X的值,但是X轴上又有无穷个值,怎么办呢?所以通常来说,为了保证画出的曲线平滑,我们在±6之间,每隔0.25取一个X值,正好是49个值。
所以,一般你看到的教程里,不管是利用辅助表做先做好1-49行数据,还是只用数据桶标记1和49两个值,都是为了构造±6之间的这49个X轴的值。
但是1-49并不是X值本身,需要用公式转换一下(Index()-25)/4,把1-49带入这个公式的Index里,就会得到-6,-5.75,-5.5……5.5,5.75,6,一共49个X值,也就是教程里提到的T值。我们再把这49个值连起来就构成了一条sigmoid曲线。
那么如何控制曲线的高矮和方向,也就是Y轴的值呢?大家如果仔细观察,从第一个图里就可以看出来,是有规律的。
Y=起始值+sigmoid*(终止值-起始值)
通过上面的讲解,我们知道了坐标轴的X值,也就是T值(±6之间的49个点),也知道了Y值[startpoint]+([endpoint]-[startpoint])*1/(1+EXP(1)^-[T]),只要分别拖到行列功能区,就可以构造sigmoid曲线图。这里我就不演示了。
明白了上述原理,大家再去看我以前的文章,比如桑基图或者sigmoid bump chart就容易明白里面公式的意义了。
还有就是构造曲线图一般是两种方法,一种是辅助表,直接把49个T值构造好,然后和主表联接,这种方法的好处是,容易理解,制作简单,不用复杂的表计算,但是性能较差,因为把数据直接扩大了49倍。另一种是数据桶,这种方法,不用修改原始数据,但是表计算相对复杂,适合进阶学习。初学者建议从辅助表开始学习。
原理部分还是推荐看Ken大神的Viz。
后面的文章,我会循序渐进的介绍一些更复杂的曲线图方法,如果想进一步学习,需要大家先理解本篇文章的制作原理。
此篇文章已发布到我的公众号: saodisir,有兴趣也可关注一下