{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Case3-2: ipywidgetsを使ってみる \n", "Use ipywidgets" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2016-09-19T12:52:41.041667", "start_time": "2016-09-19T12:52:33.732604" }, "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "import seaborn as sns\n", "import datetime\n", "import pandas as pd\n", "from pandas_datareader import data\n", "from ipywidgets import interact\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 株価(S&P指数)を取得 \n", "get stock price (S&P 500)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2016-09-19T12:52:41.901677", "start_time": "2016-09-19T12:52:41.044607" }, "collapsed": false }, "outputs": [], "source": [ "try:\n", " gspc = data.DataReader(\"^GSPC\", 'yahoo', datetime.datetime(2006, 1, 1), datetime.datetime(2015, 12, 31))\n", "except Exception:\n", " gspc = pd.read_msgpack('data/^GSPC.mpack')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> * ipywidgets \n", "> https://ipywidgets.readthedocs.io/en/latest/\n", "> * Computational tools \n", "> http://pandas.pydata.org/pandas-docs/stable/computation.html \n", "> pandasではmoving windowを扱うメソッドが用意されているので、移動平均や自作の関数を移動xxとして実装できる \n", "> pandas has method which handle moving windows, so can implement moving average and own function as moving xx" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 株価に移動平均とボリンジャーバンドを加えて視覚化 \n", "Create interactive visualization of moving average and Bollinger-Bands" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2016-09-19T12:52:42.608638", "start_time": "2016-09-19T12:52:41.904637" }, "collapsed": false }, "outputs": [ { "data": { "image/png": "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\ndygOTfJ0fYWFhcyYMYOvvvqK8ePH2x6XnqzLSZ7a15k5kkJtR8eOHaOwsJD/+7//o6Wlhb/97W+c\nPHnS3mE5nMrKSv7jP/6DPXv2MGPGDMLDw+0dkkOSPLVv165dhIaG8tprr5GTk8Mnn3xCVVWV9GRd\nQfLUvs7MkeqVV1555ab/reIqFosFhUJBXl4e3333HWFhYQQHB7N69Wo2bdpEc3MzJpOJTz/9FE9P\nTyIjI+0dssP4/vvvKS8vJy0tjT179pCZmYmrqyt+fn6X7UPv7CRPl7N+5/bv38+FCxfw9/fHy8uL\njIwM9u3bR7du3Thy5AhHjhzBz8+PHj162Dtku5A8tc/eOZJC3Umsd1mLFy/m3LlzREdH4+3tTffu\n3SkqKmLBggXccccdFBcXc/78eQYNGmT7cDij7Oxsvv76a/r06YNSqeSLL75g165dBAUF4eXlRXZ2\nNhUVFfTv39/eodqV5On6FAoFTU1NvPTSS7i7uxMXF4e/vz+VlZVERETwxBNPMHToUPbs2UNQUBAR\nERH2DtkuJE/ts3eOfvAWouLHO3z4MDk5OSQkJHDw4EFCQkIYPnw4/fr1o6GhAY1GQ2xsLPv27QNw\n2iIN8Nlnn1FRUcHdd9+Nn58fgwcPpqamhunTp2OxWNi2bRsnT56kubkZtVpt73DtRvLUtvXr11NW\nVkZRURGHDh3i7rvv5r/+679QKBSYTCY8PT3RaDRcuHDB3qHaleSpffbMkbSob6FVq1aRlZWF2Wwm\nNDQUs9lMSkoKPj4+5Ofn4+3tjb+/P6WlpcycOZPa2lpWr17N+PHjiY6Otnf4ncpsNttuTDIzM9m5\ncydRUVF89913DB06lPj4ePr27YvFYsHFxYX9+/cDcMcdd9gz7E4nebq++vp63njjDUpKSjAajQQG\nBmKxWBg9ejQ1NTWUlZURHh6Oj48P27dvJz09nVOnTnHkyBEmTpzoNJM5JU/tc7QcSaG+ycxmM0aj\nkSVLllBQUEBqairvvvsuLi4uDBo0iKCgIPz8/MjJycFgMBAbG4u/vz8eHh7U1tYybdo0pzplrL6+\nnoULF5KTk4Ner6dnz55otVqCg4NJTU1l+/bthIaGEhgYyL/+9S9mz57NqVOn2L9/P6NHjyYsLMze\nl9ApJE9tKysrY+7cufTo0YPg4GAWLVrEfffdR3R0NP7+/igUCnJzc1EqlURHR9t+eFUqFXPmzCEg\n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\n+ACz2WxrLbm4uDhVkYYflydnKtLQ8Rxduvd9WlpalyjS0IUnk23dupWFCxdisVgwmUwsXbqU0NBQ\nmpqaqKqq4te//jUBAQE0NDSwZ88eYmNjWb9+PWq1mgEDBjjVF6GhoQGVSmXbtKWwsJC//OUvnDlz\nhiFDhuDn52dbeuXm5kZERAReXl6X5ci6Rror+7F5cgYmk4lDhw6hVCpthfaf//wn6enpDBs2jBUr\nVuDm5oanpyeffPIJI0aMYO3ateTn5zNq1CinmfEueWqf5OhqXbJQ19TU8OGHH/Lkk08yceJEEhMT\n8fX1JTMzk5CQED766CNSU1Px8fHhH//4BxcuXODhhx9m5MiRDBkyxKmKdG5uLmvWrEGn0xEYGMi+\nffuYP38+KSkp5Ofnc+rUKVJSUkhISOCjjz7i888/5z//8z+dYlbppSRP1/f5558zf/58KioqWLly\nJWq1mqioKL7++msSEhJISEhg8+bNtjPbS0pK+PjjjzGZTMydO9fWKurqJE/tkxxdW5cs1Fu2bKG4\nuJjHH38co9GISqUiJiaGLVu2EBcXR3R0NFu3bmXLli0cO3aM+++/n/DwcNvYhrM5ePAgJpOJ3r17\ns2vXLgIDA5k2bRrx8fF88803KBQKhg8fbjvFKSkpCRcXF6e6oQHJ05X0ej3Tp0+npKSEF154gUcf\nfZTQ0FBOnDjB4cOH8fT0ZPny5RQUFPDnP/+Z8vJyXFxcGD9+PMOGDWPEiBFO8Z2TPLVPctS2LjlG\nHR0djUajoa6uDldXV9tswOTkZLZt28akSZN47rnnGD16NO+//77TLI2B1n25p0+fzu7duzEYDPj7\n+5OamsrJkyfJyckhJCSE8+fP09zcjJ+fH42NjbZztwMCAnjiiSfw8PDossXHSvLUPovFgp+fH/fd\nd59tC9QhQ4aQnJxMbW0tZrOZAQMGkJiYyPvvv89nn31ma/E4Q0+DleSpfZKjtnXJFrXRaLRtPxgZ\nGWmbuLNr1y5SUlKIiorCw8OjSx8TeD1NTU2sX7+e1atXU1hYSHV1NaNGjSI3N5empia8vLw4d+4c\n27dvJzs7m1OnTjFhwoTLjs9zBpKn9mk0GrRaLZ999hkJCQl4enqiVCoxGo3s3LmTtLQ0EhMTOXLk\nCFqtlgULFjhVfqwkT+2THLWtSxZqLy8vysvL2bZtG42NjRiNRhYvXkxZWRnjxo1zmgk+16LRaAgM\nDMRoNHLXXXexa9cuvvzyS06dOkVDQwMxMTE89NBDNDY24unpycsvv+xUXwgryVP7rLtA5efnc+LE\nCYYMGQK0bryxYcMG7rnnHsLCwhg0aBADBw60c7T2I3lqn+SobV2yUCsUCvr06YOHhwcnT57k888/\nZ/jw4cyaNcupi7SVj48P+fn5AMydO5fIyEiOHz/O1q1bqa2tZfTo0QwYMICEhAQ7R2pfkqf2qdVq\nPDw82LNnD/Hx8RgMBl555RWCgoK4//77UalUXbr7v6MkT+2THF2fU2x4cuWaV9G6e9aHH37I1KlT\nbYXmxIkTGI1Gpy48V5I8ta+5uZnVq1ezfPlyevbsyYQJE5xuF7+OkDy1T3J0bU5RqMXVmpub+eij\njzh69Khtf2VxNclTx1jP+33sscdQq9X2DsdhSZ7aJzm6mhRqJ3b69GmOHz/O6NGjnbZLqSMkT0II\ne5JCLYQQQjgwGbgVQgghHJgUaiGEEMKBSaEWQgghHJgUaiGEEMKBSaEWQgghHFjXP0RYCCdXVFTE\nAw88QFxcHBaLhaamJnr16sVLL71E9+7dr/u+X/ziF6xYsaITIxVCXIu0qIVwAgEBAWzcuJFPPvmE\nzz77jPDwcGbOnNnme/bv399J0Qkh2iItaiGc0K9//WvuuusuvvvuO1atWkVeXh56vZ6oqCjefvtt\nlixZAsDPf/5z1q1bR1ZWFm+//TYmk4nQ0FBeffVVvL297XwVQjgHaVEL4YRcXV0JDw9nx44dqNVq\n1q5dyxdffEFDQwNZWVm8+OKLAKxbt47Kykr+93//l+XLl/Pxxx9z55132gq5EOLWkxa1EE5KoVAQ\nHx9PaGgoq1evpqCggLNnz2IwGGzPQ+vBJCUlJfziF7/AYrFgNpvp1q2bPUMXwqlIoRbCCRmNRlth\nfvPNN5k6dSqPPPIIVVVVV73WZDKRnJzM0qVLgdaDSqzFXAhx60nXtxBO4NIt/S0WC2+//TaJiYkU\nFhby4IMP8vDDD+Pr68uBAwcwmUwAqFQqzGYzAwYMICcnh9OnTwPwzjvvsHjxYntchhBOSVrUQjiB\niooKHn74YVvXdXx8POnp6ZSWlvLcc8+xbds21Go1iYmJnDt3DoCf/OQnjBs3jg0bNvD666/zm9/8\nBrPZTGBgoIxRC9GJ5PQsIYQQwoFJ17cQQgjhwKRQCyGEEA5MCrUQQgjhwKRQCyGEEA5MCrUQQgjh\nwKRQCyGEEA5MCrUQQgjhwKRQCyGEEA7s/wEF9aWLQ7jBaAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "@interact(days=(30, len(gspc), 10), n=(2, 200, 1), rolling_mean=False, bollinger_bands=False)\n", "def plot_rolling_mean(days=60, n=20, rolling_mean=False, bollinger_bands=False):\n", " gspc['Adj Close'].iloc[-days:].plot()\n", " if rolling_mean:\n", " gspc['Adj Close'].rolling(n).mean().iloc[-days:].plot()\n", " if bollinger_bands:\n", " sigma_1 = gspc['Adj Close'].rolling(n).apply(lambda x: x.mean() - x.std()).iloc[-days:]\n", " sigma_2 = gspc['Adj Close'].rolling(n).apply(lambda x: x.mean() - x.std() * 2).iloc[-days:]\n", " sigma1 = gspc['Adj Close'].rolling(n).apply(lambda x: x.mean() + x.std()).iloc[-days:]\n", " sigma2 = gspc['Adj Close'].rolling(n).apply(lambda x: x.mean() + x.std() * 2).iloc[-days:]\n", " plt.fill_between(sigma1.index, sigma_1, sigma1, alpha=0.3, color='b')\n", " plt.fill_between(sigma1.index, sigma_2, sigma2, alpha=0.3, color='r')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "hide_input": false, "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.5.1" }, "nav_menu": { "height": "12px", "width": "160px" }, "toc": { "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": true }, "widgets": { "state": { "a8f241b51df4493b9e6a8753781c19a6": { "views": [ { "cell_index": 6 } ] } }, "version": "1.2.0" } }, "nbformat": 4, "nbformat_minor": 1 }