From 3c425f7465b5e46a499c5b4cd2727208567970f5 Mon Sep 17 00:00:00 2001 From: likho Date: Sat, 23 Aug 2025 20:09:59 -0700 Subject: [PATCH] added chart of change of wealth distribution over time --- econ-demo.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/econ-demo.py b/econ-demo.py index abeb5c4..0f84788 100644 --- a/econ-demo.py +++ b/econ-demo.py @@ -1,5 +1,6 @@ import pandas as pd +import matplotlib.pyplot as plt def simple_interest(balances, rate=0.05, terms=3): if terms <= 0: @@ -13,7 +14,7 @@ def simple_interest(balances, rate=0.05, terms=3): new_bal.append(b) return new_bal -def share_of_wealth(balances): +def calc_share_of_wealth(balances): total_money = sum(balances) shares = [] for balance in balances: @@ -29,7 +30,7 @@ def ubi(balances, dividend=10, terms=3): new_bal.append(b) return new_bal -def get_balances_over_time(names, balances, func): +def get_balances_over_time(names, balances, func, terms=4): if func is None: print("Need a function!") return @@ -41,7 +42,7 @@ def get_balances_over_time(names, balances, func): 'initial' : balances } df = pd.DataFrame(data) - for t in range(1,4): + for t in range(1,terms): key = "term%i" % t frame = func(balances, terms=t) if frame is not None: @@ -59,7 +60,7 @@ def illustrate_share_of_wealth(): print("They respectively have ", balances) print("\nThe initial distribution of wealth is ") - print(share_of_wealth(balances)) + print(calc_share_of_wealth(balances)) print("\n") df = get_balances_over_time ( @@ -84,6 +85,52 @@ def illustrate_share_of_wealth(): print(u) print("What is the share of wealth in a UBI economy?") - print(share_of_wealth(u)) + print(calc_share_of_wealth(u)) + +# illustrate_share_of_wealth() + +def visualize_ubi(terms=25): + + participants = ["Alice", "Bob", "Charlie"] + balances = [100,40,20] + + df = get_balances_over_time ( + participants, balances, ubi, + terms = terms + ) + # print(df.keys) + shares = [] + for key, data in df.items(): + if key == "name": + continue + if key == "initial": + continue + shares.append(calc_share_of_wealth(data)) + sow = pd.DataFrame(shares) + print(sow.keys()) + x = [i for i in range(1,terms)] + assert(len(x) == len(shares)) + + plt.style.use('dark_background') + plt.plot( + x, sow[0], color="red", label=participants[0] + ) + plt.plot( + x, sow[1], color="lightgreen", label=participants[1] + ) + plt.plot( + x, sow[2], color="cyan", label=participants[2] + ) + plt.axhline( + y=0.33, color='violet', linestyle='--' + ) + + plt.title("Change in Wealth Distribution Under UBI") + plt.legend() + plt.xlabel("Terms") + plt.ylabel("Share of Wealth") + plt.show() + return + +visualize_ubi(terms=50) -illustrate_share_of_wealth()