3.7.12 (default, Oct 12 2021, 03:36:26)
[GCC 8.3.0]
Requirement already satisfied: xlrd in /root/venv/lib/python3.7/site-packages (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: 3858 entries, NasdaqGS:FLWS to NasdaqGS:ZNGA
Data columns (total 38 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 3858 non-null object
1 comp_type 3858 non-null object
2 exchange 3858 non-null object
3 industry 3858 non-null object
4 sector 3858 non-null object
5 marketcap 3858 non-null float64
6 total_debt 3858 non-null float64
7 shrout 3858 non-null float64
8 revenue 3858 non-null float64
9 gross_profit 3858 non-null float64
10 sga 3858 non-null float64
11 advertising 3858 non-null float64
12 marketing 3858 non-null float64
13 sales_marketing 3858 non-null float64
14 gen_admin 3858 non-null float64
15 rd_expense 3858 non-null float64
16 int_expense 3858 non-null float64
17 op_lease_int 3858 non-null float64
18 ebitda 3858 non-null float64
19 ebit 3858 non-null float64
20 net_income 3858 non-null float64
21 cash 3821 non-null float64
22 capex 3724 non-null float64
23 acquisitions 3720 non-null float64
24 changeNWC 3842 non-null float64
25 beta1 3551 non-null float64
26 beta2 3551 non-null float64
27 beta5 3380 non-null float64
28 etr 2289 non-null float64
29 tev 3858 non-null float64
30 gRev1yr 3756 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 3589 non-null float64
36 roc 3783 non-null float64
37 altman 3484 non-null float64
dtypes: float64(33), object(5)
memory usage: 1.1+ 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.
<class 'pandas.core.frame.DataFrame'>
Index: 2182 entries, NasdaqGS:FLWS to NasdaqCM:ZYXI
Data columns (total 38 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 2182 non-null object
1 comp_type 2182 non-null object
2 exchange 2182 non-null object
3 industry 2182 non-null object
4 sector 2182 non-null object
5 marketcap 2182 non-null float64
6 total_debt 2182 non-null float64
7 shrout 2182 non-null float64
8 revenue 2182 non-null float64
9 gross_profit 2182 non-null float64
10 sga 2182 non-null float64
11 advertising 2182 non-null float64
12 marketing 2182 non-null float64
13 sales_marketing 2182 non-null float64
14 gen_admin 2182 non-null float64
15 rd_expense 2182 non-null float64
16 int_expense 2182 non-null float64
17 op_lease_int 2182 non-null float64
18 ebitda 2182 non-null float64
19 ebit 2182 non-null float64
20 net_income 2182 non-null float64
21 cash 2177 non-null float64
22 capex 2126 non-null float64
23 acquisitions 2125 non-null float64
24 changeNWC 2173 non-null float64
25 beta1 2182 non-null float64
26 beta2 2182 non-null float64
27 beta5 2123 non-null float64
28 etr 2182 non-null float64
29 tev 2182 non-null float64
30 gRev1yr 2182 non-null float64
31 gRev3yr 2143 non-null float64
32 ebit_margin 2182 non-null float64
33 ebitda_margin 2182 non-null float64
34 gross_margin 2182 non-null float64
35 roe 2089 non-null float64
36 roc 2182 non-null float64
37 altman 1894 non-null float64
dtypes: float64(33), object(5)
memory usage: 664.8+ KB
Now, we are going to identify the high performing companies using the same categories for criteria.
We recommend selling Daily Journal Corporation (NasdaqCM:DJCO) and Cara Therapeutics, Inc. (NasdaqGM:CARA). We selected these companies based on poor key financial health criteria, coupled with having a high EV/EBITDA multiple, and negative industry outlooks. Poor performing companies were in the bottom quartile of EBITDA, profit margin, profit, roc, and EBITDA margin, within the entire dataset. Daily Journal has an EV/EBITDA multiple of 95.87, the fourth highest in the poor performing quartile – indicating a high valuation with comparatively low EBITDA. Furthermore, as a news publishing company operating on a regional basis, we see strong industry headwinds of full digitization as an obstacle to company growth (CFRA Equity Research: DJCO, 11/20/21). Cara Therapeutics has an EV/EBITDA multiple of 201.06, the second highest in the poor performing quartile. We see the same trend here as we do with Daily Journal Corporation, only more exacerbated. Additionally, recent company news reports revealed abnormalities for patients involved in their clinical trials for Oral KORUSVA (Company Press Release: CARA, 4/29/21). Specifically, we believe that the company faces inconsistent growth, in addition to poor operating and return on investment margins (Argus Research Report: CARA, 11/10/21).
We recommend buying Merck & Co (NYSE: MRK) and Nvidia Corporation (NasdaqGS: NVDA). We selected these companies because they have a relatively lower (hence healthier) EV/EBITDA multiple, while also they are high performing so we would recommend buying those stocks. The division of EV by EBITDA gives a good measure of value. It estimates the number of years in which the business will repay its acquisition cost to the buyer through its earnings. Merck&Co has an EV/EBITDA multiple of 11.35, the 13th from the end in our data frame. This indicates that although it's not at the top of the high performers group, it's still considered to be a buy since it has a good EV/EBITDA compared to the firms in it's industry. Nvidia has a high EV/EBITDA multiple of 60.36, which should be encouraging to a potential investor due to previously discussed positive performance implications. This is the highest multiple in the top performing companies and represents a company with ample room for future growth. Nvidia is an artificial intelligence company with promising future earnings expectations based on our multiple analysis. Following the pandemic chip storage, the demand for Nvidia's chips for self-driving cars sky rocketed. The company is looking to expand chip supply to other industries such as healthcare and entertainment. (Investor's Business Daily: NVDA, 11/18/21).