社會財富分配問題模擬


 

 

社會財富分配問題模擬

一個財富分配游戲:
房間里有100個人,每人都有100元錢,他們在玩一個游戲。每輪游戲中,每個人都要拿出一元錢隨機給另一個人,最后這100個人的財富分布是怎樣的?

研究問題:
1、財富分配模型
模型假設:
① 每個人初始基金100元
② 從18歲到65歲,每天玩一次,簡化運算按照一共玩17000輪
③ 每天拿出一元錢,並且隨機分配給另一個人
④ 當某人的財富值降到0元時,他在該輪無需拿出1元錢給別人,但仍然有機會得到別人給出的錢
要求:
① 構建模型模擬(這里需要跑17000輪)
② 繪制柱狀圖,查看該輪財富情況
   ** 橫軸標簽代表一個玩家的編號,柱子的高低變動反映該玩家財富值的變化
   ** 制圖分兩個情況繪制:不排序繪制、每輪按照財富值排序繪制
   ** 前100輪,按照每10輪繪制一次柱狀圖,查看財富變化情況
   ** 100至1000輪,按照每100輪繪制一次柱狀圖,查看財富變化情況
   ** 1000至17000輪,按照每400輪繪制一次柱狀圖,查看財富變化情況
③ 查看最后財富分配數據是什么分布?
④ 最富有的人相比於初始財富,翻了多少倍?
⑤ 10%的人掌握着多少的財富?30%的人掌握着多少的財富?又有百分之多少人財富縮水至100元以下了?
提示:
① 首先,模擬第一輪游戲分配,不考慮某人財富值降到0元的情況
② 其次,仍然模擬第一輪游戲分配,但考慮某人的財富值降到0元時的情況
③ 構建模型
④ 運行模型,先試運行100條/1000條,再運行17000
⑤ 制圖

2、在允許借貸情況下,研究以下問題
和初始模型的區別:
允許借貸意味着可以找親友、銀行、投資人借貸 → 資產為負時,仍然參與游戲
要求:
① 構建模型模擬,再次模擬財富分配情況
   ** 最富有的人相比於初始財富,翻了多少倍?
   ** 10%的人掌握着多少的財富?30%的人掌握着多少的財富?又有百分之多少人財富縮水至100元以下了?
② 繪制柱狀圖,查看該輪財富情況
   ** 橫軸標簽代表一個玩家的編號,柱子的高低變動反映該玩家財富值的變化
   ** 這里只需要每輪按照財富值排序繪制
   ** 前100輪,按照每10輪繪制一次柱狀圖,查看財富變化情況
   ** 100至1000輪,按照每100輪繪制一次柱狀圖,查看財富變化情況
   ** 1000至17000輪,按照每400輪繪制一次柱狀圖,查看財富變化情況
③ 游戲次數與財富分布的標准差的情況,繪圖來表示
   ** 這里用允許借貸情況下模擬的結果
   ** 橫坐標為游戲次數(總共17000次),縱坐標為財富分配標准差
   ** 繪制折線圖
④ 玩家從18歲開始,在經過17年后為35歲,這個期間共進行游戲6200次左右,則此刻查看財富情況,將財富值為負的標記成“破產”,通過圖表研究
   該類玩家在今后的游戲中能否成功“逆襲”(財富值從負到正為逆襲)、
   ** 這里繪制柱狀圖 → 6200至17000輪,按照每500輪繪制一次柱狀圖
提示:
① 該模型只需要將初始模型中,“財富小於零時無需拿錢給別人”的條件刪掉即可
② 最后繪制柱狀圖時,需要將負債的玩家標紅,這里可以通過截取dataframe之后,給與color字段來設置顏色

3、努力的人生會更好嗎?
模型假設:
① 每個人初始基金仍為100元
② 一共玩17000輪
③ 每天拿出一元錢,並且隨機分配給另一個人
④ 有10個人加倍努力,從而獲得了1%的競爭優勢
⑤ 允許借貸
允許借貸意味着可以找親友、銀行、投資人借貸 → 資產為負時,仍然參與游戲
要求:
① 構建模型模擬,再次模擬財富分配情況
② 努力的人,最后是否富有?
③ 繪制柱狀圖,查看該輪財富情況
   ** 橫軸標簽代表一個玩家的編號,柱子的高低變動反映該玩家財富值的變化
   ** 這里只需要每輪按照財富值排序繪制
   ** 前100輪,按照每10輪繪制一次柱狀圖,查看財富變化情況
   ** 100至1000輪,按照每100輪繪制一次柱狀圖,查看財富變化情況
   ** 1000至17000輪,按照每400輪繪制一次柱狀圖,查看財富變化情況
