diff --git a/09_Time_Series/Getting_Financial_Data/Exercises_solutions.ipynb b/09_Time_Series/Getting_Financial_Data/Exercises_solutions.ipynb
new file mode 100644
index 000000000..7880b7e3d
--- /dev/null
+++ b/09_Time_Series/Getting_Financial_Data/Exercises_solutions.ipynb
@@ -0,0 +1,1194 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Getting Financial Data - Pandas Datareader"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction:\n",
+ "\n",
+ "This time you will get data from a website.\n",
+ "\n",
+ "\n",
+ "### Step 1. Import the necessary libraries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "\n",
+ "# package to extract data from various Internet sources into a DataFrame\n",
+ "# make sure you have it installed\n",
+ "import pandas_datareader.data as web\n",
+ "\n",
+ "# package for dates\n",
+ "import datetime as dt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 2. Create your time range (start and end variables). The start date should be 01/01/2015 and the end should today (whatever your today is)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "datetime.datetime(2015, 1, 1, 0, 0)"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "start_dt = dt.datetime(2015, 1, 1, 0, 0)\n",
+ "start_dt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 3. Get an API key for one of the APIs that are supported by Pandas Datareader, preferably for AlphaVantage.\n",
+ "\n",
+ "If you do not have an API key for any of the supported APIs, it is easiest to get one for [AlphaVantage](https://www.alphavantage.co/support/#api-key). (Note that the API key is shown directly after the signup. You do *not* receive it via e-mail.)\n",
+ "\n",
+ "(For a full list of the APIs that are supported by Pandas Datareader, [see here](https://pydata.github.io/pandas-datareader/readers/index.html). As the APIs are provided by third parties, this list may change.)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 4. Use Pandas Datarader to read the daily time series for the Apple stock (ticker symbol AAPL) between 01/01/2015 and today, assign it to df_apple and print it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " open | \n",
+ " high | \n",
+ " low | \n",
+ " close | \n",
+ " volume | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2015-01-02 | \n",
+ " 111.390 | \n",
+ " 111.440 | \n",
+ " 107.3500 | \n",
+ " 109.33 | \n",
+ " 53204626 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-05 | \n",
+ " 108.290 | \n",
+ " 108.650 | \n",
+ " 105.4100 | \n",
+ " 106.25 | \n",
+ " 64285491 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-06 | \n",
+ " 106.540 | \n",
+ " 107.430 | \n",
+ " 104.6300 | \n",
+ " 106.26 | \n",
+ " 65797116 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-07 | \n",
+ " 107.200 | \n",
+ " 108.200 | \n",
+ " 106.6950 | \n",
+ " 107.75 | \n",
+ " 40105934 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-08 | \n",
+ " 109.230 | \n",
+ " 112.150 | \n",
+ " 108.7000 | \n",
+ " 111.89 | \n",
+ " 59364547 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2021-11-15 | \n",
+ " 150.370 | \n",
+ " 151.880 | \n",
+ " 149.4300 | \n",
+ " 150.00 | \n",
+ " 59222803 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-16 | \n",
+ " 149.940 | \n",
+ " 151.488 | \n",
+ " 149.3400 | \n",
+ " 151.00 | \n",
+ " 59256210 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-17 | \n",
+ " 150.995 | \n",
+ " 155.000 | \n",
+ " 150.9900 | \n",
+ " 153.49 | \n",
+ " 88807000 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-18 | \n",
+ " 153.710 | \n",
+ " 158.670 | \n",
+ " 153.0500 | \n",
+ " 157.87 | \n",
+ " 137827673 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-19 | \n",
+ " 157.650 | \n",
+ " 161.020 | \n",
+ " 156.5328 | \n",
+ " 160.55 | \n",
+ " 116744360 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1735 rows × 5 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " open high low close volume\n",
+ "2015-01-02 111.390 111.440 107.3500 109.33 53204626\n",
+ "2015-01-05 108.290 108.650 105.4100 106.25 64285491\n",
+ "2015-01-06 106.540 107.430 104.6300 106.26 65797116\n",
+ "2015-01-07 107.200 108.200 106.6950 107.75 40105934\n",
+ "2015-01-08 109.230 112.150 108.7000 111.89 59364547\n",
+ "... ... ... ... ... ...\n",
+ "2021-11-15 150.370 151.880 149.4300 150.00 59222803\n",
+ "2021-11-16 149.940 151.488 149.3400 151.00 59256210\n",
+ "2021-11-17 150.995 155.000 150.9900 153.49 88807000\n",
+ "2021-11-18 153.710 158.670 153.0500 157.87 137827673\n",
+ "2021-11-19 157.650 161.020 156.5328 160.55 116744360\n",
+ "\n",
+ "[1735 rows x 5 columns]"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_apple = web.DataReader(\"AAPL\", \"av-daily\", start=start_dt, api_key=\"AZOBAQ2SK8AC1MUD\")\n",
+ "df_apple\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 5. Add a new column \"stock\" to the dataframe and add the ticker symbol"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " open | \n",
+ " high | \n",
+ " low | \n",
+ " close | \n",
+ " volume | \n",
+ " stock | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2015-01-02 | \n",
+ " 111.390 | \n",
+ " 111.440 | \n",
+ " 107.3500 | \n",
+ " 109.33 | \n",
+ " 53204626 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2015-01-05 | \n",
+ " 108.290 | \n",
+ " 108.650 | \n",
+ " 105.4100 | \n",
+ " 106.25 | \n",
+ " 64285491 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2015-01-06 | \n",
+ " 106.540 | \n",
+ " 107.430 | \n",
+ " 104.6300 | \n",
+ " 106.26 | \n",
+ " 65797116 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2015-01-07 | \n",
+ " 107.200 | \n",
+ " 108.200 | \n",
+ " 106.6950 | \n",
+ " 107.75 | \n",
+ " 40105934 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2015-01-08 | \n",
+ " 109.230 | \n",
+ " 112.150 | \n",
+ " 108.7000 | \n",
+ " 111.89 | \n",
+ " 59364547 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2021-11-15 | \n",
+ " 150.370 | \n",
+ " 151.880 | \n",
+ " 149.4300 | \n",
+ " 150.00 | \n",
+ " 59222803 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2021-11-16 | \n",
+ " 149.940 | \n",
+ " 151.488 | \n",
+ " 149.3400 | \n",
+ " 151.00 | \n",
+ " 59256210 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2021-11-17 | \n",
+ " 150.995 | \n",
+ " 155.000 | \n",
+ " 150.9900 | \n",
+ " 153.49 | \n",
+ " 88807000 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2021-11-18 | \n",
+ " 153.710 | \n",
+ " 158.670 | \n",
+ " 153.0500 | \n",
+ " 157.87 | \n",
+ " 137827673 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2021-11-19 | \n",
+ " 157.650 | \n",
+ " 161.020 | \n",
+ " 156.5328 | \n",
+ " 160.55 | \n",
+ " 116744360 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1735 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " open high low close volume stock\n",
+ "2015-01-02 111.390 111.440 107.3500 109.33 53204626 AAPL\n",
+ "2015-01-05 108.290 108.650 105.4100 106.25 64285491 AAPL\n",
+ "2015-01-06 106.540 107.430 104.6300 106.26 65797116 AAPL\n",
+ "2015-01-07 107.200 108.200 106.6950 107.75 40105934 AAPL\n",
+ "2015-01-08 109.230 112.150 108.7000 111.89 59364547 AAPL\n",
+ "... ... ... ... ... ... ...\n",
+ "2021-11-15 150.370 151.880 149.4300 150.00 59222803 AAPL\n",
+ "2021-11-16 149.940 151.488 149.3400 151.00 59256210 AAPL\n",
+ "2021-11-17 150.995 155.000 150.9900 153.49 88807000 AAPL\n",
+ "2021-11-18 153.710 158.670 153.0500 157.87 137827673 AAPL\n",
+ "2021-11-19 157.650 161.020 156.5328 160.55 116744360 AAPL\n",
+ "\n",
+ "[1735 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_apple['stock'] = 'AAPL'\n",
+ "df_apple"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 6. Repeat the two previous steps for a few other stocks, always creating a new dataframe: Tesla, IBM and Microsoft. (Ticker symbols TSLA, IBM and MSFT.)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_tesla = web.DataReader(\"TSLA\", \"av-daily\", start=start_dt, api_key=\"AZOBAQ2SK8AC1MUD\")\n",
+ "df_tesla['stock'] = \"TSLA\"\n",
+ "\n",
+ "df_ibm = web.DataReader(\"IBM\", \"av-daily\", start=start_dt, api_key=\"AZOBAQ2SK8AC1MUD\")\n",
+ "df_ibm['stock'] = \"IBM\"\n",
+ "\n",
+ "df_microsoft = web.DataReader(\"MSFT\", \"av-daily\", start=start_dt, api_key=\"AZOBAQ2SK8AC1MUD\")\n",
+ "df_microsoft['stock'] = \"MSFT\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 7. Combine the four separate dataFrames into one combined dataFrame df that holds the information for all four stocks"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " open | \n",
+ " high | \n",
+ " low | \n",
+ " close | \n",
+ " volume | \n",
+ " stock | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2015-01-02 | \n",
+ " 111.39 | \n",
+ " 111.44 | \n",
+ " 107.350 | \n",
+ " 109.33 | \n",
+ " 53204626 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2015-01-05 | \n",
+ " 108.29 | \n",
+ " 108.65 | \n",
+ " 105.410 | \n",
+ " 106.25 | \n",
+ " 64285491 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2015-01-06 | \n",
+ " 106.54 | \n",
+ " 107.43 | \n",
+ " 104.630 | \n",
+ " 106.26 | \n",
+ " 65797116 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2015-01-07 | \n",
+ " 107.20 | \n",
+ " 108.20 | \n",
+ " 106.695 | \n",
+ " 107.75 | \n",
+ " 40105934 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " 2015-01-08 | \n",
+ " 109.23 | \n",
+ " 112.15 | \n",
+ " 108.700 | \n",
+ " 111.89 | \n",
+ " 59364547 | \n",
+ " AAPL | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2021-11-15 | \n",
+ " 337.54 | \n",
+ " 337.88 | \n",
+ " 334.034 | \n",
+ " 336.07 | \n",
+ " 16723009 | \n",
+ " MSFT | \n",
+ "
\n",
+ " \n",
+ " 2021-11-16 | \n",
+ " 335.68 | \n",
+ " 340.67 | \n",
+ " 335.510 | \n",
+ " 339.51 | \n",
+ " 20886832 | \n",
+ " MSFT | \n",
+ "
\n",
+ " \n",
+ " 2021-11-17 | \n",
+ " 338.94 | \n",
+ " 342.19 | \n",
+ " 338.000 | \n",
+ " 339.12 | \n",
+ " 19053380 | \n",
+ " MSFT | \n",
+ "
\n",
+ " \n",
+ " 2021-11-18 | \n",
+ " 338.18 | \n",
+ " 342.45 | \n",
+ " 337.120 | \n",
+ " 341.27 | \n",
+ " 22463533 | \n",
+ " MSFT | \n",
+ "
\n",
+ " \n",
+ " 2021-11-19 | \n",
+ " 342.64 | \n",
+ " 345.10 | \n",
+ " 342.200 | \n",
+ " 343.11 | \n",
+ " 21095274 | \n",
+ " MSFT | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
6940 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " open high low close volume stock\n",
+ "2015-01-02 111.39 111.44 107.350 109.33 53204626 AAPL\n",
+ "2015-01-05 108.29 108.65 105.410 106.25 64285491 AAPL\n",
+ "2015-01-06 106.54 107.43 104.630 106.26 65797116 AAPL\n",
+ "2015-01-07 107.20 108.20 106.695 107.75 40105934 AAPL\n",
+ "2015-01-08 109.23 112.15 108.700 111.89 59364547 AAPL\n",
+ "... ... ... ... ... ... ...\n",
+ "2021-11-15 337.54 337.88 334.034 336.07 16723009 MSFT\n",
+ "2021-11-16 335.68 340.67 335.510 339.51 20886832 MSFT\n",
+ "2021-11-17 338.94 342.19 338.000 339.12 19053380 MSFT\n",
+ "2021-11-18 338.18 342.45 337.120 341.27 22463533 MSFT\n",
+ "2021-11-19 342.64 345.10 342.200 343.11 21095274 MSFT\n",
+ "\n",
+ "[6940 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_all = pd.concat([df_apple, df_tesla, df_ibm, df_microsoft])\n",
+ "df_all"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 8. Shift the stock column into the index (making it a multi-level index consisting of the ticker symbol and the date)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " open | \n",
+ " high | \n",
+ " low | \n",
+ " close | \n",
+ " volume | \n",
+ "
\n",
+ " \n",
+ " | \n",
+ " stock | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2015-01-02 | \n",
+ " AAPL | \n",
+ " 111.39 | \n",
+ " 111.44 | \n",
+ " 107.350 | \n",
+ " 109.33 | \n",
+ " 53204626 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-05 | \n",
+ " AAPL | \n",
+ " 108.29 | \n",
+ " 108.65 | \n",
+ " 105.410 | \n",
+ " 106.25 | \n",
+ " 64285491 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-06 | \n",
+ " AAPL | \n",
+ " 106.54 | \n",
+ " 107.43 | \n",
+ " 104.630 | \n",
+ " 106.26 | \n",
+ " 65797116 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-07 | \n",
+ " AAPL | \n",
+ " 107.20 | \n",
+ " 108.20 | \n",
+ " 106.695 | \n",
+ " 107.75 | \n",
+ " 40105934 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-08 | \n",
+ " AAPL | \n",
+ " 109.23 | \n",
+ " 112.15 | \n",
+ " 108.700 | \n",
+ " 111.89 | \n",
+ " 59364547 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2021-11-15 | \n",
+ " MSFT | \n",
+ " 337.54 | \n",
+ " 337.88 | \n",
+ " 334.034 | \n",
+ " 336.07 | \n",
+ " 16723009 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-16 | \n",
+ " MSFT | \n",
+ " 335.68 | \n",
+ " 340.67 | \n",
+ " 335.510 | \n",
+ " 339.51 | \n",
+ " 20886832 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-17 | \n",
+ " MSFT | \n",
+ " 338.94 | \n",
+ " 342.19 | \n",
+ " 338.000 | \n",
+ " 339.12 | \n",
+ " 19053380 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-18 | \n",
+ " MSFT | \n",
+ " 338.18 | \n",
+ " 342.45 | \n",
+ " 337.120 | \n",
+ " 341.27 | \n",
+ " 22463533 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-19 | \n",
+ " MSFT | \n",
+ " 342.64 | \n",
+ " 345.10 | \n",
+ " 342.200 | \n",
+ " 343.11 | \n",
+ " 21095274 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
6940 rows × 5 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " open high low close volume\n",
+ " stock \n",
+ "2015-01-02 AAPL 111.39 111.44 107.350 109.33 53204626\n",
+ "2015-01-05 AAPL 108.29 108.65 105.410 106.25 64285491\n",
+ "2015-01-06 AAPL 106.54 107.43 104.630 106.26 65797116\n",
+ "2015-01-07 AAPL 107.20 108.20 106.695 107.75 40105934\n",
+ "2015-01-08 AAPL 109.23 112.15 108.700 111.89 59364547\n",
+ "... ... ... ... ... ...\n",
+ "2021-11-15 MSFT 337.54 337.88 334.034 336.07 16723009\n",
+ "2021-11-16 MSFT 335.68 340.67 335.510 339.51 20886832\n",
+ "2021-11-17 MSFT 338.94 342.19 338.000 339.12 19053380\n",
+ "2021-11-18 MSFT 338.18 342.45 337.120 341.27 22463533\n",
+ "2021-11-19 MSFT 342.64 345.10 342.200 343.11 21095274\n",
+ "\n",
+ "[6940 rows x 5 columns]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_all = df_all.set_index('stock', append=True)\n",
+ "df_all"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 7. Create a dataFrame called vol, with the volume values."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " volume | \n",
+ "
\n",
+ " \n",
+ " | \n",
+ " stock | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2015-01-02 | \n",
+ " AAPL | \n",
+ " 53204626 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-05 | \n",
+ " AAPL | \n",
+ " 64285491 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-06 | \n",
+ " AAPL | \n",
+ " 65797116 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-07 | \n",
+ " AAPL | \n",
+ " 40105934 | \n",
+ "
\n",
+ " \n",
+ " 2015-01-08 | \n",
+ " AAPL | \n",
+ " 59364547 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2021-11-15 | \n",
+ " MSFT | \n",
+ " 16723009 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-16 | \n",
+ " MSFT | \n",
+ " 20886832 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-17 | \n",
+ " MSFT | \n",
+ " 19053380 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-18 | \n",
+ " MSFT | \n",
+ " 22463533 | \n",
+ "
\n",
+ " \n",
+ " 2021-11-19 | \n",
+ " MSFT | \n",
+ " 21095274 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
6940 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " volume\n",
+ " stock \n",
+ "2015-01-02 AAPL 53204626\n",
+ "2015-01-05 AAPL 64285491\n",
+ "2015-01-06 AAPL 65797116\n",
+ "2015-01-07 AAPL 40105934\n",
+ "2015-01-08 AAPL 59364547\n",
+ "... ...\n",
+ "2021-11-15 MSFT 16723009\n",
+ "2021-11-16 MSFT 20886832\n",
+ "2021-11-17 MSFT 19053380\n",
+ "2021-11-18 MSFT 22463533\n",
+ "2021-11-19 MSFT 21095274\n",
+ "\n",
+ "[6940 rows x 1 columns]"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "vol = df_all.filter(['volume'])\n",
+ "vol"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 8. Aggregate the data of volume to weekly.\n",
+ "Hint: Be careful to not sum data from the same week of 2015 and other years."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " stock | \n",
+ " AAPL | \n",
+ " IBM | \n",
+ " MSFT | \n",
+ " TSLA | \n",
+ "
\n",
+ " \n",
+ " year | \n",
+ " week | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2015 | \n",
+ " 1 | \n",
+ " 53204626 | \n",
+ " 5525341 | \n",
+ " 27913852 | \n",
+ " 4764443 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 282868187 | \n",
+ " 24440360 | \n",
+ " 158596624 | \n",
+ " 22622034 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 304226647 | \n",
+ " 23272056 | \n",
+ " 157088136 | \n",
+ " 30799137 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 198737041 | \n",
+ " 31230797 | \n",
+ " 137352632 | \n",
+ " 16215501 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 465842684 | \n",
+ " 32927307 | \n",
+ " 437786778 | \n",
+ " 15720217 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2021 | \n",
+ " 42 | \n",
+ " 340691290 | \n",
+ " 59731582 | \n",
+ " 91315937 | \n",
+ " 109982713 | \n",
+ "
\n",
+ " \n",
+ " 43 | \n",
+ " 392739936 | \n",
+ " 34288134 | \n",
+ " 159314433 | \n",
+ " 220925116 | \n",
+ "
\n",
+ " \n",
+ " 44 | \n",
+ " 322688958 | \n",
+ " 29791780 | \n",
+ " 120621826 | \n",
+ " 178974628 | \n",
+ "
\n",
+ " \n",
+ " 45 | \n",
+ " 281026556 | \n",
+ " 29109912 | \n",
+ " 106622220 | \n",
+ " 182318404 | \n",
+ "
\n",
+ " \n",
+ " 46 | \n",
+ " 461858046 | \n",
+ " 24205817 | \n",
+ " 100222028 | \n",
+ " 134998459 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
360 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "stock AAPL IBM MSFT TSLA\n",
+ "year week \n",
+ "2015 1 53204626 5525341 27913852 4764443\n",
+ " 2 282868187 24440360 158596624 22622034\n",
+ " 3 304226647 23272056 157088136 30799137\n",
+ " 4 198737041 31230797 137352632 16215501\n",
+ " 5 465842684 32927307 437786778 15720217\n",
+ "... ... ... ... ...\n",
+ "2021 42 340691290 59731582 91315937 109982713\n",
+ " 43 392739936 34288134 159314433 220925116\n",
+ " 44 322688958 29791780 120621826 178974628\n",
+ " 45 281026556 29109912 106622220 182318404\n",
+ " 46 461858046 24205817 100222028 134998459\n",
+ "\n",
+ "[360 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "vol_week = vol.rename_axis(index=['dt', 'stock'])\n",
+ "vol_week.reset_index(inplace=True)\n",
+ "vol_week.dt = pd.to_datetime(vol_week.dt)\n",
+ "vol_week['year'] = vol_week['dt'].map(lambda x: x.year)\n",
+ "vol_week['week'] = vol_week['dt'].map(lambda x: x.week)\n",
+ "vol_week.pop('dt')\n",
+ "\n",
+ "vol_week.set_index(['year', 'week', 'stock'], inplace=True)\n",
+ "vol_week = vol_week.groupby([pd.Grouper(level='stock'), pd.Grouper(level='year'), pd.Grouper(level='week')]).sum()\n",
+ "\n",
+ "vol_week = vol_week.reset_index()\n",
+ "vol_week = vol_week.pivot(index=['year', 'week'], columns='stock')\n",
+ "vol_week.columns.droplevel(0)\n",
+ "vol_week.columns = vol_week.columns.droplevel(0)\n",
+ "vol_week"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 9. Find all the volume traded in the year of 2015"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " stock | \n",
+ " AAPL | \n",
+ " IBM | \n",
+ " MSFT | \n",
+ " TSLA | \n",
+ "
\n",
+ " \n",
+ " year | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2015 | \n",
+ " 13064316775 | \n",
+ " 1105545521 | \n",
+ " 9057582311 | \n",
+ " 1086708380 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "stock AAPL IBM MSFT TSLA\n",
+ "year \n",
+ "2015 13064316775 1105545521 9057582311 1086708380"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "vol_year = vol_week.groupby('year').sum()\n",
+ "vol_year.loc[2015:2015]"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}