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

剛剛大學畢業(yè)的你獲得了一份滿意的工作,接下來正雄心勃勃地規(guī)劃著自己的未來。這其中自然少不了財富目標,比如怎樣成為百萬富翁呢?本文將帶你用Python分析你的財務情況,以及怎樣才能實現(xiàn)你的理財目標。

收入和支出

假如你工作的起薪是10萬元,但是你需要交納五險一金和個稅,這部分大約占工資的30%。為了制定合理的預算方案,首先需要計算實際到手的工資。

# 設定年收入
salary = 100000

# 假設稅率是30%
tax_rate = 0.30

# 計算稅后收入
salary_after_taxes = salary * (1 - tax_rate)
print("稅后年收入: " + str(round(salary_after_taxes, 2)))

# 計算每月的稅后收入
monthly_takehome_salary = salary_after_taxes / 12
print("每月到手的收入: " + str(round(monthly_takehome_salary, 2)))
稅后年收入: 70000.0
每月到手的收入: 5833.33

知道實際的收入后,我們再來看每月的開支,預算如下:

  • 房租:1500/月
  • 就餐:平均40/天,一月按30天計算
  • 娛樂:500/月
  • 未預見的開支:300/月

現(xiàn)在來計算每月的支出和結余。

# 每月的房租
monthly_rent = 1500
# 每月的就餐預算
monthly_food_budget = 40 * 30
# 每月的娛樂預算
monthly_entertainment_budget = 500
# 未預見的開支
monthly_unforeseen_expenses = 300

# 計算總的月度開支
monthly_expenses = monthly_rent + monthly_food_budget \
    + monthly_entertainment_budget + monthly_unforeseen_expenses
print("每月支出: " + str(round(monthly_expenses, 2)))

# 計算每月的結余
monthly_savings = monthly_takehome_salary - monthly_expenses
print("每月結余: " + str(round(monthly_savings, 2)))
每月支出: 3500
每月結余: 2333.33

你的收入和支出并不是一成不變的。隨著工作經(jīng)驗的增長,一般你的工資也會上漲。假設工資以每年5%的速度穩(wěn)定增長,預測未來15年的收入情況(為了簡單起見,這里假設稅率沒變)。

注:下面使用的 np.cumprod()累積求積函數(shù),以及年增長率到月增長率的換算說明,可參見上一篇文章《用Python分析房屋抵押貸款》

import numpy as np  # 導入numpy科學計算包
from matplotlib import pyplot as plt   # 導入繪圖工具包
%config InlineBackend.figure_format = 'retina' # 設置圖片清晰度
plt.rcParams['font.sans-serif']=['SimHei']  # 設置中文字體

# 預測未來15年的情況,并換算到月份
forecast_months = 12*15

# 設置工資的年增長率
annual_salary_growth = 0.05
# 換算成工資每月的增長率(注意是復利)
monthly_salary_growth = (1 + annual_salary_growth) ** (1/12) - 1

# 計算工資的累積增長
cumulative_salary_growth_forecast = np.cumprod(np.repeat(1 + monthly_salary_growth, forecast_months))
# 預測工資
salary_forecast = monthly_takehome_salary * cumulative_salary_growth_forecast

# 繪制工資隨時間變化的曲線
plt.plot(salary_forecast, color='green')
plt.xlabel("月份")
plt.ylabel("每月收入")      
plt.show()

不僅工資會上漲,由于通貨膨脹,你的開支也會上漲。假設開支的增長速度是每年2.5%,采用上面相同的方法來計算未來15年的開支情況。

# 設置年通貨膨脹率
annual_inflation = 0.025
# 換算成每月的通脹率
monthly_inflation = (1 + annual_inflation) ** (1/12) - 1

# 預測累積的通脹
cumulative_inflation_forecast = np.cumprod(1 + np.repeat(monthly_inflation, forecast_months))
# 預測未來的開支
expenses_forecast = monthly_expenses * cumulative_inflation_forecast

# 繪制開支隨時間變化的曲線
plt.plot(expenses_forecast, color='red')
plt.xlabel("月份")
plt.ylabel("月度支出") 
plt.show()

為了方便比較,將上兩幅圖中的收入和支出曲線繪制在一幅圖中。幸運的是你的收入增長速度大于通貨膨脹率,這意味著你每月將有更多的結余。

plt.plot(salary_forecast, color='green', label="每月收入")
plt.plot(expenses_forecast, color='red', label="每月支出")
plt.legend(loc=2)
plt.xlabel("月份")
plt.ylabel("金額")
plt.show()

儲蓄和投資

在上一節(jié)中,我們預測了收入和支出隨時間變化的情況,將每月的收入減去支出,便可算得每月積攢了多少錢。將每月的積蓄累加起來,就得到了總的積蓄。

注:下面使用的 np.cumsum() 函數(shù)進行累積求和,可參見上一篇文章《用Python分析房屋抵押貸款》

# 計算每月的積蓄
savings_forecast = salary_forecast - expenses_forecast

# 計算累積的積蓄
cumulative_savings = np.cumsum(savings_forecast)