提示:
① 這里設置的10個人id分別為:[1,11,21,31,41,51,61,71,81,91]
② np.random.choice(person_n, p =[...]) → 這里通過設置p來修改概率:努力的10人概率為(1/100.1*1.01),其他人概率為(1/100.1)

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os

import warnings
warnings.filterwarnings('ignore') 
# 不發出警告

import time
# 導入時間模塊

 

一個財富分配游戲:
房間里有100個人,每人都有100元錢,他們在玩一個游戲。每輪游戲中,每個人都要拿出一元錢隨機給另一個人,最后這100個人的財富分布是怎樣的?

1、財富分配模型
模型假設:
① 每個人初始基金100元
② 從18歲到65歲,每天玩一次,簡化運算按照一共玩17000輪
③ 每天拿出一元錢,並且隨機分配給另一個人
④ 當某人的財富值降到0元時,他在該輪無需拿出1元錢給別人,但仍然有機會得到別人給出的錢
要求:
① 構建模型模擬(這里需要跑17000輪)
② 繪制柱狀圖,查看該輪財富情況
   ** 橫軸標簽代表一個玩家的編號,柱子的高低變動反映該玩家財富值的變化
   ** 制圖分兩個情況繪制:不排序繪制、每輪按照財富值排序繪制
   ** 前100輪,按照每10輪繪制一次柱狀圖,查看財富變化情況
   ** 100至1000輪,按照每100輪繪制一次柱狀圖,查看財富變化情況
   ** 1000至17000輪,按照每400輪繪制一次柱狀圖,查看財富變化情況
③ 查看最后財富分配數據是什么分布?
④ 最富有的人相比於初始財富,翻了多少倍?
⑤ 10%的人掌握着多少的財富?30%的人掌握着多少的財富?又有百分之多少人財富縮水至100元以下了?
提示:
① 首先,模擬第一輪游戲分配,不考慮某人財富值降到0元的情況
② 其次,仍然模擬第一輪游戲分配,但考慮某人的財富值降到0元時的情況
③ 構建模型
④ 運行模型,先試運行100條/1000條,再運行17000
⑤ 制圖

 

# 1、財富分配模型測試
# 模型假設:
# ① 每個人初始基金100元
# ② 從18歲到65歲,每天玩一次,簡化運算按照一共玩17000天
# ③ 每天拿出一元錢,並且隨機分配給另一個人
# ④ 當某人的財富值降到0元時,他在該輪無需拿出1元錢給別人,但仍然有機會得到別人給出的錢
# (1) 模擬第一輪游戲分配
# 先不考慮某人財富值降到0元的情況

person_n = [x for x in range(1,101)]
fortune = pd.DataFrame([100 for i in range(100)], index = person_n)
fortune.index.name = 'id'
# 設定初始參數:游戲玩家100人,起始資金100元

round_r1 = pd.DataFrame({'pre_round':fortune[0],'lost':1})
# 設定第一輪分配財富之前的情況
choice_r1 = pd.Series(np.random.choice(person_n,100))      
gain_r1 = pd.DataFrame({'gain':choice_r1.value_counts()})                  
# 這一輪中每個人隨機指定給“誰”1元錢,並匯總這一輪每個人的盈利情況
round_r1 = round_r1.join(gain_r1)
round_r1.fillna(0,inplace = True)
fortune[1] = round_r1['pre_round'] - round_r1['lost'] + round_r1['gain']
# 合並數據,得到這一輪每個人“盈虧”多少錢 → 得到這一輪財富分配的結果
fortune.head()

 

# (2) 模擬第一輪游戲分配
# 考慮情況:當某人的財富值降到0元時,他在該輪無需拿出1元錢給別人,但仍然有機會得到別人給出的錢

person_n = [x for x in range(1,101)]
fortune = pd.DataFrame([100 for i in range(100)], index = person_n)
fortune.index.name = 'id'
# 設定初始參數:游戲玩家100人,起始資金100元

