
這個練習來自<用 Python 理財:打造小資族選股策略>的第一個作業:利用Python Pandas預測人生財務曲線,我有把老師的Demo稍微修改程式順序,讓自己在使用上更順手。
這篇同時會用到Pandas、函式、迴圈等等概念。
本篇文章內容
課程介紹:用 Python 理財:打造小資族選股策略
<用 Python 理財:打造小資族選股策略>是Hahow 好學校中,非常熱門的Python基礎課程,裡面除了Python的基礎教學、Pandas介紹、用法以外,還包含了許多小資族應該有的理財觀念。
老師是FinLab的韓承佑,有豐富的程式經驗,教學深入淺出,用詞白話,很適合初學者。
預測人生財務曲線小程式
這個小程式的用途,可以讓使用者輸入基本的財務資料後,去計算在人生階段中,有無投資、有無買房後,劃出個人的人生財物曲線。
雖然一直都知道「複利」的強大,但自己親手把程式寫出來、一步一步計算,並且畫出財務曲線後,發現落差真的好大,加強了對於理財的急迫心。
如果對於Python沒有興趣,只是想要跑跑看自己的人生財務曲線,可以點下面的連結,裡面有我寫好的練習檔,可以直接取用。
練習檔:Day18(1/11)利用Python Pandas預測個人財務曲線
使用方法
- 打開練習檔
- 輸入右手邊的初始化資料左邊有備註可以參考
- 選擇選單上方的「執行階段],下拉後選擇「全部執行」。

執行結果
按下執行後,程式會開始連線、並且依據執行程式片段,最後拉到底下就可以看到曲線圖和90歲時的金額了。

練習:Python Pandas預測人生財務曲線
程式解構
這個練習影片我重複看了兩次,一次是用通勤時間,先用「看」的方式,理解老師在影片內的邏輯,第二次才跟著打,難易度不高,但需要一點細心。
另外因為中文要一直換輸入法,我把變數名稱都改成英文了。
- 計算每年的淨值:月薪扣掉每月開銷*12
- 加總後可以得到「未買房、未投資」的人生財務結果
- 計算有投資的情況:將淨值按照投資比例、預估投資報酬率,複利加總
- 買房:計算買房成本、利息
- 房租:買房前的房租總和(房租*12*買房前的年數)
- 計算買房後持續投資的情況:用同樣的函式,把買房後的淨額做投資複利計算
初始資料設定
這裡模擬一個29歲,工作大約五年的青年,薪水65K、房租10K、日常開銷25K,並以存到100萬當頭期款,希望30歲買房為背景。
計算每年拿淨值6成做投資,投報5%,60歲退休,並且活到90歲來計算。
#初始資料(單位/萬) start_m = 100 #初始化資金 monthly=6.5 #月薪 cost=2.5 #每月花費(不含房租,吃喝) rent=1 #房租 rest_age=60 #退休年齡 time=range(29,90,1) #@param #觀測29-90歲 #投資資料 inv_p=0.6 #@param #投資占比 inv_year=1.05 #@param #投資年利率 #買房資料 house_total=880 #@param #房子總價 house_down= 100 #@param #頭期款 buyhouse_age=30 #@param #買房年紀 house_int=1.31#@param #利率 house_year=30 #@param #貸款年
未買房、未投資情況
算出每年的財產淨額[薪水-開銷]。
year_m=pd.Series(0,index=time) year_m.iloc[0]=start_m #第一個數字放入初始資金 year_m.loc[:rest_age]+=monthly*12 year_m-=(cost+rent)*12
這裡可以看到,每年的淨額在29歲時,有初始化的存款,接著每年的淨值都相同,但是到60歲(退休後)會變成負的,因為沒有收入了!開銷變成吃老本。

#無投資總資產 no_house_m=year_m.cumsum() no_house_m.plot()
因此,在沒有投資、沒有買房的情況下,人生的財務曲線如下,雖然30-60歲不斷成長(不停儲蓄,這裡忽略活存利率),但60歲開始消耗存款。

未買房、有投資情況
計算投資,這邊老師用了一個函式,包含複利的計算和迴圈,將結果一個一個傳回。
def compound_inv(arr,inv_p,inv_year): ret=[arr.iloc[0]] #定義一開始的餘額(第一年)起始金額+年淨額 for v in arr[1:]: #從第一年開始取數字,到結束 ret.append(ret[-1]*inv_p*inv_year+ret[-1]*(1-inv_p)+v) #迴圈加總(淨值*投資比例*) return pd.Series(ret,time) int_m=compound_inv(year_m,inv_p,inv_year) int_m.plot() #有投資無房的情況 no_house_m.plot() #無投資總資產
結果就是,30-60歲開始投資,人生財務會穩定按照複利的斜率成長,到了60歲後,沒有工作薪資收入,但投資獲利仍可以支付開銷、並且還有淨額繼續投資(錢滾錢的概念)。

