├── README.md
├── code
├── Calculate_Intrinsic_Value.ipynb
└── Calculating_Stock_Metrics.ipynb
├── data
├── AAPL Key Ratios.csv
└── aapl_concise.csv
└── reflection_brief_intro.pdf
/README.md:
--------------------------------------------------------------------------------
1 | This repository hosts the code of **Value Investing in Python**, a data science tutorial published in Medium.
2 | This tutorial covers fundamental analysis for US stocks.
3 |
4 | ## Syllabus
5 | The organization of this tutorial falls into the following parts:
6 |
7 | **[1. Collecting financial data for fundamental analysis](https://medium.com/@luo9137/collecting-financial-data-for-fundamental-analysis-115140f5f162)**
8 |
9 | Data is the foundation of this project, and all the subsequent analysis will use data collected in this section. In this section, we have 3 learning objectives:
10 | * Understand the basic concept of value investing and intrinsic value
11 | * Understand what data will be needed to calculate intrinsic value
12 | * Learn to collect the financial data needed from future use
13 |
14 | **[2. How to Generate these Popular Stock Terms using Python](https://medium.com/@luo9137/how-to-generate-these-popular-stock-terms-using-python-4e69c6acc6b3)**
15 |
16 | This section covers the relative simple metrics which will be very useful in fundamental analysis.
17 | Here we have 4 learning objectives:
18 | * What are some important metrics for value investing
19 | * Learn to load financial data into Pandas
20 | * Learn how to retrieve and calculate the metrics using Pandas
21 |
22 | **[3. How to calculate the intrinsic value](https://medium.com/@luo9137/how-to-calculate-the-intrinsic-value-of-a-stock-31c0312586a3)**
23 |
24 | This section unveils the definition of intrinsic value, and also provide a step-by-step calculation for intrinsic value. Here we have 2 learning objectives:
25 | * Calculate intrinsic value in 2 ways
26 | * Discuss the downside and remedy for these 2 methods
27 |
28 | ## Who is the target audience?
29 | If you have been trading stocks for years but conducted your fundamental analysis manually, this is the starting point for you to automate your analysis. Thus, you could conduct a fundamental analysis on a large scale, save a lot of time and avoid human mistakes.
30 |
31 | If you have just started to trade stocks, and have no idea about how to evaluate a stock. Then, this tutorial could help you establish a basic framework and hypothetically save you some money for avoiding some obvious mistakes.
32 |
33 | If you are a data science newbie, wish to gain some hands-on experience. Then, the finance field can be an ideal starting point since it could offer you tons of organized and relatively clean data.
34 |
35 | ## Prerequisites
36 | You do not need to know any finance to be able to study this tutorial, as we will introduce Preston Pysh’s videos, who did a great job in teaching financial concepts in an easy-to-understand way.
37 |
38 | Python basics and Pandas would be required. If you are not familiar with them, here are some resources could be helpful:
39 |
40 | * [Python 3 Tutorial — Learn Python in 30 Minutes](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwjG64PJ7P_mAhXStVkKHb0WAecQFjAAegQIARAB&url=https%3A%2F%2Fwww.programiz.com%2Fpython-programming%2Ftutorial&usg=AOvVaw20Znr2oKGr-03mkPFz4rZT): What you need to know is the first 6 bullet points, from ‘Run Python on your computer’ to ‘Exceptions (Handling, User-defined Exception, …)’
41 | * [Get Started With Python Pandas In 5 minutes](https://medium.com/bhavaniravi/python-pandas-tutorial-92018da85a33)
42 |
43 | You could also try to start without Python and Pandas basics since I am trying to make everything clear. But if you at some point feel hard to understand what the code does, please feel free to leave me a comment and come back to these tutorials.
44 |
45 | ## Next
46 |
47 | I am working with teammates to build a website that hosts tutorials and also provide financial insights, stock recommendation based on the technologies that we learned and taught on the website.
48 |
49 | ## Acknowledgements
50 | I want to thank [Preston Pysh](https://www.youtube.com/channel/UCLTdCY-fNXc1GqzIuflK-OQ), [Investopedia](http://investopedia.com/), [StatQuest](https://www.youtube.com/user/joshstarmer) and [Towards Data Science](https://towardsdatascience.com/).
51 |
52 | Preston Pysh created a fantastic value investing course on YouTube. I would recommend this course to anyone with an interest in investing and finance.
53 |
54 | Investopedia is my initial source of financial knowledge. It offers an easy-to-understand explanation for financial terms.
55 | StatQuest and Towards Data Science have great tutorials on Machine Learning and Stats.
56 |
57 | I benefited a lot from these resources.
58 |
59 | If you have any suggestions or feedback, please feel free to leave a comment or email me at sicong.zhao@duke.edu.
60 |
--------------------------------------------------------------------------------
/code/Calculate_Intrinsic_Value.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "kernelspec": {
6 | "display_name": "Python 3",
7 | "language": "python",
8 | "name": "python3"
9 | },
10 | "language_info": {
11 | "codemirror_mode": {
12 | "name": "ipython",
13 | "version": 3
14 | },
15 | "file_extension": ".py",
16 | "mimetype": "text/x-python",
17 | "name": "python",
18 | "nbconvert_exporter": "python",
19 | "pygments_lexer": "ipython3",
20 | "version": "3.7.5"
21 | },
22 | "colab": {
23 | "name": "Calculate-Intrinsic-Value.ipynb",
24 | "provenance": [],
25 | "collapsed_sections": []
26 | }
27 | },
28 | "cells": [
29 | {
30 | "cell_type": "code",
31 | "metadata": {
32 | "id": "vKmWaIZht5MF",
33 | "colab_type": "code",
34 | "colab": {}
35 | },
36 | "source": [
37 | "import pandas as pd"
38 | ],
39 | "execution_count": 0,
40 | "outputs": []
41 | },
42 | {
43 | "cell_type": "markdown",
44 | "metadata": {
45 | "id": "o9cWlM8ft5MP",
46 | "colab_type": "text"
47 | },
48 | "source": [
49 | "### Import Data"
50 | ]
51 | },
52 | {
53 | "cell_type": "code",
54 | "metadata": {
55 | "id": "Y1q7r9qJt5MS",
56 | "colab_type": "code",
57 | "colab": {}
58 | },
59 | "source": [
60 | "# Load Data\n",
61 | "aapl = pd.read_csv('https://raw.githubusercontent.com/RyC37/Value-Investing-In-Python/master/data/aapl_concise.csv', index_col='Unnamed: 0')"
62 | ],
63 | "execution_count": 0,
64 | "outputs": []
65 | },
66 | {
67 | "cell_type": "code",
68 | "metadata": {
69 | "id": "TkicZvIjt5MY",
70 | "colab_type": "code",
71 | "outputId": "74fc251f-4569-42d3-f84d-7135f7999c81",
72 | "colab": {}
73 | },
74 | "source": [
75 | "aapl.head()"
76 | ],
77 | "execution_count": 0,
78 | "outputs": [
79 | {
80 | "output_type": "execute_result",
81 | "data": {
82 | "text/html": [
83 | "
\n",
84 | "\n",
97 | "
\n",
98 | " \n",
99 | " \n",
100 | " \n",
101 | " shares_outstanding \n",
102 | " earning_per_share \n",
103 | " dividend_rate \n",
104 | " dividend_yield \n",
105 | " debt_to_equity \n",
106 | " book_value_per_share \n",
107 | " return_on_equity \n",
108 | " current_ratio \n",
109 | " \n",
110 | " \n",
111 | " \n",
112 | " \n",
113 | " 2010-09 \n",
114 | " 6,473 \n",
115 | " 2.16 \n",
116 | " NaN \n",
117 | " NaN \n",
118 | " NaN \n",
119 | " 7.45 \n",
120 | " 35.28 \n",
121 | " 2.01 \n",
122 | " \n",
123 | " \n",
124 | " 2011-09 \n",
125 | " 6,557 \n",
126 | " 3.95 \n",
127 | " NaN \n",
128 | " NaN \n",
129 | " NaN \n",
130 | " 11.78 \n",
131 | " 41.67 \n",
132 | " 1.61 \n",
133 | " \n",
134 | " \n",
135 | " 2012-09 \n",
136 | " 6,617 \n",
137 | " 6.31 \n",
138 | " 0.38 \n",
139 | " NaN \n",
140 | " NaN \n",
141 | " 16.99 \n",
142 | " 42.84 \n",
143 | " 1.50 \n",
144 | " \n",
145 | " \n",
146 | " 2013-09 \n",
147 | " 6,522 \n",
148 | " 5.68 \n",
149 | " 1.63 \n",
150 | " 27.4 \n",
151 | " 0.14 \n",
152 | " 19.60 \n",
153 | " 30.64 \n",
154 | " 1.68 \n",
155 | " \n",
156 | " \n",
157 | " 2014-09 \n",
158 | " 6,123 \n",
159 | " 6.45 \n",
160 | " 1.81 \n",
161 | " 28.5 \n",
162 | " 0.26 \n",
163 | " 20.62 \n",
164 | " 33.61 \n",
165 | " 1.08 \n",
166 | " \n",
167 | " \n",
168 | "
\n",
169 | "
"
170 | ],
171 | "text/plain": [
172 | " shares_outstanding earning_per_share dividend_rate dividend_yield \\\n",
173 | "2010-09 6,473 2.16 NaN NaN \n",
174 | "2011-09 6,557 3.95 NaN NaN \n",
175 | "2012-09 6,617 6.31 0.38 NaN \n",
176 | "2013-09 6,522 5.68 1.63 27.4 \n",
177 | "2014-09 6,123 6.45 1.81 28.5 \n",
178 | "\n",
179 | " debt_to_equity book_value_per_share return_on_equity current_ratio \n",
180 | "2010-09 NaN 7.45 35.28 2.01 \n",
181 | "2011-09 NaN 11.78 41.67 1.61 \n",
182 | "2012-09 NaN 16.99 42.84 1.50 \n",
183 | "2013-09 0.14 19.60 30.64 1.68 \n",
184 | "2014-09 0.26 20.62 33.61 1.08 "
185 | ]
186 | },
187 | "metadata": {
188 | "tags": []
189 | },
190 | "execution_count": 7
191 | }
192 | ]
193 | },
194 | {
195 | "cell_type": "markdown",
196 | "metadata": {
197 | "id": "KUnVi0fzt5Mg",
198 | "colab_type": "text"
199 | },
200 | "source": [
201 | "### Calculate Intrinsic Value (Simple way)\n",
202 | "\n",
203 | "##### (1) Estimate future dividends"
204 | ]
205 | },
206 | {
207 | "cell_type": "code",
208 | "metadata": {
209 | "id": "JJzRV2RCt5Mi",
210 | "colab_type": "code",
211 | "outputId": "6bd9717b-d02e-453f-dcb8-aa6d0f827bc7",
212 | "colab": {}
213 | },
214 | "source": [
215 | "# Last 10-year's average dividends\n",
216 | "dvd_avg = aapl['dividend_rate'].mean()\n",
217 | "print(dvd_avg)"
218 | ],
219 | "execution_count": 0,
220 | "outputs": [
221 | {
222 | "output_type": "stream",
223 | "text": [
224 | "2.1222222222222222\n"
225 | ],
226 | "name": "stdout"
227 | }
228 | ]
229 | },
230 | {
231 | "cell_type": "code",
232 | "metadata": {
233 | "id": "J3gkQqyht5Mm",
234 | "colab_type": "code",
235 | "outputId": "2f5a9031-bc56-465b-d322-1740969d5eae",
236 | "colab": {}
237 | },
238 | "source": [
239 | "risk_free_rate = 0.0179\n",
240 | "# The discounted capital for the dividend of 3-year later\n",
241 | "dvd_avg/(1+risk_free_rate)**3\n",
242 | "# The discounted capital for the dividend of 10-year later\n",
243 | "# dvd_avg/(1+risk_free_rate)**10"
244 | ],
245 | "execution_count": 0,
246 | "outputs": [
247 | {
248 | "output_type": "execute_result",
249 | "data": {
250 | "text/plain": [
251 | "2.0122202476874578"
252 | ]
253 | },
254 | "metadata": {
255 | "tags": []
256 | },
257 | "execution_count": 31
258 | }
259 | ]
260 | },
261 | {
262 | "cell_type": "code",
263 | "metadata": {
264 | "id": "OwiDxfWgt5Mr",
265 | "colab_type": "code",
266 | "outputId": "af6fd92a-04f8-4ebf-c75d-6968c801fd76",
267 | "colab": {}
268 | },
269 | "source": [
270 | "dvd_total = 0\n",
271 | "for i in range(1,11):\n",
272 | " dvd_total = dvd_total + dvd_avg/(1+risk_free_rate)**i\n",
273 | "print(dvd_total)"
274 | ],
275 | "execution_count": 0,
276 | "outputs": [
277 | {
278 | "output_type": "stream",
279 | "text": [
280 | "19.27420500514451\n"
281 | ],
282 | "name": "stdout"
283 | }
284 | ]
285 | },
286 | {
287 | "cell_type": "markdown",
288 | "metadata": {
289 | "id": "HdPRblpSt5My",
290 | "colab_type": "text"
291 | },
292 | "source": [
293 | "##### (2) Estimate future book value"
294 | ]
295 | },
296 | {
297 | "cell_type": "code",
298 | "metadata": {
299 | "id": "3_gnH46zt5Mz",
300 | "colab_type": "code",
301 | "colab": {}
302 | },
303 | "source": [
304 | "# Average growth rate\n",
305 | "book_value = aapl['book_value_per_share']"
306 | ],
307 | "execution_count": 0,
308 | "outputs": []
309 | },
310 | {
311 | "cell_type": "code",
312 | "metadata": {
313 | "id": "2NY9FN6Vt5M3",
314 | "colab_type": "code",
315 | "outputId": "6f48dd0e-df08-4ed2-ae83-a86a58af6119",
316 | "colab": {}
317 | },
318 | "source": [
319 | "# 9th root\n",
320 | "book_value = aapl['book_value_per_share']\n",
321 | "growth_rate_of_9y= book_value['2019-09']/book_value['2010-09']\n",
322 | "avg_growth_rate = growth_rate_of_9y**(1/9)\n",
323 | "print(avg_growth_rate)"
324 | ],
325 | "execution_count": 0,
326 | "outputs": [
327 | {
328 | "output_type": "stream",
329 | "text": [
330 | "1.1261895823169403\n"
331 | ],
332 | "name": "stdout"
333 | }
334 | ]
335 | },
336 | {
337 | "cell_type": "code",
338 | "metadata": {
339 | "id": "RRj0EFept5M5",
340 | "colab_type": "code",
341 | "outputId": "7c356ff7-aca7-4253-cd9f-8c91f0fa07ae",
342 | "colab": {}
343 | },
344 | "source": [
345 | "# Book value per share in next 10 years\n",
346 | "bvps_pred = book_value['2019-09']*(growth_rate**10)\n",
347 | "print(bvps_pred)"
348 | ],
349 | "execution_count": 0,
350 | "outputs": [
351 | {
352 | "output_type": "stream",
353 | "text": [
354 | "63.26497986577179\n"
355 | ],
356 | "name": "stdout"
357 | }
358 | ]
359 | },
360 | {
361 | "cell_type": "markdown",
362 | "metadata": {
363 | "id": "5_6dXpsft5M-",
364 | "colab_type": "text"
365 | },
366 | "source": [
367 | "##### (3) Combine 2 parts"
368 | ]
369 | },
370 | {
371 | "cell_type": "code",
372 | "metadata": {
373 | "id": "9h0wN_6Nt5NB",
374 | "colab_type": "code",
375 | "outputId": "2e0c48ab-b147-4aa3-f349-567cbd132cb3",
376 | "colab": {}
377 | },
378 | "source": [
379 | "aapl_intrinsic = bvps_pred + dvd_total\n",
380 | "print(aapl_intrinsic)"
381 | ],
382 | "execution_count": 0,
383 | "outputs": [
384 | {
385 | "output_type": "stream",
386 | "text": [
387 | "82.5391848709163\n"
388 | ],
389 | "name": "stdout"
390 | }
391 | ]
392 | },
393 | {
394 | "cell_type": "code",
395 | "metadata": {
396 | "id": "3ISxO0nZt5NG",
397 | "colab_type": "code",
398 | "colab": {}
399 | },
400 | "source": [
401 | "# ignore TTM for now\n",
402 | "aapl = aapl.drop(aapl.tail(1).index)"
403 | ],
404 | "execution_count": 0,
405 | "outputs": []
406 | },
407 | {
408 | "cell_type": "code",
409 | "metadata": {
410 | "id": "m-KJxMd3t5NN",
411 | "colab_type": "code",
412 | "outputId": "9aedf36c-e247-4745-8087-b4385fd24723",
413 | "colab": {}
414 | },
415 | "source": [
416 | "aapl['dividend_rate'].plot(figsize=(10,6), title=\"Apple's Dividends in Last 10 Years\")"
417 | ],
418 | "execution_count": 0,
419 | "outputs": [
420 | {
421 | "output_type": "execute_result",
422 | "data": {
423 | "text/plain": [
424 | ""
425 | ]
426 | },
427 | "metadata": {
428 | "tags": []
429 | },
430 | "execution_count": 56
431 | },
432 | {
433 | "output_type": "display_data",
434 | "data": {
435 | "image/png": "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\n",
436 | "text/plain": [
437 | ""
438 | ]
439 | },
440 | "metadata": {
441 | "tags": [],
442 | "needs_background": "light"
443 | }
444 | }
445 | ]
446 | },
447 | {
448 | "cell_type": "code",
449 | "metadata": {
450 | "id": "yE50TSvyt5NP",
451 | "colab_type": "code",
452 | "outputId": "0a382879-45fd-49d2-bb18-a14f420c2c21",
453 | "colab": {}
454 | },
455 | "source": [
456 | "aapl['book_value_per_share'].plot(figsize=(10,6), title=\"Apple's Book Value in Last 10 Years\")"
457 | ],
458 | "execution_count": 0,
459 | "outputs": [
460 | {
461 | "output_type": "execute_result",
462 | "data": {
463 | "text/plain": [
464 | ""
465 | ]
466 | },
467 | "metadata": {
468 | "tags": []
469 | },
470 | "execution_count": 55
471 | },
472 | {
473 | "output_type": "display_data",
474 | "data": {
475 | "image/png": "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\n",
476 | "text/plain": [
477 | ""
478 | ]
479 | },
480 | "metadata": {
481 | "tags": [],
482 | "needs_background": "light"
483 | }
484 | }
485 | ]
486 | },
487 | {
488 | "cell_type": "markdown",
489 | "metadata": {
490 | "id": "RPNtcnRft5NR",
491 | "colab_type": "text"
492 | },
493 | "source": [
494 | "### Calculate Intrinsic Value using Linear Regression"
495 | ]
496 | },
497 | {
498 | "cell_type": "code",
499 | "metadata": {
500 | "id": "j2kQv859t5NR",
501 | "colab_type": "code",
502 | "colab": {}
503 | },
504 | "source": [
505 | "import statsmodels.api as sm"
506 | ],
507 | "execution_count": 0,
508 | "outputs": []
509 | },
510 | {
511 | "cell_type": "markdown",
512 | "metadata": {
513 | "id": "UN2eyIMkt5NT",
514 | "colab_type": "text"
515 | },
516 | "source": [
517 | "##### (1) House Keeping"
518 | ]
519 | },
520 | {
521 | "cell_type": "code",
522 | "metadata": {
523 | "id": "uCALdjI3t5NT",
524 | "colab_type": "code",
525 | "colab": {}
526 | },
527 | "source": [
528 | "# 'year_index' as the order of the year\n",
529 | "aapl['year_index'] = range(1, len(aapl) + 1)\n",
530 | "# add intercept\n",
531 | "aapl['intercept'] = 1"
532 | ],
533 | "execution_count": 0,
534 | "outputs": []
535 | },
536 | {
537 | "cell_type": "markdown",
538 | "metadata": {
539 | "id": "HMA6aLT6t5NV",
540 | "colab_type": "text"
541 | },
542 | "source": [
543 | "##### (2) Book Value per Share"
544 | ]
545 | },
546 | {
547 | "cell_type": "code",
548 | "metadata": {
549 | "id": "_YCywohOt5NX",
550 | "colab_type": "code",
551 | "colab": {}
552 | },
553 | "source": [
554 | "# modeling\n",
555 | "bvps_model = sm.OLS(aapl['book_value_per_share'], aapl[['year_index','intercept']]).fit()"
556 | ],
557 | "execution_count": 0,
558 | "outputs": []
559 | },
560 | {
561 | "cell_type": "code",
562 | "metadata": {
563 | "id": "34rFjajCt5NY",
564 | "colab_type": "code",
565 | "outputId": "49bdc281-e004-49c9-f156-187e6f5a8e56",
566 | "colab": {}
567 | },
568 | "source": [
569 | "bvps_pred_lr = bvps_model.predict([19,1])[0]\n",
570 | "print(bvps_pred_lr)"
571 | ],
572 | "execution_count": 0,
573 | "outputs": [
574 | {
575 | "output_type": "stream",
576 | "text": [
577 | "41.81709090909092\n"
578 | ],
579 | "name": "stdout"
580 | }
581 | ]
582 | },
583 | {
584 | "cell_type": "markdown",
585 | "metadata": {
586 | "id": "lmJBNOSgt5Na",
587 | "colab_type": "text"
588 | },
589 | "source": [
590 | "##### (3) Dividends"
591 | ]
592 | },
593 | {
594 | "cell_type": "code",
595 | "metadata": {
596 | "id": "XBMbK5KDt5Nb",
597 | "colab_type": "code",
598 | "colab": {}
599 | },
600 | "source": [
601 | "aapl_new = aapl.dropna(subset = ['dividend_rate'])"
602 | ],
603 | "execution_count": 0,
604 | "outputs": []
605 | },
606 | {
607 | "cell_type": "code",
608 | "metadata": {
609 | "id": "gvyaQMKKt5Nd",
610 | "colab_type": "code",
611 | "colab": {}
612 | },
613 | "source": [
614 | "# modeling\n",
615 | "dvd_model = sm.OLS(aapl_new['dividend_rate'], aapl_new[['year_index','intercept']]).fit()"
616 | ],
617 | "execution_count": 0,
618 | "outputs": []
619 | },
620 | {
621 | "cell_type": "code",
622 | "metadata": {
623 | "id": "Fs8FMODet5Nf",
624 | "colab_type": "code",
625 | "outputId": "6fadb7c8-dfbf-4b27-bb2c-a9d002daa4da",
626 | "colab": {}
627 | },
628 | "source": [
629 | "# predict future dvd\n",
630 | "dvd_model.predict([19,1])[0]"
631 | ],
632 | "execution_count": 0,
633 | "outputs": [
634 | {
635 | "output_type": "execute_result",
636 | "data": {
637 | "text/plain": [
638 | "5.845833333333332"
639 | ]
640 | },
641 | "metadata": {
642 | "tags": []
643 | },
644 | "execution_count": 91
645 | }
646 | ]
647 | },
648 | {
649 | "cell_type": "code",
650 | "metadata": {
651 | "id": "CjhxWJ5ft5Nh",
652 | "colab_type": "code",
653 | "outputId": "0ec5e216-bba2-4d89-8299-daaab5facb26",
654 | "colab": {}
655 | },
656 | "source": [
657 | "dvd_total_lr = 0\n",
658 | "current_year_order = 9\n",
659 | "for i in range(1,11):\n",
660 | " dvd_new = dvd_model.predict([current_year_order + i,1])[0]\n",
661 | " dvd_total_lr = dvd_total_lr + dvd_new/(1+risk_free_rate)**i\n",
662 | "print(dvd_total_lr)"
663 | ],
664 | "execution_count": 0,
665 | "outputs": [
666 | {
667 | "output_type": "stream",
668 | "text": [
669 | "40.15163616617433\n"
670 | ],
671 | "name": "stdout"
672 | }
673 | ]
674 | },
675 | {
676 | "cell_type": "code",
677 | "metadata": {
678 | "id": "cZRoLNzft5Nj",
679 | "colab_type": "code",
680 | "outputId": "b41762ef-c7f4-4c23-ea93-30491f982f52",
681 | "colab": {}
682 | },
683 | "source": [
684 | "aapl_intrinsic_lr = dvd_total_lr + bvps_pred_lr\n",
685 | "print(aapl_intrinsic_lr)"
686 | ],
687 | "execution_count": 0,
688 | "outputs": [
689 | {
690 | "output_type": "stream",
691 | "text": [
692 | "81.96872707526525\n"
693 | ],
694 | "name": "stdout"
695 | }
696 | ]
697 | }
698 | ]
699 | }
--------------------------------------------------------------------------------
/code/Calculating_Stock_Metrics.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "kernelspec": {
6 | "display_name": "Python 3",
7 | "language": "python",
8 | "name": "python3"
9 | },
10 | "language_info": {
11 | "codemirror_mode": {
12 | "name": "ipython",
13 | "version": 3
14 | },
15 | "file_extension": ".py",
16 | "mimetype": "text/x-python",
17 | "name": "python",
18 | "nbconvert_exporter": "python",
19 | "pygments_lexer": "ipython3",
20 | "version": "3.7.5"
21 | },
22 | "colab": {
23 | "name": "Calculating-Stock-Metrics.ipynb",
24 | "provenance": [],
25 | "include_colab_link": true
26 | }
27 | },
28 | "cells": [
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {
32 | "id": "view-in-github",
33 | "colab_type": "text"
34 | },
35 | "source": [
36 | " "
37 | ]
38 | },
39 | {
40 | "cell_type": "code",
41 | "metadata": {
42 | "id": "pUVMRN-3IJU7",
43 | "colab_type": "code",
44 | "colab": {}
45 | },
46 | "source": [
47 | "import pandas as pd\n",
48 | "!pip install yfinance\n",
49 | "import yfinance as yf"
50 | ],
51 | "execution_count": 0,
52 | "outputs": []
53 | },
54 | {
55 | "cell_type": "markdown",
56 | "metadata": {
57 | "id": "YbpgXGAJIJVE",
58 | "colab_type": "text"
59 | },
60 | "source": [
61 | "### 1.Load Data"
62 | ]
63 | },
64 | {
65 | "cell_type": "code",
66 | "metadata": {
67 | "id": "7uaPKUZHIJVH",
68 | "colab_type": "code",
69 | "colab": {}
70 | },
71 | "source": [
72 | "aapl = pd.read_csv('https://raw.githubusercontent.com/RyC37/Value-Investing-In-Python/master/data/AAPL%20Key%20Ratios.csv', skiprows=2, index_col='Unnamed: 0')"
73 | ],
74 | "execution_count": 0,
75 | "outputs": []
76 | },
77 | {
78 | "cell_type": "code",
79 | "metadata": {
80 | "id": "V3GgVINrIJVM",
81 | "colab_type": "code",
82 | "colab": {
83 | "base_uri": "https://localhost:8080/",
84 | "height": 360
85 | },
86 | "outputId": "84b8da44-ead2-492a-9e1e-54bce1a42fd5"
87 | },
88 | "source": [
89 | "aapl.head()"
90 | ],
91 | "execution_count": 12,
92 | "outputs": [
93 | {
94 | "output_type": "execute_result",
95 | "data": {
96 | "text/html": [
97 | "\n",
98 | "\n",
111 | "
\n",
112 | " \n",
113 | " \n",
114 | " \n",
115 | " 2010-09 \n",
116 | " 2011-09 \n",
117 | " 2012-09 \n",
118 | " 2013-09 \n",
119 | " 2014-09 \n",
120 | " 2015-09 \n",
121 | " 2016-09 \n",
122 | " 2017-09 \n",
123 | " 2018-09 \n",
124 | " 2019-09 \n",
125 | " TTM \n",
126 | " \n",
127 | " \n",
128 | " \n",
129 | " \n",
130 | " Revenue USD Mil \n",
131 | " 65,225 \n",
132 | " 108,249 \n",
133 | " 156,508 \n",
134 | " 170,910 \n",
135 | " 182,795 \n",
136 | " 233,715 \n",
137 | " 215,639 \n",
138 | " 229,234 \n",
139 | " 265,595 \n",
140 | " 260,174 \n",
141 | " 260,174 \n",
142 | " \n",
143 | " \n",
144 | " Gross Margin % \n",
145 | " 39.4 \n",
146 | " 40.5 \n",
147 | " 43.9 \n",
148 | " 37.6 \n",
149 | " 38.6 \n",
150 | " 40.1 \n",
151 | " 39.1 \n",
152 | " 38.5 \n",
153 | " 38.3 \n",
154 | " 37.8 \n",
155 | " 37.8 \n",
156 | " \n",
157 | " \n",
158 | " Operating Income USD Mil \n",
159 | " 18,385 \n",
160 | " 33,790 \n",
161 | " 55,241 \n",
162 | " 48,999 \n",
163 | " 52,503 \n",
164 | " 71,230 \n",
165 | " 60,024 \n",
166 | " 61,344 \n",
167 | " 70,898 \n",
168 | " 63,930 \n",
169 | " 63,930 \n",
170 | " \n",
171 | " \n",
172 | " Operating Margin % \n",
173 | " 28.2 \n",
174 | " 31.2 \n",
175 | " 35.3 \n",
176 | " 28.7 \n",
177 | " 28.7 \n",
178 | " 30.5 \n",
179 | " 27.8 \n",
180 | " 26.8 \n",
181 | " 26.7 \n",
182 | " 24.6 \n",
183 | " 24.6 \n",
184 | " \n",
185 | " \n",
186 | " Net Income USD Mil \n",
187 | " 14,013 \n",
188 | " 25,922 \n",
189 | " 41,733 \n",
190 | " 37,037 \n",
191 | " 39,510 \n",
192 | " 53,394 \n",
193 | " 45,687 \n",
194 | " 48,351 \n",
195 | " 59,531 \n",
196 | " 55,256 \n",
197 | " 55,256 \n",
198 | " \n",
199 | " \n",
200 | "
\n",
201 | "
"
202 | ],
203 | "text/plain": [
204 | " 2010-09 2011-09 2012-09 ... 2018-09 2019-09 TTM\n",
205 | "Revenue USD Mil 65,225 108,249 156,508 ... 265,595 260,174 260,174\n",
206 | "Gross Margin % 39.4 40.5 43.9 ... 38.3 37.8 37.8\n",
207 | "Operating Income USD Mil 18,385 33,790 55,241 ... 70,898 63,930 63,930\n",
208 | "Operating Margin % 28.2 31.2 35.3 ... 26.7 24.6 24.6\n",
209 | "Net Income USD Mil 14,013 25,922 41,733 ... 59,531 55,256 55,256\n",
210 | "\n",
211 | "[5 rows x 11 columns]"
212 | ]
213 | },
214 | "metadata": {
215 | "tags": []
216 | },
217 | "execution_count": 12
218 | }
219 | ]
220 | },
221 | {
222 | "cell_type": "markdown",
223 | "metadata": {
224 | "id": "AYdrkRSRIJVT",
225 | "colab_type": "text"
226 | },
227 | "source": [
228 | "### 2.Read Metrics From Financial Data\n",
229 | "\n",
230 | "##### (1)Shares Outstanding"
231 | ]
232 | },
233 | {
234 | "cell_type": "code",
235 | "metadata": {
236 | "id": "j_vFXw--IJVU",
237 | "colab_type": "code",
238 | "colab": {
239 | "base_uri": "https://localhost:8080/",
240 | "height": 34
241 | },
242 | "outputId": "fc6f0543-f630-4026-d01e-aa40cdb0487b"
243 | },
244 | "source": [
245 | "# Read the latest data point\n",
246 | "aapl.loc['Shares Mil', '2019-09']"
247 | ],
248 | "execution_count": 13,
249 | "outputs": [
250 | {
251 | "output_type": "execute_result",
252 | "data": {
253 | "text/plain": [
254 | "'4,649'"
255 | ]
256 | },
257 | "metadata": {
258 | "tags": []
259 | },
260 | "execution_count": 13
261 | }
262 | ]
263 | },
264 | {
265 | "cell_type": "code",
266 | "metadata": {
267 | "id": "cEnOFDWVIJVa",
268 | "colab_type": "code",
269 | "colab": {
270 | "base_uri": "https://localhost:8080/",
271 | "height": 34
272 | },
273 | "outputId": "2d0f567f-2cdb-4d13-f89d-3274afe6c5ef"
274 | },
275 | "source": [
276 | "# Convert to number, could also use int()\n",
277 | "float(aapl.loc['Shares Mil', '2019-09'].replace(',',''))"
278 | ],
279 | "execution_count": 14,
280 | "outputs": [
281 | {
282 | "output_type": "execute_result",
283 | "data": {
284 | "text/plain": [
285 | "4649.0"
286 | ]
287 | },
288 | "metadata": {
289 | "tags": []
290 | },
291 | "execution_count": 14
292 | }
293 | ]
294 | },
295 | {
296 | "cell_type": "code",
297 | "metadata": {
298 | "id": "W3kum0TuIJVh",
299 | "colab_type": "code",
300 | "colab": {
301 | "base_uri": "https://localhost:8080/",
302 | "height": 221
303 | },
304 | "outputId": "bfec8eca-f699-4bbf-e5c1-40f531ff727e"
305 | },
306 | "source": [
307 | "# Read the historical data\n",
308 | "aapl.loc['Shares Mil', ]"
309 | ],
310 | "execution_count": 15,
311 | "outputs": [
312 | {
313 | "output_type": "execute_result",
314 | "data": {
315 | "text/plain": [
316 | "2010-09 6,473\n",
317 | "2011-09 6,557\n",
318 | "2012-09 6,617\n",
319 | "2013-09 6,522\n",
320 | "2014-09 6,123\n",
321 | "2015-09 5,793\n",
322 | "2016-09 5,500\n",
323 | "2017-09 5,252\n",
324 | "2018-09 5,000\n",
325 | "2019-09 4,649\n",
326 | "TTM 4,649\n",
327 | "Name: Shares Mil, dtype: object"
328 | ]
329 | },
330 | "metadata": {
331 | "tags": []
332 | },
333 | "execution_count": 15
334 | }
335 | ]
336 | },
337 | {
338 | "cell_type": "code",
339 | "metadata": {
340 | "id": "24xzTg-oIJVo",
341 | "colab_type": "code",
342 | "colab": {
343 | "base_uri": "https://localhost:8080/",
344 | "height": 221
345 | },
346 | "outputId": "a50446d8-3aa5-4c79-9a0e-34481cd2e0bd"
347 | },
348 | "source": [
349 | "# Convert data type to float\n",
350 | "aapl.loc['Shares Mil', ].str.replace(',','').astype(float)"
351 | ],
352 | "execution_count": 16,
353 | "outputs": [
354 | {
355 | "output_type": "execute_result",
356 | "data": {
357 | "text/plain": [
358 | "2010-09 6473.0\n",
359 | "2011-09 6557.0\n",
360 | "2012-09 6617.0\n",
361 | "2013-09 6522.0\n",
362 | "2014-09 6123.0\n",
363 | "2015-09 5793.0\n",
364 | "2016-09 5500.0\n",
365 | "2017-09 5252.0\n",
366 | "2018-09 5000.0\n",
367 | "2019-09 4649.0\n",
368 | "TTM 4649.0\n",
369 | "Name: Shares Mil, dtype: float64"
370 | ]
371 | },
372 | "metadata": {
373 | "tags": []
374 | },
375 | "execution_count": 16
376 | }
377 | ]
378 | },
379 | {
380 | "cell_type": "markdown",
381 | "metadata": {
382 | "id": "UqttGWPBIJVv",
383 | "colab_type": "text"
384 | },
385 | "source": [
386 | "##### (2)EPS"
387 | ]
388 | },
389 | {
390 | "cell_type": "code",
391 | "metadata": {
392 | "id": "sN3kc5ERIJVw",
393 | "colab_type": "code",
394 | "colab": {
395 | "base_uri": "https://localhost:8080/",
396 | "height": 34
397 | },
398 | "outputId": "aab3de88-f291-41b3-a5d9-e701db0b3a65"
399 | },
400 | "source": [
401 | "float(aapl.loc['Earnings Per Share USD', '2019-09'])"
402 | ],
403 | "execution_count": 17,
404 | "outputs": [
405 | {
406 | "output_type": "execute_result",
407 | "data": {
408 | "text/plain": [
409 | "11.89"
410 | ]
411 | },
412 | "metadata": {
413 | "tags": []
414 | },
415 | "execution_count": 17
416 | }
417 | ]
418 | },
419 | {
420 | "cell_type": "code",
421 | "metadata": {
422 | "id": "dxPWUzEWIJVy",
423 | "colab_type": "code",
424 | "colab": {
425 | "base_uri": "https://localhost:8080/",
426 | "height": 221
427 | },
428 | "outputId": "ae592d52-adf9-41a9-a422-3263b9916a69"
429 | },
430 | "source": [
431 | "aapl.loc['Earnings Per Share USD', ].astype(float)"
432 | ],
433 | "execution_count": 18,
434 | "outputs": [
435 | {
436 | "output_type": "execute_result",
437 | "data": {
438 | "text/plain": [
439 | "2010-09 2.16\n",
440 | "2011-09 3.95\n",
441 | "2012-09 6.31\n",
442 | "2013-09 5.68\n",
443 | "2014-09 6.45\n",
444 | "2015-09 9.22\n",
445 | "2016-09 8.31\n",
446 | "2017-09 9.21\n",
447 | "2018-09 11.91\n",
448 | "2019-09 11.89\n",
449 | "TTM 11.89\n",
450 | "Name: Earnings Per Share USD, dtype: float64"
451 | ]
452 | },
453 | "metadata": {
454 | "tags": []
455 | },
456 | "execution_count": 18
457 | }
458 | ]
459 | },
460 | {
461 | "cell_type": "markdown",
462 | "metadata": {
463 | "id": "OdZJbvJgIJV3",
464 | "colab_type": "text"
465 | },
466 | "source": [
467 | "##### (3)Dividend Rate"
468 | ]
469 | },
470 | {
471 | "cell_type": "code",
472 | "metadata": {
473 | "id": "sLaNDRjJIJV4",
474 | "colab_type": "code",
475 | "colab": {}
476 | },
477 | "source": [
478 | "def search_value(index_name, date):\n",
479 | " '''This function return a specific stock metric of at a specific date\n",
480 | " from aapl dataframe\n",
481 | " '''\n",
482 | " return float(aapl.loc[index_name, date])"
483 | ],
484 | "execution_count": 0,
485 | "outputs": []
486 | },
487 | {
488 | "cell_type": "code",
489 | "metadata": {
490 | "id": "YGck0iJLIJV_",
491 | "colab_type": "code",
492 | "colab": {
493 | "base_uri": "https://localhost:8080/",
494 | "height": 34
495 | },
496 | "outputId": "07980dfc-a1e0-464f-b44a-aac71e719f6c"
497 | },
498 | "source": [
499 | "search_value('Dividends USD', '2019-09')"
500 | ],
501 | "execution_count": 20,
502 | "outputs": [
503 | {
504 | "output_type": "execute_result",
505 | "data": {
506 | "text/plain": [
507 | "3.0"
508 | ]
509 | },
510 | "metadata": {
511 | "tags": []
512 | },
513 | "execution_count": 20
514 | }
515 | ]
516 | },
517 | {
518 | "cell_type": "code",
519 | "metadata": {
520 | "id": "sa0SIZO7IJWB",
521 | "colab_type": "code",
522 | "colab": {}
523 | },
524 | "source": [
525 | "def historical_value(index_name):\n",
526 | " return aapl.loc[index_name, ].astype(float)"
527 | ],
528 | "execution_count": 0,
529 | "outputs": []
530 | },
531 | {
532 | "cell_type": "code",
533 | "metadata": {
534 | "id": "lBuLI-XmIJWD",
535 | "colab_type": "code",
536 | "colab": {
537 | "base_uri": "https://localhost:8080/",
538 | "height": 221
539 | },
540 | "outputId": "966f7c3f-11aa-46ae-f05e-83215b7e778e"
541 | },
542 | "source": [
543 | "historical_value('Dividends USD')"
544 | ],
545 | "execution_count": 22,
546 | "outputs": [
547 | {
548 | "output_type": "execute_result",
549 | "data": {
550 | "text/plain": [
551 | "2010-09 NaN\n",
552 | "2011-09 NaN\n",
553 | "2012-09 0.38\n",
554 | "2013-09 1.63\n",
555 | "2014-09 1.81\n",
556 | "2015-09 1.98\n",
557 | "2016-09 2.18\n",
558 | "2017-09 2.40\n",
559 | "2018-09 2.72\n",
560 | "2019-09 3.00\n",
561 | "TTM 3.00\n",
562 | "Name: Dividends USD, dtype: float64"
563 | ]
564 | },
565 | "metadata": {
566 | "tags": []
567 | },
568 | "execution_count": 22
569 | }
570 | ]
571 | },
572 | {
573 | "cell_type": "code",
574 | "metadata": {
575 | "id": "iggPHMMBIJWF",
576 | "colab_type": "code",
577 | "colab": {}
578 | },
579 | "source": [
580 | "# NaN manipulation will be introduced later"
581 | ],
582 | "execution_count": 0,
583 | "outputs": []
584 | },
585 | {
586 | "cell_type": "markdown",
587 | "metadata": {
588 | "id": "6IrS3Vk1IJWG",
589 | "colab_type": "text"
590 | },
591 | "source": [
592 | "##### (4)Dividend Yield"
593 | ]
594 | },
595 | {
596 | "cell_type": "code",
597 | "metadata": {
598 | "id": "rBBJbfElIJWI",
599 | "colab_type": "code",
600 | "colab": {
601 | "base_uri": "https://localhost:8080/",
602 | "height": 34
603 | },
604 | "outputId": "73402a6a-589a-4dca-92c8-2fafdb1900ec"
605 | },
606 | "source": [
607 | "search_value('Payout Ratio % *', '2019-09')"
608 | ],
609 | "execution_count": 24,
610 | "outputs": [
611 | {
612 | "output_type": "execute_result",
613 | "data": {
614 | "text/plain": [
615 | "25.1"
616 | ]
617 | },
618 | "metadata": {
619 | "tags": []
620 | },
621 | "execution_count": 24
622 | }
623 | ]
624 | },
625 | {
626 | "cell_type": "code",
627 | "metadata": {
628 | "id": "YPvaan_AIJWM",
629 | "colab_type": "code",
630 | "colab": {
631 | "base_uri": "https://localhost:8080/",
632 | "height": 221
633 | },
634 | "outputId": "e148542b-31d0-4ae2-8cb8-4b5d98c62085"
635 | },
636 | "source": [
637 | "historical_value('Payout Ratio % *')"
638 | ],
639 | "execution_count": 25,
640 | "outputs": [
641 | {
642 | "output_type": "execute_result",
643 | "data": {
644 | "text/plain": [
645 | "2010-09 NaN\n",
646 | "2011-09 NaN\n",
647 | "2012-09 NaN\n",
648 | "2013-09 27.4\n",
649 | "2014-09 28.5\n",
650 | "2015-09 22.3\n",
651 | "2016-09 24.8\n",
652 | "2017-09 26.5\n",
653 | "2018-09 23.7\n",
654 | "2019-09 25.1\n",
655 | "TTM 25.2\n",
656 | "Name: Payout Ratio % *, dtype: float64"
657 | ]
658 | },
659 | "metadata": {
660 | "tags": []
661 | },
662 | "execution_count": 25
663 | }
664 | ]
665 | },
666 | {
667 | "cell_type": "markdown",
668 | "metadata": {
669 | "id": "t5MmSkvwIJWO",
670 | "colab_type": "text"
671 | },
672 | "source": [
673 | "##### (5)Debt/Equity Ratio"
674 | ]
675 | },
676 | {
677 | "cell_type": "code",
678 | "metadata": {
679 | "id": "GsK8JpzXIJWO",
680 | "colab_type": "code",
681 | "colab": {
682 | "base_uri": "https://localhost:8080/",
683 | "height": 34
684 | },
685 | "outputId": "d6effc84-92da-4a68-a0b2-6b0e459bde39"
686 | },
687 | "source": [
688 | "search_value('Debt/Equity', '2019-09')"
689 | ],
690 | "execution_count": 26,
691 | "outputs": [
692 | {
693 | "output_type": "execute_result",
694 | "data": {
695 | "text/plain": [
696 | "1.01"
697 | ]
698 | },
699 | "metadata": {
700 | "tags": []
701 | },
702 | "execution_count": 26
703 | }
704 | ]
705 | },
706 | {
707 | "cell_type": "code",
708 | "metadata": {
709 | "id": "arXQQOGVIJWQ",
710 | "colab_type": "code",
711 | "colab": {
712 | "base_uri": "https://localhost:8080/",
713 | "height": 221
714 | },
715 | "outputId": "fc10a2b3-3a2e-44f2-f355-416dfd8798a0"
716 | },
717 | "source": [
718 | "historical_value('Debt/Equity')"
719 | ],
720 | "execution_count": 27,
721 | "outputs": [
722 | {
723 | "output_type": "execute_result",
724 | "data": {
725 | "text/plain": [
726 | "2010-09 NaN\n",
727 | "2011-09 NaN\n",
728 | "2012-09 NaN\n",
729 | "2013-09 0.14\n",
730 | "2014-09 0.26\n",
731 | "2015-09 0.45\n",
732 | "2016-09 0.59\n",
733 | "2017-09 0.73\n",
734 | "2018-09 0.87\n",
735 | "2019-09 1.01\n",
736 | "TTM 1.01\n",
737 | "Name: Debt/Equity, dtype: float64"
738 | ]
739 | },
740 | "metadata": {
741 | "tags": []
742 | },
743 | "execution_count": 27
744 | }
745 | ]
746 | },
747 | {
748 | "cell_type": "markdown",
749 | "metadata": {
750 | "id": "7KazUwjrIJWT",
751 | "colab_type": "text"
752 | },
753 | "source": [
754 | "##### (6)Book Value Per Share"
755 | ]
756 | },
757 | {
758 | "cell_type": "code",
759 | "metadata": {
760 | "id": "h6RqEP8WIJWU",
761 | "colab_type": "code",
762 | "colab": {
763 | "base_uri": "https://localhost:8080/",
764 | "height": 34
765 | },
766 | "outputId": "922c45d2-db1d-41a5-e603-c4c50f4c5162"
767 | },
768 | "source": [
769 | "search_value('Book Value Per Share * USD', '2019-09')"
770 | ],
771 | "execution_count": 28,
772 | "outputs": [
773 | {
774 | "output_type": "execute_result",
775 | "data": {
776 | "text/plain": [
777 | "21.71"
778 | ]
779 | },
780 | "metadata": {
781 | "tags": []
782 | },
783 | "execution_count": 28
784 | }
785 | ]
786 | },
787 | {
788 | "cell_type": "code",
789 | "metadata": {
790 | "id": "FYlRNB-gIJWW",
791 | "colab_type": "code",
792 | "colab": {
793 | "base_uri": "https://localhost:8080/",
794 | "height": 221
795 | },
796 | "outputId": "d3851fff-ee4a-4c08-9852-8a402c156213"
797 | },
798 | "source": [
799 | "historical_value('Book Value Per Share * USD')"
800 | ],
801 | "execution_count": 29,
802 | "outputs": [
803 | {
804 | "output_type": "execute_result",
805 | "data": {
806 | "text/plain": [
807 | "2010-09 7.45\n",
808 | "2011-09 11.78\n",
809 | "2012-09 16.99\n",
810 | "2013-09 19.60\n",
811 | "2014-09 20.62\n",
812 | "2015-09 22.53\n",
813 | "2016-09 23.71\n",
814 | "2017-09 25.83\n",
815 | "2018-09 24.17\n",
816 | "2019-09 21.71\n",
817 | "TTM 20.64\n",
818 | "Name: Book Value Per Share * USD, dtype: float64"
819 | ]
820 | },
821 | "metadata": {
822 | "tags": []
823 | },
824 | "execution_count": 29
825 | }
826 | ]
827 | },
828 | {
829 | "cell_type": "markdown",
830 | "metadata": {
831 | "id": "JGDD-821IJWZ",
832 | "colab_type": "text"
833 | },
834 | "source": [
835 | "##### (7)ROE (Return on Equity)"
836 | ]
837 | },
838 | {
839 | "cell_type": "code",
840 | "metadata": {
841 | "id": "a_5z0KgZIJWZ",
842 | "colab_type": "code",
843 | "colab": {
844 | "base_uri": "https://localhost:8080/",
845 | "height": 34
846 | },
847 | "outputId": "db1ad314-2bad-479b-e5fa-82a71651c013"
848 | },
849 | "source": [
850 | "search_value('Return on Equity %', '2019-09')"
851 | ],
852 | "execution_count": 30,
853 | "outputs": [
854 | {
855 | "output_type": "execute_result",
856 | "data": {
857 | "text/plain": [
858 | "55.92"
859 | ]
860 | },
861 | "metadata": {
862 | "tags": []
863 | },
864 | "execution_count": 30
865 | }
866 | ]
867 | },
868 | {
869 | "cell_type": "code",
870 | "metadata": {
871 | "id": "RTYuiIBpIJWb",
872 | "colab_type": "code",
873 | "colab": {
874 | "base_uri": "https://localhost:8080/",
875 | "height": 221
876 | },
877 | "outputId": "7e7c41f5-1365-4925-d933-81ebf2cd65b6"
878 | },
879 | "source": [
880 | "historical_value('Return on Equity %')"
881 | ],
882 | "execution_count": 31,
883 | "outputs": [
884 | {
885 | "output_type": "execute_result",
886 | "data": {
887 | "text/plain": [
888 | "2010-09 35.28\n",
889 | "2011-09 41.67\n",
890 | "2012-09 42.84\n",
891 | "2013-09 30.64\n",
892 | "2014-09 33.61\n",
893 | "2015-09 46.25\n",
894 | "2016-09 36.90\n",
895 | "2017-09 36.87\n",
896 | "2018-09 49.36\n",
897 | "2019-09 55.92\n",
898 | "TTM 55.92\n",
899 | "Name: Return on Equity %, dtype: float64"
900 | ]
901 | },
902 | "metadata": {
903 | "tags": []
904 | },
905 | "execution_count": 31
906 | }
907 | ]
908 | },
909 | {
910 | "cell_type": "markdown",
911 | "metadata": {
912 | "id": "okzk5BQrIJWd",
913 | "colab_type": "text"
914 | },
915 | "source": [
916 | "##### (8)Current Ratio"
917 | ]
918 | },
919 | {
920 | "cell_type": "code",
921 | "metadata": {
922 | "id": "ynvMbpk0IJWd",
923 | "colab_type": "code",
924 | "colab": {
925 | "base_uri": "https://localhost:8080/",
926 | "height": 34
927 | },
928 | "outputId": "6e6c5ef3-8105-4d5d-b25a-57d87d6e6c6a"
929 | },
930 | "source": [
931 | "search_value('Current Ratio', '2019-09')"
932 | ],
933 | "execution_count": 32,
934 | "outputs": [
935 | {
936 | "output_type": "execute_result",
937 | "data": {
938 | "text/plain": [
939 | "1.54"
940 | ]
941 | },
942 | "metadata": {
943 | "tags": []
944 | },
945 | "execution_count": 32
946 | }
947 | ]
948 | },
949 | {
950 | "cell_type": "code",
951 | "metadata": {
952 | "id": "m09tKRPqIJWf",
953 | "colab_type": "code",
954 | "colab": {
955 | "base_uri": "https://localhost:8080/",
956 | "height": 221
957 | },
958 | "outputId": "78660853-ab7b-439f-c3a7-c812cfd922f6"
959 | },
960 | "source": [
961 | "historical_value('Current Ratio')"
962 | ],
963 | "execution_count": 33,
964 | "outputs": [
965 | {
966 | "output_type": "execute_result",
967 | "data": {
968 | "text/plain": [
969 | "2010-09 2.01\n",
970 | "2011-09 1.61\n",
971 | "2012-09 1.50\n",
972 | "2013-09 1.68\n",
973 | "2014-09 1.08\n",
974 | "2015-09 1.11\n",
975 | "2016-09 1.35\n",
976 | "2017-09 1.28\n",
977 | "2018-09 1.12\n",
978 | "2019-09 1.54\n",
979 | "TTM 1.54\n",
980 | "Name: Current Ratio, dtype: float64"
981 | ]
982 | },
983 | "metadata": {
984 | "tags": []
985 | },
986 | "execution_count": 33
987 | }
988 | ]
989 | },
990 | {
991 | "cell_type": "markdown",
992 | "metadata": {
993 | "id": "miWi8QhJIJWh",
994 | "colab_type": "text"
995 | },
996 | "source": [
997 | "### 3.Get Stock Price"
998 | ]
999 | },
1000 | {
1001 | "cell_type": "code",
1002 | "metadata": {
1003 | "id": "ohiyR2huIJWh",
1004 | "colab_type": "code",
1005 | "colab": {}
1006 | },
1007 | "source": [
1008 | "apple = yf.Ticker('AAPL')"
1009 | ],
1010 | "execution_count": 0,
1011 | "outputs": []
1012 | },
1013 | {
1014 | "cell_type": "code",
1015 | "metadata": {
1016 | "id": "G2eWT2MCIJWi",
1017 | "colab_type": "code",
1018 | "colab": {}
1019 | },
1020 | "source": [
1021 | "apple_price = apple.history(period='max')"
1022 | ],
1023 | "execution_count": 0,
1024 | "outputs": []
1025 | },
1026 | {
1027 | "cell_type": "markdown",
1028 | "metadata": {
1029 | "id": "7P0lQIxeIJWj",
1030 | "colab_type": "text"
1031 | },
1032 | "source": [
1033 | "### 4.Calculate P/E & P/BV\n",
1034 | "\n",
1035 | "##### (1) Latest P/E"
1036 | ]
1037 | },
1038 | {
1039 | "cell_type": "code",
1040 | "metadata": {
1041 | "id": "NO-ekSyoIJWk",
1042 | "colab_type": "code",
1043 | "colab": {
1044 | "base_uri": "https://localhost:8080/",
1045 | "height": 34
1046 | },
1047 | "outputId": "c33fac86-41ba-4b20-fbf8-9038f6fdbdd8"
1048 | },
1049 | "source": [
1050 | "latest_price = apple_price.loc['2020-01-14','Close']\n",
1051 | "latest_eps = search_value('Earnings Per Share USD', '2019-09')\n",
1052 | "latest_PtoE = latest_price/latest_eps\n",
1053 | "print(latest_PtoE)"
1054 | ],
1055 | "execution_count": 36,
1056 | "outputs": [
1057 | {
1058 | "output_type": "stream",
1059 | "text": [
1060 | "26.297729184188395\n"
1061 | ],
1062 | "name": "stdout"
1063 | }
1064 | ]
1065 | },
1066 | {
1067 | "cell_type": "markdown",
1068 | "metadata": {
1069 | "id": "3sYRzw9OIJWl",
1070 | "colab_type": "text"
1071 | },
1072 | "source": [
1073 | "##### (2) Latest P/BV"
1074 | ]
1075 | },
1076 | {
1077 | "cell_type": "code",
1078 | "metadata": {
1079 | "id": "UlF_ATanIJWl",
1080 | "colab_type": "code",
1081 | "colab": {
1082 | "base_uri": "https://localhost:8080/",
1083 | "height": 34
1084 | },
1085 | "outputId": "fa22cd43-dcee-47d8-ddf5-49c190d620c3"
1086 | },
1087 | "source": [
1088 | "latest_price = apple_price.loc['2020-01-14','Close']\n",
1089 | "latest_eps = search_value('Book Value Per Share * USD', '2019-09')\n",
1090 | "latest_PtoBV = latest_price/latest_eps\n",
1091 | "print(latest_PtoBV)"
1092 | ],
1093 | "execution_count": 37,
1094 | "outputs": [
1095 | {
1096 | "output_type": "stream",
1097 | "text": [
1098 | "14.402579456471672\n"
1099 | ],
1100 | "name": "stdout"
1101 | }
1102 | ]
1103 | },
1104 | {
1105 | "cell_type": "markdown",
1106 | "metadata": {
1107 | "id": "cf9H7tWeIJWn",
1108 | "colab_type": "text"
1109 | },
1110 | "source": [
1111 | "### 5.Formatting\n",
1112 | "\n",
1113 | "##### (1) Traspose Dataframe\n",
1114 | "For the convenience of calculation, we want to transpose the dataframe. Such that the time would be rows and metrics would be columns."
1115 | ]
1116 | },
1117 | {
1118 | "cell_type": "code",
1119 | "metadata": {
1120 | "id": "kRxRWL1ZIJWn",
1121 | "colab_type": "code",
1122 | "colab": {}
1123 | },
1124 | "source": [
1125 | "aapl = aapl.T"
1126 | ],
1127 | "execution_count": 0,
1128 | "outputs": []
1129 | },
1130 | {
1131 | "cell_type": "code",
1132 | "metadata": {
1133 | "id": "nV-mDFZ_IJWp",
1134 | "colab_type": "code",
1135 | "colab": {
1136 | "base_uri": "https://localhost:8080/",
1137 | "height": 423
1138 | },
1139 | "outputId": "fcb75144-0c57-4858-d96c-c55ce0095dc8"
1140 | },
1141 | "source": [
1142 | "aapl.head()"
1143 | ],
1144 | "execution_count": 39,
1145 | "outputs": [
1146 | {
1147 | "output_type": "execute_result",
1148 | "data": {
1149 | "text/html": [
1150 | "\n",
1151 | "\n",
1164 | "
\n",
1165 | " \n",
1166 | " \n",
1167 | " \n",
1168 | " Revenue USD Mil \n",
1169 | " Gross Margin % \n",
1170 | " Operating Income USD Mil \n",
1171 | " Operating Margin % \n",
1172 | " Net Income USD Mil \n",
1173 | " Earnings Per Share USD \n",
1174 | " Dividends USD \n",
1175 | " Payout Ratio % * \n",
1176 | " Shares Mil \n",
1177 | " Book Value Per Share * USD \n",
1178 | " Operating Cash Flow USD Mil \n",
1179 | " Cap Spending USD Mil \n",
1180 | " Free Cash Flow USD Mil \n",
1181 | " Free Cash Flow Per Share * USD \n",
1182 | " Working Capital USD Mil \n",
1183 | " Key Ratios -> Profitability \n",
1184 | " Margins % of Sales \n",
1185 | " Revenue \n",
1186 | " COGS \n",
1187 | " Gross Margin \n",
1188 | " SG&A \n",
1189 | " R&D \n",
1190 | " Other \n",
1191 | " Operating Margin \n",
1192 | " Net Int Inc & Other \n",
1193 | " EBT Margin \n",
1194 | " Profitability \n",
1195 | " Tax Rate % \n",
1196 | " Net Margin % \n",
1197 | " Asset Turnover (Average) \n",
1198 | " Return on Assets % \n",
1199 | " Financial Leverage (Average) \n",
1200 | " Return on Equity % \n",
1201 | " Return on Invested Capital % \n",
1202 | " Interest Coverage \n",
1203 | " Key Ratios -> Growth \n",
1204 | " NaN \n",
1205 | " Revenue % \n",
1206 | " Year over Year \n",
1207 | " 3-Year Average \n",
1208 | " ... \n",
1209 | " Cap Ex as a % of Sales \n",
1210 | " Free Cash Flow/Sales % \n",
1211 | " Free Cash Flow/Net Income \n",
1212 | " Key Ratios -> Financial Health \n",
1213 | " Balance Sheet Items (in %) \n",
1214 | " Cash & Short-Term Investments \n",
1215 | " Accounts Receivable \n",
1216 | " Inventory \n",
1217 | " Other Current Assets \n",
1218 | " Total Current Assets \n",
1219 | " Net PP&E \n",
1220 | " Intangibles \n",
1221 | " Other Long-Term Assets \n",
1222 | " Total Assets \n",
1223 | " Accounts Payable \n",
1224 | " Short-Term Debt \n",
1225 | " Taxes Payable \n",
1226 | " Accrued Liabilities \n",
1227 | " Other Short-Term Liabilities \n",
1228 | " Total Current Liabilities \n",
1229 | " Long-Term Debt \n",
1230 | " Other Long-Term Liabilities \n",
1231 | " Total Liabilities \n",
1232 | " Total Stockholders' Equity \n",
1233 | " Total Liabilities & Equity \n",
1234 | " Liquidity/Financial Health \n",
1235 | " Current Ratio \n",
1236 | " Quick Ratio \n",
1237 | " Financial Leverage \n",
1238 | " Debt/Equity \n",
1239 | " Key Ratios -> Efficiency Ratios \n",
1240 | " Efficiency \n",
1241 | " Days Sales Outstanding \n",
1242 | " Days Inventory \n",
1243 | " Payables Period \n",
1244 | " Cash Conversion Cycle \n",
1245 | " Receivables Turnover \n",
1246 | " Inventory Turnover \n",
1247 | " Fixed Assets Turnover \n",
1248 | " Asset Turnover \n",
1249 | " \n",
1250 | " \n",
1251 | " \n",
1252 | " \n",
1253 | " 2010-09 \n",
1254 | " 65,225 \n",
1255 | " 39.4 \n",
1256 | " 18,385 \n",
1257 | " 28.2 \n",
1258 | " 14,013 \n",
1259 | " 2.16 \n",
1260 | " NaN \n",
1261 | " NaN \n",
1262 | " 6,473 \n",
1263 | " 7.45 \n",
1264 | " 18,595 \n",
1265 | " -2,121 \n",
1266 | " 16,474 \n",
1267 | " 2.54 \n",
1268 | " 20,956 \n",
1269 | " NaN \n",
1270 | " 2010-09 \n",
1271 | " 100.00 \n",
1272 | " 60.62 \n",
1273 | " 39.38 \n",
1274 | " 8.46 \n",
1275 | " 2.73 \n",
1276 | " NaN \n",
1277 | " 28.19 \n",
1278 | " 0.24 \n",
1279 | " 28.42 \n",
1280 | " 2010-09 \n",
1281 | " 24.42 \n",
1282 | " 21.48 \n",
1283 | " 1.06 \n",
1284 | " 22.84 \n",
1285 | " 1.57 \n",
1286 | " 35.28 \n",
1287 | " 34.77 \n",
1288 | " NaN \n",
1289 | " NaN \n",
1290 | " 2010-09 \n",
1291 | " NaN \n",
1292 | " 52.02 \n",
1293 | " 39.54 \n",
1294 | " ... \n",
1295 | " 3.25 \n",
1296 | " 25.26 \n",
1297 | " 1.18 \n",
1298 | " NaN \n",
1299 | " 2010-09 \n",
1300 | " 34.08 \n",
1301 | " 13.20 \n",
1302 | " 1.40 \n",
1303 | " 6.76 \n",
1304 | " 55.44 \n",
1305 | " 6.34 \n",
1306 | " 1.44 \n",
1307 | " 36.78 \n",
1308 | " 100.00 \n",
1309 | " 15.98 \n",
1310 | " NaN \n",
1311 | " 0.28 \n",
1312 | " 5.87 \n",
1313 | " 5.43 \n",
1314 | " 27.56 \n",
1315 | " NaN \n",
1316 | " 8.87 \n",
1317 | " 36.43 \n",
1318 | " 63.57 \n",
1319 | " 100.00 \n",
1320 | " 2010-09 \n",
1321 | " 2.01 \n",
1322 | " 1.72 \n",
1323 | " 1.57 \n",
1324 | " NaN \n",
1325 | " NaN \n",
1326 | " 2010-09 \n",
1327 | " 24.82 \n",
1328 | " 6.95 \n",
1329 | " 81.30 \n",
1330 | " -49.53 \n",
1331 | " 14.71 \n",
1332 | " 52.51 \n",
1333 | " 16.89 \n",
1334 | " 1.06 \n",
1335 | " \n",
1336 | " \n",
1337 | " 2011-09 \n",
1338 | " 108,249 \n",
1339 | " 40.5 \n",
1340 | " 33,790 \n",
1341 | " 31.2 \n",
1342 | " 25,922 \n",
1343 | " 3.95 \n",
1344 | " NaN \n",
1345 | " NaN \n",
1346 | " 6,557 \n",
1347 | " 11.78 \n",
1348 | " 37,529 \n",
1349 | " -7,452 \n",
1350 | " 30,077 \n",
1351 | " 4.59 \n",
1352 | " 17,018 \n",
1353 | " NaN \n",
1354 | " 2011-09 \n",
1355 | " 100.00 \n",
1356 | " 59.52 \n",
1357 | " 40.48 \n",
1358 | " 7.02 \n",
1359 | " 2.24 \n",
1360 | " NaN \n",
1361 | " 31.22 \n",
1362 | " 0.38 \n",
1363 | " 31.60 \n",
1364 | " 2011-09 \n",
1365 | " 24.22 \n",
1366 | " 23.95 \n",
1367 | " 1.13 \n",
1368 | " 27.07 \n",
1369 | " 1.52 \n",
1370 | " 41.67 \n",
1371 | " 41.13 \n",
1372 | " NaN \n",
1373 | " NaN \n",
1374 | " 2011-09 \n",
1375 | " NaN \n",
1376 | " 65.96 \n",
1377 | " 49.37 \n",
1378 | " ... \n",
1379 | " 6.88 \n",
1380 | " 27.79 \n",
1381 | " 1.16 \n",
1382 | " NaN \n",
1383 | " 2011-09 \n",
1384 | " 22.30 \n",
1385 | " 10.07 \n",
1386 | " 0.67 \n",
1387 | " 5.62 \n",
1388 | " 38.66 \n",
1389 | " 6.68 \n",
1390 | " 3.81 \n",
1391 | " 50.85 \n",
1392 | " 100.00 \n",
1393 | " 12.57 \n",
1394 | " NaN \n",
1395 | " 0.98 \n",
1396 | " 6.46 \n",
1397 | " 4.02 \n",
1398 | " 24.04 \n",
1399 | " NaN \n",
1400 | " 10.13 \n",
1401 | " 34.16 \n",
1402 | " 65.84 \n",
1403 | " 100.00 \n",
1404 | " 2011-09 \n",
1405 | " 1.61 \n",
1406 | " 1.35 \n",
1407 | " 1.52 \n",
1408 | " NaN \n",
1409 | " NaN \n",
1410 | " 2011-09 \n",
1411 | " 18.34 \n",
1412 | " 5.17 \n",
1413 | " 75.48 \n",
1414 | " -51.96 \n",
1415 | " 19.90 \n",
1416 | " 70.53 \n",
1417 | " 17.26 \n",
1418 | " 1.13 \n",
1419 | " \n",
1420 | " \n",
1421 | " 2012-09 \n",
1422 | " 156,508 \n",
1423 | " 43.9 \n",
1424 | " 55,241 \n",
1425 | " 35.3 \n",
1426 | " 41,733 \n",
1427 | " 6.31 \n",
1428 | " 0.38 \n",
1429 | " NaN \n",
1430 | " 6,617 \n",
1431 | " 16.99 \n",
1432 | " 50,856 \n",
1433 | " -9,402 \n",
1434 | " 41,454 \n",
1435 | " 6.31 \n",
1436 | " 19,111 \n",
1437 | " NaN \n",
1438 | " 2012-09 \n",
1439 | " 100.00 \n",
1440 | " 56.13 \n",
1441 | " 43.87 \n",
1442 | " 6.42 \n",
1443 | " 2.16 \n",
1444 | " NaN \n",
1445 | " 35.30 \n",
1446 | " 0.33 \n",
1447 | " 35.63 \n",
1448 | " 2012-09 \n",
1449 | " 25.16 \n",
1450 | " 26.67 \n",
1451 | " 1.07 \n",
1452 | " 28.54 \n",
1453 | " 1.49 \n",
1454 | " 42.84 \n",
1455 | " 42.01 \n",
1456 | " NaN \n",
1457 | " NaN \n",
1458 | " 2012-09 \n",
1459 | " NaN \n",
1460 | " 44.58 \n",
1461 | " 53.94 \n",
1462 | " ... \n",
1463 | " 6.01 \n",
1464 | " 26.49 \n",
1465 | " 0.99 \n",
1466 | " NaN \n",
1467 | " 2012-09 \n",
1468 | " 16.54 \n",
1469 | " 10.62 \n",
1470 | " 0.45 \n",
1471 | " 5.14 \n",
1472 | " 32.75 \n",
1473 | " 8.78 \n",
1474 | " 3.04 \n",
1475 | " 55.43 \n",
1476 | " 100.00 \n",
1477 | " 12.03 \n",
1478 | " NaN \n",
1479 | " 0.87 \n",
1480 | " 1.45 \n",
1481 | " 7.54 \n",
1482 | " 21.89 \n",
1483 | " NaN \n",
1484 | " 10.97 \n",
1485 | " 32.86 \n",
1486 | " 67.14 \n",
1487 | " 100.00 \n",
1488 | " 2012-09 \n",
1489 | " 1.50 \n",
1490 | " 1.24 \n",
1491 | " 1.49 \n",
1492 | " NaN \n",
1493 | " NaN \n",
1494 | " 2012-09 \n",
1495 | " 19.01 \n",
1496 | " 3.26 \n",
1497 | " 74.38 \n",
1498 | " -52.13 \n",
1499 | " 19.20 \n",
1500 | " 112.12 \n",
1501 | " 13.48 \n",
1502 | " 1.07 \n",
1503 | " \n",
1504 | " \n",
1505 | " 2013-09 \n",
1506 | " 170,910 \n",
1507 | " 37.6 \n",
1508 | " 48,999 \n",
1509 | " 28.7 \n",
1510 | " 37,037 \n",
1511 | " 5.68 \n",
1512 | " 1.63 \n",
1513 | " 27.4 \n",
1514 | " 6,522 \n",
1515 | " 19.60 \n",
1516 | " 53,666 \n",
1517 | " -9,076 \n",
1518 | " 44,590 \n",
1519 | " 6.46 \n",
1520 | " 29,628 \n",
1521 | " NaN \n",
1522 | " 2013-09 \n",
1523 | " 100.00 \n",
1524 | " 62.38 \n",
1525 | " 37.62 \n",
1526 | " 6.34 \n",
1527 | " 2.62 \n",
1528 | " NaN \n",
1529 | " 28.67 \n",
1530 | " 0.68 \n",
1531 | " 29.35 \n",
1532 | " 2013-09 \n",
1533 | " 26.15 \n",
1534 | " 21.67 \n",
1535 | " 0.89 \n",
1536 | " 19.34 \n",
1537 | " 1.68 \n",
1538 | " 30.64 \n",
1539 | " 26.08 \n",
1540 | " 369.79 \n",
1541 | " NaN \n",
1542 | " 2013-09 \n",
1543 | " NaN \n",
1544 | " 9.20 \n",
1545 | " 37.86 \n",
1546 | " ... \n",
1547 | " 5.31 \n",
1548 | " 26.09 \n",
1549 | " 1.20 \n",
1550 | " NaN \n",
1551 | " 2013-09 \n",
1552 | " 19.59 \n",
1553 | " 9.97 \n",
1554 | " 0.85 \n",
1555 | " 4.99 \n",
1556 | " 35.40 \n",
1557 | " 8.02 \n",
1558 | " 2.78 \n",
1559 | " 53.80 \n",
1560 | " 100.00 \n",
1561 | " 10.81 \n",
1562 | " NaN \n",
1563 | " 0.58 \n",
1564 | " 2.06 \n",
1565 | " 7.65 \n",
1566 | " 21.09 \n",
1567 | " 8.19 \n",
1568 | " 11.03 \n",
1569 | " 40.31 \n",
1570 | " 59.69 \n",
1571 | " 100.00 \n",
1572 | " 2013-09 \n",
1573 | " 1.68 \n",
1574 | " 1.40 \n",
1575 | " 1.68 \n",
1576 | " 0.14 \n",
1577 | " NaN \n",
1578 | " 2013-09 \n",
1579 | " 25.66 \n",
1580 | " 4.37 \n",
1581 | " 74.54 \n",
1582 | " -44.50 \n",
1583 | " 14.22 \n",
1584 | " 83.45 \n",
1585 | " 10.67 \n",
1586 | " 0.89 \n",
1587 | " \n",
1588 | " \n",
1589 | " 2014-09 \n",
1590 | " 182,795 \n",
1591 | " 38.6 \n",
1592 | " 52,503 \n",
1593 | " 28.7 \n",
1594 | " 39,510 \n",
1595 | " 6.45 \n",
1596 | " 1.81 \n",
1597 | " 28.5 \n",
1598 | " 6,123 \n",
1599 | " 20.62 \n",
1600 | " 59,713 \n",
1601 | " -9,813 \n",
1602 | " 49,900 \n",
1603 | " 7.73 \n",
1604 | " 5,083 \n",
1605 | " NaN \n",
1606 | " 2014-09 \n",
1607 | " 100.00 \n",
1608 | " 61.41 \n",
1609 | " 38.59 \n",
1610 | " 6.56 \n",
1611 | " 3.30 \n",
1612 | " NaN \n",
1613 | " 28.72 \n",
1614 | " 0.54 \n",
1615 | " 29.26 \n",
1616 | " 2014-09 \n",
1617 | " 26.13 \n",
1618 | " 21.61 \n",
1619 | " 0.83 \n",
1620 | " 18.01 \n",
1621 | " 2.08 \n",
1622 | " 33.61 \n",
1623 | " 26.20 \n",
1624 | " 140.28 \n",
1625 | " NaN \n",
1626 | " 2014-09 \n",
1627 | " NaN \n",
1628 | " 6.95 \n",
1629 | " 19.08 \n",
1630 | " ... \n",
1631 | " 5.37 \n",
1632 | " 27.30 \n",
1633 | " 1.26 \n",
1634 | " NaN \n",
1635 | " 2014-09 \n",
1636 | " 10.82 \n",
1637 | " 11.74 \n",
1638 | " 0.91 \n",
1639 | " 6.09 \n",
1640 | " 29.56 \n",
1641 | " 8.90 \n",
1642 | " 3.78 \n",
1643 | " 57.77 \n",
1644 | " 100.00 \n",
1645 | " 13.02 \n",
1646 | " 2.72 \n",
1647 | " 0.52 \n",
1648 | " 2.80 \n",
1649 | " 8.31 \n",
1650 | " 27.37 \n",
1651 | " 12.50 \n",
1652 | " 12.02 \n",
1653 | " 51.89 \n",
1654 | " 48.11 \n",
1655 | " 100.00 \n",
1656 | " 2014-09 \n",
1657 | " 1.08 \n",
1658 | " 0.82 \n",
1659 | " 2.08 \n",
1660 | " 0.26 \n",
1661 | " NaN \n",
1662 | " 2014-09 \n",
1663 | " 30.51 \n",
1664 | " 6.30 \n",
1665 | " 85.45 \n",
1666 | " -48.64 \n",
1667 | " 11.96 \n",
1668 | " 57.94 \n",
1669 | " 9.82 \n",
1670 | " 0.83 \n",
1671 | " \n",
1672 | " \n",
1673 | "
\n",
1674 | "
5 rows × 101 columns
\n",
1675 | "
"
1676 | ],
1677 | "text/plain": [
1678 | " Revenue USD Mil Gross Margin % ... Fixed Assets Turnover Asset Turnover\n",
1679 | "2010-09 65,225 39.4 ... 16.89 1.06\n",
1680 | "2011-09 108,249 40.5 ... 17.26 1.13\n",
1681 | "2012-09 156,508 43.9 ... 13.48 1.07\n",
1682 | "2013-09 170,910 37.6 ... 10.67 0.89\n",
1683 | "2014-09 182,795 38.6 ... 9.82 0.83\n",
1684 | "\n",
1685 | "[5 rows x 101 columns]"
1686 | ]
1687 | },
1688 | "metadata": {
1689 | "tags": []
1690 | },
1691 | "execution_count": 39
1692 | }
1693 | ]
1694 | },
1695 | {
1696 | "cell_type": "markdown",
1697 | "metadata": {
1698 | "id": "Vkp6AyXAIJWr",
1699 | "colab_type": "text"
1700 | },
1701 | "source": [
1702 | "##### (2) Extract metrics we need\n",
1703 | "The financial data contains a lot of metrics, we are not going to use most of them. So, let's create a smaller dataframe with whatever metrics we will use."
1704 | ]
1705 | },
1706 | {
1707 | "cell_type": "code",
1708 | "metadata": {
1709 | "id": "l9qYfm3KIJWr",
1710 | "colab_type": "code",
1711 | "colab": {
1712 | "base_uri": "https://localhost:8080/",
1713 | "height": 357
1714 | },
1715 | "outputId": "d61526f0-f7d3-4615-e5af-7e2ee9d2f8be"
1716 | },
1717 | "source": [
1718 | "col_names = ['Shares Mil','Earnings Per Share USD','Dividends USD',\n",
1719 | " 'Payout Ratio % *', 'Debt/Equity', 'Book Value Per Share * USD',\n",
1720 | " 'Return on Equity %', 'Current Ratio']\n",
1721 | "aapl_df = aapl[col_names]\n",
1722 | "aapl_df.head()"
1723 | ],
1724 | "execution_count": 40,
1725 | "outputs": [
1726 | {
1727 | "output_type": "execute_result",
1728 | "data": {
1729 | "text/html": [
1730 | "\n",
1731 | "\n",
1744 | "
\n",
1745 | " \n",
1746 | " \n",
1747 | " \n",
1748 | " Shares Mil \n",
1749 | " Earnings Per Share USD \n",
1750 | " Dividends USD \n",
1751 | " Payout Ratio % * \n",
1752 | " Debt/Equity \n",
1753 | " Book Value Per Share * USD \n",
1754 | " Return on Equity % \n",
1755 | " Current Ratio \n",
1756 | " \n",
1757 | " \n",
1758 | " \n",
1759 | " \n",
1760 | " 2010-09 \n",
1761 | " 6,473 \n",
1762 | " 2.16 \n",
1763 | " NaN \n",
1764 | " NaN \n",
1765 | " NaN \n",
1766 | " 7.45 \n",
1767 | " 35.28 \n",
1768 | " 2.01 \n",
1769 | " \n",
1770 | " \n",
1771 | " 2011-09 \n",
1772 | " 6,557 \n",
1773 | " 3.95 \n",
1774 | " NaN \n",
1775 | " NaN \n",
1776 | " NaN \n",
1777 | " 11.78 \n",
1778 | " 41.67 \n",
1779 | " 1.61 \n",
1780 | " \n",
1781 | " \n",
1782 | " 2012-09 \n",
1783 | " 6,617 \n",
1784 | " 6.31 \n",
1785 | " 0.38 \n",
1786 | " NaN \n",
1787 | " NaN \n",
1788 | " 16.99 \n",
1789 | " 42.84 \n",
1790 | " 1.50 \n",
1791 | " \n",
1792 | " \n",
1793 | " 2013-09 \n",
1794 | " 6,522 \n",
1795 | " 5.68 \n",
1796 | " 1.63 \n",
1797 | " 27.4 \n",
1798 | " 0.14 \n",
1799 | " 19.60 \n",
1800 | " 30.64 \n",
1801 | " 1.68 \n",
1802 | " \n",
1803 | " \n",
1804 | " 2014-09 \n",
1805 | " 6,123 \n",
1806 | " 6.45 \n",
1807 | " 1.81 \n",
1808 | " 28.5 \n",
1809 | " 0.26 \n",
1810 | " 20.62 \n",
1811 | " 33.61 \n",
1812 | " 1.08 \n",
1813 | " \n",
1814 | " \n",
1815 | "
\n",
1816 | "
"
1817 | ],
1818 | "text/plain": [
1819 | " Shares Mil Earnings Per Share USD ... Return on Equity % Current Ratio\n",
1820 | "2010-09 6,473 2.16 ... 35.28 2.01\n",
1821 | "2011-09 6,557 3.95 ... 41.67 1.61\n",
1822 | "2012-09 6,617 6.31 ... 42.84 1.50\n",
1823 | "2013-09 6,522 5.68 ... 30.64 1.68\n",
1824 | "2014-09 6,123 6.45 ... 33.61 1.08\n",
1825 | "\n",
1826 | "[5 rows x 8 columns]"
1827 | ]
1828 | },
1829 | "metadata": {
1830 | "tags": []
1831 | },
1832 | "execution_count": 40
1833 | }
1834 | ]
1835 | },
1836 | {
1837 | "cell_type": "markdown",
1838 | "metadata": {
1839 | "id": "Y5Tc4CImIJWt",
1840 | "colab_type": "text"
1841 | },
1842 | "source": [
1843 | "Now we have a concise dataframe `aapl_df`, which is easier to use. But the awkward name of columns still puzzles me. Let's get rid of special symbols and unify the name style by renaming them.\n",
1844 | "\n",
1845 | "##### (3) Rename Columns"
1846 | ]
1847 | },
1848 | {
1849 | "cell_type": "code",
1850 | "metadata": {
1851 | "id": "vOY7_ZngIJWt",
1852 | "colab_type": "code",
1853 | "colab": {
1854 | "base_uri": "https://localhost:8080/",
1855 | "height": 309
1856 | },
1857 | "outputId": "067904c5-2cd1-4ee9-b1af-c3759937e5b1"
1858 | },
1859 | "source": [
1860 | "new_col = ['shares_outstanding', 'earning_per_share', 'dividend_rate', \n",
1861 | " 'dividend_yield', 'debt_to_equity', 'book_value_per_share',\n",
1862 | " 'return_on_equity', 'current_ratio']\n",
1863 | "aapl_df.columns = new_col\n",
1864 | "aapl_df.head()"
1865 | ],
1866 | "execution_count": 41,
1867 | "outputs": [
1868 | {
1869 | "output_type": "execute_result",
1870 | "data": {
1871 | "text/html": [
1872 | "\n",
1873 | "\n",
1886 | "
\n",
1887 | " \n",
1888 | " \n",
1889 | " \n",
1890 | " shares_outstanding \n",
1891 | " earning_per_share \n",
1892 | " dividend_rate \n",
1893 | " dividend_yield \n",
1894 | " debt_to_equity \n",
1895 | " book_value_per_share \n",
1896 | " return_on_equity \n",
1897 | " current_ratio \n",
1898 | " \n",
1899 | " \n",
1900 | " \n",
1901 | " \n",
1902 | " 2010-09 \n",
1903 | " 6,473 \n",
1904 | " 2.16 \n",
1905 | " NaN \n",
1906 | " NaN \n",
1907 | " NaN \n",
1908 | " 7.45 \n",
1909 | " 35.28 \n",
1910 | " 2.01 \n",
1911 | " \n",
1912 | " \n",
1913 | " 2011-09 \n",
1914 | " 6,557 \n",
1915 | " 3.95 \n",
1916 | " NaN \n",
1917 | " NaN \n",
1918 | " NaN \n",
1919 | " 11.78 \n",
1920 | " 41.67 \n",
1921 | " 1.61 \n",
1922 | " \n",
1923 | " \n",
1924 | " 2012-09 \n",
1925 | " 6,617 \n",
1926 | " 6.31 \n",
1927 | " 0.38 \n",
1928 | " NaN \n",
1929 | " NaN \n",
1930 | " 16.99 \n",
1931 | " 42.84 \n",
1932 | " 1.50 \n",
1933 | " \n",
1934 | " \n",
1935 | " 2013-09 \n",
1936 | " 6,522 \n",
1937 | " 5.68 \n",
1938 | " 1.63 \n",
1939 | " 27.4 \n",
1940 | " 0.14 \n",
1941 | " 19.60 \n",
1942 | " 30.64 \n",
1943 | " 1.68 \n",
1944 | " \n",
1945 | " \n",
1946 | " 2014-09 \n",
1947 | " 6,123 \n",
1948 | " 6.45 \n",
1949 | " 1.81 \n",
1950 | " 28.5 \n",
1951 | " 0.26 \n",
1952 | " 20.62 \n",
1953 | " 33.61 \n",
1954 | " 1.08 \n",
1955 | " \n",
1956 | " \n",
1957 | "
\n",
1958 | "
"
1959 | ],
1960 | "text/plain": [
1961 | " shares_outstanding earning_per_share ... return_on_equity current_ratio\n",
1962 | "2010-09 6,473 2.16 ... 35.28 2.01\n",
1963 | "2011-09 6,557 3.95 ... 41.67 1.61\n",
1964 | "2012-09 6,617 6.31 ... 42.84 1.50\n",
1965 | "2013-09 6,522 5.68 ... 30.64 1.68\n",
1966 | "2014-09 6,123 6.45 ... 33.61 1.08\n",
1967 | "\n",
1968 | "[5 rows x 8 columns]"
1969 | ]
1970 | },
1971 | "metadata": {
1972 | "tags": []
1973 | },
1974 | "execution_count": 41
1975 | }
1976 | ]
1977 | },
1978 | {
1979 | "cell_type": "markdown",
1980 | "metadata": {
1981 | "id": "XsMSAdIdIJWv",
1982 | "colab_type": "text"
1983 | },
1984 | "source": [
1985 | "Now the dataframe looks great! Attention, do not get the order of new column (`new_col`) names wrong. It should be in exactly the same order as current column."
1986 | ]
1987 | }
1988 | ]
1989 | }
--------------------------------------------------------------------------------
/data/AAPL Key Ratios.csv:
--------------------------------------------------------------------------------
1 | Growth Profitability and Financial Ratios for Apple Inc
2 | Financials
3 | ,2010-09,2011-09,2012-09,2013-09,2014-09,2015-09,2016-09,2017-09,2018-09,2019-09,TTM
4 | Revenue USD Mil,"65,225","108,249","156,508","170,910","182,795","233,715","215,639","229,234","265,595","260,174","260,174"
5 | Gross Margin %,39.4,40.5,43.9,37.6,38.6,40.1,39.1,38.5,38.3,37.8,37.8
6 | Operating Income USD Mil,"18,385","33,790","55,241","48,999","52,503","71,230","60,024","61,344","70,898","63,930","63,930"
7 | Operating Margin %,28.2,31.2,35.3,28.7,28.7,30.5,27.8,26.8,26.7,24.6,24.6
8 | Net Income USD Mil,"14,013","25,922","41,733","37,037","39,510","53,394","45,687","48,351","59,531","55,256","55,256"
9 | Earnings Per Share USD,2.16,3.95,6.31,5.68,6.45,9.22,8.31,9.21,11.91,11.89,11.89
10 | Dividends USD,,,0.38,1.63,1.81,1.98,2.18,2.40,2.72,3.00,3.00
11 | Payout Ratio % *,,,,27.4,28.5,22.3,24.8,26.5,23.7,25.1,25.2
12 | Shares Mil,"6,473","6,557","6,617","6,522","6,123","5,793","5,500","5,252","5,000","4,649","4,649"
13 | Book Value Per Share * USD,7.45,11.78,16.99,19.60,20.62,22.53,23.71,25.83,24.17,21.71,20.64
14 | Operating Cash Flow USD Mil,"18,595","37,529","50,856","53,666","59,713","81,266","65,824","63,598","77,434","69,391","69,391"
15 | Cap Spending USD Mil,"-2,121","-7,452","-9,402","-9,076","-9,813","-11,488","-13,548","-12,795","-13,313","-10,495","-10,495"
16 | Free Cash Flow USD Mil,"16,474","30,077","41,454","44,590","49,900","69,778","52,276","50,803","64,121","58,896","58,896"
17 | Free Cash Flow Per Share * USD,2.54,4.59,6.31,6.46,7.73,11.82,8.97,9.66,11.52,12.31,
18 | Working Capital USD Mil,"20,956","17,018","19,111","29,628","5,083","8,768","27,863","27,831","14,473","57,101",
19 |
20 | Key Ratios -> Profitability
21 | Margins % of Sales,2010-09,2011-09,2012-09,2013-09,2014-09,2015-09,2016-09,2017-09,2018-09,2019-09,TTM
22 | Revenue,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00
23 | COGS,60.62,59.52,56.13,62.38,61.41,59.94,60.92,61.53,61.66,62.18,62.18
24 | Gross Margin,39.38,40.48,43.87,37.62,38.59,40.06,39.08,38.47,38.34,37.82,37.82
25 | SG&A,8.46,7.02,6.42,6.34,6.56,6.13,6.58,6.66,6.29,7.01,7.01
26 | R&D,2.73,2.24,2.16,2.62,3.30,3.45,4.66,5.05,5.36,6.23,6.23
27 | Other,,,,,,,,,,,
28 | Operating Margin,28.19,31.22,35.30,28.67,28.72,30.48,27.84,26.76,26.69,24.57,24.57
29 | Net Int Inc & Other,0.24,0.38,0.33,0.68,0.54,0.55,0.63,1.20,0.75,0.69,0.69
30 | EBT Margin,28.42,31.60,35.63,29.35,29.26,31.03,28.46,27.96,27.45,25.27,25.27
31 |
32 | Profitability,2010-09,2011-09,2012-09,2013-09,2014-09,2015-09,2016-09,2017-09,2018-09,2019-09,TTM
33 | Tax Rate %,24.42,24.22,25.16,26.15,26.13,26.37,25.56,24.56,18.34,15.94,15.94
34 | Net Margin %,21.48,23.95,26.67,21.67,21.61,22.85,21.19,21.09,22.41,21.24,21.24
35 | Asset Turnover (Average),1.06,1.13,1.07,0.89,0.83,0.89,0.70,0.66,0.72,0.74,0.74
36 | Return on Assets %,22.84,27.07,28.54,19.34,18.01,20.45,14.93,13.87,16.07,15.69,15.69
37 | Financial Leverage (Average),1.57,1.52,1.49,1.68,2.08,2.43,2.51,2.80,3.41,3.74,3.74
38 | Return on Equity %,35.28,41.67,42.84,30.64,33.61,46.25,36.90,36.87,49.36,55.92,55.92
39 | Return on Invested Capital %,34.77,41.13,42.01,26.08,26.20,31.32,21.95,19.86,24.41,25.75,25.75
40 | Interest Coverage,,,,369.79,140.28,99.93,43.15,28.59,23.50,19.38,19.38
41 |
42 | Key Ratios -> Growth
43 | ,2010-09,2011-09,2012-09,2013-09,2014-09,2015-09,2016-09,2017-09,2018-09,2019-09,Latest Qtr
44 | Revenue %
45 | Year over Year,52.02,65.96,44.58,9.20,6.95,27.86,-7.73,6.30,15.86,-2.04,1.81
46 | 3-Year Average,39.54,49.37,53.94,37.86,19.08,14.30,8.06,7.84,4.35,6.46,
47 | 5-Year Average,36.17,41.16,45.49,39.39,33.63,29.08,14.78,7.93,9.22,7.31,
48 | 10-Year Average,23.37,35.05,39.17,39.31,36.27,32.58,27.29,25.31,23.38,19.75,
49 | Operating Income %
50 | Year over Year,56.60,83.79,63.48,-11.30,7.15,35.67,-15.73,2.20,15.57,-9.83,-3.06
51 | 3-Year Average,60.96,75.28,67.57,38.65,15.82,8.84,7.00,5.32,-0.16,2.12,
52 | 5-Year Average,61.96,68.97,65.80,50.84,34.93,31.11,12.18,2.12,7.67,4.02,
53 | 10-Year Average,42.78,,102.35,113.41,65.10,45.72,37.68,30.12,27.44,18.47,
54 | Net Income %
55 | Year over Year,70.16,84.99,60.99,-11.25,6.68,35.14,-14.43,5.83,23.12,-7.18,
56 | 3-Year Average,58.85,75.03,71.77,38.26,15.08,8.56,7.25,6.96,3.69,6.54,
57 | 5-Year Average,60.03,67.11,64.20,50.27,36.84,30.67,12.00,2.99,9.96,6.94,
58 | 10-Year Average,33.39,,90.88,87.49,64.28,44.61,36.81,30.04,28.54,20.97,
59 | EPS %
60 | Year over Year,66.85,82.71,59.50,-9.97,13.58,42.95,-9.87,10.83,29.32,-0.17,4.12
61 | 3-Year Average,56.80,72.85,69.41,37.92,17.71,13.49,13.53,12.61,8.91,12.68,
62 | 5-Year Average,57.56,64.90,62.22,49.29,37.82,33.62,16.01,7.87,15.97,13.01,
63 | 10-Year Average,30.11,,85.81,82.88,62.35,45.10,38.31,32.28,31.58,24.80,
64 |
65 | Key Ratios -> Cash Flow
66 | Cash Flow Ratios,2010-09,2011-09,2012-09,2013-09,2014-09,2015-09,2016-09,2017-09,2018-09,2019-09,TTM
67 | Operating Cash Flow Growth % YOY,83.04,101.82,35.51,5.53,11.27,36.09,-19.00,-3.38,21.76,-10.39,
68 | Free Cash Flow Growth % YOY,84.15,82.57,37.83,7.57,11.91,39.84,-25.08,-2.82,26.22,-8.15,
69 | Cap Ex as a % of Sales,3.25,6.88,6.01,5.31,5.37,4.92,6.28,5.58,5.01,4.03,4.03
70 | Free Cash Flow/Sales %,25.26,27.79,26.49,26.09,27.30,29.86,24.24,22.16,24.14,22.64,22.64
71 | Free Cash Flow/Net Income,1.18,1.16,0.99,1.20,1.26,1.31,1.14,1.05,1.08,1.07,1.07
72 |
73 | Key Ratios -> Financial Health
74 | Balance Sheet Items (in %),2010-09,2011-09,2012-09,2013-09,2014-09,2015-09,2016-09,2017-09,2018-09,2019-09,Latest Qtr
75 | Cash & Short-Term Investments,34.08,22.30,16.54,19.59,10.82,14.32,20.88,19.76,18.13,29.71,29.71
76 | Accounts Receivable,13.20,10.07,10.62,9.97,11.74,10.45,9.11,9.50,13.40,13.53,13.53
77 | Inventory,1.40,0.67,0.45,0.85,0.91,0.81,0.66,1.29,1.08,1.21,1.21
78 | Other Current Assets,6.76,5.62,5.14,4.99,6.09,5.19,2.57,3.71,3.30,3.65,3.65
79 | Total Current Assets,55.44,38.66,32.75,35.40,29.56,30.77,33.22,34.28,35.91,48.10,48.10
80 | Net PP&E,6.34,6.68,8.78,8.02,8.90,7.74,8.40,9.00,11.29,11.04,11.04
81 | Intangibles,1.44,3.81,3.04,2.78,3.78,3.10,2.68,2.14,,,
82 | Other Long-Term Assets,36.78,50.85,55.43,53.80,57.77,58.39,55.70,54.59,52.79,40.86,40.86
83 | Total Assets,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00
84 | Accounts Payable,15.98,12.57,12.03,10.81,13.02,12.22,11.59,13.07,15.28,13.66,13.66
85 | Short-Term Debt,,,,,2.72,3.79,3.61,4.92,5.67,4.80,4.80
86 | Taxes Payable,0.28,0.98,0.87,0.58,0.52,,,,,,
87 | Accrued Liabilities,5.87,6.46,1.45,2.06,2.80,8.67,6.85,6.86,,,
88 | Other Short-Term Liabilities,5.43,4.02,7.54,7.65,8.31,3.08,2.51,2.01,11.00,12.77,12.77
89 | Total Current Liabilities,27.56,24.04,21.89,21.09,27.37,27.75,24.56,26.86,31.95,31.23,31.23
90 | Long-Term Debt,,,,8.19,12.50,18.41,23.45,25.90,25.63,27.12,27.12
91 | Other Long-Term Liabilities,8.87,10.13,10.97,11.03,12.02,12.76,12.12,11.52,13.12,14.92,14.92
92 | Total Liabilities,36.43,34.16,32.86,40.31,51.89,58.91,60.13,64.28,70.70,73.27,73.27
93 | Total Stockholders' Equity,63.57,65.84,67.14,59.69,48.11,41.09,39.87,35.72,29.30,26.73,26.73
94 | Total Liabilities & Equity,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00,100.00
95 |
96 | Liquidity/Financial Health,2010-09,2011-09,2012-09,2013-09,2014-09,2015-09,2016-09,2017-09,2018-09,2019-09,Latest Qtr
97 | Current Ratio,2.01,1.61,1.50,1.68,1.08,1.11,1.35,1.28,1.12,1.54,1.54
98 | Quick Ratio,1.72,1.35,1.24,1.40,0.82,0.89,1.22,1.09,0.99,1.38,1.38
99 | Financial Leverage,1.57,1.52,1.49,1.68,2.08,2.43,2.51,2.80,3.41,3.74,3.74
100 | Debt/Equity,,,,0.14,0.26,0.45,0.59,0.73,0.87,1.01,1.01
101 |
102 | Key Ratios -> Efficiency Ratios
103 | Efficiency,2010-09,2011-09,2012-09,2013-09,2014-09,2015-09,2016-09,2017-09,2018-09,2019-09,TTM
104 | Days Sales Outstanding,24.82,18.34,19.01,25.66,30.51,26.79,27.59,26.77,28.21,32.35,32.35
105 | Days Inventory,6.95,5.17,3.26,4.37,6.30,5.81,6.22,9.04,9.82,9.09,9.09
106 | Payables Period,81.30,75.48,74.38,74.54,85.45,85.57,101.11,111.72,116.95,115.20,115.20
107 | Cash Conversion Cycle,-49.53,-51.96,-52.13,-44.50,-48.64,-52.97,-67.29,-75.91,-78.92,-73.76,-73.76
108 | Receivables Turnover,14.71,19.90,19.20,14.22,11.96,13.62,13.23,13.63,12.94,11.28,11.28
109 | Inventory Turnover,52.51,70.53,112.12,83.45,57.94,62.82,58.64,40.37,37.17,40.13,40.13
110 | Fixed Assets Turnover,16.89,17.26,13.48,10.67,9.82,10.85,8.71,7.54,7.07,6.61,6.61
111 | Asset Turnover,1.06,1.13,1.07,0.89,0.83,0.89,0.70,0.66,0.72,0.74,0.74
112 |
--------------------------------------------------------------------------------
/data/aapl_concise.csv:
--------------------------------------------------------------------------------
1 | ,shares_outstanding,earning_per_share,dividend_rate,dividend_yield,debt_to_equity,book_value_per_share,return_on_equity,current_ratio
2 | 2010-09,"6,473",2.16,,,,7.45,35.28,2.01
3 | 2011-09,"6,557",3.95,,,,11.78,41.67,1.61
4 | 2012-09,"6,617",6.31,0.38,,,16.99,42.84,1.50
5 | 2013-09,"6,522",5.68,1.63,27.4,0.14,19.60,30.64,1.68
6 | 2014-09,"6,123",6.45,1.81,28.5,0.26,20.62,33.61,1.08
7 | 2015-09,"5,793",9.22,1.98,22.3,0.45,22.53,46.25,1.11
8 | 2016-09,"5,500",8.31,2.18,24.8,0.59,23.71,36.90,1.35
9 | 2017-09,"5,252",9.21,2.40,26.5,0.73,25.83,36.87,1.28
10 | 2018-09,"5,000",11.91,2.72,23.7,0.87,24.17,49.36,1.12
11 | 2019-09,"4,649",11.89,3.00,25.1,1.01,21.71,55.92,1.54
12 | TTM,"4,649",11.89,3.00,25.2,1.01,20.64,55.92,1.54
13 |
--------------------------------------------------------------------------------
/reflection_brief_intro.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sicongzhao/Value-Investing-In-Python/cc1ee84fb641e9cf480789a25e42054e3b3891e4/reflection_brief_intro.pdf
--------------------------------------------------------------------------------