|
33 | 33 | { |
34 | 34 | "cell_type": "code", |
35 | 35 | "execution_count": 2, |
36 | | - "metadata": { |
37 | | - "collapsed": true |
38 | | - }, |
39 | | - "outputs": [], |
40 | | - "source": [ |
41 | | - "# California sales tax 7.5%\n", |
42 | | - "P = 31115 * (1.075)\n", |
43 | | - "\n", |
44 | | - "r = 0.0702 / 12\n", |
45 | | - "n = 60" |
46 | | - ] |
47 | | - }, |
48 | | - { |
49 | | - "cell_type": "code", |
50 | | - "execution_count": 3, |
51 | 36 | "metadata": { |
52 | 37 | "collapsed": false |
53 | 38 | }, |
54 | 39 | "outputs": [ |
55 | 40 | { |
56 | 41 | "data": { |
57 | 42 | "text/plain": [ |
58 | | - "662.638532377825" |
| 43 | + "662.64" |
59 | 44 | ] |
60 | 45 | }, |
61 | | - "execution_count": 3, |
| 46 | + "execution_count": 2, |
62 | 47 | "metadata": {}, |
63 | 48 | "output_type": "execute_result" |
64 | 49 | } |
65 | 50 | ], |
66 | 51 | "source": [ |
| 52 | + "P = 31115 * (1.075)\n", |
| 53 | + "r = 0.0702 / 12\n", |
| 54 | + "n = 60\n", |
67 | 55 | "numerator = (r *((1 + r)**(n)) )\n", |
68 | 56 | "denominator = ((1 + r)**(n)) - 1\n", |
69 | | - "\n", |
70 | 57 | "emi = P * (numerator / denominator)\n", |
71 | | - "emi" |
| 58 | + "np.round(emi,2)" |
72 | 59 | ] |
73 | 60 | }, |
74 | 61 | { |
|
80 | 67 | }, |
81 | 68 | { |
82 | 69 | "cell_type": "code", |
83 | | - "execution_count": 4, |
| 70 | + "execution_count": 3, |
84 | 71 | "metadata": { |
85 | | - "collapsed": true |
| 72 | + "collapsed": false |
86 | 73 | }, |
87 | | - "outputs": [], |
| 74 | + "outputs": [ |
| 75 | + { |
| 76 | + "data": { |
| 77 | + "text/plain": [ |
| 78 | + "687.23" |
| 79 | + ] |
| 80 | + }, |
| 81 | + "execution_count": 3, |
| 82 | + "metadata": {}, |
| 83 | + "output_type": "execute_result" |
| 84 | + } |
| 85 | + ], |
88 | 86 | "source": [ |
89 | | - "# Price + Tax + Emissions + Registration + Plate + Documentation\n", |
90 | 87 | "P = 31115 + (32615 * 0.0975) + 50 + 200 + 65 + 80\n", |
91 | | - "\n", |
92 | 88 | "r = 0.0702 / 12\n", |
93 | | - "n = 60" |
94 | | - ] |
95 | | - }, |
96 | | - { |
97 | | - "cell_type": "code", |
98 | | - "execution_count": 5, |
99 | | - "metadata": { |
100 | | - "collapsed": false |
101 | | - }, |
102 | | - "outputs": [], |
103 | | - "source": [ |
| 89 | + "n = 60\n", |
104 | 90 | "numerator = (r *((1 + r)**(n)) )\n", |
105 | 91 | "denominator = ((1 + r)**(n)) - 1\n", |
106 | | - "\n", |
107 | 92 | "emi = P * (numerator / denominator)\n", |
108 | | - "emi = np.round(emi, 2)" |
| 93 | + "np.round(emi,2)" |
109 | 94 | ] |
110 | 95 | }, |
111 | 96 | { |
112 | 97 | "cell_type": "code", |
113 | | - "execution_count": 6, |
| 98 | + "execution_count": 4, |
114 | 99 | "metadata": { |
115 | 100 | "collapsed": false |
116 | 101 | }, |
|
121 | 106 | "'The Monthly Payment with fees included is 24.59 higher'" |
122 | 107 | ] |
123 | 108 | }, |
124 | | - "execution_count": 6, |
| 109 | + "execution_count": 4, |
125 | 110 | "metadata": {}, |
126 | 111 | "output_type": "execute_result" |
127 | 112 | } |
|
155 | 140 | }, |
156 | 141 | { |
157 | 142 | "cell_type": "code", |
158 | | - "execution_count": 7, |
| 143 | + "execution_count": 5, |
159 | 144 | "metadata": { |
160 | 145 | "collapsed": false |
161 | 146 | }, |
|
166 | 151 | "202.93628062500002" |
167 | 152 | ] |
168 | 153 | }, |
169 | | - "execution_count": 7, |
| 154 | + "execution_count": 5, |
170 | 155 | "metadata": {}, |
171 | 156 | "output_type": "execute_result" |
172 | 157 | } |
|
188 | 173 | }, |
189 | 174 | { |
190 | 175 | "cell_type": "code", |
191 | | - "execution_count": 8, |
| 176 | + "execution_count": 6, |
192 | 177 | "metadata": { |
193 | 178 | "collapsed": false |
194 | 179 | }, |
|
199 | 184 | "34205.6725" |
200 | 185 | ] |
201 | 186 | }, |
202 | | - "execution_count": 8, |
| 187 | + "execution_count": 6, |
203 | 188 | "metadata": {}, |
204 | 189 | "output_type": "execute_result" |
205 | 190 | } |
|
217 | 202 | }, |
218 | 203 | { |
219 | 204 | "cell_type": "code", |
220 | | - "execution_count": 9, |
| 205 | + "execution_count": 7, |
221 | 206 | "metadata": { |
222 | 207 | "collapsed": false |
223 | 208 | }, |
|
229 | 214 | "term = 60\n", |
230 | 215 | "P = 34689.96\n", |
231 | 216 | "\n", |
232 | | - "def calc_interest(P, emi, interest_rate = 0.0702):\n", |
233 | | - " \n", |
234 | | - " # Assuming no fractional interst on a loan \n", |
235 | | - " interest_paid = np.floor( ((interest_rate / 12) * P ) * 100) / 100\n", |
236 | | - " \n", |
237 | | - " principal_paid = np.round(emi - interest_paid, 2)\n", |
238 | | - " \n", |
| 217 | + "def calc_interest(P,emi,interest_rate = 0.0702):\n", |
| 218 | + " interest_paid = np.floor(((interest_rate/12)*P)*100)/100\n", |
| 219 | + " principal_paid = np.round(emi-interest_paid, 2)\n", |
239 | 220 | " new_balance = np.round(P - principal_paid,2)\n", |
240 | | - " \n", |
241 | 221 | " return(emi, interest_paid, principal_paid, new_balance)\n", |
242 | 222 | "\n", |
243 | 223 | "payment_list = []\n", |
244 | | - "for month in range(1, term + 1):\n", |
245 | | - "\n", |
246 | | - " emi, interest_paid, principal_paid, new_balance = calc_interest(P, emi)\n", |
247 | | - "\n", |
248 | | - " payment_list.append([month, P, emi, interest_paid, principal_paid, new_balance])\n", |
249 | | - "\n", |
250 | | - " P = np.round(new_balance,2)" |
| 224 | + "for n in range(1, term + 1):\n", |
| 225 | + " emi,i_paid,p_paid,new_p = calc_interest(P, emi)\n", |
| 226 | + " payment_list.append([n, P, emi, i_paid, p_paid, new_p])\n", |
| 227 | + " P = np.round(new_p,2)" |
251 | 228 | ] |
252 | 229 | }, |
253 | 230 | { |
254 | 231 | "cell_type": "code", |
255 | | - "execution_count": 10, |
| 232 | + "execution_count": 8, |
256 | 233 | "metadata": { |
257 | 234 | "collapsed": false |
258 | 235 | }, |
259 | 236 | "outputs": [], |
260 | 237 | "source": [ |
261 | | - "payment_table = pd.DataFrame(payment_list, columns = ['Month',\n", |
262 | | - " 'Starting Balance',\n", |
263 | | - " 'Repayment',\n", |
264 | | - " 'Interest Paid',\n", |
265 | | - " 'Principal Paid',\n", |
266 | | - " 'New Balance'])" |
| 238 | + "c_names = ['Month','Starting Balance','Repayment','Interest Paid','Principal Paid','New Balance']\n", |
| 239 | + "payment_table = pd.DataFrame(payment_list, columns = c_names)" |
267 | 240 | ] |
268 | 241 | }, |
269 | 242 | { |
270 | 243 | "cell_type": "code", |
271 | | - "execution_count": 11, |
| 244 | + "execution_count": 9, |
272 | 245 | "metadata": { |
273 | 246 | "collapsed": false |
274 | 247 | }, |
|
307 | 280 | " <th>0</th>\n", |
308 | 281 | " <td>1</td>\n", |
309 | 282 | " <td>34689.96</td>\n", |
310 | | - " <td>687.23</td>\n", |
| 283 | + " <td>687.230218</td>\n", |
311 | 284 | " <td>202.93</td>\n", |
312 | 285 | " <td>484.30</td>\n", |
313 | 286 | " <td>34205.66</td>\n", |
|
316 | 289 | " <th>1</th>\n", |
317 | 290 | " <td>2</td>\n", |
318 | 291 | " <td>34205.66</td>\n", |
319 | | - " <td>687.23</td>\n", |
| 292 | + " <td>687.230218</td>\n", |
320 | 293 | " <td>200.10</td>\n", |
321 | 294 | " <td>487.13</td>\n", |
322 | 295 | " <td>33718.53</td>\n", |
|
325 | 298 | " <th>2</th>\n", |
326 | 299 | " <td>3</td>\n", |
327 | 300 | " <td>33718.53</td>\n", |
328 | | - " <td>687.23</td>\n", |
| 301 | + " <td>687.230218</td>\n", |
329 | 302 | " <td>197.25</td>\n", |
330 | 303 | " <td>489.98</td>\n", |
331 | 304 | " <td>33228.55</td>\n", |
|
334 | 307 | " <th>3</th>\n", |
335 | 308 | " <td>4</td>\n", |
336 | 309 | " <td>33228.55</td>\n", |
337 | | - " <td>687.23</td>\n", |
| 310 | + " <td>687.230218</td>\n", |
338 | 311 | " <td>194.38</td>\n", |
339 | 312 | " <td>492.85</td>\n", |
340 | 313 | " <td>32735.70</td>\n", |
|
343 | 316 | " <th>4</th>\n", |
344 | 317 | " <td>5</td>\n", |
345 | 318 | " <td>32735.70</td>\n", |
346 | | - " <td>687.23</td>\n", |
| 319 | + " <td>687.230218</td>\n", |
347 | 320 | " <td>191.50</td>\n", |
348 | 321 | " <td>495.73</td>\n", |
349 | 322 | " <td>32239.97</td>\n", |
|
352 | 325 | " <th>5</th>\n", |
353 | 326 | " <td>6</td>\n", |
354 | 327 | " <td>32239.97</td>\n", |
355 | | - " <td>687.23</td>\n", |
| 328 | + " <td>687.230218</td>\n", |
356 | 329 | " <td>188.60</td>\n", |
357 | 330 | " <td>498.63</td>\n", |
358 | 331 | " <td>31741.34</td>\n", |
|
361 | 334 | " <th>6</th>\n", |
362 | 335 | " <td>7</td>\n", |
363 | 336 | " <td>31741.34</td>\n", |
364 | | - " <td>687.23</td>\n", |
| 337 | + " <td>687.230218</td>\n", |
365 | 338 | " <td>185.68</td>\n", |
366 | 339 | " <td>501.55</td>\n", |
367 | 340 | " <td>31239.79</td>\n", |
|
370 | 343 | " <th>7</th>\n", |
371 | 344 | " <td>8</td>\n", |
372 | 345 | " <td>31239.79</td>\n", |
373 | | - " <td>687.23</td>\n", |
| 346 | + " <td>687.230218</td>\n", |
374 | 347 | " <td>182.75</td>\n", |
375 | 348 | " <td>504.48</td>\n", |
376 | 349 | " <td>30735.31</td>\n", |
|
379 | 352 | " <th>8</th>\n", |
380 | 353 | " <td>9</td>\n", |
381 | 354 | " <td>30735.31</td>\n", |
382 | | - " <td>687.23</td>\n", |
| 355 | + " <td>687.230218</td>\n", |
383 | 356 | " <td>179.80</td>\n", |
384 | 357 | " <td>507.43</td>\n", |
385 | 358 | " <td>30227.88</td>\n", |
|
388 | 361 | " <th>9</th>\n", |
389 | 362 | " <td>10</td>\n", |
390 | 363 | " <td>30227.88</td>\n", |
391 | | - " <td>687.23</td>\n", |
| 364 | + " <td>687.230218</td>\n", |
392 | 365 | " <td>176.83</td>\n", |
393 | 366 | " <td>510.40</td>\n", |
394 | 367 | " <td>29717.48</td>\n", |
|
398 | 371 | "</div>" |
399 | 372 | ], |
400 | 373 | "text/plain": [ |
401 | | - " Month Starting Balance Repayment Interest Paid Principal Paid \\\n", |
402 | | - "0 1 34689.96 687.23 202.93 484.30 \n", |
403 | | - "1 2 34205.66 687.23 200.10 487.13 \n", |
404 | | - "2 3 33718.53 687.23 197.25 489.98 \n", |
405 | | - "3 4 33228.55 687.23 194.38 492.85 \n", |
406 | | - "4 5 32735.70 687.23 191.50 495.73 \n", |
407 | | - "5 6 32239.97 687.23 188.60 498.63 \n", |
408 | | - "6 7 31741.34 687.23 185.68 501.55 \n", |
409 | | - "7 8 31239.79 687.23 182.75 504.48 \n", |
410 | | - "8 9 30735.31 687.23 179.80 507.43 \n", |
411 | | - "9 10 30227.88 687.23 176.83 510.40 \n", |
| 374 | + " Month Starting Balance Repayment Interest Paid Principal Paid \\\n", |
| 375 | + "0 1 34689.96 687.230218 202.93 484.30 \n", |
| 376 | + "1 2 34205.66 687.230218 200.10 487.13 \n", |
| 377 | + "2 3 33718.53 687.230218 197.25 489.98 \n", |
| 378 | + "3 4 33228.55 687.230218 194.38 492.85 \n", |
| 379 | + "4 5 32735.70 687.230218 191.50 495.73 \n", |
| 380 | + "5 6 32239.97 687.230218 188.60 498.63 \n", |
| 381 | + "6 7 31741.34 687.230218 185.68 501.55 \n", |
| 382 | + "7 8 31239.79 687.230218 182.75 504.48 \n", |
| 383 | + "8 9 30735.31 687.230218 179.80 507.43 \n", |
| 384 | + "9 10 30227.88 687.230218 176.83 510.40 \n", |
412 | 385 | "\n", |
413 | 386 | " New Balance \n", |
414 | 387 | "0 34205.66 \n", |
|
423 | 396 | "9 29717.48 " |
424 | 397 | ] |
425 | 398 | }, |
426 | | - "execution_count": 11, |
| 399 | + "execution_count": 9, |
427 | 400 | "metadata": {}, |
428 | 401 | "output_type": "execute_result" |
429 | 402 | } |
|
470 | 443 | }, |
471 | 444 | { |
472 | 445 | "cell_type": "code", |
473 | | - "execution_count": 74, |
| 446 | + "execution_count": 13, |
474 | 447 | "metadata": { |
475 | 448 | "collapsed": false, |
476 | 449 | "scrolled": true |
|
537 | 510 | "P = 34689.96\n", |
538 | 511 | "term = 60\n", |
539 | 512 | "\n", |
540 | | - "def generate_loan_table(P, term, interest_rate = 0.0702):\n", |
| 513 | + "def generate_loan_table(P, term, interest_rate=0.0702):\n", |
541 | 514 | "\n", |
542 | 515 | " def calc_emi(P, n, interest_rate):\n", |
543 | 516 | " r = interest_rate / 12\n", |
|
557 | 530 | " emi = calc_emi(P, term, interest_rate)\n", |
558 | 531 | " payment_list = []\n", |
559 | 532 | " \n", |
560 | | - " for month in range(1, term + 1):\n", |
561 | | - " emi, interest_paid, principal_paid, new_balance = calc_interest(P, emi, interest_rate)\n", |
562 | | - " payment_list.append([month, P, emi, interest_paid, principal_paid, new_balance])\n", |
| 533 | + " for n in range(1, term + 1):\n", |
| 534 | + " emi,i_paid,p_paid, new_p = calc_interest(P, emi, interest_rate)\n", |
| 535 | + " payment_list.append([n, P, emi, i_paid, p_paid, new_p])\n", |
563 | 536 | " P = np.round(new_balance,2)\n", |
564 | 537 | " \n", |
565 | 538 | " payment_table = pd.DataFrame(payment_list, columns = ['Month',\n", |
|
0 commit comments