数据分析 - 残酷的世界

数据分析 - 残酷的世界

可视化作品链接地址: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…

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

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

angular使用sass的scss语法

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

Arrays.sort与Arrays.parallelSort

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

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

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

CSS盒子的浮动

在标准流中,一个块级元素在水平方向会自动伸展,直到包含它的元素的边界;而在竖直方向和兄弟元素依次排列,不能并排。使用“浮动”方式后,块级元素的表现就会有所不同。 CSS中有一个float属性,默认为no…

servlet中url-pattern之/与/*的区别

转载于:https://www.cnblogs.com/hwgok/p/8835350.html

很少使用“ ControlFlowException”

控制流是命令式编程的“遗留物”,它已泄漏到其他各种编程范例中,包括Java的面向对象范例 。 除了有用的和无处不在的分支和循环结构外,还包括原语(例如GOTO)和非局部变量(例如异常)。 让我们仔细…

使用Amazon Web Services(EC2)

正如我上周参加技术动手AWS培训之前所发布的。 这些天的课程当然是我以前使用过的标准EC2和S3服务。 除此之外,我们还使用了RDS , Elastic Load Balancing , SNS和VPC , Elastic Beanstalk并讨论了许多术语和业务案例。 在本文中&…

盒子模型阴影设置,爱奇艺阴影配置

box-shadow的配置阴影 ul li:hover{ border-color: #dfdfdf; border-radius: 10px; -moz-box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1), 0 0 10px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1), 0 0 10px 0 rgba(0, 0, 0, 0.2); box-shadow: 0 5px 5…

第四周PSP

1.本周PSP 2.本周进度条 3.本周累计进度图 代码积累折线图 博文字数积累折线图 4.本周PSP饼状图 转载于:https://www.cnblogs.com/yuanyue-nenu/p/7648565.html

适用于JDeveloper 11gR2的Glassfish插件

众所周知, ADF Essentials是使用Java构建Web应用程序的绝佳框架,它可以自由开发和部署。 您可以在Glassfish(3.1)服务器上部署ADF Essentials应用程序。 但是,JDeveloper并不带有嵌入式Glassfish服务器,而是…

java 李刚 pdf_Java数据库技术详解(李刚) PDF_源雷技术空间

资源名称:Java数据库技术详解(李刚) PDF第一篇 数据库基础篇第1章 Java和数据库 21.1 Java概述 21.1.1 跨平台性 21.1.2 面向对象 21.1.3 安全性 31.1.4 简单性 31.1.5 健壮性和自动内存管理 31.2 Java的开发和运行环境 31.2.1 JDK的安装 31.2.2 配置JDK的环境变量 …

Java EE CDI处理程序方法示例

这是CDI Disposer方法的教程。 在CDI中,由于Producer方法生成的对象随后可以注入到应用程序中,因此使用Disposer方法,以便在其工作完成时将其删除。 Disposer方法始终与Producer方法匹配。 Disposer方法的使用示例是应用程序使用与数据库的连…

转 如何更改linux文件的拥有者及用户组(chown和chgrp)

本文整理自: http://blog.163.com/yanenshun126/blog/static/128388169201203011157308/http://ydlmlh.iteye.com/blog/1435157一、基本知识在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户。该文件用户可以修改该文件的拥有者…

上下div高度动态自适应--另类处理方案

这段时间在工作中遇到一个看似较为棘手的问题。问题描述:查询报表页面分为上下两部分,上部分为条件输入区域,下部分为报表展示区域。客户要求做到默认满屏(但要动态适应不同的窗体大小,也就是浏览器窗体用户会手动改变…