├── .gitignore
├── README.md
├── analysts.png
├── caps.csv
├── preprocess.ipynb
├── price_targets.ipynb
├── ratings.png
└── targets.csv
/.gitignore:
--------------------------------------------------------------------------------
1 | .ipynb_checkpoints
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Price Targets Analysis
2 |
3 | [Blog writeup](http://blog.ayoungprogrammer.com/2017/05/using-python-and-pandas-to-analyze-price-targets-and-ratings.html/)
4 |
5 | [Preprocessing notebook](https://github.com/ayoungprogrammer/price-targets/blob/master/preprocess.ipynb)
6 |
7 | [Analysis notebook](http://github.com/ayoungprogrammer/price-targets/blob/master/price_targets.ipynb)
8 |
9 | 
10 |
11 | 
12 |
13 | ## Data
14 |
15 | ```
16 | caps.csv: Market caps data
17 | targets.csv: Price targets data
18 | ```
--------------------------------------------------------------------------------
/analysts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ayoungprogrammer/price-targets/04bd7c5b6341599dcba0dae28199919f724ace11/analysts.png
--------------------------------------------------------------------------------
/caps.csv:
--------------------------------------------------------------------------------
1 | RY Royal Bank of Canada $98.29 $99.90 $70.99 1,475,123,916 $144,989,929,703
2 | TD Toronto-Dominion Bank (The) $69.62 $71.31 $53.40 1,859,749,030 $129,475,727,468
3 | BNS Bank of Nova Scotia (The) $79.96 $82.30 $59.40 1,209,451,582 $96,707,748,496
4 | CNR Canadian National Railway Company $96.31 $96.43 $72.78 762,208,062 $73,408,258,451
5 | SU Suncor Energy Inc. $41.76 $44.90 $32.69 1,668,503,680 $69,676,713,676
6 | BMO Bank of Montreal $102.85 $103.54 $75.75 648,669,628 $66,715,671,239
7 | GMM.U General Motors Company $38.24 $38.35 $27.56 1,500,039,985 $57,361,529,026
8 | TRP TransCanada Corporation $60.84 $65.24 $46.81 863,759,075 $52,551,102,123
9 | ENB Enbridge Inc. $54.84 $59.19 $48.59 943,186,589 $51,724,352,540
10 | BCE BCE Inc. $57.98 $63.41 $56.80 870,803,292 $50,489,174,870
11 | MFC Manulife Financial Corporation $24.45 $25.57 $16.43 1,975,675,118 $48,305,256,635
12 | BAM.A Brookfield Asset Management Inc. Class... $48.42 $49.33 $41.62 986,332,662 $47,758,227,494
13 | CM Canadian Imperial Bank Of Commerce $119.20 $120.83 $92.38 397,841,070 $47,422,655,544
14 | CNQ Canadian Natural Resources Limited $41.81 $46.74 $33.11 1,110,952,499 $46,448,923,983
15 | TRI Thomson Reuters Corporation $57.38 $60.13 $48.64 727,443,301 $41,740,696,611
16 | GWO Great-West Lifeco Inc. $36.48 $37.75 $30.83 986,398,335 $35,983,811,260
17 | IMO Imperial Oil Limited $41.11 $48.72 $38.41 847,599,011 $34,844,795,342
18 | SLF Sun Life Financial Inc. $48.74 $53.75 $40.00 613,580,091 $29,905,893,635
19 | CP Canadian Pacific Railway Limited $199.55 $209.12 $156.01 146,357,135 $29,205,566,289
20 | ABX Barrick Gold Corporation $24.43 $30.45 $16.95 1,165,574,071 $28,474,974,554
21 | L Loblaw Companies Limited $69.86 $74.59 $62.33 400,842,385 $28,002,849,016
22 | ATD.B Alimentation Couche-Tard Inc. Class B ... $62.67 $68.63 $51.21 420,134,840 $26,329,850,422
23 | T TELUS Corporation $43.02 $44.41 $39.02 590,430,372 $25,400,314,603
24 | PWF Power Financial Corporation $35.43 $35.91 $28.97 713,269,660 $25,271,144,053
25 | RCI.B Rogers Communications Inc. Class B Non... $55.94 $58.99 $48.34 402,396,133 $22,510,039,680
26 | MG Magna International Inc. $58.06 $62.10 $42.73 382,256,855 $22,193,833,001
27 | WCN Waste Connections Inc. $117.46 $118.69 $85.00 175,426,824 $20,605,634,747
28 | NA National Bank of Canada $58.25 $59.05 $39.19 340,738,776 $19,848,033,702
29 | POT Potash Corporation of Saskatchewan Inc. $22.90 $26.62 $19.93 839,810,179 $19,231,653,099
30 | SAP Saputo Inc. $46.27 $48.98 $36.40 386,653,541 $17,890,459,342
31 | AGU Agrium Inc. $127.58 $146.99 $104.70 138,176,000 $17,628,494,080
32 | G Goldcorp Inc. $20.25 $26.56 $15.95 853,811,565 $17,289,684,191
33 | QSR Restaurant Brands International Inc. $73.25 $76.29 $48.80 234,617,984 $17,185,767,328
34 | PPL Pembina Pipeline Corporation $42.82 $43.49 $33.35 397,892,381 $17,037,751,754
35 | FTS Fortis Inc. $42.37 $44.87 $38.52 401,623,515 $17,016,788,330
36 | QSP.UN Restaurant Brands International Limite... $73.54 $76.98 $49.00 226,932,923 $16,688,647,157
37 | GIB.A CGI Group Inc. Class A Subordinate Vo... $62.36 $67.14 $53.55 266,396,598 $16,612,491,851
38 | HSE Husky Energy Inc. $16.11 $18.10 $13.92 1,005,451,854 $16,197,829,367
39 | TECK.B Teck Resources Limited Class B Subordi... $27.30 $35.67 $8.70 567,546,513 $15,494,019,804
40 | FNV Franco-Nevada Corporation $83.80 $105.69 $71.44 178,482,139 $14,956,803,248
41 | ECA Encana Corporation $15.31 $18.13 $6.91 972,970,070 $14,896,171,771
42 | FFH Fairfax Financial Holdings Limited Sub... $619.22 $777.45 $586.00 23,004,207 $14,244,665,058
43 | CVE Cenovus Energy Inc. $17.09 $22.06 $16.12 833,195,031 $14,239,303,079
44 | WN George Weston Limited $111.16 $120.10 $100.41 127,898,582 $14,217,206,375
45 | H Hydro One Limited $23.57 $26.80 $22.06 595,000,000 $14,024,150,000
46 | CSU Constellation Software Inc. $642.37 $650.00 $457.67 21,191,530 $13,612,803,126
47 | POW Power Corporation of Canada Subordinat... $31.87 $32.31 $26.63 414,600,697 $13,213,324,213
48 | SJR.B Shaw Communications Inc. Class B Non-v... $27.74 $28.63 $23.03 467,830,221 $12,977,610,330
49 | BIP.UN Brookfield Infrastructure Partners L.P. $47.85 $48.86 $33.41 267,589,045 $12,804,135,803
50 | AEM Agnico Eagle Mines Limited $55.16 $78.35 $44.07 225,740,477 $12,451,844,711
51 | IFC Intact Financial Corporation $94.94 $97.56 $84.88 131,034,834 $12,440,447,139
52 | DOL Dollarama Inc. $102.51 $104.94 $74.38 114,565,749 $11,744,134,929
53 | OTEX Open Text Corporation $44.47 $45.99 $31.99 263,141,058 $11,701,882,849
54 | SLW Silver Wheaton Corp. $26.03 $40.80 $20.51 441,484,717 $11,491,847,183
55 | FM First Quantum Minerals Ltd. $15.26 $17.55 $5.38 689,373,818 $10,519,844,462
56 | IPL Inter Pipeline Ltd. $27.77 $30.07 $24.89 368,779,915 $10,241,018,239
57 | CTC.A Canadian Tire Corporation Limited Clas... $152.62 $159.79 $128.12 67,059,281 $10,234,587,466
58 | IGM IGM Financial Inc. $40.92 $42.25 $34.58 240,520,828 $9,842,112,281
59 | ATD.A Alimentation Couche-Tard Inc. Class A ... $66.44 $69.48 $51.07 147,766,540 $9,817,608,917
60 | ONEX ONEX Corporation Subordinate Voting Sh... $94.50 $96.49 $74.33 102,789,607 $9,713,617,861
61 | EMA Emera Incorporated $45.42 $50.19 $43.76 210,024,388 $9,539,307,702
62 | CCL.B CCL Industries Inc. Unlimited Class B ... $286.71 $293.14 $214.25 32,822,296 $9,410,480,486
63 | TRQ Turquoise Hill Resources Ltd. $4.44 $5.03 $3.22 2,012,314,469 $8,934,676,242
64 | MRU Metro Inc. $38.89 $48.19 $38.00 229,564,440 $8,927,761,071
65 | VII Seven Generations Energy Ltd. class A ... $24.84 $32.90 $16.51 350,481,607 $8,705,963,117
66 | REI.UN RioCan Real Estate Investment Trust $26.35 $30.35 $25.10 325,534,313 $8,577,829,147
67 | SNC SNC-Lavalin Group Inc. $54.75 $59.63 $44.84 150,371,003 $8,232,812,414
68 | CPG Crescent Point Energy Corp. $15.04 $24.01 $13.79 541,742,592 $8,147,808,583
69 | GIL Gildan Activewear Inc. $34.58 $41.48 $30.97 230,250,032 $7,962,046,106
70 | TOU Tourmaline Oil Corp. $29.24 $39.77 $24.62 269,070,812 $7,867,630,542
71 | BPY.UN Brookfield Property Partners L.P. $30.22 $32.80 $27.40 260,222,314 $7,863,918,329
72 | KEY Keyera Corp. $38.97 $43.21 $36.03 186,068,896 $7,251,104,877
73 | CIX CI Financial Corp. $26.97 $29.95 $23.52 265,875,042 $7,170,649,882
74 | CU Canadian Utilities Limited Class A Non... $36.46 $40.78 $34.15 194,259,602 $7,082,705,088
75 | PSK PrairieSky Royalty Ltd. $29.84 $34.32 $22.59 237,215,530 $7,078,511,415
76 | ARX ARC Resources Ltd. $19.26 $24.94 $17.43 353,522,699 $6,808,847,182
77 | HR.UN H&R Real Estate Investment Trust $23.15 $23.83 $19.32 285,744,257 $6,614,979,549
78 | BEP.UN Brookfield Renewable Partners L.P. $38.86 $41.94 $36.10 166,839,324 $6,483,376,130
79 | RCI.A Rogers Communications Inc. Class A Shares $56.95 $60.98 $48.39 112,411,992 $6,401,862,944
80 | SHOP Shopify Inc. Class A Subordinate Votin... $80.65 $84.29 $33.03 77,151,899 $6,222,300,654
81 | LUN Lundin Mining Corporation $8.42 $8.94 $3.70 726,421,532 $6,116,469,299
82 | VET Vermilion Energy Inc. $51.59 $58.98 $34.86 118,486,757 $6,112,731,793
83 | IAG Industrial Alliance Insurance and Fina... $56.34 $59.32 $36.82 106,264,892 $5,986,964,015
84 | VRX Valeant Pharmaceuticals International ... $17.48 $93.40 $17.19 341,190,987 $5,964,018,452
85 | MX Methanex Corporation $66.31 $69.88 $35.01 89,842,838 $5,957,478,587
86 | CCO Cameco Corporation $14.53 $17.67 $9.88 395,792,522 $5,750,865,344
87 | K Kinross Gold Corporation $4.49 $7.56 $3.61 1,245,061,732 $5,590,327,176
88 | EFN Element Fleet Management Corp. $14.29 $16.57 $11.00 387,116,660 $5,531,897,071
89 | CAE CAE Inc. $20.32 $20.72 $14.50 268,339,716 $5,452,663,029
90 | ALA AltaGas Ltd. $31.05 $35.55 $28.86 171,323,404 $5,319,591,694
91 | FCR First Capital Realty Inc. $20.30 $23.31 $19.19 243,524,645 $4,943,550,293
92 | WSP WSP Global Inc. $47.98 $48.50 $35.76 101,858,881 $4,887,189,110
93 | BB BlackBerry Limited $9.21 $11.18 $8.15 530,487,882 $4,885,793,393
94 | ACO.X ATCO Ltd. Class I Non-voting Shares $46.49 $49.65 $37.44 101,235,523 $4,706,439,464
95 | BBD.B Bombardier Inc. Class B Subordinate Vo... $2.42 $2.76 $1.10 1,932,675,863 $4,677,075,588
96 | AQN Algonquin Power & Utilities Corp. $12.40 $12.67 $10.47 372,952,095 $4,624,605,978
97 | RBA Ritchie Bros. Auctioneers Incorporated $43.04 $52.88 $32.14 106,822,475 $4,597,639,324
98 | WFT West Fraser Timber Co. Ltd. $58.49 $58.89 $35.35 75,882,056 $4,438,341,455
99 | PEY Peyto Exploration & Development Corp. $26.56 $39.41 $26.50 164,776,923 $4,376,475,074
100 | FTT Finning International Inc. $25.81 $28.02 $18.37 168,167,202 $4,340,395,483
101 | SRU.UN Smart Real Estate Investment Trust $33.14 $38.91 $29.22 130,266,419 $4,317,029,125
102 | CAR.UN Canadian Apartment Properties Real Est... $31.71 $33.64 $28.14 135,573,857 $4,299,047,005
103 | ENF Enbridge Income Fund Holdings Inc. $34.06 $36.31 $27.78 124,320,723 $4,234,363,825
104 | CEF.A Central Fund of Canada Limited Class A... $16.72 $19.54 $15.05 252,116,003 $4,215,379,570
105 | VSN Veresen Inc. $13.44 $14.41 $7.51 313,628,855 $4,215,171,811
106 | MFI Maple Leaf Foods Inc. $31.62 $31.77 $25.83 131,479,589 $4,157,384,604
107 | NPI Northland Power Inc. $23.70 $25.14 $20.02 172,158,534 $4,080,157,255
108 | LNR Linamar Corporation $61.80 $65.50 $42.24 65,276,526 $4,034,089,306
109 | WCP Whitecap Resources Inc. $10.88 $12.90 $7.03 368,350,665 $4,007,655,235
110 | STN Stantec Inc. $34.58 $36.85 $28.74 114,081,229 $3,944,928,898
111 | BTO B2Gold Corp. $4.02 $4.74 $1.64 964,892,433 $3,878,867,580
112 | X TMX Group Limited $70.01 $76.31 $42.13 55,169,867 $3,862,442,388
113 | AC Air Canada Voting and Variable Voting ... $13.71 $14.85 $7.88 273,214,252 $3,745,767,394
114 | TIH Toromont Industries Ltd. $47.13 $48.86 $31.26 78,398,456 $3,694,919,231
115 | ENDP Endo International plc $16.36 $59.00 $14.98 222,957,818 $3,647,589,902
116 | REF.UN Canadian Real Estate Investment Trust $49.14 $51.49 $43.00 73,246,560 $3,599,335,958
117 | MIC Genworth MI Canada Inc. $38.17 $38.85 $27.39 91,864,100 $3,506,452,697
118 | PAAS Pan American Silver Corp. $22.49 $27.99 $12.92 152,967,456 $3,440,238,085
119 | THO Tahoe Resources Inc. $10.92 $22.13 $10.57 311,585,516 $3,402,513,834
120 | OSB Norbord Inc. $39.03 $40.06 $23.11 85,830,702 $3,349,972,299
121 | RNW TransAlta Renewables Inc. $14.83 $15.09 $11.53 224,129,357 $3,323,838,364
122 | YRI Yamana Gold Inc. $3.50 $7.87 $3.29 947,797,593 $3,317,291,575
123 | UFS Domtar Corporation $50.84 $58.31 $42.74 65,001,104 $3,304,656,127
124 | WPK Winpak Ltd. $50.78 $52.52 $42.40 65,000,000 $3,300,700,000
125 | IVN Ivanhoe Mines Ltd. $4.17 $5.11 $0.77 782,085,485 $3,261,296,472
126 | CGX Cineplex Inc. $50.35 $53.41 $48.26 63,515,875 $3,198,024,306
127 | CEE Centamin plc Ordinary Shares $2.71 $3.05 $1.59 1,152,107,984 $3,122,212,636
128 | QBR.B Quebecor Inc. Class B Subordinate Voti... $37.64 $41.22 $31.53 82,811,692 $3,117,032,086
129 | ELF E-L Financial Corporation Limited $770.00 $776.98 $650.00 4,019,409 $3,094,944,930
130 | AP.UN Allied Properties Real Estate Investme... $35.88 $39.70 $32.37 84,734,469 $3,040,272,747
131 | CSH.UN Chartwell Retirement Residences $15.68 $16.14 $13.11 191,610,859 $3,004,458,269
132 | TFII TFI International Inc. $32.65 $35.83 $21.22 91,604,977 $2,990,902,499
133 | MBT Manitoba Telecom Services Inc. $39.26 $39.65 $31.39 74,398,389 $2,920,880,752
134 | SJ Stella-Jones Inc. $41.96 $51.55 $37.17 69,303,307 $2,907,966,761
135 | EMP.A Empire Company Limited Non-Voting Clas... $16.59 $27.03 $14.74 173,537,901 $2,878,993,777
136 | ELD Eldorado Gold Corporation $3.95 $6.71 $3.46 716,587,134 $2,830,519,179
137 | AGI Alamos Gold Inc. $9.45 $13.65 $6.30 298,682,686 $2,822,551,382
138 | ERF Enerplus Corporation $11.73 $13.55 $4.34 240,482,929 $2,820,864,757
139 | AYA Amaya Inc. $19.06 $23.41 $13.71 145,559,224 $2,774,358,809
140 | NFI New Flyer Industries Inc. $44.81 $45.54 $26.00 61,803,213 $2,769,401,974
141 | CWB Canadian Western Bank $31.07 $32.29 $22.75 88,253,213 $2,742,027,327
142 | PKI Parkland Fuel Corporation $28.20 $31.77 $20.50 96,357,180 $2,717,272,476
143 | DGC Detour Gold Corporation $15.55 $35.93 $15.01 174,579,612 $2,714,712,966
144 | CU.X Canadian Utilities Limited Unlimited C... $36.33 $40.40 $34.25 74,294,183 $2,699,107,668
145 | GEI Gibson Energy Inc. $18.69 $19.88 $13.95 141,733,032 $2,648,990,368
146 | CUF.UN Cominar Real Estate Investment Trust $14.52 $18.33 $13.53 182,336,732 $2,647,529,348
147 | PEN Pacific Exploration & Production Corpo... $52.70 $60.05 $45.00 50,002,537 $2,635,133,699
148 | FSV FirstService Corporation Subordinate V... $76.01 $77.29 $51.74 34,516,917 $2,623,630,861
149 | SCL ShawCor Ltd. $37.40 $38.25 $26.54 69,895,391 $2,614,087,623
150 | HBM Hudbay Minerals Inc. $11.00 $11.95 $3.77 237,271,188 $2,609,983,068
151 | WJA WestJet Airlines Ltd. variable voting ... $22.10 $24.98 $18.33 117,200,439 $2,590,129,701
152 | PXT Parex Resources Inc. $16.83 $18.22 $10.13 153,058,827 $2,575,980,058
153 | DH DH Corporation $23.96 $40.22 $14.06 106,881,956 $2,560,891,665
154 | CPX Capital Power Corporation $25.86 $26.30 $16.93 96,152,416 $2,486,501,477
155 | CIGI Colliers International Group Inc. Subo... $66.33 $70.30 $42.80 37,324,717 $2,475,748,478
156 | CJR.B Corus Entertainment Inc. Class B Non-V... $12.59 $14.10 $10.42 196,436,119 $2,473,130,738
157 | CFP Canfor Corporation $18.51 $18.53 $11.96 132,804,543 $2,458,212,090
158 | OGC OceanaGold Corporation $3.92 $5.56 $3.24 611,367,916 $2,396,562,230
159 | CCA Cogeco Communications Inc. Subordinate... $70.84 $73.95 $60.12 33,750,723 $2,390,901,217
160 | PVG Pretium Resources Inc. $13.16 $16.48 $6.49 180,607,927 $2,376,800,319
161 | MDA MacDonald Dettwiler and Associates Ltd. $65.18 $92.92 $63.52 36,397,607 $2,372,396,024
162 | PEG Pattern Energy Group Inc. $26.89 $33.00 $23.24 87,520,754 $2,353,433,075
163 | IMG IAMGOLD Corporation $5.08 $7.65 $2.62 461,229,236 $2,343,044,518
164 | MRC Morguard Corporation $187.85 $189.00 $137.85 11,922,583 $2,239,657,216
165 | EDV Endeavour Mining Corporation Ordinary ... $23.94 $28.81 $10.11 93,546,349 $2,239,499,595
166 | CLS Celestica Inc. Subordinate Voting Shares $18.12 $19.06 $11.50 121,946,990 $2,209,679,458
167 | DSG Descartes Systems Group Inc. (The) $28.97 $30.57 $21.60 75,818,684 $2,196,467,275
168 | NG NovaGold Resources Inc. $6.81 $9.56 $5.09 321,531,676 $2,189,630,713
169 | GRT.UN Granite Real Estate Investment Trust $46.24 $47.04 $36.06 47,123,006 $2,178,967,797
170 | PHY.U Sprott Physical Gold Trust transferabl... $10.13 $11.65 $9.20 213,956,205 $2,167,376,356
171 | HBC Hudson's Bay Company $11.85 $19.69 $8.97 182,226,704 $2,159,386,442
172 | TA TransAlta Corporation $7.48 $8.12 $5.11 287,903,467 $2,153,517,933
173 | PBH Premium Brands Holdings Corporation $71.88 $72.40 $44.20 29,860,239 $2,146,353,979
174 | MEG MEG Energy Corp. $7.06 $9.83 $4.72 293,282,107 $2,070,571,675
175 | RRX Raging River Exploration Inc. $8.92 $11.87 $8.63 231,144,656 $2,061,810,331
176 | BEI.UN Boardwalk Real Estate Investment Trust $44.05 $59.76 $41.00 46,077,375 $2,029,708,368
177 | TPX.B Molson Coors Canada Inc. Class B Excha... $133.38 $147.85 $117.98 15,107,753 $2,015,072,095
178 | TXG Torex Gold Resources Inc. $25.27 $35.17 $16.00 79,732,159 $2,014,831,657
179 | BCB Cott Corporation $14.47 $22.66 $13.42 138,630,060 $2,005,976,968
180 | LB Laurentian Bank of Canada $59.22 $61.67 $46.02 33,843,987 $2,004,240,910
181 | ECI EnerCare Inc. $19.11 $19.76 $15.03 104,296,163 $1,993,099,674
182 | PD Precision Drilling Corporation $6.79 $8.21 $4.66 293,238,858 $1,991,091,845
183 | WTE Westshore Terminals Investment Corpora... $27.04 $29.05 $14.70 73,549,854 $1,988,788,052
184 | D.UN Dream Office Real Estate Investment Trust $18.96 $21.47 $15.95 104,759,223 $1,986,234,868
185 | CEU Canadian Energy Services & Technology ... $7.47 $8.65 $2.85 264,084,744 $1,972,713,037
186 | NGD New Gold Inc. $3.83 $7.87 $3.11 513,724,132 $1,967,563,425
187 | AX.UN Artis Real Estate Investment Trust $12.88 $13.77 $11.37 150,577,071 $1,939,432,674
188 | CG Centerra Gold Inc. $6.49 $8.13 $5.56 291,276,068 $1,890,381,681
189 | WEED Canopy Growth Corporation $11.80 $17.86 $2.40 159,143,476 $1,877,893,016
190 | KL Kirkland Lake Gold Ltd. $9.17 $11.15 $4.21 203,031,934 $1,861,802,834
191 | SPB Superior Plus Corp. $12.74 $13.24 $8.78 142,842,820 $1,819,817,526
192 | KXS Kinaxis Inc. $72.65 $76.17 $33.50 24,952,614 $1,812,807,407
193 | BIR Birchcliff Energy Ltd. $6.88 $10.50 $4.04 263,257,404 $1,811,210,939
194 | FR First Majestic Silver Corp. $10.99 $24.96 $6.72 164,461,567 $1,807,432,621
195 | POU Paramount Resources Ltd. Class A Commo... $16.91 $19.25 $5.79 106,119,095 $1,794,473,896
196 | MST.UN Milestone Apartments Real Estate Inves... $21.82 $21.92 $16.28 80,478,063 $1,756,031,334
197 | MTL Mullen Group Ltd. $16.83 $20.32 $13.28 103,654,316 $1,744,502,138
198 | SES Secure Energy Services Inc. $10.67 $12.04 $7.61 162,104,088 $1,729,650,618
199 | HCG Home Capital Group Inc. $26.16 $39.84 $23.41 64,273,519 $1,681,395,257
200 | SSO Silver Standard Resources Inc. $14.05 $20.48 $6.92 119,412,787 $1,677,749,657
201 | FRU Freehold Royalties Ltd. $14.19 $15.16 $9.66 117,918,274 $1,673,260,308
202 | RUS Russel Metals Inc. $27.02 $29.78 $18.30 61,735,485 $1,668,092,804
203 | FN First National Financial Corporation $27.04 $32.23 $22.43 59,967,429 $1,621,519,280
204 | CNU CNOOC Limited american depositary rece... $161.00 $183.15 $150.00 10,063,022 $1,620,146,542
205 | EFX Enerflex Ltd. $18.29 $19.17 $8.59 88,296,818 $1,614,948,801
206 | BYD.UN Boyd Group Income Fund $88.45 $91.31 $62.33 18,065,060 $1,597,854,557
207 | PJC.A Jean Coutu Group (PJC) Inc. (The) Clas... $19.90 $22.41 $18.56 80,183,204 $1,595,645,759
208 | RCH Richelieu Hardware Ltd. $27.10 $28.88 $21.07 57,942,766 $1,570,248,958
209 | BLX Boralex Inc. Class A Shares $20.70 $21.17 $15.60 75,727,411 $1,567,557,407
210 | POW.PR.E Power Corporation of Canada Participat... $32.00 $32.00 $28.50 48,854,772 $1,563,352,704
211 | INE Innergex Renewable Energy Inc. $14.42 $15.80 $12.43 108,375,159 $1,562,769,792
212 | OR Osisko Gold Royalties Ltd $14.65 $18.64 $11.90 106,530,788 $1,560,676,044
213 | GUD Knight Therapeutics Inc. $10.80 $11.03 $7.20 142,713,489 $1,541,305,681
214 | PSI Pason Systems Inc. $18.19 $20.46 $14.79 84,649,086 $1,539,766,874
215 | MAG MAG Silver Corp. $18.96 $23.32 $10.39 80,710,204 $1,530,265,467
216 | PLI ProMetic Life Sciences Inc. $2.43 $3.49 $1.47 623,549,331 $1,515,224,874
217 | FIH.U Fairfax India Holdings Corporation Sub... $12.51 $12.99 $9.30 117,434,531 $1,469,105,982
218 | ENGH Enghouse Systems Limited $54.29 $61.99 $48.40 26,936,462 $1,462,380,521
219 | QBR.A Quebecor Inc. Class A Multiple Voting ... $37.62 $41.88 $31.74 38,788,072 $1,459,207,268
220 | UNS Uni-Select Inc. $34.36 $35.47 $26.59 42,248,628 $1,451,662,858
221 | GC Great Canadian Gaming Corporation $23.58 $26.20 $16.55 61,466,930 $1,449,390,209
222 | AAR.UN Pure Industrial Real Estate Trust $5.87 $6.08 $4.57 245,682,372 $1,442,155,523
223 | NWC The North West Company Inc. $29.60 $32.50 $24.08 48,681,835 $1,440,982,316
224 | AAV Advantage Oil & Gas Ltd. $7.68 $10.33 $6.41 184,828,085 $1,419,479,692
225 | TCL.A Transcontinental Inc. Class A Subordin... $22.30 $23.12 $16.27 63,351,272 $1,412,733,365
226 | ECN ECN Capital Corp. $3.62 $3.70 $2.60 387,112,489 $1,401,347,210
227 | AIM Aimia Inc. $9.12 $9.49 $6.90 152,294,611 $1,388,926,852
228 | GTE Gran Tierra Energy Inc. $3.55 $4.44 $2.98 390,807,191 $1,387,365,528
229 | SPE Spartan Energy Corp. $2.62 $3.65 $2.49 525,825,255 $1,377,662,168
230 | CRT.UN CT Real Estate Investment Trust $15.10 $15.76 $13.80 90,479,102 $1,366,234,440
231 | TOG TORC Oil & Gas Ltd. $7.36 $9.23 $6.70 183,354,150 $1,349,486,544
232 | MUX McEwen Mining Inc. $4.39 $6.44 $2.30 299,569,826 $1,315,111,536
233 | CHP.UN Choice Properties Real Estate Investme... $14.19 $14.69 $12.12 92,568,828 $1,313,551,669
234 | SMF Semafo Inc. $3.99 $7.46 $3.60 324,840,476 $1,296,113,499
235 | IFP Interfor Corporation $18.49 $18.75 $10.21 70,030,455 $1,294,863,112
236 | ET Evertz Technologies Limited $17.10 $19.24 $15.72 75,619,746 $1,293,097,656
237 | ITP Intertape Polymer Group Inc. $21.76 $25.74 $16.48 59,060,335 $1,285,152,889
238 | CAS Cascades Inc. $13.43 $14.39 $7.72 94,606,610 $1,270,566,772
239 | TMR TMAC Resources Inc. $15.11 $20.18 $8.50 83,592,066 $1,263,076,117
240 | ESI Ensign Energy Services Inc. $8.19 $10.41 $5.56 154,140,909 $1,262,414,044
241 | CHE.UN Chemtrade Logistics Income Fund $18.17 $19.22 $16.10 69,172,785 $1,256,869,503
242 | ATA ATS Automation Tooling Systems Inc. $13.47 $13.88 $9.16 92,565,609 $1,246,858,753
243 | LNF Leon's Furniture Limited $17.29 $19.36 $14.05 71,949,454 $1,244,006,059
244 | SW Sierra Wireless Inc. $38.60 $39.80 $16.48 31,859,960 $1,229,794,456
245 | TCN Tricon Capital Group Inc. $10.86 $11.16 $8.10 112,754,769 $1,224,516,791
246 | LIF Labrador Iron Ore Royalty Corporation $19.07 $20.67 $11.06 64,000,000 $1,220,480,000
247 | ZZZ Sleep Country Canada Holdings Inc. $32.40 $34.15 $18.30 37,648,349 $1,219,806,507
248 | CRR.UN Crombie Real Estate Investment Trust $13.69 $15.79 $13.02 87,855,116 $1,202,736,538
249 | UNC United Corporations Limited $98.49 $98.49 $90.66 12,194,193 $1,201,006,068
250 | DRG.UN Dream Global Real Estate Investment Trust $9.55 $10.00 $8.36 125,632,095 $1,199,786,507
251 | KDX Klondex Mines Ltd. $6.79 $7.95 $3.40 175,835,809 $1,193,925,143
252 | BAD Badger Daylighting Ltd. $32.01 $35.19 $19.50 37,100,681 $1,187,592,798
253 | EQB Equitable Group Inc. $71.84 $74.66 $49.70 16,460,142 $1,182,496,601
254 | EIF Exchange Income Corporation $37.90 $45.28 $25.50 31,096,804 $1,178,568,871
255 | JE Just Energy Group Inc. $7.82 $8.73 $6.41 147,822,639 $1,155,973,036
256 | GUY Guyana Goldfields Inc. $6.64 $10.35 $4.29 171,148,473 $1,136,425,860
257 | FVI Fortuna Silver Mines Inc. $7.07 $12.73 $4.66 158,851,923 $1,123,083,095
258 | BTE Baytex Energy Corp. $4.81 $9.04 $4.38 233,448,990 $1,122,889,641
259 | PWT Penn West Petroleum Ltd. $2.23 $2.72 $0.78 502,765,488 $1,121,167,038
260 | AIF Altus Group Limited $29.44 $33.50 $19.32 37,474,533 $1,103,250,251
261 | NXE NexGen Energy Ltd. $3.57 $4.45 $1.27 306,398,620 $1,093,843,073
262 | MTY MTY Food Group Inc. $50.92 $53.20 $30.97 21,374,497 $1,088,389,387
263 | AOI Africa Oil Corp. $2.38 $2.81 $1.71 456,617,074 $1,086,748,636
264 | NVU.UN Northview Apartment Real Estate Invest... $21.42 $22.88 $18.01 49,944,749 $1,069,816,523
265 | MAL Magellan Aerospace Corporation $18.26 $19.97 $14.42 58,209,001 $1,062,896,358
266 | LUC Lucara Diamond Corp. $2.78 $4.39 $2.49 382,246,001 $1,062,643,882
267 | MNW Mitel Networks Corporation $8.70 $11.10 $7.56 121,970,528 $1,061,143,593
268 | KEL Kelt Exploration Ltd. $5.99 $7.49 $3.42 175,705,950 $1,052,478,640
269 | EIT.UN Canoe EIT Income Fund $12.00 $12.19 $10.19 87,673,896 $1,052,086,752
270 | CGG China Gold International Resources Cor... $2.63 $3.67 $1.84 396,413,753 $1,042,568,170
271 | TD.PF.H Toronto-Dominion Bank (The) 5-Year Rat... $26.01 $26.11 $25.24 40,000,000 $1,040,400,000
272 | TRP.PR.K TransCanada Corporation cumulative red... $25.74 $25.92 $24.74 40,000,000 $1,029,600,000
273 | MSI Morneau Shepell Inc. $19.27 $20.52 $16.21 53,230,064 $1,025,743,333
274 | NSU Nevsun Resources Ltd. $3.36 $4.81 $3.01 301,869,593 $1,014,281,832
275 | DII.B Dorel Industries Inc. Class B Subordin... $35.76 $40.85 $26.20 28,210,545 $1,008,809,089
--------------------------------------------------------------------------------
/price_targets.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {
7 | "collapsed": false
8 | },
9 | "outputs": [
10 | {
11 | "data": {
12 | "text/html": [
13 | "
\n",
14 | "
\n",
15 | " \n",
16 | " \n",
17 | " | \n",
18 | " ticker | \n",
19 | " analyst | \n",
20 | " target | \n",
21 | " rating | \n",
22 | " aver_close_at_analysis | \n",
23 | " analysis_date | \n",
24 | " aver_close_at_12m | \n",
25 | " 12m_date | \n",
26 | "
\n",
27 | " \n",
28 | " \n",
29 | " \n",
30 | " 0 | \n",
31 | " RY | \n",
32 | " TD Securities | \n",
33 | " 78.00 | \n",
34 | " Hold | \n",
35 | " 70.282856 | \n",
36 | " 2016-03-02 | \n",
37 | " 97.832857 | \n",
38 | " 2017-03-02 | \n",
39 | "
\n",
40 | " \n",
41 | " 1 | \n",
42 | " RY | \n",
43 | " Scotiabank | \n",
44 | " 77.00 | \n",
45 | " Outperform | \n",
46 | " 70.282856 | \n",
47 | " 2016-03-02 | \n",
48 | " 97.832857 | \n",
49 | " 2017-03-02 | \n",
50 | "
\n",
51 | " \n",
52 | " 2 | \n",
53 | " RY | \n",
54 | " TD Securities | \n",
55 | " 80.00 | \n",
56 | " Buy | \n",
57 | " 69.029999 | \n",
58 | " 2016-02-25 | \n",
59 | " 97.656251 | \n",
60 | " 2017-02-25 | \n",
61 | "
\n",
62 | " \n",
63 | " 3 | \n",
64 | " RY | \n",
65 | " Scotiabank | \n",
66 | " 77.00 | \n",
67 | " Outperform | \n",
68 | " 69.029999 | \n",
69 | " 2016-02-25 | \n",
70 | " 97.656251 | \n",
71 | " 2017-02-25 | \n",
72 | "
\n",
73 | " \n",
74 | " 4 | \n",
75 | " RY | \n",
76 | " Bank of America Corp | \n",
77 | " 85.00 | \n",
78 | " NaN | \n",
79 | " 69.029999 | \n",
80 | " 2016-02-25 | \n",
81 | " 97.656251 | \n",
82 | " 2017-02-25 | \n",
83 | "
\n",
84 | " \n",
85 | " 5 | \n",
86 | " RY | \n",
87 | " National Bank Financial | \n",
88 | " 72.00 | \n",
89 | " Sector Perform | \n",
90 | " 69.029999 | \n",
91 | " 2016-02-25 | \n",
92 | " 97.656251 | \n",
93 | " 2017-02-25 | \n",
94 | "
\n",
95 | " \n",
96 | " 6 | \n",
97 | " RY | \n",
98 | " CIBC | \n",
99 | " 78.00 | \n",
100 | " NaN | \n",
101 | " 69.029999 | \n",
102 | " 2016-02-25 | \n",
103 | " 97.656251 | \n",
104 | " 2017-02-25 | \n",
105 | "
\n",
106 | " \n",
107 | " 7 | \n",
108 | " RY | \n",
109 | " Barclays PLC | \n",
110 | " 58.00 | \n",
111 | " NaN | \n",
112 | " 70.185000 | \n",
113 | " 2016-02-17 | \n",
114 | " 98.369999 | \n",
115 | " 2017-02-17 | \n",
116 | "
\n",
117 | " \n",
118 | " 8 | \n",
119 | " RY | \n",
120 | " National Bank Financial | \n",
121 | " 74.00 | \n",
122 | " NaN | \n",
123 | " 67.873334 | \n",
124 | " 2016-02-10 | \n",
125 | " 96.436249 | \n",
126 | " 2017-02-10 | \n",
127 | "
\n",
128 | " \n",
129 | " 9 | \n",
130 | " RY | \n",
131 | " CIBC | \n",
132 | " 80.00 | \n",
133 | " NaN | \n",
134 | " 71.297143 | \n",
135 | " 2016-01-07 | \n",
136 | " 92.876249 | \n",
137 | " 2017-01-07 | \n",
138 | "
\n",
139 | " \n",
140 | " 10 | \n",
141 | " RY | \n",
142 | " Scotiabank | \n",
143 | " 86.00 | \n",
144 | " Outperform | \n",
145 | " 76.070001 | \n",
146 | " 2015-12-03 | \n",
147 | " 88.355556 | \n",
148 | " 2016-12-03 | \n",
149 | "
\n",
150 | " \n",
151 | " 11 | \n",
152 | " RY | \n",
153 | " Bank of America Corp | \n",
154 | " 92.00 | \n",
155 | " Buy | \n",
156 | " 76.070001 | \n",
157 | " 2015-12-03 | \n",
158 | " 88.355556 | \n",
159 | " 2016-12-03 | \n",
160 | "
\n",
161 | " \n",
162 | " 12 | \n",
163 | " RY | \n",
164 | " National Bank Financial | \n",
165 | " 79.00 | \n",
166 | " Sector Perform | \n",
167 | " 76.070001 | \n",
168 | " 2015-12-03 | \n",
169 | " 88.355556 | \n",
170 | " 2016-12-03 | \n",
171 | "
\n",
172 | " \n",
173 | " 13 | \n",
174 | " RY | \n",
175 | " Canaccord Genuity | \n",
176 | " 81.00 | \n",
177 | " NaN | \n",
178 | " 76.070001 | \n",
179 | " 2015-12-03 | \n",
180 | " 88.355556 | \n",
181 | " 2016-12-03 | \n",
182 | "
\n",
183 | " \n",
184 | " 14 | \n",
185 | " RY | \n",
186 | " Canaccord Genuity | \n",
187 | " 79.00 | \n",
188 | " Hold | \n",
189 | " 75.532858 | \n",
190 | " 2015-11-24 | \n",
191 | " 89.542858 | \n",
192 | " 2016-11-24 | \n",
193 | "
\n",
194 | " \n",
195 | " 15 | \n",
196 | " RY | \n",
197 | " Scotiabank | \n",
198 | " 79.00 | \n",
199 | " Outperform | \n",
200 | " 75.748570 | \n",
201 | " 2015-11-04 | \n",
202 | " 83.165001 | \n",
203 | " 2016-11-04 | \n",
204 | "
\n",
205 | " \n",
206 | " 16 | \n",
207 | " RY | \n",
208 | " Scotiabank | \n",
209 | " 79.00 | \n",
210 | " Outperform | \n",
211 | " 72.402858 | \n",
212 | " 2015-09-30 | \n",
213 | " 81.163751 | \n",
214 | " 2016-09-30 | \n",
215 | "
\n",
216 | " \n",
217 | " 17 | \n",
218 | " RY | \n",
219 | " Barclays PLC | \n",
220 | " 71.00 | \n",
221 | " Underweight | \n",
222 | " 72.565000 | \n",
223 | " 2015-09-10 | \n",
224 | " 80.888749 | \n",
225 | " 2016-09-10 | \n",
226 | "
\n",
227 | " \n",
228 | " 18 | \n",
229 | " RY | \n",
230 | " CIBC | \n",
231 | " 83.00 | \n",
232 | " NaN | \n",
233 | " 72.359998 | \n",
234 | " 2015-09-01 | \n",
235 | " 81.605000 | \n",
236 | " 2016-09-01 | \n",
237 | "
\n",
238 | " \n",
239 | " 19 | \n",
240 | " RY | \n",
241 | " Bank of America Corp | \n",
242 | " 72.00 | \n",
243 | " Buy | \n",
244 | " 72.312221 | \n",
245 | " 2015-08-29 | \n",
246 | " 81.600001 | \n",
247 | " 2016-08-29 | \n",
248 | "
\n",
249 | " \n",
250 | " 20 | \n",
251 | " RY | \n",
252 | " Canaccord Genuity | \n",
253 | " 75.00 | \n",
254 | " Hold | \n",
255 | " 72.504284 | \n",
256 | " 2015-08-27 | \n",
257 | " 81.622223 | \n",
258 | " 2016-08-27 | \n",
259 | "
\n",
260 | " \n",
261 | " 21 | \n",
262 | " RY | \n",
263 | " Scotiabank | \n",
264 | " 79.00 | \n",
265 | " Sector Outperform | \n",
266 | " 72.504284 | \n",
267 | " 2015-08-27 | \n",
268 | " 81.622223 | \n",
269 | " 2016-08-27 | \n",
270 | "
\n",
271 | " \n",
272 | " 22 | \n",
273 | " RY | \n",
274 | " Bank of America Corp | \n",
275 | " 72.00 | \n",
276 | " Buy | \n",
277 | " 72.504284 | \n",
278 | " 2015-08-27 | \n",
279 | " 81.622223 | \n",
280 | " 2016-08-27 | \n",
281 | "
\n",
282 | " \n",
283 | " 23 | \n",
284 | " RY | \n",
285 | " Scotiabank | \n",
286 | " 82.00 | \n",
287 | " NaN | \n",
288 | " 73.820001 | \n",
289 | " 2015-08-20 | \n",
290 | " 80.896667 | \n",
291 | " 2016-08-20 | \n",
292 | "
\n",
293 | " \n",
294 | " 24 | \n",
295 | " RY | \n",
296 | " CIBC | \n",
297 | " 84.00 | \n",
298 | " Outperform | \n",
299 | " 75.108750 | \n",
300 | " 2015-08-17 | \n",
301 | " 80.394286 | \n",
302 | " 2016-08-17 | \n",
303 | "
\n",
304 | " \n",
305 | " 25 | \n",
306 | " RY | \n",
307 | " Barclays PLC | \n",
308 | " 76.00 | \n",
309 | " NaN | \n",
310 | " 76.121428 | \n",
311 | " 2015-08-12 | \n",
312 | " 80.171250 | \n",
313 | " 2016-08-12 | \n",
314 | "
\n",
315 | " \n",
316 | " 26 | \n",
317 | " RY | \n",
318 | " TD Securities | \n",
319 | " 90.00 | \n",
320 | " Buy | \n",
321 | " 79.646250 | \n",
322 | " 2015-05-29 | \n",
323 | " 79.502223 | \n",
324 | " 2016-05-29 | \n",
325 | "
\n",
326 | " \n",
327 | " 27 | \n",
328 | " RY | \n",
329 | " CIBC | \n",
330 | " 87.00 | \n",
331 | " Outperform | \n",
332 | " 79.646250 | \n",
333 | " 2015-05-29 | \n",
334 | " 79.502223 | \n",
335 | " 2016-05-29 | \n",
336 | "
\n",
337 | " \n",
338 | " 28 | \n",
339 | " RY | \n",
340 | " BMO Capital Markets | \n",
341 | " 90.00 | \n",
342 | " Market Perform | \n",
343 | " 79.646250 | \n",
344 | " 2015-05-29 | \n",
345 | " 79.502223 | \n",
346 | " 2016-05-29 | \n",
347 | "
\n",
348 | " \n",
349 | " 29 | \n",
350 | " TD | \n",
351 | " CIBC | \n",
352 | " 58.00 | \n",
353 | " NaN | \n",
354 | " 53.570000 | \n",
355 | " 2016-03-03 | \n",
356 | " 69.498752 | \n",
357 | " 2017-03-03 | \n",
358 | "
\n",
359 | " \n",
360 | " ... | \n",
361 | " ... | \n",
362 | " ... | \n",
363 | " ... | \n",
364 | " ... | \n",
365 | " ... | \n",
366 | " ... | \n",
367 | " ... | \n",
368 | " ... | \n",
369 | "
\n",
370 | " \n",
371 | " 4310 | \n",
372 | " KEL | \n",
373 | " CIBC | \n",
374 | " 6.00 | \n",
375 | " Sector Performer | \n",
376 | " 4.950000 | \n",
377 | " 2015-10-28 | \n",
378 | " 6.191250 | \n",
379 | " 2016-10-28 | \n",
380 | "
\n",
381 | " \n",
382 | " 4311 | \n",
383 | " KEL | \n",
384 | " Raymond James Financial, Inc. | \n",
385 | " 8.00 | \n",
386 | " NaN | \n",
387 | " 5.848571 | \n",
388 | " 2015-10-16 | \n",
389 | " 6.433333 | \n",
390 | " 2016-10-16 | \n",
391 | "
\n",
392 | " \n",
393 | " 4312 | \n",
394 | " KEL | \n",
395 | " Paradigm Capital | \n",
396 | " 7.50 | \n",
397 | " NaN | \n",
398 | " 6.135000 | \n",
399 | " 2015-10-02 | \n",
400 | " 5.960000 | \n",
401 | " 2016-10-02 | \n",
402 | "
\n",
403 | " \n",
404 | " 4313 | \n",
405 | " KEL | \n",
406 | " Scotiabank | \n",
407 | " 11.00 | \n",
408 | " NaN | \n",
409 | " 5.790000 | \n",
410 | " 2015-09-29 | \n",
411 | " 5.758571 | \n",
412 | " 2016-09-29 | \n",
413 | "
\n",
414 | " \n",
415 | " 4314 | \n",
416 | " KEL | \n",
417 | " CIBC | \n",
418 | " 7.00 | \n",
419 | " NaN | \n",
420 | " 5.992857 | \n",
421 | " 2015-09-23 | \n",
422 | " 5.647500 | \n",
423 | " 2016-09-23 | \n",
424 | "
\n",
425 | " \n",
426 | " 4315 | \n",
427 | " KEL | \n",
428 | " Credit Suisse Group AG | \n",
429 | " 9.00 | \n",
430 | " NaN | \n",
431 | " 6.455714 | \n",
432 | " 2015-08-13 | \n",
433 | " 4.844444 | \n",
434 | " 2016-08-13 | \n",
435 | "
\n",
436 | " \n",
437 | " 4316 | \n",
438 | " KEL | \n",
439 | " Raymond James Financial, Inc. | \n",
440 | " 9.50 | \n",
441 | " NaN | \n",
442 | " 6.534286 | \n",
443 | " 2015-08-12 | \n",
444 | " 4.812500 | \n",
445 | " 2016-08-12 | \n",
446 | "
\n",
447 | " \n",
448 | " 4317 | \n",
449 | " KEL | \n",
450 | " Dundee Securities | \n",
451 | " 9.75 | \n",
452 | " Buy | \n",
453 | " 6.662857 | \n",
454 | " 2015-08-11 | \n",
455 | " 4.795714 | \n",
456 | " 2016-08-11 | \n",
457 | "
\n",
458 | " \n",
459 | " 4318 | \n",
460 | " KEL | \n",
461 | " TD Securities | \n",
462 | " 12.00 | \n",
463 | " Buy | \n",
464 | " 6.662857 | \n",
465 | " 2015-08-11 | \n",
466 | " 4.795714 | \n",
467 | " 2016-08-11 | \n",
468 | "
\n",
469 | " \n",
470 | " 4319 | \n",
471 | " KEL | \n",
472 | " Royal Bank of Canada | \n",
473 | " 10.00 | \n",
474 | " Outperform | \n",
475 | " 6.662857 | \n",
476 | " 2015-08-11 | \n",
477 | " 4.795714 | \n",
478 | " 2016-08-11 | \n",
479 | "
\n",
480 | " \n",
481 | " 4320 | \n",
482 | " KEL | \n",
483 | " Paradigm Capital | \n",
484 | " 10.00 | \n",
485 | " Buy | \n",
486 | " 6.662857 | \n",
487 | " 2015-08-11 | \n",
488 | " 4.795714 | \n",
489 | " 2016-08-11 | \n",
490 | "
\n",
491 | " \n",
492 | " 4321 | \n",
493 | " KEL | \n",
494 | " FirstEnergy Capital | \n",
495 | " 9.50 | \n",
496 | " NaN | \n",
497 | " 6.662857 | \n",
498 | " 2015-08-11 | \n",
499 | " 4.795714 | \n",
500 | " 2016-08-11 | \n",
501 | "
\n",
502 | " \n",
503 | " 4322 | \n",
504 | " KEL | \n",
505 | " CSFB | \n",
506 | " 8.50 | \n",
507 | " Neutral | \n",
508 | " 6.662857 | \n",
509 | " 2015-08-11 | \n",
510 | " 4.795714 | \n",
511 | " 2016-08-11 | \n",
512 | "
\n",
513 | " \n",
514 | " 4323 | \n",
515 | " KEL | \n",
516 | " CIBC | \n",
517 | " 9.50 | \n",
518 | " Sector Outperformer | \n",
519 | " 6.662857 | \n",
520 | " 2015-08-11 | \n",
521 | " 4.795714 | \n",
522 | " 2016-08-11 | \n",
523 | "
\n",
524 | " \n",
525 | " 4324 | \n",
526 | " KEL | \n",
527 | " TD Securities | \n",
528 | " 13.00 | \n",
529 | " Buy | \n",
530 | " 8.331429 | \n",
531 | " 2015-07-08 | \n",
532 | " 4.676250 | \n",
533 | " 2016-07-08 | \n",
534 | "
\n",
535 | " \n",
536 | " 4325 | \n",
537 | " KEL | \n",
538 | " Scotiabank | \n",
539 | " 11.50 | \n",
540 | " Outperform | \n",
541 | " 8.331429 | \n",
542 | " 2015-07-08 | \n",
543 | " 4.676250 | \n",
544 | " 2016-07-08 | \n",
545 | "
\n",
546 | " \n",
547 | " 4326 | \n",
548 | " KEL | \n",
549 | " Dundee Securities | \n",
550 | " 12.75 | \n",
551 | " Buy | \n",
552 | " 8.940000 | \n",
553 | " 2015-06-16 | \n",
554 | " 4.817143 | \n",
555 | " 2016-06-16 | \n",
556 | "
\n",
557 | " \n",
558 | " 4327 | \n",
559 | " KEL | \n",
560 | " Raymond James Financial, Inc. | \n",
561 | " 11.00 | \n",
562 | " Outperform | \n",
563 | " 8.704286 | \n",
564 | " 2015-05-19 | \n",
565 | " 4.593333 | \n",
566 | " 2016-05-19 | \n",
567 | "
\n",
568 | " \n",
569 | " 4328 | \n",
570 | " MSI | \n",
571 | " National Bank Financial | \n",
572 | " 19.50 | \n",
573 | " Outperform | \n",
574 | " 17.172500 | \n",
575 | " 2016-04-04 | \n",
576 | " 20.207142 | \n",
577 | " 2017-04-04 | \n",
578 | "
\n",
579 | " \n",
580 | " 4329 | \n",
581 | " MSI | \n",
582 | " TD Securities | \n",
583 | " 17.50 | \n",
584 | " Hold | \n",
585 | " 15.621250 | \n",
586 | " 2016-03-04 | \n",
587 | " 18.902222 | \n",
588 | " 2017-03-04 | \n",
589 | "
\n",
590 | " \n",
591 | " 4330 | \n",
592 | " MSI | \n",
593 | " Scotiabank | \n",
594 | " 19.00 | \n",
595 | " Outperform | \n",
596 | " 15.621250 | \n",
597 | " 2016-03-04 | \n",
598 | " 18.902222 | \n",
599 | " 2017-03-04 | \n",
600 | "
\n",
601 | " \n",
602 | " 4331 | \n",
603 | " MSI | \n",
604 | " TD Securities | \n",
605 | " 17.00 | \n",
606 | " Hold | \n",
607 | " 15.494286 | \n",
608 | " 2015-11-11 | \n",
609 | " 19.306250 | \n",
610 | " 2016-11-11 | \n",
611 | "
\n",
612 | " \n",
613 | " 4332 | \n",
614 | " MSI | \n",
615 | " Scotiabank | \n",
616 | " 18.50 | \n",
617 | " NaN | \n",
618 | " 16.601667 | \n",
619 | " 2015-08-06 | \n",
620 | " 18.432500 | \n",
621 | " 2016-08-06 | \n",
622 | "
\n",
623 | " \n",
624 | " 4333 | \n",
625 | " MSI | \n",
626 | " Scotiabank | \n",
627 | " 19.00 | \n",
628 | " Sector Perform | \n",
629 | " 16.596667 | \n",
630 | " 2015-08-05 | \n",
631 | " 18.424286 | \n",
632 | " 2016-08-05 | \n",
633 | "
\n",
634 | " \n",
635 | " 4334 | \n",
636 | " MSI | \n",
637 | " Scotiabank | \n",
638 | " 18.00 | \n",
639 | " Sector Perform | \n",
640 | " 17.690000 | \n",
641 | " 2015-05-12 | \n",
642 | " 17.431428 | \n",
643 | " 2016-05-12 | \n",
644 | "
\n",
645 | " \n",
646 | " 4335 | \n",
647 | " NSU | \n",
648 | " Royal Bank of Canada | \n",
649 | " 6.00 | \n",
650 | " Outperform | \n",
651 | " 4.457143 | \n",
652 | " 2016-04-27 | \n",
653 | " 3.172857 | \n",
654 | " 2017-04-27 | \n",
655 | "
\n",
656 | " \n",
657 | " 4336 | \n",
658 | " NSU | \n",
659 | " Paradigm Capital | \n",
660 | " 6.00 | \n",
661 | " Buy | \n",
662 | " 4.474286 | \n",
663 | " 2016-04-26 | \n",
664 | " 3.181429 | \n",
665 | " 2017-04-26 | \n",
666 | "
\n",
667 | " \n",
668 | " 4337 | \n",
669 | " NSU | \n",
670 | " Canaccord Genuity | \n",
671 | " 5.00 | \n",
672 | " Hold | \n",
673 | " 4.427500 | \n",
674 | " 2016-04-22 | \n",
675 | " 3.252222 | \n",
676 | " 2017-04-22 | \n",
677 | "
\n",
678 | " \n",
679 | " 4338 | \n",
680 | " NSU | \n",
681 | " Paradigm Capital | \n",
682 | " 5.50 | \n",
683 | " Buy | \n",
684 | " 3.887500 | \n",
685 | " 2015-11-02 | \n",
686 | " 3.787143 | \n",
687 | " 2016-11-02 | \n",
688 | "
\n",
689 | " \n",
690 | " 4339 | \n",
691 | " NSU | \n",
692 | " CIBC | \n",
693 | " 5.00 | \n",
694 | " Sector Perform | \n",
695 | " 3.790000 | \n",
696 | " 2015-09-04 | \n",
697 | " 4.190000 | \n",
698 | " 2016-09-04 | \n",
699 | "
\n",
700 | " \n",
701 | "
\n",
702 | "
4340 rows × 8 columns
\n",
703 | "
"
704 | ],
705 | "text/plain": [
706 | " ticker analyst target rating \\\n",
707 | "0 RY TD Securities 78.00 Hold \n",
708 | "1 RY Scotiabank 77.00 Outperform \n",
709 | "2 RY TD Securities 80.00 Buy \n",
710 | "3 RY Scotiabank 77.00 Outperform \n",
711 | "4 RY Bank of America Corp 85.00 NaN \n",
712 | "5 RY National Bank Financial 72.00 Sector Perform \n",
713 | "6 RY CIBC 78.00 NaN \n",
714 | "7 RY Barclays PLC 58.00 NaN \n",
715 | "8 RY National Bank Financial 74.00 NaN \n",
716 | "9 RY CIBC 80.00 NaN \n",
717 | "10 RY Scotiabank 86.00 Outperform \n",
718 | "11 RY Bank of America Corp 92.00 Buy \n",
719 | "12 RY National Bank Financial 79.00 Sector Perform \n",
720 | "13 RY Canaccord Genuity 81.00 NaN \n",
721 | "14 RY Canaccord Genuity 79.00 Hold \n",
722 | "15 RY Scotiabank 79.00 Outperform \n",
723 | "16 RY Scotiabank 79.00 Outperform \n",
724 | "17 RY Barclays PLC 71.00 Underweight \n",
725 | "18 RY CIBC 83.00 NaN \n",
726 | "19 RY Bank of America Corp 72.00 Buy \n",
727 | "20 RY Canaccord Genuity 75.00 Hold \n",
728 | "21 RY Scotiabank 79.00 Sector Outperform \n",
729 | "22 RY Bank of America Corp 72.00 Buy \n",
730 | "23 RY Scotiabank 82.00 NaN \n",
731 | "24 RY CIBC 84.00 Outperform \n",
732 | "25 RY Barclays PLC 76.00 NaN \n",
733 | "26 RY TD Securities 90.00 Buy \n",
734 | "27 RY CIBC 87.00 Outperform \n",
735 | "28 RY BMO Capital Markets 90.00 Market Perform \n",
736 | "29 TD CIBC 58.00 NaN \n",
737 | "... ... ... ... ... \n",
738 | "4310 KEL CIBC 6.00 Sector Performer \n",
739 | "4311 KEL Raymond James Financial, Inc. 8.00 NaN \n",
740 | "4312 KEL Paradigm Capital 7.50 NaN \n",
741 | "4313 KEL Scotiabank 11.00 NaN \n",
742 | "4314 KEL CIBC 7.00 NaN \n",
743 | "4315 KEL Credit Suisse Group AG 9.00 NaN \n",
744 | "4316 KEL Raymond James Financial, Inc. 9.50 NaN \n",
745 | "4317 KEL Dundee Securities 9.75 Buy \n",
746 | "4318 KEL TD Securities 12.00 Buy \n",
747 | "4319 KEL Royal Bank of Canada 10.00 Outperform \n",
748 | "4320 KEL Paradigm Capital 10.00 Buy \n",
749 | "4321 KEL FirstEnergy Capital 9.50 NaN \n",
750 | "4322 KEL CSFB 8.50 Neutral \n",
751 | "4323 KEL CIBC 9.50 Sector Outperformer \n",
752 | "4324 KEL TD Securities 13.00 Buy \n",
753 | "4325 KEL Scotiabank 11.50 Outperform \n",
754 | "4326 KEL Dundee Securities 12.75 Buy \n",
755 | "4327 KEL Raymond James Financial, Inc. 11.00 Outperform \n",
756 | "4328 MSI National Bank Financial 19.50 Outperform \n",
757 | "4329 MSI TD Securities 17.50 Hold \n",
758 | "4330 MSI Scotiabank 19.00 Outperform \n",
759 | "4331 MSI TD Securities 17.00 Hold \n",
760 | "4332 MSI Scotiabank 18.50 NaN \n",
761 | "4333 MSI Scotiabank 19.00 Sector Perform \n",
762 | "4334 MSI Scotiabank 18.00 Sector Perform \n",
763 | "4335 NSU Royal Bank of Canada 6.00 Outperform \n",
764 | "4336 NSU Paradigm Capital 6.00 Buy \n",
765 | "4337 NSU Canaccord Genuity 5.00 Hold \n",
766 | "4338 NSU Paradigm Capital 5.50 Buy \n",
767 | "4339 NSU CIBC 5.00 Sector Perform \n",
768 | "\n",
769 | " aver_close_at_analysis analysis_date aver_close_at_12m 12m_date \n",
770 | "0 70.282856 2016-03-02 97.832857 2017-03-02 \n",
771 | "1 70.282856 2016-03-02 97.832857 2017-03-02 \n",
772 | "2 69.029999 2016-02-25 97.656251 2017-02-25 \n",
773 | "3 69.029999 2016-02-25 97.656251 2017-02-25 \n",
774 | "4 69.029999 2016-02-25 97.656251 2017-02-25 \n",
775 | "5 69.029999 2016-02-25 97.656251 2017-02-25 \n",
776 | "6 69.029999 2016-02-25 97.656251 2017-02-25 \n",
777 | "7 70.185000 2016-02-17 98.369999 2017-02-17 \n",
778 | "8 67.873334 2016-02-10 96.436249 2017-02-10 \n",
779 | "9 71.297143 2016-01-07 92.876249 2017-01-07 \n",
780 | "10 76.070001 2015-12-03 88.355556 2016-12-03 \n",
781 | "11 76.070001 2015-12-03 88.355556 2016-12-03 \n",
782 | "12 76.070001 2015-12-03 88.355556 2016-12-03 \n",
783 | "13 76.070001 2015-12-03 88.355556 2016-12-03 \n",
784 | "14 75.532858 2015-11-24 89.542858 2016-11-24 \n",
785 | "15 75.748570 2015-11-04 83.165001 2016-11-04 \n",
786 | "16 72.402858 2015-09-30 81.163751 2016-09-30 \n",
787 | "17 72.565000 2015-09-10 80.888749 2016-09-10 \n",
788 | "18 72.359998 2015-09-01 81.605000 2016-09-01 \n",
789 | "19 72.312221 2015-08-29 81.600001 2016-08-29 \n",
790 | "20 72.504284 2015-08-27 81.622223 2016-08-27 \n",
791 | "21 72.504284 2015-08-27 81.622223 2016-08-27 \n",
792 | "22 72.504284 2015-08-27 81.622223 2016-08-27 \n",
793 | "23 73.820001 2015-08-20 80.896667 2016-08-20 \n",
794 | "24 75.108750 2015-08-17 80.394286 2016-08-17 \n",
795 | "25 76.121428 2015-08-12 80.171250 2016-08-12 \n",
796 | "26 79.646250 2015-05-29 79.502223 2016-05-29 \n",
797 | "27 79.646250 2015-05-29 79.502223 2016-05-29 \n",
798 | "28 79.646250 2015-05-29 79.502223 2016-05-29 \n",
799 | "29 53.570000 2016-03-03 69.498752 2017-03-03 \n",
800 | "... ... ... ... ... \n",
801 | "4310 4.950000 2015-10-28 6.191250 2016-10-28 \n",
802 | "4311 5.848571 2015-10-16 6.433333 2016-10-16 \n",
803 | "4312 6.135000 2015-10-02 5.960000 2016-10-02 \n",
804 | "4313 5.790000 2015-09-29 5.758571 2016-09-29 \n",
805 | "4314 5.992857 2015-09-23 5.647500 2016-09-23 \n",
806 | "4315 6.455714 2015-08-13 4.844444 2016-08-13 \n",
807 | "4316 6.534286 2015-08-12 4.812500 2016-08-12 \n",
808 | "4317 6.662857 2015-08-11 4.795714 2016-08-11 \n",
809 | "4318 6.662857 2015-08-11 4.795714 2016-08-11 \n",
810 | "4319 6.662857 2015-08-11 4.795714 2016-08-11 \n",
811 | "4320 6.662857 2015-08-11 4.795714 2016-08-11 \n",
812 | "4321 6.662857 2015-08-11 4.795714 2016-08-11 \n",
813 | "4322 6.662857 2015-08-11 4.795714 2016-08-11 \n",
814 | "4323 6.662857 2015-08-11 4.795714 2016-08-11 \n",
815 | "4324 8.331429 2015-07-08 4.676250 2016-07-08 \n",
816 | "4325 8.331429 2015-07-08 4.676250 2016-07-08 \n",
817 | "4326 8.940000 2015-06-16 4.817143 2016-06-16 \n",
818 | "4327 8.704286 2015-05-19 4.593333 2016-05-19 \n",
819 | "4328 17.172500 2016-04-04 20.207142 2017-04-04 \n",
820 | "4329 15.621250 2016-03-04 18.902222 2017-03-04 \n",
821 | "4330 15.621250 2016-03-04 18.902222 2017-03-04 \n",
822 | "4331 15.494286 2015-11-11 19.306250 2016-11-11 \n",
823 | "4332 16.601667 2015-08-06 18.432500 2016-08-06 \n",
824 | "4333 16.596667 2015-08-05 18.424286 2016-08-05 \n",
825 | "4334 17.690000 2015-05-12 17.431428 2016-05-12 \n",
826 | "4335 4.457143 2016-04-27 3.172857 2017-04-27 \n",
827 | "4336 4.474286 2016-04-26 3.181429 2017-04-26 \n",
828 | "4337 4.427500 2016-04-22 3.252222 2017-04-22 \n",
829 | "4338 3.887500 2015-11-02 3.787143 2016-11-02 \n",
830 | "4339 3.790000 2015-09-04 4.190000 2016-09-04 \n",
831 | "\n",
832 | "[4340 rows x 8 columns]"
833 | ]
834 | },
835 | "execution_count": 1,
836 | "metadata": {},
837 | "output_type": "execute_result"
838 | }
839 | ],
840 | "source": [
841 | "import pandas as pd\n",
842 | "import numpy as np\n",
843 | "\n",
844 | "df = pd.read_csv('targets.csv')\n",
845 | "\n",
846 | "df"
847 | ]
848 | },
849 | {
850 | "cell_type": "code",
851 | "execution_count": 2,
852 | "metadata": {
853 | "collapsed": false,
854 | "scrolled": true
855 | },
856 | "outputs": [
857 | {
858 | "data": {
859 | "text/html": [
860 | "\n",
861 | "
\n",
862 | " \n",
863 | " \n",
864 | " | \n",
865 | " ticker | \n",
866 | " analyst | \n",
867 | " target | \n",
868 | " aver_close_at_12m | \n",
869 | " target_perc | \n",
870 | " real_perc | \n",
871 | " error | \n",
872 | "
\n",
873 | " \n",
874 | " \n",
875 | " \n",
876 | " 0 | \n",
877 | " RY | \n",
878 | " TD Securities | \n",
879 | " 78.00 | \n",
880 | " 97.832857 | \n",
881 | " 10.980122 | \n",
882 | " 39.198750 | \n",
883 | " -28.218627 | \n",
884 | "
\n",
885 | " \n",
886 | " 1 | \n",
887 | " RY | \n",
888 | " Scotiabank | \n",
889 | " 77.00 | \n",
890 | " 97.832857 | \n",
891 | " 9.557300 | \n",
892 | " 39.198750 | \n",
893 | " -29.641449 | \n",
894 | "
\n",
895 | " \n",
896 | " 2 | \n",
897 | " RY | \n",
898 | " TD Securities | \n",
899 | " 80.00 | \n",
900 | " 97.656251 | \n",
901 | " 15.891643 | \n",
902 | " 41.469292 | \n",
903 | " -25.577649 | \n",
904 | "
\n",
905 | " \n",
906 | " 3 | \n",
907 | " RY | \n",
908 | " Scotiabank | \n",
909 | " 77.00 | \n",
910 | " 97.656251 | \n",
911 | " 11.545707 | \n",
912 | " 41.469292 | \n",
913 | " -29.923586 | \n",
914 | "
\n",
915 | " \n",
916 | " 4 | \n",
917 | " RY | \n",
918 | " Bank of America Corp | \n",
919 | " 85.00 | \n",
920 | " 97.656251 | \n",
921 | " 23.134871 | \n",
922 | " 41.469292 | \n",
923 | " -18.334421 | \n",
924 | "
\n",
925 | " \n",
926 | " 5 | \n",
927 | " RY | \n",
928 | " National Bank Financial | \n",
929 | " 72.00 | \n",
930 | " 97.656251 | \n",
931 | " 4.302479 | \n",
932 | " 41.469292 | \n",
933 | " -37.166813 | \n",
934 | "
\n",
935 | " \n",
936 | " 6 | \n",
937 | " RY | \n",
938 | " CIBC | \n",
939 | " 78.00 | \n",
940 | " 97.656251 | \n",
941 | " 12.994352 | \n",
942 | " 41.469292 | \n",
943 | " -28.474940 | \n",
944 | "
\n",
945 | " \n",
946 | " 7 | \n",
947 | " RY | \n",
948 | " Barclays PLC | \n",
949 | " 58.00 | \n",
950 | " 98.369999 | \n",
951 | " -17.361260 | \n",
952 | " 40.158152 | \n",
953 | " -57.519412 | \n",
954 | "
\n",
955 | " \n",
956 | " 8 | \n",
957 | " RY | \n",
958 | " National Bank Financial | \n",
959 | " 74.00 | \n",
960 | " 96.436249 | \n",
961 | " 9.026617 | \n",
962 | " 42.082675 | \n",
963 | " -33.056058 | \n",
964 | "
\n",
965 | " \n",
966 | " 9 | \n",
967 | " RY | \n",
968 | " CIBC | \n",
969 | " 80.00 | \n",
970 | " 92.876249 | \n",
971 | " 12.206459 | \n",
972 | " 30.266438 | \n",
973 | " -18.059979 | \n",
974 | "
\n",
975 | " \n",
976 | " 10 | \n",
977 | " RY | \n",
978 | " Scotiabank | \n",
979 | " 86.00 | \n",
980 | " 88.355556 | \n",
981 | " 13.053765 | \n",
982 | " 16.150329 | \n",
983 | " -3.096564 | \n",
984 | "
\n",
985 | " \n",
986 | " 11 | \n",
987 | " RY | \n",
988 | " Bank of America Corp | \n",
989 | " 92.00 | \n",
990 | " 88.355556 | \n",
991 | " 20.941237 | \n",
992 | " 16.150329 | \n",
993 | " 4.790908 | \n",
994 | "
\n",
995 | " \n",
996 | " 12 | \n",
997 | " RY | \n",
998 | " National Bank Financial | \n",
999 | " 79.00 | \n",
1000 | " 88.355556 | \n",
1001 | " 3.851714 | \n",
1002 | " 16.150329 | \n",
1003 | " -12.298614 | \n",
1004 | "
\n",
1005 | " \n",
1006 | " 13 | \n",
1007 | " RY | \n",
1008 | " Canaccord Genuity | \n",
1009 | " 81.00 | \n",
1010 | " 88.355556 | \n",
1011 | " 6.480872 | \n",
1012 | " 16.150329 | \n",
1013 | " -9.669457 | \n",
1014 | "
\n",
1015 | " \n",
1016 | " 14 | \n",
1017 | " RY | \n",
1018 | " Canaccord Genuity | \n",
1019 | " 79.00 | \n",
1020 | " 89.542858 | \n",
1021 | " 4.590244 | \n",
1022 | " 18.548219 | \n",
1023 | " -13.957975 | \n",
1024 | "
\n",
1025 | " \n",
1026 | " 15 | \n",
1027 | " RY | \n",
1028 | " Scotiabank | \n",
1029 | " 79.00 | \n",
1030 | " 83.165001 | \n",
1031 | " 4.292398 | \n",
1032 | " 9.790852 | \n",
1033 | " -5.498455 | \n",
1034 | "
\n",
1035 | " \n",
1036 | " 16 | \n",
1037 | " RY | \n",
1038 | " Scotiabank | \n",
1039 | " 79.00 | \n",
1040 | " 81.163751 | \n",
1041 | " 9.111714 | \n",
1042 | " 12.100202 | \n",
1043 | " -2.988488 | \n",
1044 | "
\n",
1045 | " \n",
1046 | " 17 | \n",
1047 | " RY | \n",
1048 | " Barclays PLC | \n",
1049 | " 71.00 | \n",
1050 | " 80.888749 | \n",
1051 | " -2.156687 | \n",
1052 | " 11.470749 | \n",
1053 | " -13.627436 | \n",
1054 | "
\n",
1055 | " \n",
1056 | " 18 | \n",
1057 | " RY | \n",
1058 | " CIBC | \n",
1059 | " 83.00 | \n",
1060 | " 81.605000 | \n",
1061 | " 14.704259 | \n",
1062 | " 12.776398 | \n",
1063 | " 1.927861 | \n",
1064 | "
\n",
1065 | " \n",
1066 | " 19 | \n",
1067 | " RY | \n",
1068 | " Bank of America Corp | \n",
1069 | " 72.00 | \n",
1070 | " 81.600001 | \n",
1071 | " -0.431768 | \n",
1072 | " 12.843997 | \n",
1073 | " -13.275765 | \n",
1074 | "
\n",
1075 | " \n",
1076 | " 20 | \n",
1077 | " RY | \n",
1078 | " Canaccord Genuity | \n",
1079 | " 75.00 | \n",
1080 | " 81.622223 | \n",
1081 | " 3.442163 | \n",
1082 | " 12.575724 | \n",
1083 | " -9.133561 | \n",
1084 | "
\n",
1085 | " \n",
1086 | " 21 | \n",
1087 | " RY | \n",
1088 | " Scotiabank | \n",
1089 | " 79.00 | \n",
1090 | " 81.622223 | \n",
1091 | " 8.959078 | \n",
1092 | " 12.575724 | \n",
1093 | " -3.616646 | \n",
1094 | "
\n",
1095 | " \n",
1096 | " 22 | \n",
1097 | " RY | \n",
1098 | " Bank of America Corp | \n",
1099 | " 72.00 | \n",
1100 | " 81.622223 | \n",
1101 | " -0.695524 | \n",
1102 | " 12.575724 | \n",
1103 | " -13.271247 | \n",
1104 | "
\n",
1105 | " \n",
1106 | " 23 | \n",
1107 | " RY | \n",
1108 | " Scotiabank | \n",
1109 | " 82.00 | \n",
1110 | " 80.896667 | \n",
1111 | " 11.081007 | \n",
1112 | " 9.586381 | \n",
1113 | " 1.494626 | \n",
1114 | "
\n",
1115 | " \n",
1116 | " 24 | \n",
1117 | " RY | \n",
1118 | " CIBC | \n",
1119 | " 84.00 | \n",
1120 | " 80.394286 | \n",
1121 | " 11.837835 | \n",
1122 | " 7.037177 | \n",
1123 | " 4.800658 | \n",
1124 | "
\n",
1125 | " \n",
1126 | " 25 | \n",
1127 | " RY | \n",
1128 | " Barclays PLC | \n",
1129 | " 76.00 | \n",
1130 | " 80.171250 | \n",
1131 | " -0.159519 | \n",
1132 | " 5.320213 | \n",
1133 | " -5.479732 | \n",
1134 | "
\n",
1135 | " \n",
1136 | " 26 | \n",
1137 | " RY | \n",
1138 | " TD Securities | \n",
1139 | " 90.00 | \n",
1140 | " 79.502223 | \n",
1141 | " 12.999671 | \n",
1142 | " -0.180834 | \n",
1143 | " 13.180504 | \n",
1144 | "
\n",
1145 | " \n",
1146 | " 27 | \n",
1147 | " RY | \n",
1148 | " CIBC | \n",
1149 | " 87.00 | \n",
1150 | " 79.502223 | \n",
1151 | " 9.233015 | \n",
1152 | " -0.180834 | \n",
1153 | " 9.413849 | \n",
1154 | "
\n",
1155 | " \n",
1156 | " 28 | \n",
1157 | " RY | \n",
1158 | " BMO Capital Markets | \n",
1159 | " 90.00 | \n",
1160 | " 79.502223 | \n",
1161 | " 12.999671 | \n",
1162 | " -0.180834 | \n",
1163 | " 13.180504 | \n",
1164 | "
\n",
1165 | " \n",
1166 | " 29 | \n",
1167 | " TD | \n",
1168 | " CIBC | \n",
1169 | " 58.00 | \n",
1170 | " 69.498752 | \n",
1171 | " 8.269554 | \n",
1172 | " 29.734463 | \n",
1173 | " -21.464909 | \n",
1174 | "
\n",
1175 | " \n",
1176 | " ... | \n",
1177 | " ... | \n",
1178 | " ... | \n",
1179 | " ... | \n",
1180 | " ... | \n",
1181 | " ... | \n",
1182 | " ... | \n",
1183 | " ... | \n",
1184 | "
\n",
1185 | " \n",
1186 | " 4310 | \n",
1187 | " KEL | \n",
1188 | " CIBC | \n",
1189 | " 6.00 | \n",
1190 | " 6.191250 | \n",
1191 | " 21.212121 | \n",
1192 | " 25.075758 | \n",
1193 | " -3.863636 | \n",
1194 | "
\n",
1195 | " \n",
1196 | " 4311 | \n",
1197 | " KEL | \n",
1198 | " Raymond James Financial, Inc. | \n",
1199 | " 8.00 | \n",
1200 | " 6.433333 | \n",
1201 | " 36.785540 | \n",
1202 | " 9.998372 | \n",
1203 | " 26.787168 | \n",
1204 | "
\n",
1205 | " \n",
1206 | " 4312 | \n",
1207 | " KEL | \n",
1208 | " Paradigm Capital | \n",
1209 | " 7.50 | \n",
1210 | " 5.960000 | \n",
1211 | " 22.249389 | \n",
1212 | " -2.852486 | \n",
1213 | " 25.101874 | \n",
1214 | "
\n",
1215 | " \n",
1216 | " 4313 | \n",
1217 | " KEL | \n",
1218 | " Scotiabank | \n",
1219 | " 11.00 | \n",
1220 | " 5.758571 | \n",
1221 | " 89.982729 | \n",
1222 | " -0.542808 | \n",
1223 | " 90.525537 | \n",
1224 | "
\n",
1225 | " \n",
1226 | " 4314 | \n",
1227 | " KEL | \n",
1228 | " CIBC | \n",
1229 | " 7.00 | \n",
1230 | " 5.647500 | \n",
1231 | " 16.805721 | \n",
1232 | " -5.762813 | \n",
1233 | " 22.568534 | \n",
1234 | "
\n",
1235 | " \n",
1236 | " 4315 | \n",
1237 | " KEL | \n",
1238 | " Credit Suisse Group AG | \n",
1239 | " 9.00 | \n",
1240 | " 4.844444 | \n",
1241 | " 39.411374 | \n",
1242 | " -24.958816 | \n",
1243 | " 64.370190 | \n",
1244 | "
\n",
1245 | " \n",
1246 | " 4316 | \n",
1247 | " KEL | \n",
1248 | " Raymond James Financial, Inc. | \n",
1249 | " 9.50 | \n",
1250 | " 4.812500 | \n",
1251 | " 45.386970 | \n",
1252 | " -26.350022 | \n",
1253 | " 71.736992 | \n",
1254 | "
\n",
1255 | " \n",
1256 | " 4317 | \n",
1257 | " KEL | \n",
1258 | " Dundee Securities | \n",
1259 | " 9.75 | \n",
1260 | " 4.795714 | \n",
1261 | " 46.333619 | \n",
1262 | " -28.023156 | \n",
1263 | " 74.356775 | \n",
1264 | "
\n",
1265 | " \n",
1266 | " 4318 | \n",
1267 | " KEL | \n",
1268 | " TD Securities | \n",
1269 | " 12.00 | \n",
1270 | " 4.795714 | \n",
1271 | " 80.102916 | \n",
1272 | " -28.023156 | \n",
1273 | " 108.126072 | \n",
1274 | "
\n",
1275 | " \n",
1276 | " 4319 | \n",
1277 | " KEL | \n",
1278 | " Royal Bank of Canada | \n",
1279 | " 10.00 | \n",
1280 | " 4.795714 | \n",
1281 | " 50.085763 | \n",
1282 | " -28.023156 | \n",
1283 | " 78.108919 | \n",
1284 | "
\n",
1285 | " \n",
1286 | " 4320 | \n",
1287 | " KEL | \n",
1288 | " Paradigm Capital | \n",
1289 | " 10.00 | \n",
1290 | " 4.795714 | \n",
1291 | " 50.085763 | \n",
1292 | " -28.023156 | \n",
1293 | " 78.108919 | \n",
1294 | "
\n",
1295 | " \n",
1296 | " 4321 | \n",
1297 | " KEL | \n",
1298 | " FirstEnergy Capital | \n",
1299 | " 9.50 | \n",
1300 | " 4.795714 | \n",
1301 | " 42.581475 | \n",
1302 | " -28.023156 | \n",
1303 | " 70.604631 | \n",
1304 | "
\n",
1305 | " \n",
1306 | " 4322 | \n",
1307 | " KEL | \n",
1308 | " CSFB | \n",
1309 | " 8.50 | \n",
1310 | " 4.795714 | \n",
1311 | " 27.572899 | \n",
1312 | " -28.023156 | \n",
1313 | " 55.596055 | \n",
1314 | "
\n",
1315 | " \n",
1316 | " 4323 | \n",
1317 | " KEL | \n",
1318 | " CIBC | \n",
1319 | " 9.50 | \n",
1320 | " 4.795714 | \n",
1321 | " 42.581475 | \n",
1322 | " -28.023156 | \n",
1323 | " 70.604631 | \n",
1324 | "
\n",
1325 | " \n",
1326 | " 4324 | \n",
1327 | " KEL | \n",
1328 | " TD Securities | \n",
1329 | " 13.00 | \n",
1330 | " 4.676250 | \n",
1331 | " 56.035665 | \n",
1332 | " -43.872171 | \n",
1333 | " 99.907836 | \n",
1334 | "
\n",
1335 | " \n",
1336 | " 4325 | \n",
1337 | " KEL | \n",
1338 | " Scotiabank | \n",
1339 | " 11.50 | \n",
1340 | " 4.676250 | \n",
1341 | " 38.031550 | \n",
1342 | " -43.872171 | \n",
1343 | " 81.903721 | \n",
1344 | "
\n",
1345 | " \n",
1346 | " 4326 | \n",
1347 | " KEL | \n",
1348 | " Dundee Securities | \n",
1349 | " 12.75 | \n",
1350 | " 4.817143 | \n",
1351 | " 42.617450 | \n",
1352 | " -46.116970 | \n",
1353 | " 88.734420 | \n",
1354 | "
\n",
1355 | " \n",
1356 | " 4327 | \n",
1357 | " KEL | \n",
1358 | " Raymond James Financial, Inc. | \n",
1359 | " 11.00 | \n",
1360 | " 4.593333 | \n",
1361 | " 26.374528 | \n",
1362 | " -47.229061 | \n",
1363 | " 73.603589 | \n",
1364 | "
\n",
1365 | " \n",
1366 | " 4328 | \n",
1367 | " MSI | \n",
1368 | " National Bank Financial | \n",
1369 | " 19.50 | \n",
1370 | " 20.207142 | \n",
1371 | " 13.553647 | \n",
1372 | " 17.671523 | \n",
1373 | " -4.117876 | \n",
1374 | "
\n",
1375 | " \n",
1376 | " 4329 | \n",
1377 | " MSI | \n",
1378 | " TD Securities | \n",
1379 | " 17.50 | \n",
1380 | " 18.902222 | \n",
1381 | " 12.026886 | \n",
1382 | " 21.003261 | \n",
1383 | " -8.976375 | \n",
1384 | "
\n",
1385 | " \n",
1386 | " 4330 | \n",
1387 | " MSI | \n",
1388 | " Scotiabank | \n",
1389 | " 19.00 | \n",
1390 | " 18.902222 | \n",
1391 | " 21.629190 | \n",
1392 | " 21.003261 | \n",
1393 | " 0.625929 | \n",
1394 | "
\n",
1395 | " \n",
1396 | " 4331 | \n",
1397 | " MSI | \n",
1398 | " TD Securities | \n",
1399 | " 17.00 | \n",
1400 | " 19.306250 | \n",
1401 | " 9.717868 | \n",
1402 | " 24.602386 | \n",
1403 | " -14.884518 | \n",
1404 | "
\n",
1405 | " \n",
1406 | " 4332 | \n",
1407 | " MSI | \n",
1408 | " Scotiabank | \n",
1409 | " 18.50 | \n",
1410 | " 18.432500 | \n",
1411 | " 11.434594 | \n",
1412 | " 11.028008 | \n",
1413 | " 0.406586 | \n",
1414 | "
\n",
1415 | " \n",
1416 | " 4333 | \n",
1417 | " MSI | \n",
1418 | " Scotiabank | \n",
1419 | " 19.00 | \n",
1420 | " 18.424286 | \n",
1421 | " 14.480819 | \n",
1422 | " 11.011965 | \n",
1423 | " 3.468855 | \n",
1424 | "
\n",
1425 | " \n",
1426 | " 4334 | \n",
1427 | " MSI | \n",
1428 | " Scotiabank | \n",
1429 | " 18.00 | \n",
1430 | " 17.431428 | \n",
1431 | " 1.752402 | \n",
1432 | " -1.461684 | \n",
1433 | " 3.214085 | \n",
1434 | "
\n",
1435 | " \n",
1436 | " 4335 | \n",
1437 | " NSU | \n",
1438 | " Royal Bank of Canada | \n",
1439 | " 6.00 | \n",
1440 | " 3.172857 | \n",
1441 | " 34.615385 | \n",
1442 | " -28.814103 | \n",
1443 | " 63.429487 | \n",
1444 | "
\n",
1445 | " \n",
1446 | " 4336 | \n",
1447 | " NSU | \n",
1448 | " Paradigm Capital | \n",
1449 | " 6.00 | \n",
1450 | " 3.181429 | \n",
1451 | " 34.099617 | \n",
1452 | " -28.895275 | \n",
1453 | " 62.994891 | \n",
1454 | "
\n",
1455 | " \n",
1456 | " 4337 | \n",
1457 | " NSU | \n",
1458 | " Canaccord Genuity | \n",
1459 | " 5.00 | \n",
1460 | " 3.252222 | \n",
1461 | " 12.930548 | \n",
1462 | " -26.544953 | \n",
1463 | " 39.475500 | \n",
1464 | "
\n",
1465 | " \n",
1466 | " 4338 | \n",
1467 | " NSU | \n",
1468 | " Paradigm Capital | \n",
1469 | " 5.50 | \n",
1470 | " 3.787143 | \n",
1471 | " 41.479100 | \n",
1472 | " -2.581534 | \n",
1473 | " 44.060634 | \n",
1474 | "
\n",
1475 | " \n",
1476 | " 4339 | \n",
1477 | " NSU | \n",
1478 | " CIBC | \n",
1479 | " 5.00 | \n",
1480 | " 4.190000 | \n",
1481 | " 31.926121 | \n",
1482 | " 10.554090 | \n",
1483 | " 21.372032 | \n",
1484 | "
\n",
1485 | " \n",
1486 | "
\n",
1487 | "
4340 rows × 7 columns
\n",
1488 | "
"
1489 | ],
1490 | "text/plain": [
1491 | " ticker analyst target aver_close_at_12m \\\n",
1492 | "0 RY TD Securities 78.00 97.832857 \n",
1493 | "1 RY Scotiabank 77.00 97.832857 \n",
1494 | "2 RY TD Securities 80.00 97.656251 \n",
1495 | "3 RY Scotiabank 77.00 97.656251 \n",
1496 | "4 RY Bank of America Corp 85.00 97.656251 \n",
1497 | "5 RY National Bank Financial 72.00 97.656251 \n",
1498 | "6 RY CIBC 78.00 97.656251 \n",
1499 | "7 RY Barclays PLC 58.00 98.369999 \n",
1500 | "8 RY National Bank Financial 74.00 96.436249 \n",
1501 | "9 RY CIBC 80.00 92.876249 \n",
1502 | "10 RY Scotiabank 86.00 88.355556 \n",
1503 | "11 RY Bank of America Corp 92.00 88.355556 \n",
1504 | "12 RY National Bank Financial 79.00 88.355556 \n",
1505 | "13 RY Canaccord Genuity 81.00 88.355556 \n",
1506 | "14 RY Canaccord Genuity 79.00 89.542858 \n",
1507 | "15 RY Scotiabank 79.00 83.165001 \n",
1508 | "16 RY Scotiabank 79.00 81.163751 \n",
1509 | "17 RY Barclays PLC 71.00 80.888749 \n",
1510 | "18 RY CIBC 83.00 81.605000 \n",
1511 | "19 RY Bank of America Corp 72.00 81.600001 \n",
1512 | "20 RY Canaccord Genuity 75.00 81.622223 \n",
1513 | "21 RY Scotiabank 79.00 81.622223 \n",
1514 | "22 RY Bank of America Corp 72.00 81.622223 \n",
1515 | "23 RY Scotiabank 82.00 80.896667 \n",
1516 | "24 RY CIBC 84.00 80.394286 \n",
1517 | "25 RY Barclays PLC 76.00 80.171250 \n",
1518 | "26 RY TD Securities 90.00 79.502223 \n",
1519 | "27 RY CIBC 87.00 79.502223 \n",
1520 | "28 RY BMO Capital Markets 90.00 79.502223 \n",
1521 | "29 TD CIBC 58.00 69.498752 \n",
1522 | "... ... ... ... ... \n",
1523 | "4310 KEL CIBC 6.00 6.191250 \n",
1524 | "4311 KEL Raymond James Financial, Inc. 8.00 6.433333 \n",
1525 | "4312 KEL Paradigm Capital 7.50 5.960000 \n",
1526 | "4313 KEL Scotiabank 11.00 5.758571 \n",
1527 | "4314 KEL CIBC 7.00 5.647500 \n",
1528 | "4315 KEL Credit Suisse Group AG 9.00 4.844444 \n",
1529 | "4316 KEL Raymond James Financial, Inc. 9.50 4.812500 \n",
1530 | "4317 KEL Dundee Securities 9.75 4.795714 \n",
1531 | "4318 KEL TD Securities 12.00 4.795714 \n",
1532 | "4319 KEL Royal Bank of Canada 10.00 4.795714 \n",
1533 | "4320 KEL Paradigm Capital 10.00 4.795714 \n",
1534 | "4321 KEL FirstEnergy Capital 9.50 4.795714 \n",
1535 | "4322 KEL CSFB 8.50 4.795714 \n",
1536 | "4323 KEL CIBC 9.50 4.795714 \n",
1537 | "4324 KEL TD Securities 13.00 4.676250 \n",
1538 | "4325 KEL Scotiabank 11.50 4.676250 \n",
1539 | "4326 KEL Dundee Securities 12.75 4.817143 \n",
1540 | "4327 KEL Raymond James Financial, Inc. 11.00 4.593333 \n",
1541 | "4328 MSI National Bank Financial 19.50 20.207142 \n",
1542 | "4329 MSI TD Securities 17.50 18.902222 \n",
1543 | "4330 MSI Scotiabank 19.00 18.902222 \n",
1544 | "4331 MSI TD Securities 17.00 19.306250 \n",
1545 | "4332 MSI Scotiabank 18.50 18.432500 \n",
1546 | "4333 MSI Scotiabank 19.00 18.424286 \n",
1547 | "4334 MSI Scotiabank 18.00 17.431428 \n",
1548 | "4335 NSU Royal Bank of Canada 6.00 3.172857 \n",
1549 | "4336 NSU Paradigm Capital 6.00 3.181429 \n",
1550 | "4337 NSU Canaccord Genuity 5.00 3.252222 \n",
1551 | "4338 NSU Paradigm Capital 5.50 3.787143 \n",
1552 | "4339 NSU CIBC 5.00 4.190000 \n",
1553 | "\n",
1554 | " target_perc real_perc error \n",
1555 | "0 10.980122 39.198750 -28.218627 \n",
1556 | "1 9.557300 39.198750 -29.641449 \n",
1557 | "2 15.891643 41.469292 -25.577649 \n",
1558 | "3 11.545707 41.469292 -29.923586 \n",
1559 | "4 23.134871 41.469292 -18.334421 \n",
1560 | "5 4.302479 41.469292 -37.166813 \n",
1561 | "6 12.994352 41.469292 -28.474940 \n",
1562 | "7 -17.361260 40.158152 -57.519412 \n",
1563 | "8 9.026617 42.082675 -33.056058 \n",
1564 | "9 12.206459 30.266438 -18.059979 \n",
1565 | "10 13.053765 16.150329 -3.096564 \n",
1566 | "11 20.941237 16.150329 4.790908 \n",
1567 | "12 3.851714 16.150329 -12.298614 \n",
1568 | "13 6.480872 16.150329 -9.669457 \n",
1569 | "14 4.590244 18.548219 -13.957975 \n",
1570 | "15 4.292398 9.790852 -5.498455 \n",
1571 | "16 9.111714 12.100202 -2.988488 \n",
1572 | "17 -2.156687 11.470749 -13.627436 \n",
1573 | "18 14.704259 12.776398 1.927861 \n",
1574 | "19 -0.431768 12.843997 -13.275765 \n",
1575 | "20 3.442163 12.575724 -9.133561 \n",
1576 | "21 8.959078 12.575724 -3.616646 \n",
1577 | "22 -0.695524 12.575724 -13.271247 \n",
1578 | "23 11.081007 9.586381 1.494626 \n",
1579 | "24 11.837835 7.037177 4.800658 \n",
1580 | "25 -0.159519 5.320213 -5.479732 \n",
1581 | "26 12.999671 -0.180834 13.180504 \n",
1582 | "27 9.233015 -0.180834 9.413849 \n",
1583 | "28 12.999671 -0.180834 13.180504 \n",
1584 | "29 8.269554 29.734463 -21.464909 \n",
1585 | "... ... ... ... \n",
1586 | "4310 21.212121 25.075758 -3.863636 \n",
1587 | "4311 36.785540 9.998372 26.787168 \n",
1588 | "4312 22.249389 -2.852486 25.101874 \n",
1589 | "4313 89.982729 -0.542808 90.525537 \n",
1590 | "4314 16.805721 -5.762813 22.568534 \n",
1591 | "4315 39.411374 -24.958816 64.370190 \n",
1592 | "4316 45.386970 -26.350022 71.736992 \n",
1593 | "4317 46.333619 -28.023156 74.356775 \n",
1594 | "4318 80.102916 -28.023156 108.126072 \n",
1595 | "4319 50.085763 -28.023156 78.108919 \n",
1596 | "4320 50.085763 -28.023156 78.108919 \n",
1597 | "4321 42.581475 -28.023156 70.604631 \n",
1598 | "4322 27.572899 -28.023156 55.596055 \n",
1599 | "4323 42.581475 -28.023156 70.604631 \n",
1600 | "4324 56.035665 -43.872171 99.907836 \n",
1601 | "4325 38.031550 -43.872171 81.903721 \n",
1602 | "4326 42.617450 -46.116970 88.734420 \n",
1603 | "4327 26.374528 -47.229061 73.603589 \n",
1604 | "4328 13.553647 17.671523 -4.117876 \n",
1605 | "4329 12.026886 21.003261 -8.976375 \n",
1606 | "4330 21.629190 21.003261 0.625929 \n",
1607 | "4331 9.717868 24.602386 -14.884518 \n",
1608 | "4332 11.434594 11.028008 0.406586 \n",
1609 | "4333 14.480819 11.011965 3.468855 \n",
1610 | "4334 1.752402 -1.461684 3.214085 \n",
1611 | "4335 34.615385 -28.814103 63.429487 \n",
1612 | "4336 34.099617 -28.895275 62.994891 \n",
1613 | "4337 12.930548 -26.544953 39.475500 \n",
1614 | "4338 41.479100 -2.581534 44.060634 \n",
1615 | "4339 31.926121 10.554090 21.372032 \n",
1616 | "\n",
1617 | "[4340 rows x 7 columns]"
1618 | ]
1619 | },
1620 | "execution_count": 2,
1621 | "metadata": {},
1622 | "output_type": "execute_result"
1623 | }
1624 | ],
1625 | "source": [
1626 | "df['target_perc'] = (df['target'] - df['aver_close_at_analysis'])/df['aver_close_at_analysis'] * 100\n",
1627 | "df['real_perc'] = (df['aver_close_at_12m'] - df['aver_close_at_analysis'])/df['aver_close_at_analysis'] * 100\n",
1628 | "df['error'] = (df['target_perc']-df['real_perc'])\n",
1629 | "df['abs_error'] = abs(df['error'])\n",
1630 | "\n",
1631 | "df[['ticker', 'analyst', 'target', 'aver_close_at_12m', 'target_perc', 'real_perc', 'error']]"
1632 | ]
1633 | },
1634 | {
1635 | "cell_type": "code",
1636 | "execution_count": 5,
1637 | "metadata": {
1638 | "collapsed": false,
1639 | "scrolled": true
1640 | },
1641 | "outputs": [
1642 | {
1643 | "data": {
1644 | "text/html": [
1645 | "\n",
1646 | "
\n",
1647 | " \n",
1648 | " \n",
1649 | " | \n",
1650 | " analyst | \n",
1651 | " std | \n",
1652 | " mean | \n",
1653 | " mean_abs_err | \n",
1654 | " 10p | \n",
1655 | " 90p | \n",
1656 | " count | \n",
1657 | "
\n",
1658 | " \n",
1659 | " \n",
1660 | " \n",
1661 | " 48 | \n",
1662 | " National Bank Financial | \n",
1663 | " 16.365463 | \n",
1664 | " -2.532164 | \n",
1665 | " 13.425469 | \n",
1666 | " -40.092491 | \n",
1667 | " 30.074729 | \n",
1668 | " 251 | \n",
1669 | "
\n",
1670 | " \n",
1671 | " 3 | \n",
1672 | " BMO Capital Markets | \n",
1673 | " 18.982738 | \n",
1674 | " -2.282366 | \n",
1675 | " 14.435614 | \n",
1676 | " -55.866637 | \n",
1677 | " 35.678834 | \n",
1678 | " 248 | \n",
1679 | "
\n",
1680 | " \n",
1681 | " 7 | \n",
1682 | " Barclays PLC | \n",
1683 | " 16.120963 | \n",
1684 | " -0.586090 | \n",
1685 | " 13.128664 | \n",
1686 | " -35.657920 | \n",
1687 | " 37.853971 | \n",
1688 | " 212 | \n",
1689 | "
\n",
1690 | " \n",
1691 | " 20 | \n",
1692 | " Desjardins | \n",
1693 | " 18.972093 | \n",
1694 | " -0.542214 | \n",
1695 | " 15.355082 | \n",
1696 | " -49.563907 | \n",
1697 | " 33.312509 | \n",
1698 | " 115 | \n",
1699 | "
\n",
1700 | " \n",
1701 | " 12 | \n",
1702 | " Canaccord Genuity | \n",
1703 | " 18.101054 | \n",
1704 | " 4.703447 | \n",
1705 | " 14.967193 | \n",
1706 | " -35.795798 | \n",
1707 | " 47.363220 | \n",
1708 | " 302 | \n",
1709 | "
\n",
1710 | " \n",
1711 | " 10 | \n",
1712 | " CIBC | \n",
1713 | " 19.098723 | \n",
1714 | " 4.960119 | \n",
1715 | " 15.799013 | \n",
1716 | " -31.113204 | \n",
1717 | " 48.409297 | \n",
1718 | " 446 | \n",
1719 | "
\n",
1720 | " \n",
1721 | " 58 | \n",
1722 | " Royal Bank of Canada | \n",
1723 | " 18.198846 | \n",
1724 | " 5.544864 | \n",
1725 | " 15.402881 | \n",
1726 | " -34.362247 | \n",
1727 | " 50.268754 | \n",
1728 | " 584 | \n",
1729 | "
\n",
1730 | " \n",
1731 | " 66 | \n",
1732 | " TD Securities | \n",
1733 | " 20.179027 | \n",
1734 | " 5.868849 | \n",
1735 | " 17.002451 | \n",
1736 | " -44.254427 | \n",
1737 | " 47.655748 | \n",
1738 | " 551 | \n",
1739 | "
\n",
1740 | " \n",
1741 | " 54 | \n",
1742 | " Raymond James Financial, Inc. | \n",
1743 | " 21.500147 | \n",
1744 | " 7.580748 | \n",
1745 | " 18.711069 | \n",
1746 | " -42.025280 | \n",
1747 | " 51.284896 | \n",
1748 | " 269 | \n",
1749 | "
\n",
1750 | " \n",
1751 | " 62 | \n",
1752 | " Scotiabank | \n",
1753 | " 18.735960 | \n",
1754 | " 7.741048 | \n",
1755 | " 15.962621 | \n",
1756 | " -32.351408 | \n",
1757 | " 53.038985 | \n",
1758 | " 706 | \n",
1759 | "
\n",
1760 | " \n",
1761 | "
\n",
1762 | "
"
1763 | ],
1764 | "text/plain": [
1765 | " analyst std mean mean_abs_err \\\n",
1766 | "48 National Bank Financial 16.365463 -2.532164 13.425469 \n",
1767 | "3 BMO Capital Markets 18.982738 -2.282366 14.435614 \n",
1768 | "7 Barclays PLC 16.120963 -0.586090 13.128664 \n",
1769 | "20 Desjardins 18.972093 -0.542214 15.355082 \n",
1770 | "12 Canaccord Genuity 18.101054 4.703447 14.967193 \n",
1771 | "10 CIBC 19.098723 4.960119 15.799013 \n",
1772 | "58 Royal Bank of Canada 18.198846 5.544864 15.402881 \n",
1773 | "66 TD Securities 20.179027 5.868849 17.002451 \n",
1774 | "54 Raymond James Financial, Inc. 21.500147 7.580748 18.711069 \n",
1775 | "62 Scotiabank 18.735960 7.741048 15.962621 \n",
1776 | "\n",
1777 | " 10p 90p count \n",
1778 | "48 -40.092491 30.074729 251 \n",
1779 | "3 -55.866637 35.678834 248 \n",
1780 | "7 -35.657920 37.853971 212 \n",
1781 | "20 -49.563907 33.312509 115 \n",
1782 | "12 -35.795798 47.363220 302 \n",
1783 | "10 -31.113204 48.409297 446 \n",
1784 | "58 -34.362247 50.268754 584 \n",
1785 | "66 -44.254427 47.655748 551 \n",
1786 | "54 -42.025280 51.284896 269 \n",
1787 | "62 -32.351408 53.038985 706 "
1788 | ]
1789 | },
1790 | "execution_count": 5,
1791 | "metadata": {},
1792 | "output_type": "execute_result"
1793 | }
1794 | ],
1795 | "source": [
1796 | "def filter_tail(data, p1=10, p2=90):\n",
1797 | " q1 = np.percentile(data, p1)\n",
1798 | " q3 = np.percentile(data, p2)\n",
1799 | " return data[(data > q1) & (data < q3)]\n",
1800 | "\n",
1801 | "analysts = df.groupby(['analyst'], as_index=False)['error'].agg({\n",
1802 | " 'mean_abs_err': lambda xs:np.mean(np.abs(filter_tail(xs))),\n",
1803 | " 'count': 'count',\n",
1804 | " '10p': lambda xs: np.percentile(xs, q=10),\n",
1805 | " '90p': lambda xs: np.percentile(xs, q=90),\n",
1806 | " 'mean': lambda xs: np.mean(filter_tail(xs)),\n",
1807 | " 'std': lambda xs: np.std(filter_tail(xs)),\n",
1808 | " })\n",
1809 | "analysts = analysts[analysts['count'] > 100].sort_values(by='mean')\n",
1810 | "analysts[['analyst','std', 'mean', 'mean_abs_err', '10p', '90p', 'count']]"
1811 | ]
1812 | },
1813 | {
1814 | "cell_type": "code",
1815 | "execution_count": 86,
1816 | "metadata": {
1817 | "collapsed": false,
1818 | "scrolled": false
1819 | },
1820 | "outputs": [
1821 | {
1822 | "name": "stdout",
1823 | "output_type": "stream",
1824 | "text": [
1825 | "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n"
1826 | ]
1827 | },
1828 | {
1829 | "data": {
1830 | "image/png": "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\n",
1831 | "text/plain": [
1832 | ""
1833 | ]
1834 | },
1835 | "metadata": {},
1836 | "output_type": "display_data"
1837 | }
1838 | ],
1839 | "source": [
1840 | "import matplotlib.pyplot as plt\n",
1841 | "%matplotlib inline\n",
1842 | "\n",
1843 | "ax = plt.axes()\n",
1844 | "ax.set_ylim(-100, 100)\n",
1845 | "\n",
1846 | "\n",
1847 | "xlabels = analysts['analyst']\n",
1848 | "x = [i for i in range(1, len(xlabels)+1)]\n",
1849 | "print(x)\n",
1850 | "y = analysts['mean_no_outliers']\n",
1851 | "e = analysts['std_no_outliers']\n",
1852 | "plt.errorbar(x, y, e, fmt='o')\n",
1853 | "plt.xlim(0, len(x) + 1)\n",
1854 | "plt.ylim(-50, 50)\n",
1855 | "plt.xticks(x, xlabels, rotation='vertical')\n",
1856 | "plt.axhline(y=0, xmin=0, xmax=10, ls='dashed', color='r')\n",
1857 | "\n",
1858 | "\n",
1859 | "# for name, analyst in analyst_error.items():\n",
1860 | "# analyst['name'] = name\n",
1861 | "\n",
1862 | "# analysts = [analyst for analyst in analyst_error.values() if len(analyst['diffs']) > 100]\n",
1863 | "\n",
1864 | "# scotia = [analyst['mdiffs'] for analyst in analysts]\n",
1865 | "# plt.boxplot(scotia, labels=[analyst['name'] for analyst in analysts])\n",
1866 | "# plt.xticks(rotation='vertical')\n",
1867 | "plt.show()"
1868 | ]
1869 | },
1870 | {
1871 | "cell_type": "code",
1872 | "execution_count": 6,
1873 | "metadata": {
1874 | "collapsed": false,
1875 | "scrolled": true
1876 | },
1877 | "outputs": [
1878 | {
1879 | "data": {
1880 | "text/html": [
1881 | "\n",
1882 | "
\n",
1883 | " \n",
1884 | " \n",
1885 | " | \n",
1886 | " analyst_ | \n",
1887 | " rating_ | \n",
1888 | " target_perc_10p | \n",
1889 | " target_perc_90p | \n",
1890 | " target_perc_median | \n",
1891 | " error_mae | \n",
1892 | " real_perc_10p | \n",
1893 | " real_perc_count | \n",
1894 | " real_perc_mean | \n",
1895 | " real_perc_90p | \n",
1896 | " real_perc_median | \n",
1897 | "
\n",
1898 | " \n",
1899 | " \n",
1900 | " \n",
1901 | " 0 | \n",
1902 | " BMO Capital Markets | \n",
1903 | " Market Perform | \n",
1904 | " -0.249542 | \n",
1905 | " 23.049416 | \n",
1906 | " 7.826429 | \n",
1907 | " 17.048387 | \n",
1908 | " -13.624028 | \n",
1909 | " 82 | \n",
1910 | " 29.306269 | \n",
1911 | " 86.571109 | \n",
1912 | " 11.962594 | \n",
1913 | "
\n",
1914 | " \n",
1915 | " 2 | \n",
1916 | " BMO Capital Markets | \n",
1917 | " Outperform | \n",
1918 | " 9.333289 | \n",
1919 | " 34.091310 | \n",
1920 | " 18.863216 | \n",
1921 | " 13.267287 | \n",
1922 | " -13.430220 | \n",
1923 | " 116 | \n",
1924 | " 22.215401 | \n",
1925 | " 64.711223 | \n",
1926 | " 15.109094 | \n",
1927 | "
\n",
1928 | " \n",
1929 | " 5 | \n",
1930 | " Barclays PLC | \n",
1931 | " Equal Weight | \n",
1932 | " -5.964636 | \n",
1933 | " 10.834989 | \n",
1934 | " 4.672844 | \n",
1935 | " 11.317883 | \n",
1936 | " -23.540832 | \n",
1937 | " 72 | \n",
1938 | " 11.511754 | \n",
1939 | " 37.461244 | \n",
1940 | " 9.239600 | \n",
1941 | "
\n",
1942 | " \n",
1943 | " 7 | \n",
1944 | " Barclays PLC | \n",
1945 | " Overweight | \n",
1946 | " 7.779330 | \n",
1947 | " 35.860591 | \n",
1948 | " 16.416047 | \n",
1949 | " 15.829631 | \n",
1950 | " -24.985571 | \n",
1951 | " 67 | \n",
1952 | " 6.922573 | \n",
1953 | " 45.700799 | \n",
1954 | " 4.983455 | \n",
1955 | "
\n",
1956 | " \n",
1957 | " 9 | \n",
1958 | " Barclays PLC | \n",
1959 | " Underweight | \n",
1960 | " -5.933928 | \n",
1961 | " 4.076078 | \n",
1962 | " -0.165227 | \n",
1963 | " 11.422580 | \n",
1964 | " 0.826847 | \n",
1965 | " 18 | \n",
1966 | " 10.882553 | \n",
1967 | " 28.607546 | \n",
1968 | " 8.926869 | \n",
1969 | "
\n",
1970 | " \n",
1971 | " 12 | \n",
1972 | " CIBC | \n",
1973 | " Outperform | \n",
1974 | " 9.654132 | \n",
1975 | " 48.858075 | \n",
1976 | " 20.970424 | \n",
1977 | " 20.556792 | \n",
1978 | " -30.621972 | \n",
1979 | " 31 | \n",
1980 | " 7.063513 | \n",
1981 | " 44.412910 | \n",
1982 | " 4.941616 | \n",
1983 | "
\n",
1984 | " \n",
1985 | " 13 | \n",
1986 | " CIBC | \n",
1987 | " Sector Outperform | \n",
1988 | " -5.243566 | \n",
1989 | " 88.473107 | \n",
1990 | " 23.922862 | \n",
1991 | " 28.943097 | \n",
1992 | " -10.783119 | \n",
1993 | " 18 | \n",
1994 | " 18.264682 | \n",
1995 | " 52.674167 | \n",
1996 | " 7.970106 | \n",
1997 | "
\n",
1998 | " \n",
1999 | " 14 | \n",
2000 | " CIBC | \n",
2001 | " Sector Outperformer | \n",
2002 | " 9.714648 | \n",
2003 | " 59.846481 | \n",
2004 | " 33.652243 | \n",
2005 | " 21.688542 | \n",
2006 | " -14.518562 | \n",
2007 | " 44 | \n",
2008 | " 22.205022 | \n",
2009 | " 60.020932 | \n",
2010 | " 22.218981 | \n",
2011 | "
\n",
2012 | " \n",
2013 | " 15 | \n",
2014 | " CIBC | \n",
2015 | " Sector Perform | \n",
2016 | " 0.195654 | \n",
2017 | " 26.805356 | \n",
2018 | " 8.254495 | \n",
2019 | " 11.465681 | \n",
2020 | " -16.642886 | \n",
2021 | " 67 | \n",
2022 | " 10.461603 | \n",
2023 | " 30.427237 | \n",
2024 | " 7.602369 | \n",
2025 | "
\n",
2026 | " \n",
2027 | " 16 | \n",
2028 | " CIBC | \n",
2029 | " Sector Performer | \n",
2030 | " 8.265862 | \n",
2031 | " 37.588657 | \n",
2032 | " 18.934782 | \n",
2033 | " 21.738051 | \n",
2034 | " -25.391136 | \n",
2035 | " 26 | \n",
2036 | " 8.673522 | \n",
2037 | " 45.964108 | \n",
2038 | " 7.140492 | \n",
2039 | "
\n",
2040 | " \n",
2041 | " 21 | \n",
2042 | " Canaccord Genuity | \n",
2043 | " Buy | \n",
2044 | " 8.340735 | \n",
2045 | " 61.226203 | \n",
2046 | " 24.085974 | \n",
2047 | " 18.796959 | \n",
2048 | " -16.561733 | \n",
2049 | " 177 | \n",
2050 | " 27.086690 | \n",
2051 | " 86.234464 | \n",
2052 | " 18.039215 | \n",
2053 | "
\n",
2054 | " \n",
2055 | " 22 | \n",
2056 | " Canaccord Genuity | \n",
2057 | " Hold | \n",
2058 | " -0.667792 | \n",
2059 | " 13.151801 | \n",
2060 | " 4.692858 | \n",
2061 | " 9.571621 | \n",
2062 | " -26.563878 | \n",
2063 | " 77 | \n",
2064 | " 7.077957 | \n",
2065 | " 29.834777 | \n",
2066 | " 5.668595 | \n",
2067 | "
\n",
2068 | " \n",
2069 | " 27 | \n",
2070 | " Desjardins | \n",
2071 | " Buy | \n",
2072 | " 7.022355 | \n",
2073 | " 33.585165 | \n",
2074 | " 15.043961 | \n",
2075 | " 16.075606 | \n",
2076 | " -41.695386 | \n",
2077 | " 49 | \n",
2078 | " 6.568182 | \n",
2079 | " 32.880716 | \n",
2080 | " 10.469046 | \n",
2081 | "
\n",
2082 | " \n",
2083 | " 28 | \n",
2084 | " Desjardins | \n",
2085 | " Hold | \n",
2086 | " -1.506179 | \n",
2087 | " 12.755789 | \n",
2088 | " 4.644954 | \n",
2089 | " 13.913005 | \n",
2090 | " -20.336031 | \n",
2091 | " 23 | \n",
2092 | " 18.077687 | \n",
2093 | " 73.211365 | \n",
2094 | " 5.205551 | \n",
2095 | "
\n",
2096 | " \n",
2097 | " 31 | \n",
2098 | " National Bank Financial | \n",
2099 | " Outperform | \n",
2100 | " 7.705539 | \n",
2101 | " 53.579343 | \n",
2102 | " 18.929633 | \n",
2103 | " 12.407454 | \n",
2104 | " -1.526925 | \n",
2105 | " 115 | \n",
2106 | " 24.524428 | \n",
2107 | " 59.093628 | \n",
2108 | " 22.213398 | \n",
2109 | "
\n",
2110 | " \n",
2111 | " 32 | \n",
2112 | " National Bank Financial | \n",
2113 | " Sector Perform | \n",
2114 | " 0.277827 | \n",
2115 | " 45.337101 | \n",
2116 | " 8.695651 | \n",
2117 | " 14.170428 | \n",
2118 | " -5.738096 | \n",
2119 | " 81 | \n",
2120 | " 29.887596 | \n",
2121 | " 61.182293 | \n",
2122 | " 17.410111 | \n",
2123 | "
\n",
2124 | " \n",
2125 | " 35 | \n",
2126 | " Raymond James Financial, Inc. | \n",
2127 | " Market Perform | \n",
2128 | " 1.293840 | \n",
2129 | " 22.991035 | \n",
2130 | " 9.964704 | \n",
2131 | " 18.256000 | \n",
2132 | " -29.030522 | \n",
2133 | " 43 | \n",
2134 | " 9.578731 | \n",
2135 | " 59.109207 | \n",
2136 | " 1.564818 | \n",
2137 | "
\n",
2138 | " \n",
2139 | " 36 | \n",
2140 | " Raymond James Financial, Inc. | \n",
2141 | " Outperform | \n",
2142 | " 9.437804 | \n",
2143 | " 54.483693 | \n",
2144 | " 21.236522 | \n",
2145 | " 15.914385 | \n",
2146 | " -18.695776 | \n",
2147 | " 106 | \n",
2148 | " 20.773835 | \n",
2149 | " 59.159844 | \n",
2150 | " 13.004491 | \n",
2151 | "
\n",
2152 | " \n",
2153 | " 37 | \n",
2154 | " Raymond James Financial, Inc. | \n",
2155 | " Strong-Buy | \n",
2156 | " 29.080472 | \n",
2157 | " 110.781914 | \n",
2158 | " 58.061307 | \n",
2159 | " 29.677365 | \n",
2160 | " -20.275171 | \n",
2161 | " 16 | \n",
2162 | " 58.672026 | \n",
2163 | " 157.687796 | \n",
2164 | " 23.429495 | \n",
2165 | "
\n",
2166 | " \n",
2167 | " 41 | \n",
2168 | " Royal Bank of Canada | \n",
2169 | " Outperform | \n",
2170 | " 9.605887 | \n",
2171 | " 68.415991 | \n",
2172 | " 24.858790 | \n",
2173 | " 18.719436 | \n",
2174 | " -24.447795 | \n",
2175 | " 289 | \n",
2176 | " 18.288848 | \n",
2177 | " 59.530589 | \n",
2178 | " 12.884379 | \n",
2179 | "
\n",
2180 | " \n",
2181 | " 43 | \n",
2182 | " Royal Bank of Canada | \n",
2183 | " Sector Perform | \n",
2184 | " -0.678788 | \n",
2185 | " 36.516168 | \n",
2186 | " 11.101983 | \n",
2187 | " 13.099112 | \n",
2188 | " -11.590060 | \n",
2189 | " 220 | \n",
2190 | " 21.330160 | \n",
2191 | " 51.282201 | \n",
2192 | " 10.498096 | \n",
2193 | "
\n",
2194 | " \n",
2195 | " 45 | \n",
2196 | " Royal Bank of Canada | \n",
2197 | " Underperform | \n",
2198 | " -16.494394 | \n",
2199 | " 12.386762 | \n",
2200 | " -3.108599 | \n",
2201 | " 18.589142 | \n",
2202 | " -12.534722 | \n",
2203 | " 13 | \n",
2204 | " 12.373937 | \n",
2205 | " 55.714870 | \n",
2206 | " 1.355833 | \n",
2207 | "
\n",
2208 | " \n",
2209 | " 47 | \n",
2210 | " Scotiabank | \n",
2211 | " Focus Stock | \n",
2212 | " 22.755399 | \n",
2213 | " 107.267439 | \n",
2214 | " 53.374233 | \n",
2215 | " 42.706236 | \n",
2216 | " -35.570016 | \n",
2217 | " 17 | \n",
2218 | " 25.281240 | \n",
2219 | " 122.901480 | \n",
2220 | " 19.093144 | \n",
2221 | "
\n",
2222 | " \n",
2223 | " 49 | \n",
2224 | " Scotiabank | \n",
2225 | " Outperform | \n",
2226 | " 7.239955 | \n",
2227 | " 50.402485 | \n",
2228 | " 19.082141 | \n",
2229 | " 15.926344 | \n",
2230 | " -21.632875 | \n",
2231 | " 246 | \n",
2232 | " 18.407885 | \n",
2233 | " 51.023159 | \n",
2234 | " 14.897374 | \n",
2235 | "
\n",
2236 | " \n",
2237 | " 50 | \n",
2238 | " Scotiabank | \n",
2239 | " Sector Outperform | \n",
2240 | " 7.715629 | \n",
2241 | " 63.476109 | \n",
2242 | " 23.089584 | \n",
2243 | " 27.679194 | \n",
2244 | " -30.066914 | \n",
2245 | " 72 | \n",
2246 | " 4.399665 | \n",
2247 | " 24.425995 | \n",
2248 | " -1.841137 | \n",
2249 | "
\n",
2250 | " \n",
2251 | " 51 | \n",
2252 | " Scotiabank | \n",
2253 | " Sector Perform | \n",
2254 | " 1.545315 | \n",
2255 | " 29.410020 | \n",
2256 | " 12.028301 | \n",
2257 | " 11.578271 | \n",
2258 | " -13.199191 | \n",
2259 | " 259 | \n",
2260 | " 11.854037 | \n",
2261 | " 37.447401 | \n",
2262 | " 9.366651 | \n",
2263 | "
\n",
2264 | " \n",
2265 | " 54 | \n",
2266 | " TD Securities | \n",
2267 | " Action List Buy | \n",
2268 | " 18.333724 | \n",
2269 | " 77.701954 | \n",
2270 | " 38.001830 | \n",
2271 | " 19.629657 | \n",
2272 | " -0.893705 | \n",
2273 | " 36 | \n",
2274 | " 28.334038 | \n",
2275 | " 71.459495 | \n",
2276 | " 15.928740 | \n",
2277 | "
\n",
2278 | " \n",
2279 | " 55 | \n",
2280 | " TD Securities | \n",
2281 | " Buy | \n",
2282 | " 7.118945 | \n",
2283 | " 53.930730 | \n",
2284 | " 20.378332 | \n",
2285 | " 18.843727 | \n",
2286 | " -25.138121 | \n",
2287 | " 291 | \n",
2288 | " 12.881452 | \n",
2289 | " 51.579799 | \n",
2290 | " 11.156412 | \n",
2291 | "
\n",
2292 | " \n",
2293 | " 56 | \n",
2294 | " TD Securities | \n",
2295 | " Hold | \n",
2296 | " -5.652250 | \n",
2297 | " 20.785200 | \n",
2298 | " 8.066294 | \n",
2299 | " 14.755427 | \n",
2300 | " -20.610854 | \n",
2301 | " 188 | \n",
2302 | " 16.521899 | \n",
2303 | " 49.528556 | \n",
2304 | " 9.195105 | \n",
2305 | "
\n",
2306 | " \n",
2307 | "
\n",
2308 | "
"
2309 | ],
2310 | "text/plain": [
2311 | " analyst_ rating_ target_perc_10p \\\n",
2312 | "0 BMO Capital Markets Market Perform -0.249542 \n",
2313 | "2 BMO Capital Markets Outperform 9.333289 \n",
2314 | "5 Barclays PLC Equal Weight -5.964636 \n",
2315 | "7 Barclays PLC Overweight 7.779330 \n",
2316 | "9 Barclays PLC Underweight -5.933928 \n",
2317 | "12 CIBC Outperform 9.654132 \n",
2318 | "13 CIBC Sector Outperform -5.243566 \n",
2319 | "14 CIBC Sector Outperformer 9.714648 \n",
2320 | "15 CIBC Sector Perform 0.195654 \n",
2321 | "16 CIBC Sector Performer 8.265862 \n",
2322 | "21 Canaccord Genuity Buy 8.340735 \n",
2323 | "22 Canaccord Genuity Hold -0.667792 \n",
2324 | "27 Desjardins Buy 7.022355 \n",
2325 | "28 Desjardins Hold -1.506179 \n",
2326 | "31 National Bank Financial Outperform 7.705539 \n",
2327 | "32 National Bank Financial Sector Perform 0.277827 \n",
2328 | "35 Raymond James Financial, Inc. Market Perform 1.293840 \n",
2329 | "36 Raymond James Financial, Inc. Outperform 9.437804 \n",
2330 | "37 Raymond James Financial, Inc. Strong-Buy 29.080472 \n",
2331 | "41 Royal Bank of Canada Outperform 9.605887 \n",
2332 | "43 Royal Bank of Canada Sector Perform -0.678788 \n",
2333 | "45 Royal Bank of Canada Underperform -16.494394 \n",
2334 | "47 Scotiabank Focus Stock 22.755399 \n",
2335 | "49 Scotiabank Outperform 7.239955 \n",
2336 | "50 Scotiabank Sector Outperform 7.715629 \n",
2337 | "51 Scotiabank Sector Perform 1.545315 \n",
2338 | "54 TD Securities Action List Buy 18.333724 \n",
2339 | "55 TD Securities Buy 7.118945 \n",
2340 | "56 TD Securities Hold -5.652250 \n",
2341 | "\n",
2342 | " target_perc_90p target_perc_median error_mae real_perc_10p \\\n",
2343 | "0 23.049416 7.826429 17.048387 -13.624028 \n",
2344 | "2 34.091310 18.863216 13.267287 -13.430220 \n",
2345 | "5 10.834989 4.672844 11.317883 -23.540832 \n",
2346 | "7 35.860591 16.416047 15.829631 -24.985571 \n",
2347 | "9 4.076078 -0.165227 11.422580 0.826847 \n",
2348 | "12 48.858075 20.970424 20.556792 -30.621972 \n",
2349 | "13 88.473107 23.922862 28.943097 -10.783119 \n",
2350 | "14 59.846481 33.652243 21.688542 -14.518562 \n",
2351 | "15 26.805356 8.254495 11.465681 -16.642886 \n",
2352 | "16 37.588657 18.934782 21.738051 -25.391136 \n",
2353 | "21 61.226203 24.085974 18.796959 -16.561733 \n",
2354 | "22 13.151801 4.692858 9.571621 -26.563878 \n",
2355 | "27 33.585165 15.043961 16.075606 -41.695386 \n",
2356 | "28 12.755789 4.644954 13.913005 -20.336031 \n",
2357 | "31 53.579343 18.929633 12.407454 -1.526925 \n",
2358 | "32 45.337101 8.695651 14.170428 -5.738096 \n",
2359 | "35 22.991035 9.964704 18.256000 -29.030522 \n",
2360 | "36 54.483693 21.236522 15.914385 -18.695776 \n",
2361 | "37 110.781914 58.061307 29.677365 -20.275171 \n",
2362 | "41 68.415991 24.858790 18.719436 -24.447795 \n",
2363 | "43 36.516168 11.101983 13.099112 -11.590060 \n",
2364 | "45 12.386762 -3.108599 18.589142 -12.534722 \n",
2365 | "47 107.267439 53.374233 42.706236 -35.570016 \n",
2366 | "49 50.402485 19.082141 15.926344 -21.632875 \n",
2367 | "50 63.476109 23.089584 27.679194 -30.066914 \n",
2368 | "51 29.410020 12.028301 11.578271 -13.199191 \n",
2369 | "54 77.701954 38.001830 19.629657 -0.893705 \n",
2370 | "55 53.930730 20.378332 18.843727 -25.138121 \n",
2371 | "56 20.785200 8.066294 14.755427 -20.610854 \n",
2372 | "\n",
2373 | " real_perc_count real_perc_mean real_perc_90p real_perc_median \n",
2374 | "0 82 29.306269 86.571109 11.962594 \n",
2375 | "2 116 22.215401 64.711223 15.109094 \n",
2376 | "5 72 11.511754 37.461244 9.239600 \n",
2377 | "7 67 6.922573 45.700799 4.983455 \n",
2378 | "9 18 10.882553 28.607546 8.926869 \n",
2379 | "12 31 7.063513 44.412910 4.941616 \n",
2380 | "13 18 18.264682 52.674167 7.970106 \n",
2381 | "14 44 22.205022 60.020932 22.218981 \n",
2382 | "15 67 10.461603 30.427237 7.602369 \n",
2383 | "16 26 8.673522 45.964108 7.140492 \n",
2384 | "21 177 27.086690 86.234464 18.039215 \n",
2385 | "22 77 7.077957 29.834777 5.668595 \n",
2386 | "27 49 6.568182 32.880716 10.469046 \n",
2387 | "28 23 18.077687 73.211365 5.205551 \n",
2388 | "31 115 24.524428 59.093628 22.213398 \n",
2389 | "32 81 29.887596 61.182293 17.410111 \n",
2390 | "35 43 9.578731 59.109207 1.564818 \n",
2391 | "36 106 20.773835 59.159844 13.004491 \n",
2392 | "37 16 58.672026 157.687796 23.429495 \n",
2393 | "41 289 18.288848 59.530589 12.884379 \n",
2394 | "43 220 21.330160 51.282201 10.498096 \n",
2395 | "45 13 12.373937 55.714870 1.355833 \n",
2396 | "47 17 25.281240 122.901480 19.093144 \n",
2397 | "49 246 18.407885 51.023159 14.897374 \n",
2398 | "50 72 4.399665 24.425995 -1.841137 \n",
2399 | "51 259 11.854037 37.447401 9.366651 \n",
2400 | "54 36 28.334038 71.459495 15.928740 \n",
2401 | "55 291 12.881452 51.579799 11.156412 \n",
2402 | "56 188 16.521899 49.528556 9.195105 "
2403 | ]
2404 | },
2405 | "execution_count": 6,
2406 | "metadata": {},
2407 | "output_type": "execute_result"
2408 | }
2409 | ],
2410 | "source": [
2411 | "ratings = df[(df['rating'] != 'NaN') & (df['analyst'].isin(analysts['analyst']))]\n",
2412 | "ratings_agg = ratings.groupby(['analyst', 'rating'], as_index=False).agg({\n",
2413 | " 'error': {\n",
2414 | " 'mae': lambda xs: np.mean(np.abs(filter_tail(xs))),\n",
2415 | " },\n",
2416 | " 'real_perc': {\n",
2417 | " 'mean': 'mean',\n",
2418 | " 'median': 'median',\n",
2419 | " '10p': lambda xs: np.percentile(xs, 10),\n",
2420 | " '90p': lambda xs: np.percentile(xs, 90),\n",
2421 | " 'count': 'count',\n",
2422 | " },\n",
2423 | " 'target_perc': {\n",
2424 | " 'median': 'median',\n",
2425 | " '10p': lambda xs: np.percentile(xs, 10),\n",
2426 | " '90p': lambda xs: np.percentile(xs, 90),\n",
2427 | " }\n",
2428 | " })\n",
2429 | "\n",
2430 | "ratings_agg.columns = list(map('_'.join, ratings_agg.columns.values))\n",
2431 | "ratings_agg[ratings_agg['real_perc_count'] > 10]"
2432 | ]
2433 | },
2434 | {
2435 | "cell_type": "code",
2436 | "execution_count": 10,
2437 | "metadata": {
2438 | "collapsed": false
2439 | },
2440 | "outputs": [
2441 | {
2442 | "data": {
2443 | "text/html": [
2444 | "\n",
2445 | "
\n",
2446 | " \n",
2447 | " \n",
2448 | " | \n",
2449 | " analyst_ | \n",
2450 | " rating_ | \n",
2451 | " target_perc_10p | \n",
2452 | " target_perc_90p | \n",
2453 | " target_perc_median | \n",
2454 | " error_mae | \n",
2455 | " real_perc_10p | \n",
2456 | " real_perc_count | \n",
2457 | " real_perc_mean | \n",
2458 | " real_perc_90p | \n",
2459 | " real_perc_median | \n",
2460 | " analyst_rating | \n",
2461 | "
\n",
2462 | " \n",
2463 | " \n",
2464 | " \n",
2465 | " 32 | \n",
2466 | " National Bank Financial | \n",
2467 | " Sector Perform | \n",
2468 | " 0.277827 | \n",
2469 | " 45.337101 | \n",
2470 | " 8.695651 | \n",
2471 | " 14.170428 | \n",
2472 | " -5.738096 | \n",
2473 | " 81 | \n",
2474 | " 29.887596 | \n",
2475 | " 61.182293 | \n",
2476 | " 17.410111 | \n",
2477 | " National Bank Financial Sector Perform | \n",
2478 | "
\n",
2479 | " \n",
2480 | " 0 | \n",
2481 | " BMO Capital Markets | \n",
2482 | " Market Perform | \n",
2483 | " -0.249542 | \n",
2484 | " 23.049416 | \n",
2485 | " 7.826429 | \n",
2486 | " 17.048387 | \n",
2487 | " -13.624028 | \n",
2488 | " 82 | \n",
2489 | " 29.306269 | \n",
2490 | " 86.571109 | \n",
2491 | " 11.962594 | \n",
2492 | " BMO Capital Markets Market Perform | \n",
2493 | "
\n",
2494 | " \n",
2495 | " 54 | \n",
2496 | " TD Securities | \n",
2497 | " Action List Buy | \n",
2498 | " 18.333724 | \n",
2499 | " 77.701954 | \n",
2500 | " 38.001830 | \n",
2501 | " 19.629657 | \n",
2502 | " -0.893705 | \n",
2503 | " 36 | \n",
2504 | " 28.334038 | \n",
2505 | " 71.459495 | \n",
2506 | " 15.928740 | \n",
2507 | " TD Securities Action List Buy | \n",
2508 | "
\n",
2509 | " \n",
2510 | " 21 | \n",
2511 | " Canaccord Genuity | \n",
2512 | " Buy | \n",
2513 | " 8.340735 | \n",
2514 | " 61.226203 | \n",
2515 | " 24.085974 | \n",
2516 | " 18.796959 | \n",
2517 | " -16.561733 | \n",
2518 | " 177 | \n",
2519 | " 27.086690 | \n",
2520 | " 86.234464 | \n",
2521 | " 18.039215 | \n",
2522 | " Canaccord Genuity Buy | \n",
2523 | "
\n",
2524 | " \n",
2525 | " 31 | \n",
2526 | " National Bank Financial | \n",
2527 | " Outperform | \n",
2528 | " 7.705539 | \n",
2529 | " 53.579343 | \n",
2530 | " 18.929633 | \n",
2531 | " 12.407454 | \n",
2532 | " -1.526925 | \n",
2533 | " 115 | \n",
2534 | " 24.524428 | \n",
2535 | " 59.093628 | \n",
2536 | " 22.213398 | \n",
2537 | " National Bank Financial Outperform | \n",
2538 | "
\n",
2539 | " \n",
2540 | " 2 | \n",
2541 | " BMO Capital Markets | \n",
2542 | " Outperform | \n",
2543 | " 9.333289 | \n",
2544 | " 34.091310 | \n",
2545 | " 18.863216 | \n",
2546 | " 13.267287 | \n",
2547 | " -13.430220 | \n",
2548 | " 116 | \n",
2549 | " 22.215401 | \n",
2550 | " 64.711223 | \n",
2551 | " 15.109094 | \n",
2552 | " BMO Capital Markets Outperform | \n",
2553 | "
\n",
2554 | " \n",
2555 | " 14 | \n",
2556 | " CIBC | \n",
2557 | " Sector Outperformer | \n",
2558 | " 9.714648 | \n",
2559 | " 59.846481 | \n",
2560 | " 33.652243 | \n",
2561 | " 21.688542 | \n",
2562 | " -14.518562 | \n",
2563 | " 44 | \n",
2564 | " 22.205022 | \n",
2565 | " 60.020932 | \n",
2566 | " 22.218981 | \n",
2567 | " CIBC Sector Outperformer | \n",
2568 | "
\n",
2569 | " \n",
2570 | " 43 | \n",
2571 | " Royal Bank of Canada | \n",
2572 | " Sector Perform | \n",
2573 | " -0.678788 | \n",
2574 | " 36.516168 | \n",
2575 | " 11.101983 | \n",
2576 | " 13.099112 | \n",
2577 | " -11.590060 | \n",
2578 | " 220 | \n",
2579 | " 21.330160 | \n",
2580 | " 51.282201 | \n",
2581 | " 10.498096 | \n",
2582 | " Royal Bank of Canada Sector Perform | \n",
2583 | "
\n",
2584 | " \n",
2585 | " 36 | \n",
2586 | " Raymond James Financial, Inc. | \n",
2587 | " Outperform | \n",
2588 | " 9.437804 | \n",
2589 | " 54.483693 | \n",
2590 | " 21.236522 | \n",
2591 | " 15.914385 | \n",
2592 | " -18.695776 | \n",
2593 | " 106 | \n",
2594 | " 20.773835 | \n",
2595 | " 59.159844 | \n",
2596 | " 13.004491 | \n",
2597 | " Raymond James Financial, Inc. Outperform | \n",
2598 | "
\n",
2599 | " \n",
2600 | " 49 | \n",
2601 | " Scotiabank | \n",
2602 | " Outperform | \n",
2603 | " 7.239955 | \n",
2604 | " 50.402485 | \n",
2605 | " 19.082141 | \n",
2606 | " 15.926344 | \n",
2607 | " -21.632875 | \n",
2608 | " 246 | \n",
2609 | " 18.407885 | \n",
2610 | " 51.023159 | \n",
2611 | " 14.897374 | \n",
2612 | " Scotiabank Outperform | \n",
2613 | "
\n",
2614 | " \n",
2615 | "
\n",
2616 | "
"
2617 | ],
2618 | "text/plain": [
2619 | " analyst_ rating_ target_perc_10p \\\n",
2620 | "32 National Bank Financial Sector Perform 0.277827 \n",
2621 | "0 BMO Capital Markets Market Perform -0.249542 \n",
2622 | "54 TD Securities Action List Buy 18.333724 \n",
2623 | "21 Canaccord Genuity Buy 8.340735 \n",
2624 | "31 National Bank Financial Outperform 7.705539 \n",
2625 | "2 BMO Capital Markets Outperform 9.333289 \n",
2626 | "14 CIBC Sector Outperformer 9.714648 \n",
2627 | "43 Royal Bank of Canada Sector Perform -0.678788 \n",
2628 | "36 Raymond James Financial, Inc. Outperform 9.437804 \n",
2629 | "49 Scotiabank Outperform 7.239955 \n",
2630 | "\n",
2631 | " target_perc_90p target_perc_median error_mae real_perc_10p \\\n",
2632 | "32 45.337101 8.695651 14.170428 -5.738096 \n",
2633 | "0 23.049416 7.826429 17.048387 -13.624028 \n",
2634 | "54 77.701954 38.001830 19.629657 -0.893705 \n",
2635 | "21 61.226203 24.085974 18.796959 -16.561733 \n",
2636 | "31 53.579343 18.929633 12.407454 -1.526925 \n",
2637 | "2 34.091310 18.863216 13.267287 -13.430220 \n",
2638 | "14 59.846481 33.652243 21.688542 -14.518562 \n",
2639 | "43 36.516168 11.101983 13.099112 -11.590060 \n",
2640 | "36 54.483693 21.236522 15.914385 -18.695776 \n",
2641 | "49 50.402485 19.082141 15.926344 -21.632875 \n",
2642 | "\n",
2643 | " real_perc_count real_perc_mean real_perc_90p real_perc_median \\\n",
2644 | "32 81 29.887596 61.182293 17.410111 \n",
2645 | "0 82 29.306269 86.571109 11.962594 \n",
2646 | "54 36 28.334038 71.459495 15.928740 \n",
2647 | "21 177 27.086690 86.234464 18.039215 \n",
2648 | "31 115 24.524428 59.093628 22.213398 \n",
2649 | "2 116 22.215401 64.711223 15.109094 \n",
2650 | "14 44 22.205022 60.020932 22.218981 \n",
2651 | "43 220 21.330160 51.282201 10.498096 \n",
2652 | "36 106 20.773835 59.159844 13.004491 \n",
2653 | "49 246 18.407885 51.023159 14.897374 \n",
2654 | "\n",
2655 | " analyst_rating \n",
2656 | "32 National Bank Financial Sector Perform \n",
2657 | "0 BMO Capital Markets Market Perform \n",
2658 | "54 TD Securities Action List Buy \n",
2659 | "21 Canaccord Genuity Buy \n",
2660 | "31 National Bank Financial Outperform \n",
2661 | "2 BMO Capital Markets Outperform \n",
2662 | "14 CIBC Sector Outperformer \n",
2663 | "43 Royal Bank of Canada Sector Perform \n",
2664 | "36 Raymond James Financial, Inc. Outperform \n",
2665 | "49 Scotiabank Outperform "
2666 | ]
2667 | },
2668 | "execution_count": 10,
2669 | "metadata": {},
2670 | "output_type": "execute_result"
2671 | }
2672 | ],
2673 | "source": [
2674 | "top_ratings = ratings_agg[ratings_agg['real_perc_count'] > 20]\n",
2675 | "top_ratings = top_ratings.sort_values('real_perc_mean', ascending=False)\n",
2676 | "top_ratings['analyst_rating'] = top_ratings['analyst_'] + ' ' + top_ratings['rating_']\n",
2677 | "top_analyst_ratings = top_ratings.head(10)\n",
2678 | "top_analyst_ratings"
2679 | ]
2680 | },
2681 | {
2682 | "cell_type": "code",
2683 | "execution_count": 20,
2684 | "metadata": {
2685 | "collapsed": false,
2686 | "scrolled": false
2687 | },
2688 | "outputs": [
2689 | {
2690 | "name": "stdout",
2691 | "output_type": "stream",
2692 | "text": [
2693 | "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n"
2694 | ]
2695 | },
2696 | {
2697 | "data": {
2698 | "text/plain": [
2699 | "([,\n",
2700 | " ,\n",
2701 | " ,\n",
2702 | " ,\n",
2703 | " ,\n",
2704 | " ,\n",
2705 | " ,\n",
2706 | " ,\n",
2707 | " ,\n",
2708 | " ],\n",
2709 | " )"
2710 | ]
2711 | },
2712 | "execution_count": 20,
2713 | "metadata": {},
2714 | "output_type": "execute_result"
2715 | },
2716 | {
2717 | "data": {
2718 | "image/png": "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\n",
2719 | "text/plain": [
2720 | ""
2721 | ]
2722 | },
2723 | "metadata": {},
2724 | "output_type": "display_data"
2725 | }
2726 | ],
2727 | "source": [
2728 | "#ax = plt.axes()\n",
2729 | "#ax.set_ylim(-100, 100)\n",
2730 | "df['analyst_rating'] = df['analyst'] + ' '+ df['rating']\n",
2731 | "ratings_perf = df[df['analyst_rating']\n",
2732 | " .isin(top_analyst_ratings['analyst_rating'])]\n",
2733 | " .groupby('analyst_rating',as_index=False)['real_perc'].agg({\n",
2734 | " 'mean': 'mean',\n",
2735 | " 'std': 'std',\n",
2736 | " }).sort_values(by='mean')\n",
2737 | "#ratings_perf\n",
2738 | "#ratings_perf.boxplot(ax=ax, by='analyst_rating', column='real_perc', return_type='axes', rot=90)\n",
2739 | "xlabels = ratings_perf['analyst_rating']\n",
2740 | "x = [i for i in range(1, len(xlabels)+1)]\n",
2741 | "print(x)\n",
2742 | "y = ratings_perf['mean']\n",
2743 | "e = ratings_perf['std']\n",
2744 | "plt.errorbar(x, y, e, fmt='o')\n",
2745 | "plt.xlim(0, len(x) + 1)\n",
2746 | "plt.ylim(-50, 150)\n",
2747 | "plt.xticks(x, xlabels, rotation='vertical')"
2748 | ]
2749 | },
2750 | {
2751 | "cell_type": "code",
2752 | "execution_count": null,
2753 | "metadata": {
2754 | "collapsed": true
2755 | },
2756 | "outputs": [],
2757 | "source": []
2758 | }
2759 | ],
2760 | "metadata": {
2761 | "anaconda-cloud": {},
2762 | "kernelspec": {
2763 | "display_name": "Python [conda root]",
2764 | "language": "python",
2765 | "name": "conda-root-py"
2766 | },
2767 | "language_info": {
2768 | "codemirror_mode": {
2769 | "name": "ipython",
2770 | "version": 3
2771 | },
2772 | "file_extension": ".py",
2773 | "mimetype": "text/x-python",
2774 | "name": "python",
2775 | "nbconvert_exporter": "python",
2776 | "pygments_lexer": "ipython3",
2777 | "version": "3.5.2"
2778 | }
2779 | },
2780 | "nbformat": 4,
2781 | "nbformat_minor": 1
2782 | }
2783 |
--------------------------------------------------------------------------------
/ratings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ayoungprogrammer/price-targets/04bd7c5b6341599dcba0dae28199919f724ace11/ratings.png
--------------------------------------------------------------------------------