3.7.12 (default, Oct 12 2021, 03:36:26)
[GCC 8.3.0]
Collecting xlrd
Downloading xlrd-2.0.1-py2.py3-none-any.whl (96 kB)
|████████████████████████████████| 96 kB 5.0 MB/s
Installing collected packages: xlrd
Successfully installed xlrd-2.0.1
WARNING: You are using pip version 20.1.1; however, version 21.3.1 is available.
You should consider upgrading via the '/root/venv/bin/python -m pip install --upgrade pip' command.
<class 'pandas.core.frame.DataFrame'>
Index: 5294 entries, NasdaqGS:FLWS to NasdaqGS:ZNGA
Data columns (total 38 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 5294 non-null object
1 comp_type 5294 non-null object
2 exchange 4904 non-null object
3 industry 5294 non-null object
4 sector 5294 non-null object
5 marketcap 5282 non-null float64
6 total_debt 4998 non-null float64
7 shrout 5282 non-null float64
8 revenue 5156 non-null float64
9 gross_profit 5160 non-null float64
10 sga 5160 non-null float64
11 advertising 5160 non-null float64
12 marketing 5160 non-null float64
13 sales_marketing 5160 non-null float64
14 gen_admin 5160 non-null float64
15 rd_expense 5160 non-null float64
16 int_expense 5160 non-null float64
17 op_lease_int 5160 non-null float64
18 ebitda 5156 non-null float64
19 ebit 5160 non-null float64
20 net_income 5160 non-null float64
21 cash 4920 non-null float64
22 capex 4917 non-null float64
23 acquisitions 4913 non-null float64
24 changeNWC 5046 non-null float64
25 beta1 4351 non-null float64
26 beta2 4351 non-null float64
27 beta5 4101 non-null float64
28 etr 3424 non-null float64
29 tev 4641 non-null float64
30 gRev1yr 4280 non-null float64
31 gRev3yr 3967 non-null float64
32 ebit_margin 3529 non-null float64
33 ebitda_margin 3510 non-null float64
34 gross_margin 3851 non-null float64
35 roe 4481 non-null float64
36 roc 4161 non-null float64
37 altman 3509 non-null float64
dtypes: float64(33), object(5)
memory usage: 1.6+ MB
None
<class 'pandas.core.frame.DataFrame'>
Index: 4580 entries, NasdaqGS:FLWS to total_debt
Data columns (total 38 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 4579 non-null object
1 comp_type 4579 non-null object
2 exchange 4579 non-null object
3 industry 4579 non-null object
4 sector 4579 non-null object
5 marketcap 4579 non-null float64
6 total_debt 4580 non-null float64
7 shrout 4579 non-null float64
8 revenue 4579 non-null float64
9 gross_profit 4579 non-null float64
10 sga 4579 non-null float64
11 advertising 4579 non-null float64
12 marketing 4579 non-null float64
13 sales_marketing 4579 non-null float64
14 gen_admin 4579 non-null float64
15 rd_expense 4579 non-null float64
16 int_expense 4579 non-null float64
17 op_lease_int 4579 non-null float64
18 ebitda 4579 non-null float64
19 ebit 4579 non-null float64
20 net_income 4579 non-null float64
21 cash 4347 non-null float64
22 capex 4381 non-null float64
23 acquisitions 4377 non-null float64
24 changeNWC 4501 non-null float64
25 beta1 3807 non-null float64
26 beta2 3807 non-null float64
27 beta5 3573 non-null float64
28 etr 2899 non-null float64
29 tev 4579 non-null float64
30 gRev1yr 3760 non-null float64
31 gRev3yr 3453 non-null float64
32 ebit_margin 3509 non-null float64
33 ebitda_margin 3490 non-null float64
34 gross_margin 3748 non-null float64
35 roe 3929 non-null float64
36 roc 4124 non-null float64
37 altman 3488 non-null float64
dtypes: float64(33), object(5)
memory usage: 1.4+ MB
You are now a lot of the way there. The goal is to do this kind of analysis all the way down for all of your variables, finding why there is any odd data - negatives, NaN, zeros, etc. You can use filters, look at the data, summary stats, etc.
We filtered the companies based on certain criteria that we felt encompassed poor performance standards. We selected the metrics EBIT margin, return on capital, revenue, and beta and set specific ranges. We sorted the list of poor performing companies by each firm's EV/EBITDA multiple in descending order where we were able to identify three companies in particular that met our criteria. Those three companies were Nike (NKE), Tetra Tech (TEK), and CorVel Corporation (CRVL). Based on the metrics we selected, these companies appeared overvalued and were assigned a sell rating by our group.
We repeated the same process for the high performing companies. We selected ranges with the same metrics and adjusted the ranges accordingly. We sorted the high performing firms by the EV/EBITDA multiple in ascending order where we were able to identify three companies in particular that met our criteria. These companies: Great Panther Mining (GPR), Sage Therapeutics (SAGE), B2Gold (BTO). Based on the metrics we selected, these companies appeared undervalued and were assigned a buy rating by our group.