672 lines
332 KiB
Plaintext
672 lines
332 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"___\n",
|
||
|
"\n",
|
||
|
"<a href='http://www.pieriandata.com'> <img src='../Pierian_Data_Logo.png' /></a>\n",
|
||
|
"___\n",
|
||
|
"<center>*Copyright Pierian Data 2017*</center>\n",
|
||
|
"<center>*For more information, visit us at www.pieriandata.com*</center>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Rolling and Expanding\n",
|
||
|
"\n",
|
||
|
"A very common process with time series is to create data based off of a rolling mean. Let's show you how to do this easily with pandas!"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import pandas as pd\n",
|
||
|
"import matplotlib.pyplot as plt\n",
|
||
|
"%matplotlib inline"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# Best way to read in data with time series index!\n",
|
||
|
"df = pd.read_csv('time_data/walmart_stock.csv',index_col='Date',parse_dates=True)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 3,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<div>\n",
|
||
|
"<style>\n",
|
||
|
" .dataframe thead tr:only-child th {\n",
|
||
|
" text-align: right;\n",
|
||
|
" }\n",
|
||
|
"\n",
|
||
|
" .dataframe thead th {\n",
|
||
|
" text-align: left;\n",
|
||
|
" }\n",
|
||
|
"\n",
|
||
|
" .dataframe tbody tr th {\n",
|
||
|
" vertical-align: top;\n",
|
||
|
" }\n",
|
||
|
"</style>\n",
|
||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
||
|
" <thead>\n",
|
||
|
" <tr style=\"text-align: right;\">\n",
|
||
|
" <th></th>\n",
|
||
|
" <th>Open</th>\n",
|
||
|
" <th>High</th>\n",
|
||
|
" <th>Low</th>\n",
|
||
|
" <th>Close</th>\n",
|
||
|
" <th>Volume</th>\n",
|
||
|
" <th>Adj Close</th>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>Date</th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" </tr>\n",
|
||
|
" </thead>\n",
|
||
|
" <tbody>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-03</th>\n",
|
||
|
" <td>59.970001</td>\n",
|
||
|
" <td>61.060001</td>\n",
|
||
|
" <td>59.869999</td>\n",
|
||
|
" <td>60.330002</td>\n",
|
||
|
" <td>12668800</td>\n",
|
||
|
" <td>52.619235</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-04</th>\n",
|
||
|
" <td>60.209999</td>\n",
|
||
|
" <td>60.349998</td>\n",
|
||
|
" <td>59.470001</td>\n",
|
||
|
" <td>59.709999</td>\n",
|
||
|
" <td>9593300</td>\n",
|
||
|
" <td>52.078475</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-05</th>\n",
|
||
|
" <td>59.349998</td>\n",
|
||
|
" <td>59.619999</td>\n",
|
||
|
" <td>58.369999</td>\n",
|
||
|
" <td>59.419998</td>\n",
|
||
|
" <td>12768200</td>\n",
|
||
|
" <td>51.825539</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-06</th>\n",
|
||
|
" <td>59.419998</td>\n",
|
||
|
" <td>59.450001</td>\n",
|
||
|
" <td>58.869999</td>\n",
|
||
|
" <td>59.000000</td>\n",
|
||
|
" <td>8069400</td>\n",
|
||
|
" <td>51.459220</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-09</th>\n",
|
||
|
" <td>59.029999</td>\n",
|
||
|
" <td>59.549999</td>\n",
|
||
|
" <td>58.919998</td>\n",
|
||
|
" <td>59.180000</td>\n",
|
||
|
" <td>6679300</td>\n",
|
||
|
" <td>51.616215</td>\n",
|
||
|
" </tr>\n",
|
||
|
" </tbody>\n",
|
||
|
"</table>\n",
|
||
|
"</div>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
" Open High Low Close Volume Adj Close\n",
|
||
|
"Date \n",
|
||
|
"2012-01-03 59.970001 61.060001 59.869999 60.330002 12668800 52.619235\n",
|
||
|
"2012-01-04 60.209999 60.349998 59.470001 59.709999 9593300 52.078475\n",
|
||
|
"2012-01-05 59.349998 59.619999 58.369999 59.419998 12768200 51.825539\n",
|
||
|
"2012-01-06 59.419998 59.450001 58.869999 59.000000 8069400 51.459220\n",
|
||
|
"2012-01-09 59.029999 59.549999 58.919998 59.180000 6679300 51.616215"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 3,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df.head()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.axes._subplots.AxesSubplot at 0x168a615ada0>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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\nSDHpBzUIBaBlYm09zB4
|
||
|
"text/plain": [
|
||
|
"<matplotlib.figure.Figure at 0x168a4812550>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df['Open'].plot(figsize=(16,6))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Now let's add in a rolling mean! This rolling method provides row entries, where every entry is then representative of the window. "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 5,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<div>\n",
|
||
|
"<style>\n",
|
||
|
" .dataframe thead tr:only-child th {\n",
|
||
|
" text-align: right;\n",
|
||
|
" }\n",
|
||
|
"\n",
|
||
|
" .dataframe thead th {\n",
|
||
|
" text-align: left;\n",
|
||
|
" }\n",
|
||
|
"\n",
|
||
|
" .dataframe tbody tr th {\n",
|
||
|
" vertical-align: top;\n",
|
||
|
" }\n",
|
||
|
"</style>\n",
|
||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
||
|
" <thead>\n",
|
||
|
" <tr style=\"text-align: right;\">\n",
|
||
|
" <th></th>\n",
|
||
|
" <th>Open</th>\n",
|
||
|
" <th>High</th>\n",
|
||
|
" <th>Low</th>\n",
|
||
|
" <th>Close</th>\n",
|
||
|
" <th>Volume</th>\n",
|
||
|
" <th>Adj Close</th>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>Date</th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" <th></th>\n",
|
||
|
" </tr>\n",
|
||
|
" </thead>\n",
|
||
|
" <tbody>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-03</th>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-04</th>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-05</th>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-06</th>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-09</th>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-10</th>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" <td>NaN</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-11</th>\n",
|
||
|
" <td>59.495714</td>\n",
|
||
|
" <td>59.895714</td>\n",
|
||
|
" <td>59.074285</td>\n",
|
||
|
" <td>59.440000</td>\n",
|
||
|
" <td>9.007414e+06</td>\n",
|
||
|
" <td>51.842984</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-12</th>\n",
|
||
|
" <td>59.469999</td>\n",
|
||
|
" <td>59.744285</td>\n",
|
||
|
" <td>59.007143</td>\n",
|
||
|
" <td>59.321429</td>\n",
|
||
|
" <td>8.231357e+06</td>\n",
|
||
|
" <td>51.739567</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-13</th>\n",
|
||
|
" <td>59.322857</td>\n",
|
||
|
" <td>59.638571</td>\n",
|
||
|
" <td>58.941428</td>\n",
|
||
|
" <td>59.297143</td>\n",
|
||
|
" <td>7.965071e+06</td>\n",
|
||
|
" <td>51.718386</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-17</th>\n",
|
||
|
" <td>59.397143</td>\n",
|
||
|
" <td>59.708571</td>\n",
|
||
|
" <td>59.105714</td>\n",
|
||
|
" <td>59.358572</td>\n",
|
||
|
" <td>7.355329e+06</td>\n",
|
||
|
" <td>51.771963</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-18</th>\n",
|
||
|
" <td>59.450000</td>\n",
|
||
|
" <td>59.791428</td>\n",
|
||
|
" <td>59.217143</td>\n",
|
||
|
" <td>59.502857</td>\n",
|
||
|
" <td>7.047043e+06</td>\n",
|
||
|
" <td>51.897808</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-19</th>\n",
|
||
|
" <td>59.578572</td>\n",
|
||
|
" <td>59.960000</td>\n",
|
||
|
" <td>59.335715</td>\n",
|
||
|
" <td>59.707143</td>\n",
|
||
|
" <td>7.412086e+06</td>\n",
|
||
|
" <td>52.075984</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-20</th>\n",
|
||
|
" <td>59.767143</td>\n",
|
||
|
" <td>60.180000</td>\n",
|
||
|
" <td>59.577143</td>\n",
|
||
|
" <td>59.988571</td>\n",
|
||
|
" <td>7.908014e+06</td>\n",
|
||
|
" <td>52.321443</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-23</th>\n",
|
||
|
" <td>60.017143</td>\n",
|
||
|
" <td>60.387143</td>\n",
|
||
|
" <td>59.787143</td>\n",
|
||
|
" <td>60.204285</td>\n",
|
||
|
" <td>8.017800e+06</td>\n",
|
||
|
" <td>52.509586</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-24</th>\n",
|
||
|
" <td>60.154286</td>\n",
|
||
|
" <td>60.672857</td>\n",
|
||
|
" <td>59.979999</td>\n",
|
||
|
" <td>60.474285</td>\n",
|
||
|
" <td>8.035857e+06</td>\n",
|
||
|
" <td>52.745077</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-25</th>\n",
|
||
|
" <td>60.440000</td>\n",
|
||
|
" <td>60.958572</td>\n",
|
||
|
" <td>60.270000</td>\n",
|
||
|
" <td>60.749999</td>\n",
|
||
|
" <td>7.776786e+06</td>\n",
|
||
|
" <td>52.985553</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-26</th>\n",
|
||
|
" <td>60.715714</td>\n",
|
||
|
" <td>61.205714</td>\n",
|
||
|
" <td>60.448571</td>\n",
|
||
|
" <td>60.910000</td>\n",
|
||
|
" <td>7.624814e+06</td>\n",
|
||
|
" <td>53.125103</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-27</th>\n",
|
||
|
" <td>60.868572</td>\n",
|
||
|
" <td>61.361429</td>\n",
|
||
|
" <td>60.575714</td>\n",
|
||
|
" <td>61.010000</td>\n",
|
||
|
" <td>7.678514e+06</td>\n",
|
||
|
" <td>53.212323</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-30</th>\n",
|
||
|
" <td>60.945715</td>\n",
|
||
|
" <td>61.445714</td>\n",
|
||
|
" <td>60.661428</td>\n",
|
||
|
" <td>61.108571</td>\n",
|
||
|
" <td>7.450271e+06</td>\n",
|
||
|
" <td>53.298295</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2012-01-31</th>\n",
|
||
|
" <td>61.057143</td>\n",
|
||
|
" <td>61.491429</td>\n",
|
||
|
" <td>60.648571</td>\n",
|
||
|
" <td>61.158571</td>\n",
|
||
|
" <td>7.362086e+06</td>\n",
|
||
|
" <td>53.341905</td>\n",
|
||
|
" </tr>\n",
|
||
|
" </tbody>\n",
|
||
|
"</table>\n",
|
||
|
"</div>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
" Open High Low Close Volume \\\n",
|
||
|
"Date \n",
|
||
|
"2012-01-03 NaN NaN NaN NaN NaN \n",
|
||
|
"2012-01-04 NaN NaN NaN NaN NaN \n",
|
||
|
"2012-01-05 NaN NaN NaN NaN NaN \n",
|
||
|
"2012-01-06 NaN NaN NaN NaN NaN \n",
|
||
|
"2012-01-09 NaN NaN NaN NaN NaN \n",
|
||
|
"2012-01-10 NaN NaN NaN NaN NaN \n",
|
||
|
"2012-01-11 59.495714 59.895714 59.074285 59.440000 9.007414e+06 \n",
|
||
|
"2012-01-12 59.469999 59.744285 59.007143 59.321429 8.231357e+06 \n",
|
||
|
"2012-01-13 59.322857 59.638571 58.941428 59.297143 7.965071e+06 \n",
|
||
|
"2012-01-17 59.397143 59.708571 59.105714 59.358572 7.355329e+06 \n",
|
||
|
"2012-01-18 59.450000 59.791428 59.217143 59.502857 7.047043e+06 \n",
|
||
|
"2012-01-19 59.578572 59.960000 59.335715 59.707143 7.412086e+06 \n",
|
||
|
"2012-01-20 59.767143 60.180000 59.577143 59.988571 7.908014e+06 \n",
|
||
|
"2012-01-23 60.017143 60.387143 59.787143 60.204285 8.017800e+06 \n",
|
||
|
"2012-01-24 60.154286 60.672857 59.979999 60.474285 8.035857e+06 \n",
|
||
|
"2012-01-25 60.440000 60.958572 60.270000 60.749999 7.776786e+06 \n",
|
||
|
"2012-01-26 60.715714 61.205714 60.448571 60.910000 7.624814e+06 \n",
|
||
|
"2012-01-27 60.868572 61.361429 60.575714 61.010000 7.678514e+06 \n",
|
||
|
"2012-01-30 60.945715 61.445714 60.661428 61.108571 7.450271e+06 \n",
|
||
|
"2012-01-31 61.057143 61.491429 60.648571 61.158571 7.362086e+06 \n",
|
||
|
"\n",
|
||
|
" Adj Close \n",
|
||
|
"Date \n",
|
||
|
"2012-01-03 NaN \n",
|
||
|
"2012-01-04 NaN \n",
|
||
|
"2012-01-05 NaN \n",
|
||
|
"2012-01-06 NaN \n",
|
||
|
"2012-01-09 NaN \n",
|
||
|
"2012-01-10 NaN \n",
|
||
|
"2012-01-11 51.842984 \n",
|
||
|
"2012-01-12 51.739567 \n",
|
||
|
"2012-01-13 51.718386 \n",
|
||
|
"2012-01-17 51.771963 \n",
|
||
|
"2012-01-18 51.897808 \n",
|
||
|
"2012-01-19 52.075984 \n",
|
||
|
"2012-01-20 52.321443 \n",
|
||
|
"2012-01-23 52.509586 \n",
|
||
|
"2012-01-24 52.745077 \n",
|
||
|
"2012-01-25 52.985553 \n",
|
||
|
"2012-01-26 53.125103 \n",
|
||
|
"2012-01-27 53.212323 \n",
|
||
|
"2012-01-30 53.298295 \n",
|
||
|
"2012-01-31 53.341905 "
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 5,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# 7 day rolling mean\n",
|
||
|
"df.rolling(7).mean().head(20)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 6,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.axes._subplots.AxesSubplot at 0x168a683d2b0>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 6,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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\niFAhRJwQ4hchxC7jZ4d
|
||
|
"text/plain": [
|
||
|
"<matplotlib.figure.Figure at 0x168a68219e8>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df['Open'].plot()\n",
|
||
|
"df.rolling(window=30).mean()['Close'].plot()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Easiest way to add a legend is to make this rolling value a new column, then pandas does it automatically!"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.axes._subplots.AxesSubplot at 0x168a66469e8>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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\nz/c1Go2e6cd6vR673d6
|
||
|
"text/plain": [
|
||
|
"<matplotlib.figure.Figure at 0x168a66b20f0>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df['Close: 30 Day Mean'] = df['Close'].rolling(window=30).mean()\n",
|
||
|
"df[['Close','Close: 30 Day Mean']].plot(figsize=(16,6))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## expanding\n",
|
||
|
"\n",
|
||
|
"Now what if you want to take into account everything from the start of the time series as a rolling value? For instance, not just take into account a period of 7 days, or monthly rolling average, but instead, take into everything since the beginning of the time series, continuously:"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 8,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.axes._subplots.AxesSubplot at 0x168a67c4c50>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 8,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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\nUVlWspaVZSo/LZEpvYi
|
||
|
"text/plain": [
|
||
|
"<matplotlib.figure.Figure at 0x168a6792080>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Optional specify a minimum number of periods\n",
|
||
|
"df['Close'].expanding(min_periods=1).mean().plot(figsize=(16,6))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Bollinger Bands\n",
|
||
|
"\n",
|
||
|
"We will talk a lot more about financial analysis plots and technical indicators, but here is one worth mentioning!\n",
|
||
|
"\n",
|
||
|
"More info : http://www.investopedia.com/terms/b/bollingerbands.asp\n",
|
||
|
"\n",
|
||
|
"*Developed by John Bollinger, Bollinger Bands® are volatility bands placed above and below a moving average. Volatility is based on the standard deviation, which changes as volatility increases and decreases. The bands automatically widen when volatility increases and narrow when volatility decreases. This dynamic nature of Bollinger Bands also means they can be used on different securities with the standard settings. For signals, Bollinger Bands can be used to identify Tops and Bottoms or to determine the strength of the trend.*\n",
|
||
|
"\n",
|
||
|
"*Bollinger Bands reflect direction with the 20-period SMA and volatility with the upper/lower bands. As such, they can be used to determine if prices are relatively high or low. According to Bollinger, the bands should contain 88-89% of price action, which makes a move outside the bands significant. Technically, prices are relatively high when above the upper band and relatively low when below the lower band. However, relatively high should not be regarded as bearish or as a sell signal. Likewise, relatively low should not be considered bullish or as a buy signal. Prices are high or low for a reason. As with other indicators, Bollinger Bands are not meant to be used as a stand alone tool. *"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 9,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.axes._subplots.AxesSubplot at 0x168a67c92b0>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 9,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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\nlb9t27YcO3aMIUOG8M4
|
||
|
"text/plain": [
|
||
|
"<matplotlib.figure.Figure at 0x168a67c4710>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df['Close: 30 Day Mean'] = df['Close'].rolling(window=20).mean()\n",
|
||
|
"df['Upper'] = df['Close: 30 Day Mean'] + 2*df['Close'].rolling(window=20).std()\n",
|
||
|
"df['Lower'] = df['Close: 30 Day Mean'] - 2*df['Close'].rolling(window=20).std()\n",
|
||
|
"df[['Close','Close: 30 Day Mean','Upper','Lower']].plot(figsize=(16,6))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"For expanding operations, it doesn't help very much to visualize this against the daily data, but instead its a good way to get an idea of the \"stability\" of a stock. This idea of stability and volatility is something we are going to be exploring heavily in the next project, so let's jump straight into it!"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"anaconda-cloud": {},
|
||
|
"kernelspec": {
|
||
|
"display_name": "Python 3",
|
||
|
"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.6.1"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 1
|
||
|
}
|