有買房、沒投資情況
接著,來到買房的部分。
再沒有富爸爸幫助下,用已存的100萬當頭期款,剩下的款項用青年成家方案(利率1.31%)計算、貸款30年,購買新北市的總價880萬的中古屋。
首先先計算買房的花費,建立一個Series,放入每年房貸金額,第一年會付出頭期款100萬(所以線最高),接著是每年的房貸(房貸除以貸款年限)。
#計算買房花費(不含利息) house_cost=pd.Series(0,index=time) #建立一個欄Series,放每年的房貸費用(本金) house_cost[buyhouse_age]=house_down house_cost.loc[buyhouse_age:(buyhouse_age+house_year)]+=((house_total-house_down)/house_year) #從買房年開始,到貸款繳完年紀;放入總價/貸款年 house_cost.plot()

接著計算實際的借款餘額,並且用這個餘額去計算每年需要支付的利息(因為利息會越來越少)。
need_pay=pd.Series(0,index=time) #建立一個欄Series來放實際欠款 need_pay[buyhouse_age]=house_total #從買房年紀開始,背房貸 need_pay=need_pay.cumsum()#計算欠款 need_pay=need_pay-house_cost.cumsum() #依序扣掉每年貸款 need_pay.plot() #房貸月來越少 #print(need_pay) #計算利息 houseint=need_pay.shift().fillna(0)*house_int/100 houseint.plot(secondary_y=True) #每月利息也越來越少

因為接下來要計算買房後的每月淨額,因此扣掉買房前繳交給房東的房租,並在買房後的年紀中,都放上0。
#計算要繳給房東大大的房租 rent_year=pd.Series(rent*12,index=time) rent_year.loc[buyhouse_age:]=0 #買房後都是0
因此,有買房、但沒投資情況下,個人財務曲下會如下圖,買房前有初始資金100萬,接著付出頭期款、開始繳房貸、同時增加淨額,到了60歲退休後,開始花過去存款,在80歲前就會把老本花光。

有買房、有投資情況
想要買房,又不想老了負債的話,就要開始並期投資。
這部分只要把剛剛買房後的淨額,放入前面寫的投資函式(compound_inv)去計算就可以了。
buyhoues_with_inv=compound_inv(buyhouse_year_m,inv_p,inv_year)
在同樣拿出淨額60%、年報酬率0.5情況下,雖然存款不如沒有買房上升的快(可支配投資金額較少),但退休後仍可以維持生活、人生到盡頭仍有一筆存款在。

將四條線同時印出
int_m.plot(color='red') #純投資 buyhoues_with_inv.plot(color='green') #有房有投資 buyhouse_year_m.cumsum().plot(color='black') #有房沒投資 no_house_m.plot(color='blue') #沒房沒投資 print("所有淨額拿去投資,90歲時:",round(int_m.loc[89],2),"萬元") print("買房,剩下的錢投資,90歲時:",round(buyhoues_with_inv.loc[89],2),"萬元") print("買房,但不投資,90歲時:",round(buyhouse_year_m.cumsum()[89],2),"萬元") print("沒買房,也不投資,90歲時:",round(no_house_m[89],2),"萬元")
把四條人生曲線都印出,並且用不同顏色標記,另外同時也用字串顯示在不同情況下,90歲時的存款。
執行結果
所有淨額拿去投資,90歲時: 3144.11 萬元 買房,剩下的錢投資,90歲時: 913.98 萬元 買房,但不投資,90歲時: -278.28 萬元 沒買房,也不投資,90歲時: 34.0 萬元

感想
這個財務曲線,是在沒有意外、沒有外力因素,而且自律(存款和投資)的情況下,利用Python內的計算功能和Pandas的可視化工具,預測出模型簡單的人生曲線。
當然,人生上會有大大小小波折,各種的意外和驚喜,這個預測曲線可能不準確,但展現出來的都是要我們趕緊投資,不要想看複利的力量。
本次練習檔與課程
練習檔:Day18(1/11)利用Python Pandas預測個人財務曲線
課程:用 Python 理財:打造小資族選股策略
【Python新手練習】相關文章
【Python新手練習】系列文,是一個行銷人學習Python的筆記,希望可以藉由練習程式,訓練更強大的邏輯思考,如果你也對這塊有興趣,這些文章或許可以幫助到你!也歡迎一起交流。
行銷人的Python練習90計畫-為什麼要學Python?
Day0:Google Colab新手Python開發環境推薦
Day1:Python變數與資料型態
Day2:Python判斷式與迴圈(流程控制)
Day3:Python函式 定義、呼叫與回傳
Day4:載入Python模組與使用
Day5:Python檔案讀取和儲存
Day6:Python亂數與統計
Day7:Python API 開放資料串接,抓取台北市政府公開資料!
Day8:Python實體物件建立與使用
Day9:Python爬蟲實戰!抓取PTT電影版
發佈留言