round_r1 = pd.DataFrame({'pre_round':fortune[0],'lost':0})
round_r1['lost'][round_r1['pre_round'] > 0] = 1
# 設定第一輪分配財富之前的情況 → 該輪財富值為0的不需要拿錢給別人
round_players = round_r1[round_r1['pre_round'] > 0]
# 篩選出參與游戲的玩家:財富值>0
choice_r1 = pd.Series(np.random.choice(person_n,len(round_players)))      
gain_r1 = pd.DataFrame({'gain':choice_r1.value_counts()})                  
# 這一輪中每個人隨機指定給“誰”1元錢,並匯總這一輪每個人的盈利情況
round_r1 = round_r1.join(gain_r1)
round_r1.fillna(0,inplace = True)
fortune[1] = round_r1['pre_round'] - round_r1['lost'] + round_r1['gain']
# 合並數據,得到這一輪財富分配的結果
fortune.head()

 

# (3)構建函數模型
# 這里注意:當某人的財富值降到0元時,他在該輪無需拿出1元錢給別人,但仍然有機會得到別人給出的錢

def game1(data, roundi):
    if len(data[data[roundi - 1] ==0]) > 0:   
    # 當數據包含財富值為0的玩家時
        round_i = pd.DataFrame({'pre_round':data[roundi-1],'lost':0})
        con = round_i['pre_round'] > 0
        round_i['lost'][con] = 1               # 設定每輪分配財富之前的情況 → 該輪財富值為0的不需要拿錢給別人
        round_players_i = round_i[con]         # 篩選出參與游戲的玩家:財富值>0
        choice_i = pd.Series(np.random.choice(person_n,len(round_players_i)))
        gain_i = pd.DataFrame({'gain':choice_i.value_counts()})     # 這一輪中每個人隨機指定給“誰”1元錢,並匯總這一輪每個人的盈利情況
        round_i = round_i.join(gain_i)
        round_i.fillna(0,inplace = True)
        return round_i['pre_round'] -  round_i['lost'] + round_i['gain']
        # 合並數據,得到這一輪財富分配的結果
    else:
    # 當數據不包含財富值為0的玩家時
        round_i = pd.DataFrame({'pre_round':data[roundi-1],'lost':1}) # 設定每輪分配財富之前的情況
        choice_i = pd.Series(np.random.choice(person_n,100))
        gain_i = pd.DataFrame({'gain':choice_i.value_counts()})       # 這一輪中每個人隨機指定給“誰”1元錢,並匯總這一輪每個人的盈利情況
        round_i = round_i.join(gain_i)
        round_i.fillna(0,inplace = True)
        return round_i['pre_round'] -  round_i['lost'] + round_i['gain']
        # 合並數據,得到這一輪財富分配的結果
print('finished!')

 

# (4)運行模型,模擬財富分配

person_n = [x for x in range(1,101)]
fortune = pd.DataFrame([100 for i in range(100)], index = person_n)
fortune.index.name = 'id'
# 設定初始參數:游戲玩家100人,起始資金100元

starttime = time.time()                     # 模型開始時間
for round in range(1,17001):
    fortune[round] = game1(fortune,round)   # 進行17000輪隨機分配模擬
game1_result = fortune.T                    # 轉置后得到結果數據 → 列為每一個人的id,行為每一輪的財富分配結果   
endtime = time.time()                       # 模型結束時間
print('模型總共用時%i秒' % (endtime - starttime))
# 計算時間

game1_result.tail()
# 查看最后5條數據

 

# (5)繪制柱狀圖
# ** 前100輪,按照每10輪繪制一次柱狀圖,查看財富變化情況
# ** 100至1000輪,按照每100輪繪制一次柱狀圖,查看財富變化情況
# ** 1000至17000輪,按照每400輪繪制一次柱狀圖,查看財富變化情況
# ① 不排序繪制

os.chdir('C:\\Users\\Hjx\\Desktop\\項目13社會財富分配問題模擬\\財富分配模型_初始模型_不排序繪制\\')

def graph1(data,start,end,length):
    for n in list(range(start,end,length)):
        datai = data.iloc[n]
        plt.figure(figsize = (10,6))
        plt.bar(datai.index,datai.values,color='gray',alpha = 0.8,width = 0.9)
        plt.ylim((0,400))
        plt.xlim((-10,110))
        plt.title('Round %d' % n)
        plt.xlabel('PlayerID')
        plt.ylabel('Fortune')
        plt.grid(color='gray', linestyle='--', linewidth=0.5)
        plt.savefig('graph1_round_%d.png' % n, dpi=200)
# 創建繪圖函數1

graph1(game1_result,0,100,10)
graph1(game1_result,100,1000,100)
graph1(game1_result,1000,17400,400)

print('finished!')

 

# 一些結論

