title: 从饼图百分比 bug 谈到议会席位分配 time: 2017.06.19 16:31:19 layout: post tags:
上周给 ECharts 修了一个挺有意思的 bug——饼图百分比由于四舍五入总和不为 100%。
举一个简单的例子你就<del>懵逼</del>明白了:
假设饼图由三部分组成,占比分别为:20.3%、30.4%、49.3%,总和是 100%。但是如果用四舍五入的方法保留整数部分的话,分别为:20%、30%、49%,这样总和就只有 99% 了。
想一下,这个问题应该如何解决呢?
<div class="split"></div>我们希望把剩余的 1% 分配给哪部分呢?
作为一个没有什么额外信息的饼图而言,我们应该很乐意把这多余的 1% 分配给 30.4% 的部分,毕竟它的小数部分比另外两个部分大 0.1%。因而相应地,修复这个 bug 的算法思路是这样的(我用比较通俗而不精确的方法介绍,更精确的说法详见 Wiki):
至此,这个 bug 就修完了。
<div class="split"></div>那么,这和议会席位又有什么关系呢?
<a href="https://book.douban.com/subject/25871778/" target="_blank"><img class="book-img" src="{{ site.loadingImg }}" data-src="https://img3.doubanio.com/lpic/s27281543.jpg" />其实一开始看到这个 issue 的时候,我就想起了前阵子在读的《数据之巅》里面提到的——在美国初创期,分配议会席位的时候,根据各州人口比例决定议会席位。和饼图保留百分比的 bug 类似,由于席位只能精确到整数部分,这就不可避免地会有小数点上的争议。
而议会的问题则比饼图复杂得多。而根本原因在于,一个席位之差对于一个州也是非常重要的。
上文我之所以用“作为一个没有什么额外信息的饼图而言”这样的表述,就在于像“把多余的席位分配给小数点部分大的州”这样的做法未必是最合理的。让我们看看《数据之巅》是怎么说的——
<img class="single-img" src="{{ site.loadingImg }}" data-src="{{ site.url }}/img/post/2017-06-13-pie-percentage-book-1.jpg">
那么,在这种情况下,怎样分配才最合理呢?
其实,就像我们对“公平”的定义很多时候也偏向了对自己有利的一面,不管我们有没有意识到。所以,各个州也不能免俗地认为那些对自己有利的算法更为合理公平。这本书还介绍了一些其他的算法,有兴趣的推荐看一下。
其中……
因为追求数学最佳,杰斐逊的方法在数学上更为复杂,很多国会议员因为听不明白而兴起全无。
——《数据之巅》
听不明白,哈哈哈哈,不由笑出声……