個(gè)人理財(cái)規(guī)劃分析 —— 帶著Python玩金融(4)

剛剛大學(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í)筆記暴备。
更多該課程的筆記:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悠瞬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涯捻,更是在濱河造成了極大的恐慌浅妆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件障癌,死亡現(xiàn)場(chǎng)離奇詭異凌外,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)涛浙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門康辑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人轿亮,你說(shuō)我怎么就攤上這事疮薇。” “怎么了我注?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵按咒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我但骨,道長(zhǎng)励七,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任嗽冒,我火速辦了婚禮呀伙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘添坊。我一直安慰自己,他們只是感情好箫锤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布贬蛙。 她就那樣靜靜地躺著雨女,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阳准。 梳的紋絲不亂的頭發(fā)上氛堕,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音野蝇,去河邊找鬼讼稚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绕沈,可吹牛的內(nèi)容都是我干的锐想。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼乍狐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赠摇!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起浅蚪,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤藕帜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后惜傲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洽故,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年盗誊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了收津。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浊伙,死狀恐怖撞秋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嚣鄙,我是刑警寧澤吻贿,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站哑子,受9級(jí)特大地震影響舅列,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卧蜓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一帐要、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弥奸,春花似錦榨惠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耽装。三九已至,卻和暖如春期揪,著一層夾襖步出監(jiān)牢的瞬間掉奄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工凤薛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姓建,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓缤苫,卻偏偏與公主長(zhǎng)得像速兔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榨馁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353