Data Analysis Weekend Project 残酷的世界

Created at 2017-09-17 Updated at 2018-05-06 Category Data Analysis Tag Data Analysis / Weekend Project

可视化作品链接地址:http://reinhardhsu.com/game.html

概要

最近读了比尔盖茨的夏日书单中的荐书《乡下人的悲歌》
img

书中描述了贫穷、毒品和一系列陋习,像遗传病一样,困扰着一代又一代的美国底层人民,使得他们生活艰辛,充满了各种不幸,并且很难向更高的阶层游动。

另一个是听到网易蜗牛读书的有声读物《如果不能改变阶层,我们努力是为了什么?》中,北京高考状元对于阶层固化的言论。

这些都让我产生了深深的焦虑,碰巧这时在知乎看到一个热议的游戏,《房间内 100 个人,每人有 100 块,每分钟随机给另一个人 1 块,最后这个房间内的财富分布是怎样的?》,来模拟社会财富分配。我觉得很有意思,不妨就来玩一下。

我初始了100个游戏玩家。从18岁开始,这100个人带着自己的财富,开始各自的人生旅程。每个人每天要随机地找到另一个人,给他一笔钱。到65岁退休时,看看大家的资产情况。

为了增加游戏的可玩性,让每个观众都能在其中找到自己的位置,我设计了四种角色:

  • 普通人
  • 富二代
  • 努力的人
  • 有钱又努力的人

观众还自己可以调整一些参数,以模拟他所认为的这个世界。这些参数包括:

  • 各角色所占的比例
  • 各角色的初始财富
  • 各角色每轮游戏相对普通人的收支系数
  • 每轮游戏要给别人的钱数
  • 是否允许负资产

设计

主要的变量及其类型:

  1. 玩家年龄,时间维度
  2. 玩家的财富值,定量变量
  3. 玩家财富的标准差,定量变量

因为这个游戏的结果最终是要通过对比的形式进行解读,比如不同角色的玩家的财富值对比,某一特定角色的玩家在不同特定阶层的占比多少等等。而对人的视觉处理系统而言,更善于量化刻度上的位置差异,所以我选择在坐标轴上进行可视化。

主要变量的可视化形式

其中,玩家的年龄是时间维度,我用动画的形式逐年递增,来看另外两个变量如何随着年龄的增长而变化。

这里有100个玩家,我们要看每一年不同玩家间财富的对比,所以我用条形图来展示玩家的财富值。X轴是玩家的索引,Y轴是玩家的的财富值。

因为每年都会计算出一个标准差,所以它是一个时序数据,我用折线图,来查看它的走势。X轴是时间,Y轴是玩家财富的标准差。

可视化要传达的主要观点

通过这个可视化,我们简单地模拟了在一个封闭环境中,人群的财富分配。

这个封闭环境中有100个游戏玩家,从18岁开始,每人带着100块钱,开始各自的人生旅程。每个人每天要随机地找到另一个人,给他1块钱,可以理解为每天的生活成本。

如果不允许负债,那么玩家资产变为0时,就不用给钱,但是可以收钱,可以理解为社会基本保障吧。

到65岁退休时,看看大家的资产情况。

Round One:100个普通人,不允许负债

游戏一开始,我放了100个普通人。

img

我们可以看到,30岁之前,人与人之间的差距已经完全拉开了。到65岁退休时,有一半的人资产缩水到100以下,有6个人的资产已经翻倍。最富有的人的资产接近初始值的4倍。

Round Two:100个普通人,允许负债

如果允许负债,会不会让情况变得更好呢?

img

我们可以看到,借债虽然能让我们在走投无路时多一些周转余地,但最终会让穷人变得更穷。

Round Three:10个富二代,90个普通人

如果加入富二代,情况会是怎样的呢?富人初始资产500,每天要支付的钱是普通人的2倍,但是获得收入的几率也是普通人的2倍。

img

我们可以看到,富二代的财富有一部分已经流动到了普通人那里,但是大部分富二代依然位于财富排名前10%的位置。普通人要有极好的运气,才能到达与富二代相同的高度。

Round Four:5个努力的普通人,10个富二代,85个普通人

如果我们加入一些努力的普通人,会是怎样的呢?通过自己的努力,这部分人获得收入的几率是是普通人的1.01倍。

img

我们看到,努力的普通人仅仅是每天多付出一点点汗水,比普通人多了0.01的获得收入的几率,经过时间的发酵,有2个人已经跻身资产排名前10%的位置。另外3个人位于资产排名中上的位置。

富二代中,有1个败家子已经破产,1个败家子将要破产,5个败家子成为了普通人,只有3个守住了财富,依然位于富豪的行列。

有的同学可能觉得不对,富二代中除了败家子,还有努力的富二代。

Round Five:5个努力的富二代,5个努力的普通人,5个富二代,85个普通人

努力的富二代,每天付出多一点的汗水,获得收入的几率是普通人的2.02倍。

