数据分析 - 残酷的世界

数据分析 - 残酷的世界

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

概要

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

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

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

这些都让我产生了深深的焦虑,碰巧这时在知乎看到一个热议的游戏,《房间内 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个普通人。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我们可以看到,努力的富二代全部位于资产排名前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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

burpsuite破解版

来源:http://www.vuln.cn/8847 转载于:https://www.cnblogs.com/shengulong/p/8819072.html

Eclipse Juno上带有GlassFish的JavaEE 7

Java EE 7很热。 前四个JSR最近通过了最终批准选票,与此同时GlassFish 4达到了升级版83。 如果您关注我的博客,那么您将了解NetBeans的大部分工作。 但是我确实认识到,那里还有其他IDE用户,他们也有权试用最新和最出色的企业Java。…

photoshop 切片工具进行切图

1、使用切片工具切图 2、存储为web所用格式 3、选择图片格式 4、只保存切片(选择所有用户切片) 5、查看:

HubSwitch工作原理,冲突域,以太网帧结构笔记(2017年10月9日 11:15:46)

一、冲突域 网络中发送的主要是应用程序产生的数据。 数据流需要网络设备进行数据转发,任何应用程序在发送数据流之前都要进行数据封装。 比如:SMAC DMAC | SIP DIP | 报头(Source Port、Destination Port)| QQ的数据载荷&#xf…

在IDEA中实战Git

工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 场景三&#xff1…

java抽象类异常_求教JAVA里面的错误继承抽象类我都已经看傻了。

求教JAVA里面的错误我都已经看傻了。我思路是想创建个新对象(经理)并打印他的所有属性,外加上work一个干活的属性。自己看了半天改了半天都不行跪求高手给我改改并讲讲。abstractcl...求教JAVA里面的错误我都已经看傻了。我思路是想创建个新对象(经理)并打印他的所有…

从迁移到Java 7的小技巧

经过几年的努力,我们终于开始在软件级别方面将我们的应用程序从黑暗时代中拉出来,其中一个步骤是将我们的Java版本升级到Java7。在大多数情况下,这相当轻松,但是有一些惊喜: 当我们切换到Java 7时,已经运行…

css 宽高自适应的div 元素 如何居中 垂直居中

在我们 编写css 样式的时候经常会遇见一个问题 那就是一个 宽高未知的元素 要让他 垂直居中如何实现这个呢 下面是我常用的两种方法 上代码 下面的是 结构代码 <div class"wrap">//此处为父组件 我们会设置父级的宽高并让其居中 <div class"center&q…

iOS 图文并茂的带你了解深拷贝与浅拷贝

一、概念与总结 1、浅拷贝 浅拷贝就是对内存地址的复制&#xff0c;让目标对象指针和源对象指向同一片内存空间&#xff0c;当内存销毁的时候&#xff0c;指向这片内存的几个指针需要重新定义才可以使用&#xff0c;要不然会成为野指针。 浅拷贝就是拷贝指向原来对象的指针&…

使用Byteman和JUnit进行故障注入

我们的应用程序独立存在的时间已经很久了。 如今&#xff0c;应用程序是一种非常复杂的野兽&#xff0c;它们使用无数的API和协议相互通信&#xff0c;将数据存储在传统或NoSQL数据库中&#xff0c;通过网络发送消息和事件……例如&#xff0c;如果考虑到数据库&#xff0c;您会…

Ambari Views的自定义

下载ambari源码&#xff0c; ambari-views/examples/ 下面有很多例子&#xff0c;直接编译是不会成功的&#xff0c; 因为每一个例子项目都需要一个依赖 <dependency><groupId>org.apache.ambari</groupId><artifactId>ambari-views</artifactId>…

angular使用sass的scss语法

一、现象 为了简写样式 二、解决 1、安装sass ,利用npm 安装(npm工具如果没有&#xff0c;请先自行安装好) &#xff08;1&#xff09;、npm install node-sass --save-dev &#xff08;2&#xff09;、npm install sass-loader --save-dev 2、修改.angular-cli.json文件 …

linux 查看java cpu_Linux查看CPU和内存使用情况

在系统维护的过程中&#xff0c;随时可能有需要查看 CPU 使用率&#xff0c;并根据相应信息分析系统状况的需要。在 CentOS 中&#xff0c;可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后&#xff0c;CPU 使用状态会以全屏的方式显示&#xff0c;并且会处在对话的模式…

TCP浅谈为什么3次握手

《计算机网络》中的例子是这样的&#xff0c;“已失效的连接请求报文段”的产生在这样一种情况&#xff1a;客户发出的第一个连接请求报文段并没有丢失&#xff0c;而是在某个网络结点长时间的滞留了&#xff0c;以致延误到连接释放以后的某个时间才到达服务。 本来这是一个早已…

Arrays.sort与Arrays.parallelSort

我们都使用Arrays.sort对对象和原始数组进行排序。 该API在下面使用合并排序或Tim排序对内容进行排序&#xff0c;如下所示&#xff1a; public static void sort(Object[] a) {if (LegacyMergeSort.userRequested)legacyMergeSort(a);elseComparableTimSort.sort(a); }即使合…

了解ASP.NET MVC的基本架构

MVC&#xff0c;Model – View – Controller 的简写 Model 封装业务逻辑相关的数据及对数据的处理方法 View 向用户提供交互界面 Controller 负责控制Model和View 首先建立一个模板 在这里发现了一个问题&#xff08;好像vs12没有模板&#xff0c;建不出来&#xff09; 其…

Google Chrome 浏览器JS无法更新解决办法

JS无法更新原因&#xff1a; 浏览器为了加载快&#xff0c;默认是按照自定规则更新缓存&#xff0c;非实时更新。 我们在开发的时候&#xff0c;JS变动很快&#xff0c;需要即时让浏览器加载最新文件&#xff0c;也就是禁用浏览器缓存 &#xff08;1&#xff09;使用F12进入…

HDU3415 Max Sum of Max-K-sub-sequence

题意given a circle sequence A[1],A[2],A[3]......A[n]. Circle sequence means the left neighbour of A[1] is A[n] , and the right neighbour of A[n] is A[1]. Now your job is to calculate the max sum of a Max-K-sub-sequence. Max-K-sub-sequence means a continuou…

Spring:自动接线或不自动接线

从使用Spring 2.5开始&#xff0c;我从基于XML的应用程序上下文切换到了注释。 尽管我发现那些非常有用且节省大量时间的人&#xff0c;但我始终觉得在灵活性方面我失去了一些东西。 特别是Autowired批注-或标准Inject-在我看来就像新的“新”&#xff0c;增加了类之间的耦合&a…

刷题总结——Cut the Sequence(POJ 3017 dp+单调队列+set)

题目&#xff1a; Description Given an integer sequence { an } of length N, you are to cut the sequence into several parts every one of which is a consecutive subsequence of the original sequence. Every part must satisfy that the sum of the integers in the …