What is CACR and why not use AAGR?
Often when you see financial advisors have statements with awesome returns. These returns might be what is called Annual Average Growth Rates (AAGR). Why should you be skeptical with AAGR?
Simple example will show you.
- You start by investing 10.000$.
- First year you get 100% in return, resulting in 20.000$.
- The year after you have a fall of 50%, which makes your value back to 10.000$
Using AAGR, your investor will tell you you have (100% – 50%)/2 = 25% AAGR or calls it average annual return.
But wait a minute? You have the same amount of money after two years, so how can that be 25%?
With Compound Annual Growth Rate the story is different as it only considers the start and end value. Here the difference is a big 0$, resulting in a 0% CAGR.
The formula for calculating CAGR is.
((end value)/(start value))^(1/years) – 1
As the above example: (10.000/10.000)^(1/2) – 1 = 0
Step 1: Getting access to financial sector data
In this tutorial we will use the Alpha Vantage. To connect to them you need to register to get a API_KEY.
To claim your key go to: https://www.alphavantage.co/support/#api-key

Where you will select Software Developer in the drop-down Which of the following best describes you? Write your organization of choice. Then write your email address and click that you are not a robot. Or are you?
Then it will give you hare API_KEY on the screen (not in a email). The key is probably a 16 upper case character and integer string.
Step 2: Get the sector data to play with
Looking at Pandas-datareaders API you will see you can use the get_sector_performance_av() function.
import pandas_datareader.data as web
API_KEY = "INSERT YOUR KEY HERE"
data = web.get_sector_performance_av(api_key=API_KEY)
print(data)
Remember to change API_KEY to the key you got from Step 1.
You should get an output similar to this one (not showing all columns).
RT 1D 5D ... 3Y 5Y 1
0Y
Communication Services 0.38% 0.38% -0.20% ... 24.04% 29.92% 74.7
8%
Information Technology 0.04% 0.04% -1.36% ... 104.45% 183.51% 487.3
3%
Consumer Discretionary -0.06% -0.06% 1.36% ... 66.06% 92.37% 384.7
1%
Materials -0.07% -0.07% 1.75% ... 17.50% 37.64% 106.9
0%
Health Care -0.16% -0.17% 0.90% ... 37.21% 43.20% 268.5
8%
Consumer Staples -0.19% -0.19% 1.42% ... 15.96% 27.65% 137.66%
Utilities -0.38% -0.38% 0.60% ... 13.39% 34.79% 99.63%
Financials -0.61% -0.61% 3.23% ... 1.67% 23.89% 119.46%
Industrials -0.65% -0.65% 4.45% ... 12.57% 40.05% 155.56%
Real Estate -1.23% -1.23% -0.63% ... 12.51% NaN NaN
Energy -1.99% -1.99% 1.38% ... -39.45% -44.69% -29.07%
The columns we are interested in are the 1Y, 3Y, 5Y, and 10Y.
Step 3: Convert columns to floats
As you saw in the previous Step that the columns all contain in %-sign, which tells you that the entries are strings and not floats and need to be converted.
This can be done by some string magic. First we need to remove the %-sign before we convert it to a float.
import pandas_datareader.data as web
API_KEY = "INSERT YOUR KEY HERE"
data = web.get_sector_performance_av(api_key=API_KEY)
for column in data.columns:
data[column] = data[column].str.rstrip('%').astype('float') / 100.0
print(data[['1Y', '3Y', '5Y' , '10Y']])
Where we convert all columns in the for-loop. Then we print only the columns we need.
1Y 3Y 5Y 10Y
Communication Services 0.1999 0.2404 0.2992 0.7478
Information Technology 0.4757 1.0445 1.8351 4.8733
Consumer Discretionary 0.2904 0.6606 0.9237 3.8471
Materials 0.1051 0.1750 0.3764 1.0690
Health Care 0.1908 0.3721 0.4320 2.6858
Consumer Staples 0.0858 0.1596 0.2765 1.3766
Utilities 0.0034 0.1339 0.3479 0.9963
Financials -0.0566 0.0167 0.2389 1.1946
Industrials 0.0413 0.1257 0.4005 1.5556
Real Estate -0.0658 0.1251 NaN NaN
Energy -0.3383 -0.3945 -0.4469 -0.2907
All looking nice. Also, notice that we converted them to float values and not in %-values by dividing by 100.
Step 4: Calculate the CAGR
Now we need to use the formula on the columns.
import pandas_datareader.data as web
API_KEY = "INSERT YOUR KEY HERE"
data = web.get_sector_performance_av(api_key=API_KEY)
for column in data.columns:
data[column] = data[column].str.rstrip('%').astype('float') / 100.0
data['1Y-CAGR'] = data['1Y']*100
data['3Y-CAGR'] = ((1 + data['3Y']) ** (1/3) - 1) * 100
data['5Y-CAGR'] = ((1 + data['5Y']) ** (1/5) - 1) * 100
data['10Y-CAGR'] = ((1 + data['10Y']) ** (1/10) - 1) * 100
cols = ['1Y-CAGR','3Y-CAGR', '5Y-CAGR', '10Y-CAGR']
print(data[cols])
This should result in something similar.
1Y-CAGR 3Y-CAGR 5Y-CAGR 10Y-CAGR
Communication Services 19.99 7.445258 5.374421 5.742403
Information Technology 47.57 26.919700 23.172477 19.368083
Consumer Discretionary 29.04 18.419079 13.979689 17.097655
Materials 10.51 5.522715 6.597970 7.541490
Health Care 19.08 11.120773 7.445592 13.933956
Consumer Staples 8.58 5.059679 5.003594 9.042452
Utilities 0.34 4.277734 6.152820 7.157502
Financials -5.66 0.553596 4.377587 8.177151
Industrials 4.13 4.025758 6.968677 9.837158
Real Estate -6.58 4.007273 NaN NaN
Energy -33.83 -15.399801 -11.169781 -3.376449
Looks like the Information Technology sector is very lucrative.
But to make it more digestible we should visualize it.
Step 5: Create a heatmap
We will use the seaborn library to create it, which is a statistical data visualizing library.
The heatmap endpoint is defined to simply take the DataFrame to visualize. It could not be easier.
import pandas_datareader.data as web
import seaborn as sns
import matplotlib.pyplot as plt
API_KEY = "INSERT YOUR KEY HERE"
data = web.get_sector_performance_av(api_key=API_KEY)
for column in data.columns:
data[column] = data[column].str.rstrip('%').astype('float') / 100.0
data['1Y-CAGR'] = data['1Y']*100
data['3Y-CAGR'] = ((1 + data['3Y']) ** (1/3) - 1) * 100
data['5Y-CAGR'] = ((1 + data['5Y']) ** (1/5) - 1) * 100
data['10Y-CAGR'] = ((1 + data['10Y']) ** (1/10) - 1) * 100
cols = ['1Y-CAGR','3Y-CAGR', '5Y-CAGR', '10Y-CAGR']
sns.heatmap(data[cols], annot=True, cmap="YlGnBu")
plt.show()
Resulting in the following output.

Learn Python

Learn Python A BEGINNERS GUIDE TO PYTHON
- 70 pages to get you started on your journey to master Python.
- How to install your setup with Anaconda.
- Written description and introduction to all concepts.
- Jupyter Notebooks prepared for 17 projects.
Python 101: A CRASH COURSE
- How to get started with this 8 hours Python 101: A CRASH COURSE.
- Best practices for learning Python.
- How to download the material to follow along and create projects.
- A chapter for each lesson with a description, code snippets for easy reference, and links to a lesson video.
Expert Data Science Blueprint

Expert Data Science Blueprint
- Master the Data Science Workflow for actionable data insights.
- How to download the material to follow along and create projects.
- A chapter to each lesson with a Description, Learning Objective, and link to the lesson video.
Machine Learning

Machine Learning – The Simple Path to Mastery
- How to get started with Machine Learning.
- How to download the material to follow along and make the projects.
- One chapter for each lesson with a Description, Learning Objectives, and link to the lesson video.