img

我们可以看到,努力的富二代全部位于资产排名前10%的位置,其中3个不仅守住了财富,而且创下新高。

其它的富二代中,有4个位于资产排名前20%的位置,只有1个挣扎在破产的边缘。

努力的普通人依然混得还不错,有1个跻身资产排名前5%,还有3个位于资产排名中上位置。

这个故事告诉我们,这个世界虽然很残酷,但是努力的人一般运气还不错。

用户们的反馈

可视化反馈

@靖靖:

从这个可视化中注意到的是,富二代基本上稳居上位的,不会掉下来,努力的富二代更是在最前端,从年龄上来看他们享受的是当下的。而普通人也有,也是可以晋升为顶级的人物,但是他们消耗的时间是非常长的,富二代已经享受完了人生,普通人才能晋升到顶级,这时看他们的年龄已经65岁,请问还能活多久呢?

在这个可视化中我看到的是一个轮回,富二代已经享受完了人生,即使最后败了,也是他的下一代败了。普通人拼尽一生,即使拼到最顶层,也来不及享受,但是他的子孙会成为富二代。

为什么最后资产最高的是个普通人?有点想不通?普通人为什么会成功?觉得数据有问题。

既然是随机,为什么会形成这样的差距呢?

@芒果ʕ •ᴥ•ʔ 兔:

我调整了上面“每天支付5块”,但是主界面显示好像还是1块。

观察到的信息是:允许负债的情况下,资产的标准差随时间逐渐增大;如果不允许负债,贫富不均的情况仍然会出现,但没有那么大,标准差会增加,但会趋向于平稳。每天支付的钱越多,标准差越大。

@lemontechmaster:

赞~ 界面炫酷

观察到的结论:在默认参数下。随着时间增长,每个人的资产标准差在扩大。但是修改了每天的支付金额后,标准差的变化就一波动,并没有明显趋势。
问题:我点击更多参数,发现程序对人数百分比并没有做检验,,然后就显示不太正常了。还有一点是运行时间偏长,开头有点长,我一会就不记得开始的字幕了。
不明白:虽说标题是残酷的世界,我以为模拟出来的结果只有富二代等可以生存,但最后显示普通人和努力的普通人居然资产挺高的。。。

@xujunwei1879

厉害,膜拜。
我不明白的是四种身份的划分,为什么每次都不一样,是每次运行后都随机按比例重新设定身份吗? 或许是我不明白你的意图,我觉得是不是这种身份固定下来比较好?
还一个小小的意见是,面向大众的话,我想大部分人可能不明白标准差是什么含义,做个注释类似于贫富差距是不是更好。
再次膜拜,看了你的我有种绝望的感觉。

反馈问题汇总与修改

1、游戏运行时间过长,和每次运行结果都不一样?

因为每次运行都是实实在在地运行了一万七千多轮 x 100个人,所以快慢跟设备性能也有关系,两次运行的结果也应该不会相同。

2、大多数人不明白标准差的含义?

是的,我会将 标准差 改成 人跟人之间的财富差距。

3、对不同角色的人数占比合计超过100%没有做校验?

是的,我会添加这个校验。

4、调整成每天支付5块,但是主界面显示好像还是1块

经过确认发现,用户是在播放开场字幕的时候调整的,发现字幕的内容没有变化。

这是因为,参数控件是设计用来控制游戏图表的,对字幕没有作用。

所以为了避免用户的困惑,我决定在播放开场字幕的时候,先隐藏掉参数控件。

5、为什么普通人会成功?

富人只是初始财富高,按照游戏规则他们每天收入多,但是支出也同样多。他们在游戏的一开始会快速成长,并占据优势。

但是因为游戏充满了随机性,普通人在一系列好运的眷顾之下,后期也有逆袭的可能。

我重新看了知乎上的游戏规则,发现我的规则和原游戏规则有出入。原游戏规则是,富人单笔支出多,单比收入和普通人一样,但是获得收入的概率比普通人高。我的规则是富人单笔支出多,单比收入也多,但是获得收入的概率与普通人一样。可能是这个细微的差异,产生了不同的结果。

我将按照原游戏的规则,使用带权重的随机算法。

6、每人每天支付1块钱的这个拖动条是什么含义?数值是多少?

每轮游戏需要支付给另一个人的钱数。数值显示在Slider下面的文字描述中。

7、是否允许负债这个选项,我分别对两个情况进行了尝试,最后的图形中100个人均没有出现资产为负的情况,请确认一下是否正常工作。

负资产滑块开关开启后,会出现负资产的现象,没有问题。

参考文献

[1].房间内有 100 人,每人有 100 块,每分钟随机给另一个人 1 块,最后这个房间内的财富分布怎样?

[2].Weighted/Biased Random Number Generation with JavaScript based on Probability

Site by Reinhard Hsu using Hexo & Random

Hide