美文网首页商业经济趣知识数据告诉你答案
python数据分析:富人是天生的吗?

python数据分析:富人是天生的吗?

作者: 小刘的老刘 | 来源:发表于2019-08-08 09:45 被阅读6次

    人生苦短,我用python

    富人是天生的吗??知乎上有这么样一样财富分配游戏:

    一个财富分配游戏:
    房间里有100个人,每人都有100元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这100个人的财富分布是怎样的?

    这里用python来模拟一下,主要的思想是蒙特·卡罗方法

    先思考一下这个模拟应该如何进行,首先我们得有一个原始的数据就是有100个人,每个人有100元,然后需要做的就是让每个人拿出1元钱,再然后将这拿出来的前随机分配给其他人,(共3个步骤)最后观察结果。

    这里有两个问题:
    1.“最后”是指什么时候?
    2.如果这个人没有钱了,游戏怎么进行?

    既然是模拟社会财富分配,我们按照尽可能实际的方式去思考,假如是财富积累是从人18岁成年开始算起,到65岁算结束,每天进行一轮游戏,一共是17000轮游戏(取整简化)。当然一个人没钱的时候,真实世界是存在借贷的,所以当一个人没钱了之后还可以参与游戏,但是他的财富将为负值。

    解决了这两个问题我们可以开始进行游戏了。
    先导入工具包

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import time
    import os
    os.chdir('C:\\Users\\xxxxx\\')#设置默认路径
    import warnings
    warnings.filterwarnings('ignore') 
    ##这里由于要存储最后的图片所以设置了默认路径
    
    第一步:原始的数据就是有100个人,每个人有100元(初始财富)
    id_n = [x for x in range(1,101)]
    fortune = pd.DataFrame([100 for i in range(100)],index = id_n)
    fortune.index.name = 'id'
    fortune.head(10)
    
    初始财富
    第二步:每个人都要拿出一元钱(参与游戏)
    round_r1 = pd.DataFrame({'pre_round':fortune[0],'lost':1})
    round_r1.head(10)
    
    每人lost一元钱
    第三步:随机给另一个人(参照游戏规则)
    choice_r1 = pd.Series(np.random.choice(id_n,100))#对应id_n随机选择100个对象
    gain_r1 = pd.DataFrame({'gain':choice_r1.value_counts()})#根据选择对象,看1元钱随机分给了谁
    gain_r1.head(10)
    
    左列为被选择的对象,右列获得的财富(即刚刚随机选择中被选中的次数)
    看结果
    round_r1 = round_r1.join(gain_r1)
    round_r1.fillna(0,inplace = True)#刚刚存在有的人没有获得收入,将空值替换为0
    fortune[1] = round_r1['pre_round']+round_r1['gain']-round_r1['lost']
    fortune.head(20)
    
    第一轮结果
    构建函数,模拟17000次
    def game(data,roundi):
        roundi = pd.DataFrame({'pre_round':data[roundi-1],'lost':1})
        choicei = pd.Series(np.random.choice(id_n,len(roundi)))
        gaini = pd.DataFrame({'gain':choicei.value_counts()})
        roundi = roundi.join(gaini)
        roundi.fillna(0,inplace = True)
        return roundi['pre_round']+roundi['gain']-roundi['lost']
    #初始财富
    id_n = [x for x in range(1,101)]
    fortune = pd.DataFrame([100 for i in range(100)],index = id_n)
    fortune.index.name = 'id'
    #进行17000轮游戏
    for round in range(1,17001):
        fortune[round] = game2(fortune,round)
    game2_result = fortune.T#转置列表,方便查看数据
    game2_result.tail()
    
    最后5轮结果 graph3_round_17000.png

    最后一轮中,最富有的人财富值为455元,相比于初始财富,翻了4.55倍。10%的人掌握着30%左右的财富,20%的人掌握着60%左右的财富,50%的人财富缩水至100元以下了。初始财富相同,有的人变成了富翁,有的人靠借钱度日,也许冥冥之中有很多运气在里面,但是不管如何模拟出来的结果符合社会财富呈现出“28定律”,而且一个人的消费就是另一个人收入,社会的经济就是这样慢慢变化的。

    最后推荐一个视频:《经济机器是如何运行的》是著名的桥水基金的创始人Ray Dalio讲述的,内容浅显易懂深入浅出,推荐给大家。

    相关文章

      网友评论

        本文标题:python数据分析:富人是天生的吗?

        本文链接:https://www.haomeiwen.com/subject/nemydctx.html