round_17000_1 = pd.DataFrame({'money':game1_result.iloc[17000]}).sort_values(by = 'money',ascending = False).reset_index()
round_17000_1['fortune_pre'] = round_17000_1['money'] / round_17000_1['money'].sum()
round_17000_1['fortune_cumsum'] = round_17000_1['fortune_pre'].cumsum()
round_17000_1.head()

# 最后一輪中,最富有的人財富值為365元,相比於初始財富,翻了3.65倍
# 10%的人掌握着28%的財富,20%的人掌握着51%的財富?
# 60%的人財富縮水至100元以下了?

 

2、在允許借貸情況下,研究以下問題
和初始模型的區別:
允許借貸意味着可以找親友、銀行、投資人借貸 → 資產為負時,仍然參與游戲
要求:
① 構建模型模擬,再次模擬財富分配情況
   ** 最富有的人相比於初始財富,翻了多少倍?
   ** 10%的人掌握着多少的財富?30%的人掌握着多少的財富?又有百分之多少人財富縮水至100元以下了?
② 繪制柱狀圖,查看該輪財富情況
   ** 橫軸標簽代表一個玩家的編號,柱子的高低變動反映該玩家財富值的變化
   ** 這里只需要每輪按照財富值排序繪制
   ** 前100輪,按照每10輪繪制一次柱狀圖,查看財富變化情況
   ** 100至1000輪,按照每100輪繪制一次柱狀圖,查看財富變化情況
   ** 1000至17000輪,按照每400輪繪制一次柱狀圖,查看財富變化情況
③ 游戲次數與財富分布的標准差的情況,繪圖來表示
   ** 這里用允許借貸情況下模擬的結果
   ** 橫坐標為游戲次數(總共17000次),縱坐標為財富分配標准差
   ** 繪制折線圖
④ 玩家從18歲開始,在經過17年后為35歲,這個期間共進行游戲6200次左右,則此刻查看財富情況,將財富值為負的標記成“破產”,通過圖表研究
   該類玩家在今后的游戲中能否成功“逆襲”(財富值從負到正為逆襲)、
   ** 這里繪制柱狀圖 → 6200至17000輪,按照每500輪繪制一次柱狀圖
提示:
① 該模型只需要將初始模型中,“財富小於零時無需拿錢給別人”的條件刪掉即可
② 最后繪制柱狀圖時,需要將負債的玩家標紅,這里可以通過截取dataframe之后,給與color字段來設置顏色

 

(1)構建函數模型
# 這里注意:當某人的財富值降到0元時,他在該輪無需拿出1元錢給別人,但仍然有機會得到別人給出的錢

def game2(data, roundi):
    round_i = pd.DataFrame({'pre_round':data[roundi-1],'lost':1}) # 設定每輪分配財富之前的情況
    choice_i = pd.Series(np.random.choice(person_n,100))
    gain_i = pd.DataFrame({'gain':choice_i.value_counts()})       # 這一輪中每個人隨機指定給“誰”1元錢,並匯總這一輪每個人的盈利情況
    round_i = round_i.join(gain_i)
    round_i.fillna(0,inplace = True)
    return round_i['pre_round'] -  round_i['lost'] + round_i['gain']
    # 合並數據,得到這一輪財富分配的結果
print('finished!')

 

# (2)運行模型,模擬財富分配

person_n = [x for x in range(1,101)]
fortune = pd.DataFrame([100 for i in range(100)], index = person_n)
fortune.index.name = 'id'
# 設定初始參數:游戲玩家100人,起始資金100元

starttime = time.time()                     # 模型開始時間
for round in range(1,17001):
    fortune[round] = game2(fortune,round)   # 進行17000輪隨機分配模擬
game2_result = fortune.T                    # 轉置后得到結果數據 → 列為每一個人的id,行為每一輪的財富分配結果   
endtime = time.time()                       # 模型結束時間
print('模型總共用時%i秒' % (endtime - starttime))
# 計算時間

game2_result.tail()
# 查看最后5條數據
# 一些結論

round_17000_2 = pd.DataFrame({'money':game2_result.iloc[17000]}).sort_values(by = 'money',ascending = False).reset_index()
round_17000_2['fortune_pre'] = round_17000_2['money'] / round_17000_2['money'].sum()
round_17000_2['fortune_cumsum'] = round_17000_2['fortune_pre'].cumsum()
round_17000_2.head()

# 最后一輪中,最富有的人財富值為458元,相比於初始財富,翻了4.58倍
# 10%的人掌握着33%的財富,20%的人掌握着59%的財富?
# 50%的人財富縮水至100元以下了?

 

