剛剛大學(xué)畢業(yè)的你獲得了一份滿意的工作剪况,接下來(lái)正雄心勃勃地規(guī)劃著自己的未來(lái)冒签。這其中自然少不了財(cái)富目標(biāo)闯两,比如怎樣成為百萬(wàn)富翁呢?本文將帶你用Python分析你的財(cái)務(wù)情況腥沽,以及怎樣才能實(shí)現(xiàn)你的理財(cái)目標(biāo)逮走。
收入和支出
假如你工作的起薪是10萬(wàn)元,但是你需要交納五險(xiǎn)一金和個(gè)稅今阳,這部分大約占工資的30%师溅。為了制定合理的預(yù)算方案,首先需要計(jì)算實(shí)際到手的工資盾舌。
# 設(shè)定年收入
salary = 100000
# 假設(shè)稅率是30%
tax_rate = 0.30
# 計(jì)算稅后收入
salary_after_taxes = salary * (1 - tax_rate)
print("稅后年收入: " + str(round(salary_after_taxes, 2)))
# 計(jì)算每月的稅后收入
monthly_takehome_salary = salary_after_taxes / 12
print("每月到手的收入: " + str(round(monthly_takehome_salary, 2)))
稅后年收入: 70000.0
每月到手的收入: 5833.33
知道實(shí)際的收入后墓臭,我們?cè)賮?lái)看每月的開支,預(yù)算如下:
- 房租:1500/月
- 就餐:平均40/天妖谴,一月按30天計(jì)算
- 娛樂(lè):500/月
- 未預(yù)見的開支:300/月
現(xiàn)在來(lái)計(jì)算每月的支出和結(jié)余窿锉。
# 每月的房租
monthly_rent = 1500
# 每月的就餐預(yù)算
monthly_food_budget = 40 * 30
# 每月的娛樂(lè)預(yù)算
monthly_entertainment_budget = 500
# 未預(yù)見的開支
monthly_unforeseen_expenses = 300
# 計(jì)算總的月度開支
monthly_expenses = monthly_rent + monthly_food_budget \
+ monthly_entertainment_budget + monthly_unforeseen_expenses
print("每月支出: " + str(round(monthly_expenses, 2)))
# 計(jì)算每月的結(jié)余
monthly_savings = monthly_takehome_salary - monthly_expenses
print("每月結(jié)余: " + str(round(monthly_savings, 2)))
每月支出: 3500
每月結(jié)余: 2333.33
你的收入和支出并不是一成不變的。隨著工作經(jīng)驗(yàn)的增長(zhǎng)膝舅,一般你的工資也會(huì)上漲嗡载。假設(shè)工資以每年5%的速度穩(wěn)定增長(zhǎng),預(yù)測(cè)未來(lái)15年的收入情況(為了簡(jiǎn)單起見铸史,這里假設(shè)稅率沒(méi)變)鼻疮。
注:下面使用的
np.cumprod()
累積求積函數(shù)怯伊,以及年增長(zhǎng)率到月增長(zhǎng)率的換算說(shuō)明琳轿,可參見上一篇文章《用Python分析房屋抵押貸款》
import numpy as np # 導(dǎo)入numpy科學(xué)計(jì)算包
from matplotlib import pyplot as plt # 導(dǎo)入繪圖工具包
%config InlineBackend.figure_format = 'retina' # 設(shè)置圖片清晰度
plt.rcParams['font.sans-serif']=['SimHei'] # 設(shè)置中文字體
# 預(yù)測(cè)未來(lái)15年的情況,并換算到月份
forecast_months = 12*15
# 設(shè)置工資的年增長(zhǎng)率
annual_salary_growth = 0.05
# 換算成工資每月的增長(zhǎng)率(注意是復(fù)利)
monthly_salary_growth = (1 + annual_salary_growth) ** (1/12) - 1
# 計(jì)算工資的累積增長(zhǎng)
cumulative_salary_growth_forecast = np.cumprod(np.repeat(1 + monthly_salary_growth, forecast_months))
# 預(yù)測(cè)工資
salary_forecast = monthly_takehome_salary * cumulative_salary_growth_forecast
# 繪制工資隨時(shí)間變化的曲線
plt.plot(salary_forecast, color='green')
plt.xlabel("月份")
plt.ylabel("每月收入")
plt.show()
不僅工資會(huì)上漲耿芹,由于通貨膨脹崭篡,你的開支也會(huì)上漲。假設(shè)開支的增長(zhǎng)速度是每年2.5%吧秕,采用上面相同的方法來(lái)計(jì)算未來(lái)15年的開支情況琉闪。
# 設(shè)置年通貨膨脹率
annual_inflation = 0.025
# 換算成每月的通脹率
monthly_inflation = (1 + annual_inflation) ** (1/12) - 1
# 預(yù)測(cè)累積的通脹
cumulative_inflation_forecast = np.cumprod(1 + np.repeat(monthly_inflation, forecast_months))
# 預(yù)測(cè)未來(lái)的開支
expenses_forecast = monthly_expenses * cumulative_inflation_forecast
# 繪制開支隨時(shí)間變化的曲線
plt.plot(expenses_forecast, color='red')
plt.xlabel("月份")
plt.ylabel("月度支出")
plt.show()
為了方便比較,將上兩幅圖中的收入和支出曲線繪制在一幅圖中砸彬。幸運(yùn)的是你的收入增長(zhǎng)速度大于通貨膨脹率颠毙,這意味著你每月將有更多的結(jié)余斯入。
plt.plot(salary_forecast, color='green', label="每月收入")
plt.plot(expenses_forecast, color='red', label="每月支出")
plt.legend(loc=2)
plt.xlabel("月份")
plt.ylabel("金額")
plt.show()
儲(chǔ)蓄和投資
在上一節(jié)中,我們預(yù)測(cè)了收入和支出隨時(shí)間變化的情況蛀蜜,將每月的收入減去支出刻两,便可算得每月積攢了多少錢。將每月的積蓄累加起來(lái)滴某,就得到了總的積蓄磅摹。
注:下面使用的
np.cumsum()
函數(shù)進(jìn)行累積求和,可參見上一篇文章《用Python分析房屋抵押貸款》
# 計(jì)算每月的積蓄
savings_forecast = salary_forecast - expenses_forecast
# 計(jì)算累積的積蓄
cumulative_savings = np.cumsum(savings_forecast)
# 輸出15年后總的積蓄
final_net_worth = cumulative_savings[-1]
print("15年后總的積蓄為: " + str(round(final_net_worth, 2)) + "元")
# 繪制總積蓄隨時(shí)間推移的曲線
plt.plot(cumulative_savings, color='blue')
plt.xlabel("月份")
plt.ylabel("累積的積蓄")
plt.show()
15年后總的積蓄為: 787802.65元
從上面的計(jì)算可知霎奢,即使你嚴(yán)格執(zhí)行了預(yù)算計(jì)劃户誓,并且工資也保持穩(wěn)定增長(zhǎng),在15年后你的積蓄才打到78萬(wàn)多幕侠,這離你百萬(wàn)富翁的目標(biāo)還有一定的差距帝美。這時(shí)光靠存錢還不夠,還需要你來(lái)進(jìn)行合理的投資晤硕。假如投資的年回報(bào)率是7%证舟,那么每月需要投資多少錢才能在15年后使財(cái)富增長(zhǎng)到100萬(wàn)呢?
numpy.pmt(rate, nper, pv)
函數(shù)用來(lái)計(jì)算每月投資額
- rate:每月投資回報(bào)率
- nper:總的投資期數(shù)
- pv:現(xiàn)值窗骑,這里是0
- fv:未來(lái)價(jià)值女责,這里是100萬(wàn)
# 設(shè)置年投資回報(bào)率為7%
investment_rate_annual = 0.07
# 換算成每月的投資回報(bào)率
investment_rate_monthly = (1 + investment_rate_annual) ** (1/12) -1
# 為了獲得100萬(wàn),計(jì)算每月需要投資的金額
required_investment_monthly = -np.pmt(rate=investment_rate_monthly, \
nper=forecast_months, pv=0, fv=1000000)
print("你需要連續(xù)15年每月投資 "
+ str(round(required_investment_monthly, 2))
+ " 元才能達(dá)到100萬(wàn)创译。")
你需要連續(xù)15年每月投資 3214.35 元才能達(dá)到100萬(wàn)抵知。
上面的計(jì)算告訴你每月需要投資三千多元才行,但是你一開始的積蓄只有兩千多软族,負(fù)擔(dān)不起這樣的投資方案刷喜。
# 查看前5個(gè)月每月的積蓄
savings_forecast[:5]
array([ 2349.88962846, 2366.52789784, 2383.24850536, 2400.05181645,
2416.9381981 ])
我們可以換一種投資方案,不是每月投資固定的額度立砸,而是按你收入的一定比例來(lái)投資掖疮。這樣雖然一開始投入的較少,但是隨著收入的增長(zhǎng)颗祝,投資額也會(huì)隨之增長(zhǎng)浊闪。下面將模擬這一投資方案,假設(shè)將結(jié)余50%的資金用于投資螺戳。
# 設(shè)置每月結(jié)余中用于投資的比例
monthly_investment_percentage = 0.5
# 計(jì)算每月投資額度
investment_deposit_forecast = savings_forecast * monthly_investment_percentage
# 剩余的進(jìn)入儲(chǔ)蓄賬戶
savings_forecast_new = savings_forecast * (1 - monthly_investment_percentage)
# 繪制每月儲(chǔ)蓄和投資的累積額度
fig = plt.figure(figsize=(12,4.5)) #設(shè)置畫布大小
p1 = fig.add_subplot(121) # 添加第一個(gè)子圖
plt.plot(investment_deposit_forecast, color='orange', label="投資")
plt.xlabel("月份")
plt.ylabel("每月的投資金額")
p2 = fig.add_subplot(122) # 添加第二個(gè)子圖
plt.plot(savings_forecast_new, color='blue', label="儲(chǔ)蓄")
plt.xlabel("月份")
plt.ylabel("每月的儲(chǔ)蓄金額")
plt.show()
上面這兩幅圖一模一樣搁宾,因?yàn)槟銓⒔Y(jié)余的一半用來(lái)投資,另一半用來(lái)儲(chǔ)蓄倔幼。下面讓我們來(lái)計(jì)算這樣的投資組合帶來(lái)的資產(chǎn)凈值盖腿。(為簡(jiǎn)單起見,這里假設(shè)投資的年回報(bào)是7%,而儲(chǔ)蓄沒(méi)有利息翩腐。)
# 設(shè)置投資鸟款、凈值的初始數(shù)組(每個(gè)元素都為0,數(shù)組長(zhǎng)度是12*15)
investment_portfolio = np.repeat(0., forecast_months)
net_worth = np.repeat(0., forecast_months)
# 計(jì)算累積的儲(chǔ)蓄額
cumulative_savings_new = np.cumsum(savings_forecast_new)
# 循環(huán)計(jì)算每個(gè)月的投資和結(jié)余情況
for i in range(forecast_months):
# 設(shè)置前一月投資的總金額
# 如果是第一個(gè)月茂卦,則前一月投資總額為0
if i == 0:
previous_investment = 0
else:
previous_investment = investment_portfolio[i-1]
# 計(jì)算前一月的投資總額在當(dāng)月的增長(zhǎng)
previous_investment_growth = previous_investment*(1 + investment_rate_monthly)
# 將之前的投資總額加上當(dāng)月的新增的投資額欠雌,等于當(dāng)月的投資總數(shù)
investment_portfolio[i] = previous_investment_growth + investment_deposit_forecast[i]
# 計(jì)算當(dāng)月的凈值,是累積儲(chǔ)蓄存款額加上當(dāng)月總的投資額
net_worth[i] = cumulative_savings_new[i] + investment_portfolio[i]
# 繪制儲(chǔ)蓄疙筹、投資富俄、凈值的隨時(shí)間變化的曲線圖
plt.plot(investment_portfolio, color='orange', label="投資")
plt.plot(cumulative_savings_new, color="blue", label="儲(chǔ)蓄")
plt.plot(net_worth, color='green', label="凈值")
plt.xlabel("月份")
plt.ylabel("金額")
plt.legend(loc=2)
plt.show()
我們來(lái)查看15年后總的凈值:
print("15年后的凈值:" + str(round(net_worth[-1],2)))
15年后的凈值:1014978.67
按照上面的組合投資方法,即將一半的結(jié)余用于投資而咆,另一半用于儲(chǔ)蓄霍比,那么15年后你將達(dá)到100萬(wàn)的目標(biāo)。
注:本文是DataCamp課程Intro to Financial Concepts using Python的學(xué)習(xí)筆記暴备。
更多該課程的筆記: