|
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