# (3)游戲次數與財富分布的標准差的情況,繪圖來表示

os.chdir('C:\\Users\\Hjx\\Desktop\\項目13社會財富分配問題模擬\\財富分配模型_允許借貸\\')

def graph3(data,start,end,length):
    for n in list(range(start,end,length)):
        datai = data.iloc[n].sort_values().reset_index()[n]
        plt.figure(figsize = (10,6))
        plt.bar(datai.index,datai.values,color='gray',alpha = 0.8,width = 0.9)
        plt.grid(color='gray', linestyle='--', linewidth=0.5)
        plt.ylim((-200,400))
        plt.xlim((-10,110))
        plt.title('Round %d' % n)
        plt.xlabel('PlayerID')
        plt.ylabel('Fortune')
        plt.savefig('graph3_round_%d.png' % n, dpi=200)
# 創建繪圖函數2

graph3(game2_result,0,100,10)
graph3(game2_result,100,1000,100)
graph3(game2_result,1000,17400,400)

print('finished!')

 

# (4)游戲次數與財富分布的標准差的情況,繪圖來表示

game2_st = game2_result.std(axis = 1)
game2_st.plot(figsize = (12,5),color = 'red',alpha = 0.6,grid = True)
plt.show()

# 游戲早期前2000輪的標准差變動最為激烈;
# 而在6000-6500輪游戲后,標准差的變化趨於平緩,但仍在上升;
# 按照我們設定的游戲與人生的對應規則,這時玩家年齡為35歲

# (5)玩家從18歲開始,在經過17年后為35歲,這個期間共進行游戲6200次左右,則此刻查看財富情況,將財富值為負的標記成“破產
# 通過圖表研究該類玩家在今后的游戲中能否成功“逆襲”(財富值從負到正為逆襲)、
# 這里繪制折線圖

game2_round6200 = pd.DataFrame({'money':game2_result.iloc[6200].sort_values().reset_index()[6200],
                                'id':game2_result.iloc[6200].sort_values().reset_index()['id'],
                                'color':'gray'})
game2_round6200['color'][game2_round6200['money'] < 0] = 'red'
id_pc = game2_round6200['id'][game2_round6200['money'] < 0].tolist()
print('財富值為負的玩家id為:\n',id_pc)
# 篩選數據
# 設置顏色參數

plt.figure(figsize = (10,6))
plt.bar(game2_round6200.index,game2_round6200['money'],color = game2_round6200['color'],alpha = 0.8,width = 0.9)
plt.grid(color='gray', linestyle='--', linewidth=0.5)
plt.ylim((-200,400))
plt.xlim((-10,110))
plt.title('Round 6200')
plt.xlabel('PlayerID')
plt.ylabel('Fortune')
plt.show()
# 繪制柱狀圖

# 繪圖分析

os.chdir('C:\\Users\\Hjx\\Desktop\\項目13社會財富分配問題模擬\\財富分配模型_允許借貸_負債玩家逆襲\\')

def graph4(data,start,end,length):
    for n in list(range(start,end,length)):
        datai = pd.DataFrame({'money':data.iloc[n],'color':'gray'})
        datai['color'].loc[id_pc] = 'red'
        datai = datai.sort_values(by = 'money').reset_index()
        plt.figure(figsize = (10,6))
        plt.bar(datai.index,datai['money'],color=datai['color'],alpha = 0.8,width = 0.9)
        plt.grid(color='gray', linestyle='--', linewidth=0.5)
        plt.ylim((-200,400))
        plt.xlim((-10,110))
        plt.title('Round %d' % n)
        plt.xlabel('PlayerID')
        plt.ylabel('Fortune')
        plt.savefig('graph4_round_%d.png' % n, dpi=200)
# 創建繪圖函數2

graph4(game2_result,6200,17000,500)

print('finished!')

# 結論
# 以35歲為界,雖然破產以后,不足一半的概率回復到普通人的生活,但想要逆襲暴富,卻是相當困難的

 

