{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ThinkDSP\n",
"\n",
"This notebook contains code examples from Chapter 8: Filtering and Convolution\n",
"\n",
"Copyright 2015 Allen Downey\n",
"\n",
"License: [Creative Commons Attribution 4.0 International](http://creativecommons.org/licenses/by/4.0/)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Get thinkdsp.py\n",
"\n",
"import os\n",
"\n",
"if not os.path.exists('thinkdsp.py'):\n",
" !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/thinkdsp.py"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from thinkdsp import decorate"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# suppress scientific notation for small numbers\n",
"np.set_printoptions(precision=3, suppress=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Smoothing\n",
"\n",
"As the first example, I'll look at [daily closing stock prices for Facebook](https://finance.yahoo.com/quote/FB/history?period1=1337299200&period2=1585353600&interval=1d&filter=history&frequency=1d), from its IPO on 2012-05-18 to 2020-03-27 (note: the dataset includes only trading days )"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"if not os.path.exists('FB_2.csv'):\n",
" !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/FB_2.csv"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Date | \n",
" Open | \n",
" High | \n",
" Low | \n",
" Close | \n",
" Adj Close | \n",
" Volume | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2012-05-18 | \n",
" 42.049999 | \n",
" 45.000000 | \n",
" 38.000000 | \n",
" 38.230000 | \n",
" 38.230000 | \n",
" 573576400 | \n",
"
\n",
" \n",
" 1 | \n",
" 2012-05-21 | \n",
" 36.529999 | \n",
" 36.660000 | \n",
" 33.000000 | \n",
" 34.029999 | \n",
" 34.029999 | \n",
" 168192700 | \n",
"
\n",
" \n",
" 2 | \n",
" 2012-05-22 | \n",
" 32.610001 | \n",
" 33.590000 | \n",
" 30.940001 | \n",
" 31.000000 | \n",
" 31.000000 | \n",
" 101786600 | \n",
"
\n",
" \n",
" 3 | \n",
" 2012-05-23 | \n",
" 31.370001 | \n",
" 32.500000 | \n",
" 31.360001 | \n",
" 32.000000 | \n",
" 32.000000 | \n",
" 73600000 | \n",
"
\n",
" \n",
" 4 | \n",
" 2012-05-24 | \n",
" 32.950001 | \n",
" 33.209999 | \n",
" 31.770000 | \n",
" 33.029999 | \n",
" 33.029999 | \n",
" 50237200 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Date Open High Low Close Adj Close Volume\n",
"0 2012-05-18 42.049999 45.000000 38.000000 38.230000 38.230000 573576400\n",
"1 2012-05-21 36.529999 36.660000 33.000000 34.029999 34.029999 168192700\n",
"2 2012-05-22 32.610001 33.590000 30.940001 31.000000 31.000000 101786600\n",
"3 2012-05-23 31.370001 32.500000 31.360001 32.000000 32.000000 73600000\n",
"4 2012-05-24 32.950001 33.209999 31.770000 33.029999 33.029999 50237200"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.read_csv('FB_2.csv', header=0, parse_dates=[0])\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Date | \n",
" Open | \n",
" High | \n",
" Low | \n",
" Close | \n",
" Adj Close | \n",
" Volume | \n",
"
\n",
" \n",
" \n",
" \n",
" 1972 | \n",
" 2020-03-23 | \n",
" 149.660004 | \n",
" 152.309998 | \n",
" 142.250000 | \n",
" 148.100006 | \n",
" 148.100006 | \n",
" 29830800 | \n",
"
\n",
" \n",
" 1973 | \n",
" 2020-03-24 | \n",
" 155.210007 | \n",
" 161.309998 | \n",
" 152.570007 | \n",
" 160.979996 | \n",
" 160.979996 | \n",
" 30440400 | \n",
"
\n",
" \n",
" 1974 | \n",
" 2020-03-25 | \n",
" 158.919998 | \n",
" 162.990005 | \n",
" 153.059998 | \n",
" 156.210007 | \n",
" 156.210007 | \n",
" 35184300 | \n",
"
\n",
" \n",
" 1975 | \n",
" 2020-03-26 | \n",
" 158.250000 | \n",
" 164.000000 | \n",
" 157.020004 | \n",
" 163.339996 | \n",
" 163.339996 | \n",
" 26556800 | \n",
"
\n",
" \n",
" 1976 | \n",
" 2020-03-27 | \n",
" 158.199997 | \n",
" 160.089996 | \n",
" 154.750000 | \n",
" 156.789993 | \n",
" 156.789993 | \n",
" 24861900 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Date Open High Low Close Adj Close \\\n",
"1972 2020-03-23 149.660004 152.309998 142.250000 148.100006 148.100006 \n",
"1973 2020-03-24 155.210007 161.309998 152.570007 160.979996 160.979996 \n",
"1974 2020-03-25 158.919998 162.990005 153.059998 156.210007 156.210007 \n",
"1975 2020-03-26 158.250000 164.000000 157.020004 163.339996 163.339996 \n",
"1976 2020-03-27 158.199997 160.089996 154.750000 156.789993 156.789993 \n",
"\n",
" Volume \n",
"1972 29830800 \n",
"1973 30440400 \n",
"1974 35184300 \n",
"1975 26556800 \n",
"1976 24861900 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.tail()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Extract the close prices and days since start of series:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"close = df['Close']\n",
"dates = df['Date']\n",
"days = (dates - dates[0]) / np.timedelta64(1,'D')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Make a window to compute a 30-day moving average and convolve the window with the data. The `valid` flag means the convolution is only computed where the window completely overlaps with the signal."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"M = 30\n",
"window = np.ones(M)\n",
"window /= sum(window)\n",
"smoothed = np.convolve(close, window, mode='valid')\n",
"smoothed_days = days[M//2: len(smoothed) + M//2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the original and smoothed signals."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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QpmwxLwZW5NPEtQ4C4VCrF+/nhUrVrB8+fJ+BVcvXbrEhg0bWLhwIc8888yoSt1XVFTQ3t4+kSELMe30/UK+vkLLVNV6ag8axbkuc7KChFJETNlYoskElYmjKElQ48xqtbJz506OHTvG0aNHeeONN3jvvfcA+NKXvsQXvvAFamtrycvL48UXX0xztGPTO0UixK2m79/dTPxingjes3vothYxb9G1m/7DZhfWmBfIzN9nSVDjTClFVlYWANFolGg0ilIKrTU7d+7kwx/+MACf+MQnePXVVwc83+12s3XrVlatWsXzzz/f75fn8ccfZ82aNSxfvpwf/OAHALz44ot84QtfSB3zwgsv8MUvfnHAef/0T/+UtWvX9hvVbdu2jaeffjp1zO7du1M3623fvp3bb7+d1atX89RTT6XKH1VUVPA3f/M33HHHHfzHf/zHkC1ELly4QHV1NevWreMrX/lK6jMBaekh0q+hoSHdIUwqHfZji3rw2udQXl6eqsEXMbmwxHygdUZO803tse3J/wLvOP9FdM2E2wb2ZeorHo+zZs0azp8/z2c/+1k2bNhAe3s7ubm5qemE8vLyQX9J/vqv/5o77riDr3zlK7z++uupRATwwx/+kPz8fILBIOvWrePJJ5/kIx/5CFVVVfzjP/4jZrOZH/3oR/zrv/7rgPN+4xvfID8/n3g8zn333cfx48fZsmULzz//PIFAAKfTySuvvMIzzzxDe3s7X//619mxYwdOp5N/+Id/4Fvf+hZf+cpXALDZbLz77rtAMqEO1kLk85//PJ///Od59tln+f73v5+KQ1p6iEzQd3p9Ooygjr+7jVwgaCnot6Q8Ysoiy27FlAjKCGq6MBqNHD16lPr6evbv38/JkyeHrCp+vT179vCHf/iHADz88MPk5eWl9n3nO99hxYoVVFdXc/XqVWpra3E6ndx777385je/oaamhmg0SmVl5YDz/vu//zurV69m1apVnDp1itOnT2MymXjwwQd57bXXiMVivP766zz22GO89957nD59mk2bNrFy5Upeeukl6urqUud65plnUj8P1UJk3759PPXUUwB89KMfTR0vLT1EJnC73ekOYVTq6+vxer1jLmirr7xPXJnpthb1u+YWNTqwOxxYYn4ZQU26EUY6Ey03N5e7776bN954gz//8z/H4/EQi8UwmUzU19dTVlY26PMG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\n",
"text/plain": [
"