# 輸出15年后總的積蓄
final_net_worth = cumulative_savings[-1]
print("15年后總的積蓄為: " + str(round(final_net_worth, 2)) + "元")

# 繪制總積蓄隨時間推移的曲線
plt.plot(cumulative_savings, color='blue')
plt.xlabel("月份")
plt.ylabel("累積的積蓄")
plt.show()
15年后總的積蓄為: 787802.65元

從上面的計算可知,即使你嚴格執(zhí)行了預算計劃,并且工資也保持穩(wěn)定增長,在15年后你的積蓄才打到78萬多,這離你百萬富翁的目標還有一定的差距。這時光靠存錢還不夠,還需要你來進行合理的投資。假如投資的年回報率是7%,那么每月需要投資多少錢才能在15年后使財富增長到100萬呢?

numpy.pmt(rate, nper, pv) 函數(shù)用來計算每月投資額

  • rate:每月投資回報率
  • nper:總的投資期數(shù)
  • pv:現(xiàn)值,這里是0
  • fv:未來價值,這里是100萬
# 設置年投資回報率為7%
investment_rate_annual = 0.07
# 換算成每月的投資回報率
investment_rate_monthly = (1 + investment_rate_annual) ** (1/12) -1 

# 為了獲得100萬,計算每月需要投資的金額
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)) 
      + " 元才能達到100萬。")
你需要連續(xù)15年每月投資 3214.35 元才能達到100萬。

上面的計算告訴你每月需要投資三千多元才行,但是你一開始的積蓄只有兩千多,負擔不起這樣的投資方案。

# 查看前5個月每月的積蓄
savings_forecast[:5]
array([ 2349.88962846,  2366.52789784,  2383.24850536,  2400.05181645,
        2416.9381981 ])

我們可以換一種投資方案,不是每月投資固定的額度,而是按你收入的一定比例來投資。這樣雖然一開始投入的較少,但是隨著收入的增長,投資額也會隨之增長。下面將模擬這一投資方案,假設將結余50%的資金用于投資。

# 設置每月結余中用于投資的比例
monthly_investment_percentage = 0.5

# 計算每月投資額度
investment_deposit_forecast = savings_forecast * monthly_investment_percentage

# 剩余的進入儲蓄賬戶
savings_forecast_new = savings_forecast * (1 - monthly_investment_percentage)

# 繪制每月儲蓄和投資的累積額度
fig = plt.figure(figsize=(12,4.5)) #設置畫布大小
p1 = fig.add_subplot(121)  # 添加第一個子圖
plt.plot(investment_deposit_forecast, color='orange', label="投資")
plt.xlabel("月份")
plt.ylabel("每月的投資金額")
p2 = fig.add_subplot(122)  # 添加第二個子圖
plt.plot(savings_forecast_new, color='blue', label="儲蓄")
plt.xlabel("月份")
plt.ylabel("每月的儲蓄金額")
plt.show()

上面這兩幅圖一模一樣,因為你將結余的一半用來投資,另一半用來儲蓄。下面讓我們來計算這樣的投資組合帶來的資產凈值。(為簡單起見,這里假設投資的年回報是7%,而儲蓄沒有利息。)

# 設置投資、凈值的初始數(shù)組(每個元素都為0,數(shù)組長度是12*15)
investment_portfolio = np.repeat(0., forecast_months)
net_worth = np.repeat(0., forecast_months)

# 計算累積的儲蓄額
cumulative_savings_new = np.cumsum(savings_forecast_new)

# 循環(huán)計算每個月的投資和結余情況
for i in range(forecast_months):
    
    # 設置前一月投資的總金額
    # 如果是第一個月,則前一月投資總額為0
    if i == 0: 
        previous_investment = 0
    else:
        previous_investment = investment_portfolio[i-1]
        
    # 計算前一月的投資總額在當月的增長
    previous_investment_growth = previous_investment*(1 + investment_rate_monthly)
    
    # 將之前的投資總額加上當月的新增的投資額,等于當月的投資總數(shù)
    investment_portfolio[i] =  previous_investment_growth + investment_deposit_forecast[i]
    
    # 計算當月的凈值,是累積儲蓄存款額加上當月總的投資額
    net_worth[i] = cumulative_savings_new[i] + investment_portfolio[i]
         
# 繪制儲蓄、投資、凈值的隨時間變化的曲線圖
plt.plot(investment_portfolio, color='orange', label="投資")
plt.plot(cumulative_savings_new, color="blue", label="儲蓄")
plt.plot(net_worth, color='green', label="凈值")
plt.xlabel("月份")
plt.ylabel("金額")
plt.legend(loc=2)
plt.show()

我們來查看15年后總的凈值:

print("15年后的凈值:" + str(round(net_worth[-1],2)))
15年后的凈值:1014978.67

按照上面的組合投資方法,即將一半的結余用于投資,另一半用于儲蓄,那么15年后你將達到100萬的目標。


注:本文是DataCamp課程Intro to Financial Concepts using Python的學習筆記。
更多該課程的筆記:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380