3、努力的人生會更好嗎?
模型假設:
① 每個人初始基金仍為100元
② 一共玩17000輪
③ 每天拿出一元錢,並且隨機分配給另一個人
④ 有10個人加倍努力,從而獲得了1%的競爭優勢
⑤ 允許借貸
允許借貸意味着可以找親友、銀行、投資人借貸 → 資產為負時,仍然參與游戲
要求:
① 構建模型模擬,再次模擬財富分配情況
② 努力的人,最后是否富有?
③ 繪制柱狀圖,查看該輪財富情況
   ** 橫軸標簽代表一個玩家的編號,柱子的高低變動反映該玩家財富值的變化
   ** 這里只需要每輪按照財富值排序繪制
   ** 前100輪,按照每10輪繪制一次柱狀圖,查看財富變化情況
   ** 100至1000輪,按照每100輪繪制一次柱狀圖,查看財富變化情況
   ** 1000至17000輪,按照每400輪繪制一次柱狀圖,查看財富變化情況
提示:
① 這里設置的10個人id分別為:[1,11,21,31,41,51,61,71,81,91]
② np.random.choice(person_n, p =[...]) → 這里通過設置p來修改概率:努力的10人概率為0.0101,其他人概率為(0.899/90)

 

# (1)構建函數模型
# 這里注意:當某人的財富值降到0元時,他在該輪無需拿出1元錢給別人,但仍然有機會得到別人給出的錢

person_p = [0.899/90 for i in range(100)]
for i in [1,11,21,31,41,51,61,71,81,91]:
    person_p[i-1] = 0.0101
# 設置概率

def game3(data, roundi):
    round_i = pd.DataFrame({'pre_round':data[roundi-1],'lost':1}) # 設定每輪分配財富之前的情況
    choice_i = pd.Series(np.random.choice(person_n,100, p = person_p))
    gain_i = pd.DataFrame({'gain':choice_i.value_counts()})       # 這一輪中每個人隨機指定給“誰”1元錢,並匯總這一輪每個人的盈利情況
    round_i = round_i.join(gain_i)
    round_i.fillna(0,inplace = True)
    return round_i['pre_round'] -  round_i['lost'] + round_i['gain']
    # 合並數據,得到這一輪財富分配的結果
print('finished!')

 

# (2)運行模型,模擬財富分配

person_n = [x for x in range(1,101)]
fortune = pd.DataFrame([100 for i in range(100)], index = person_n)
fortune.index.name = 'id'
# 設定初始參數:游戲玩家100人,起始資金100元

starttime = time.time()                     # 模型開始時間
for round in range(1,17001):
    fortune[round] = game3(fortune,round)   # 進行17000輪隨機分配模擬
game3_result = fortune.T                    # 轉置后得到結果數據 → 列為每一個人的id,行為每一輪的財富分配結果   
endtime = time.time()                       # 模型結束時間
print('模型總共用時%i秒' % (endtime - starttime))
# 計算時間

game3_result.tail()
# 查看最后5條數據

 

# 繪圖分析

os.chdir('C:\\Users\\Hjx\\Desktop\\項目13社會財富分配問題模擬\\財富分配模型_努力人生\\')

plt.figure(figsize = (10,6))
data0 = pd.DataFrame({'money':game3_result.iloc[0],'color':'gray'})
data0['color'].loc[[1,11,21,31,41,51,61,71,81,91]] = 'red'
plt.bar(data0.index,data0['money'],color=data0['color'],alpha = 0.8,width = 0.9)
plt.grid(color='gray', linestyle='--', linewidth=0.5)
plt.ylim((-200,400))
plt.xlim((-10,110))
plt.title('Round %d' % 0)
plt.xlabel('PlayerID')
plt.ylabel('Fortune')
plt.savefig('graph5_round_%d.png' % 0, dpi=200)
# 繪制起始圖片

def graph5(data,start,end,length):
    for n in list(range(start,end,length)):
        datai = pd.DataFrame({'money':data.iloc[n],'color':'gray'})
        datai['color'].loc[[1,11,21,31,41,51,61,71,81,91]] = 'red'
        datai = datai.sort_values(by = 'money').reset_index()
        plt.figure(figsize = (10,6))
        plt.bar(datai.index,datai['money'],color=datai['color'],alpha = 0.8,width = 0.9)
        plt.grid(color='gray', linestyle='--', linewidth=0.5)
        plt.ylim((-200,400))
        plt.xlim((-10,110))
        plt.title('Round %d' % n)
        plt.xlabel('PlayerID')
        plt.ylabel('Fortune')
        plt.savefig('graph5_round_%d.png' % n, dpi=200)
# 創建繪圖函數2

graph5(game3_result,10,100,10)
graph5(game3_result,100,1000,100)
graph5(game3_result,1000,17400,400)

print('finished!')

# 結論
# 社會財富的總體分布形態沒有什么變化
# 10位努力玩家中多位都進入了富人top20!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM