FINAL PROJECT - Columbia Engineering 2021

Potential Stock Prediction

Using nbinteract CLI Usage as #nbi:hide_in to hide our Python Code

PART #1 - Packages Installation.

First, let's install all dependencies to have our Software up to date and with all tools that we need.

!pip install nbinteract
Requirement already satisfied: nbinteract in c:\users\emman\anaconda3\lib\site-packages (0.2.6)
Requirement already satisfied: nbconvert>=5.3 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (5.6.1)
Requirement already satisfied: ipywidgets<8,>=7.5.0 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (7.6.3)
Requirement already satisfied: traitlets<5,>=4.3 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (4.3.3)
Requirement already satisfied: nbformat<5,>=4.4.0 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (4.4.0)
Requirement already satisfied: Jinja2<3,>=2.10 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (2.11.3)
Requirement already satisfied: bqplot==0.11.0 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (0.11.0)
Requirement already satisfied: toolz<1,>=0.8 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (0.11.1)
Requirement already satisfied: docopt<1,>=0.6.2 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (0.6.2)
Requirement already satisfied: IPython<8,>=6 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (7.21.0)
Requirement already satisfied: numpy<2,>=1 in c:\users\emman\anaconda3\lib\site-packages (from nbinteract) (1.19.5)
Requirement already satisfied: traittypes>=0.0.6 in c:\users\emman\anaconda3\lib\site-packages (from bqplot==0.11.0->nbinteract) (0.2.1)
Requirement already satisfied: pandas in c:\users\emman\anaconda3\lib\site-packages (from bqplot==0.11.0->nbinteract) (1.2.3)
Requirement already satisfied: jedi>=0.16 in c:\users\emman\anaconda3\lib\site-packages (from IPython<8,>=6->nbinteract) (0.18.0)
Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in c:\users\emman\anaconda3\lib\site-packages (from IPython<8,>=6->nbinteract) (3.0.17)
Requirement already satisfied: backcall in c:\users\emman\anaconda3\lib\site-packages (from IPython<8,>=6->nbinteract) (0.2.0)
Requirement already satisfied: pickleshare in c:\users\emman\anaconda3\lib\site-packages (from IPython<8,>=6->nbinteract) (0.7.5)
Requirement already satisfied: colorama in c:\users\emman\anaconda3\lib\site-packages (from IPython<8,>=6->nbinteract) (0.4.4)
Requirement already satisfied: setuptools>=18.5 in c:\users\emman\anaconda3\lib\site-packages (from IPython<8,>=6->nbinteract) (52.0.0.post20210125)
Requirement already satisfied: pygments in c:\users\emman\anaconda3\lib\site-packages (from IPython<8,>=6->nbinteract) (2.8.1)
Requirement already satisfied: decorator in c:\users\emman\anaconda3\lib\site-packages (from IPython<8,>=6->nbinteract) (4.4.2)
Requirement already satisfied: widgetsnbextension~=3.5.0 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets<8,>=7.5.0->nbinteract) (3.5.1)
Requirement already satisfied: jupyterlab-widgets>=1.0.0 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets<8,>=7.5.0->nbinteract) (1.0.0)
Requirement already satisfied: ipykernel>=4.5.1 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets<8,>=7.5.0->nbinteract) (5.5.0)
Requirement already satisfied: jupyter-client in c:\users\emman\anaconda3\lib\site-packages (from ipykernel>=4.5.1->ipywidgets<8,>=7.5.0->nbinteract) (6.1.12)
Requirement already satisfied: tornado>=4.2 in c:\users\emman\anaconda3\lib\site-packages (from ipykernel>=4.5.1->ipywidgets<8,>=7.5.0->nbinteract) (6.1)
Requirement already satisfied: parso<0.9.0,>=0.8.0 in c:\users\emman\anaconda3\lib\site-packages (from jedi>=0.16->IPython<8,>=6->nbinteract) (0.8.1)
Requirement already satisfied: MarkupSafe>=0.23 in c:\users\emman\anaconda3\lib\site-packages (from Jinja2<3,>=2.10->nbinteract) (1.1.1)
Requirement already satisfied: jupyter-core in c:\users\emman\anaconda3\lib\site-packages (from nbconvert>=5.3->nbinteract) (4.7.1)
Requirement already satisfied: pandocfilters>=1.4.1 in c:\users\emman\anaconda3\lib\site-packages (from nbconvert>=5.3->nbinteract) (1.4.2)
Requirement already satisfied: mistune<2,>=0.8.1 in c:\users\emman\anaconda3\lib\site-packages (from nbconvert>=5.3->nbinteract) (0.8.4)
Requirement already satisfied: bleach in c:\users\emman\anaconda3\lib\site-packages (from nbconvert>=5.3->nbinteract) (3.3.0)
Requirement already satisfied: defusedxml in c:\users\emman\anaconda3\lib\site-packages (from nbconvert>=5.3->nbinteract) (0.7.1)
Requirement already satisfied: entrypoints>=0.2.2 in c:\users\emman\anaconda3\lib\site-packages (from nbconvert>=5.3->nbinteract) (0.3)
Requirement already satisfied: testpath in c:\users\emman\anaconda3\lib\site-packages (from nbconvert>=5.3->nbinteract) (0.4.4)
Requirement already satisfied: ipython-genutils in c:\users\emman\anaconda3\lib\site-packages (from nbformat<5,>=4.4.0->nbinteract) (0.2.0)
Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in c:\users\emman\anaconda3\lib\site-packages (from nbformat<5,>=4.4.0->nbinteract) (3.2.0)
Requirement already satisfied: attrs>=17.4.0 in c:\users\emman\anaconda3\lib\site-packages (from jsonschema!=2.5.0,>=2.4->nbformat<5,>=4.4.0->nbinteract) (20.3.0)
Requirement already satisfied: six>=1.11.0 in c:\users\emman\anaconda3\lib\site-packages (from jsonschema!=2.5.0,>=2.4->nbformat<5,>=4.4.0->nbinteract) (1.15.0)
Requirement already satisfied: pyrsistent>=0.14.0 in c:\users\emman\anaconda3\lib\site-packages (from jsonschema!=2.5.0,>=2.4->nbformat<5,>=4.4.0->nbinteract) (0.17.3)
Requirement already satisfied: wcwidth in c:\users\emman\anaconda3\lib\site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->IPython<8,>=6->nbinteract) (0.2.5)
Requirement already satisfied: notebook>=4.4.1 in c:\users\emman\anaconda3\lib\site-packages (from widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (6.2.0)
Requirement already satisfied: argon2-cffi in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (20.1.0)
Requirement already satisfied: Send2Trash>=1.5.0 in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (1.5.0)
Requirement already satisfied: terminado>=0.8.3 in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (0.9.3)
Requirement already satisfied: prometheus-client in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (0.9.0)
Requirement already satisfied: pyzmq>=17 in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (22.0.3)
Requirement already satisfied: python-dateutil>=2.1 in c:\users\emman\anaconda3\lib\site-packages (from jupyter-client->ipykernel>=4.5.1->ipywidgets<8,>=7.5.0->nbinteract) (2.8.1)
Requirement already satisfied: pywin32>=1.0 in c:\users\emman\anaconda3\lib\site-packages (from jupyter-core->nbconvert>=5.3->nbinteract) (227)
Requirement already satisfied: pywinpty>=0.5 in c:\users\emman\anaconda3\lib\site-packages (from terminado>=0.8.3->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (0.5.7)
Requirement already satisfied: cffi>=1.0.0 in c:\users\emman\anaconda3\lib\site-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (1.14.5)
Requirement already satisfied: pycparser in c:\users\emman\anaconda3\lib\site-packages (from cffi>=1.0.0->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7.5.0->nbinteract) (2.20)
Requirement already satisfied: webencodings in c:\users\emman\anaconda3\lib\site-packages (from bleach->nbconvert>=5.3->nbinteract) (0.5.1)
Requirement already satisfied: packaging in c:\users\emman\anaconda3\lib\site-packages (from bleach->nbconvert>=5.3->nbinteract) (20.9)
Requirement already satisfied: pyparsing>=2.0.2 in c:\users\emman\anaconda3\lib\site-packages (from packaging->bleach->nbconvert>=5.3->nbinteract) (2.4.7)
Requirement already satisfied: pytz>=2017.3 in c:\users\emman\anaconda3\lib\site-packages (from pandas->bqplot==0.11.0->nbinteract) (2021.1)
# The next two commands can be skipped for notebook version 5.3 and above

#Currently using version of the notebook server is: 6.1.4

#CODE if you have an older version:
#jupyter nbextension enable --py --sys-prefix bqplot
#jupyter nbextension enable --py --sys-prefix widgetsnbextension
!pip install sklearn
Requirement already satisfied: sklearn in c:\users\emman\anaconda3\lib\site-packages (0.0)
Requirement already satisfied: scikit-learn in c:\users\emman\anaconda3\lib\site-packages (from sklearn) (0.24.1)
Requirement already satisfied: scipy>=0.19.1 in c:\users\emman\anaconda3\lib\site-packages (from scikit-learn->sklearn) (1.6.1)
Requirement already satisfied: numpy>=1.13.3 in c:\users\emman\anaconda3\lib\site-packages (from scikit-learn->sklearn) (1.19.5)
Requirement already satisfied: joblib>=0.11 in c:\users\emman\anaconda3\lib\site-packages (from scikit-learn->sklearn) (1.0.1)
Requirement already satisfied: threadpoolctl>=2.0.0 in c:\users\emman\anaconda3\lib\site-packages (from scikit-learn->sklearn) (2.1.0)
!pip install yfinance
Requirement already satisfied: yfinance in c:\users\emman\anaconda3\lib\site-packages (0.1.55)
Requirement already satisfied: numpy>=1.15 in c:\users\emman\anaconda3\lib\site-packages (from yfinance) (1.19.5)
Requirement already satisfied: requests>=2.20 in c:\users\emman\anaconda3\lib\site-packages (from yfinance) (2.25.1)
Requirement already satisfied: multitasking>=0.0.7 in c:\users\emman\anaconda3\lib\site-packages (from yfinance) (0.0.9)
Requirement already satisfied: lxml>=4.5.1 in c:\users\emman\anaconda3\lib\site-packages (from yfinance) (4.6.2)
Requirement already satisfied: pandas>=0.24 in c:\users\emman\anaconda3\lib\site-packages (from yfinance) (1.2.3)
Requirement already satisfied: python-dateutil>=2.7.3 in c:\users\emman\anaconda3\lib\site-packages (from pandas>=0.24->yfinance) (2.8.1)
Requirement already satisfied: pytz>=2017.3 in c:\users\emman\anaconda3\lib\site-packages (from pandas>=0.24->yfinance) (2021.1)
Requirement already satisfied: six>=1.5 in c:\users\emman\anaconda3\lib\site-packages (from python-dateutil>=2.7.3->pandas>=0.24->yfinance) (1.15.0)
Requirement already satisfied: idna<3,>=2.5 in c:\users\emman\anaconda3\lib\site-packages (from requests>=2.20->yfinance) (2.10)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\emman\anaconda3\lib\site-packages (from requests>=2.20->yfinance) (2020.12.5)
Requirement already satisfied: chardet<5,>=3.0.2 in c:\users\emman\anaconda3\lib\site-packages (from requests>=2.20->yfinance) (4.0.0)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\emman\anaconda3\lib\site-packages (from requests>=2.20->yfinance) (1.26.4)
!pip install ipywidgets
Requirement already satisfied: ipywidgets in c:\users\emman\anaconda3\lib\site-packages (7.6.3)
Requirement already satisfied: nbformat>=4.2.0 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets) (4.4.0)
Requirement already satisfied: widgetsnbextension~=3.5.0 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets) (3.5.1)
Requirement already satisfied: ipykernel>=4.5.1 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets) (5.5.0)
Requirement already satisfied: traitlets>=4.3.1 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets) (4.3.3)
Requirement already satisfied: jupyterlab-widgets>=1.0.0 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets) (1.0.0)
Requirement already satisfied: ipython>=4.0.0 in c:\users\emman\anaconda3\lib\site-packages (from ipywidgets) (7.21.0)
Requirement already satisfied: tornado>=4.2 in c:\users\emman\anaconda3\lib\site-packages (from ipykernel>=4.5.1->ipywidgets) (6.1)
Requirement already satisfied: jupyter-client in c:\users\emman\anaconda3\lib\site-packages (from ipykernel>=4.5.1->ipywidgets) (6.1.12)
Requirement already satisfied: backcall in c:\users\emman\anaconda3\lib\site-packages (from ipython>=4.0.0->ipywidgets) (0.2.0)
Requirement already satisfied: setuptools>=18.5 in c:\users\emman\anaconda3\lib\site-packages (from ipython>=4.0.0->ipywidgets) (52.0.0.post20210125)
Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in c:\users\emman\anaconda3\lib\site-packages (from ipython>=4.0.0->ipywidgets) (3.0.17)
Requirement already satisfied: colorama in c:\users\emman\anaconda3\lib\site-packages (from ipython>=4.0.0->ipywidgets) (0.4.4)
Requirement already satisfied: jedi>=0.16 in c:\users\emman\anaconda3\lib\site-packages (from ipython>=4.0.0->ipywidgets) (0.18.0)
Requirement already satisfied: decorator in c:\users\emman\anaconda3\lib\site-packages (from ipython>=4.0.0->ipywidgets) (4.4.2)
Requirement already satisfied: pygments in c:\users\emman\anaconda3\lib\site-packages (from ipython>=4.0.0->ipywidgets) (2.8.1)
Requirement already satisfied: pickleshare in c:\users\emman\anaconda3\lib\site-packages (from ipython>=4.0.0->ipywidgets) (0.7.5)
Requirement already satisfied: parso<0.9.0,>=0.8.0 in c:\users\emman\anaconda3\lib\site-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets) (0.8.1)
Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in c:\users\emman\anaconda3\lib\site-packages (from nbformat>=4.2.0->ipywidgets) (3.2.0)
Requirement already satisfied: jupyter-core in c:\users\emman\anaconda3\lib\site-packages (from nbformat>=4.2.0->ipywidgets) (4.7.1)
Requirement already satisfied: ipython-genutils in c:\users\emman\anaconda3\lib\site-packages (from nbformat>=4.2.0->ipywidgets) (0.2.0)
Requirement already satisfied: attrs>=17.4.0 in c:\users\emman\anaconda3\lib\site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets) (20.3.0)
Requirement already satisfied: six>=1.11.0 in c:\users\emman\anaconda3\lib\site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets) (1.15.0)
Requirement already satisfied: pyrsistent>=0.14.0 in c:\users\emman\anaconda3\lib\site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets) (0.17.3)
Requirement already satisfied: wcwidth in c:\users\emman\anaconda3\lib\site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0->ipywidgets) (0.2.5)
Requirement already satisfied: notebook>=4.4.1 in c:\users\emman\anaconda3\lib\site-packages (from widgetsnbextension~=3.5.0->ipywidgets) (6.2.0)
Requirement already satisfied: jinja2 in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (2.11.3)
Requirement already satisfied: Send2Trash>=1.5.0 in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (1.5.0)
Requirement already satisfied: argon2-cffi in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (20.1.0)
Requirement already satisfied: prometheus-client in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (0.9.0)
Requirement already satisfied: pyzmq>=17 in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (22.0.3)
Requirement already satisfied: terminado>=0.8.3 in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (0.9.3)
Requirement already satisfied: nbconvert in c:\users\emman\anaconda3\lib\site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (5.6.1)
Requirement already satisfied: python-dateutil>=2.1 in c:\users\emman\anaconda3\lib\site-packages (from jupyter-client->ipykernel>=4.5.1->ipywidgets) (2.8.1)
Requirement already satisfied: pywin32>=1.0 in c:\users\emman\anaconda3\lib\site-packages (from jupyter-core->nbformat>=4.2.0->ipywidgets) (227)
Requirement already satisfied: pywinpty>=0.5 in c:\users\emman\anaconda3\lib\site-packages (from terminado>=0.8.3->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (0.5.7)
Requirement already satisfied: cffi>=1.0.0 in c:\users\emman\anaconda3\lib\site-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (1.14.5)
Requirement already satisfied: pycparser in c:\users\emman\anaconda3\lib\site-packages (from cffi>=1.0.0->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (2.20)
Requirement already satisfied: MarkupSafe>=0.23 in c:\users\emman\anaconda3\lib\site-packages (from jinja2->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (1.1.1)
Requirement already satisfied: bleach in c:\users\emman\anaconda3\lib\site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (3.3.0)
Requirement already satisfied: pandocfilters>=1.4.1 in c:\users\emman\anaconda3\lib\site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (1.4.2)
Requirement already satisfied: entrypoints>=0.2.2 in c:\users\emman\anaconda3\lib\site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (0.3)
Requirement already satisfied: mistune<2,>=0.8.1 in c:\users\emman\anaconda3\lib\site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (0.8.4)
Requirement already satisfied: defusedxml in c:\users\emman\anaconda3\lib\site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (0.7.1)
Requirement already satisfied: testpath in c:\users\emman\anaconda3\lib\site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (0.4.4)
Requirement already satisfied: webencodings in c:\users\emman\anaconda3\lib\site-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (0.5.1)
Requirement already satisfied: packaging in c:\users\emman\anaconda3\lib\site-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (20.9)
Requirement already satisfied: pyparsing>=2.0.2 in c:\users\emman\anaconda3\lib\site-packages (from packaging->bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets) (2.4.7)
!pip install pandas
Requirement already satisfied: pandas in c:\users\emman\anaconda3\lib\site-packages (1.2.3)
Requirement already satisfied: numpy>=1.16.5 in c:\users\emman\anaconda3\lib\site-packages (from pandas) (1.19.5)
Requirement already satisfied: pytz>=2017.3 in c:\users\emman\anaconda3\lib\site-packages (from pandas) (2021.1)
Requirement already satisfied: python-dateutil>=2.7.3 in c:\users\emman\anaconda3\lib\site-packages (from pandas) (2.8.1)
Requirement already satisfied: six>=1.5 in c:\users\emman\anaconda3\lib\site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0)
!pip install pandas-datareader
Requirement already satisfied: pandas-datareader in c:\users\emman\anaconda3\lib\site-packages (0.9.0)
Requirement already satisfied: lxml in c:\users\emman\anaconda3\lib\site-packages (from pandas-datareader) (4.6.2)
Requirement already satisfied: pandas>=0.23 in c:\users\emman\anaconda3\lib\site-packages (from pandas-datareader) (1.2.3)
Requirement already satisfied: requests>=2.19.0 in c:\users\emman\anaconda3\lib\site-packages (from pandas-datareader) (2.25.1)
Requirement already satisfied: pytz>=2017.3 in c:\users\emman\anaconda3\lib\site-packages (from pandas>=0.23->pandas-datareader) (2021.1)
Requirement already satisfied: numpy>=1.16.5 in c:\users\emman\anaconda3\lib\site-packages (from pandas>=0.23->pandas-datareader) (1.19.5)
Requirement already satisfied: python-dateutil>=2.7.3 in c:\users\emman\anaconda3\lib\site-packages (from pandas>=0.23->pandas-datareader) (2.8.1)
Requirement already satisfied: six>=1.5 in c:\users\emman\anaconda3\lib\site-packages (from python-dateutil>=2.7.3->pandas>=0.23->pandas-datareader) (1.15.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\emman\anaconda3\lib\site-packages (from requests>=2.19.0->pandas-datareader) (2020.12.5)
Requirement already satisfied: chardet<5,>=3.0.2 in c:\users\emman\anaconda3\lib\site-packages (from requests>=2.19.0->pandas-datareader) (4.0.0)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\emman\anaconda3\lib\site-packages (from requests>=2.19.0->pandas-datareader) (1.26.4)
Requirement already satisfied: idna<3,>=2.5 in c:\users\emman\anaconda3\lib\site-packages (from requests>=2.19.0->pandas-datareader) (2.10)
!pip install numpy
Requirement already satisfied: numpy in c:\users\emman\anaconda3\lib\site-packages (1.19.5)
!pip install plotly
Requirement already satisfied: plotly in c:\users\emman\anaconda3\lib\site-packages (4.14.3)
Requirement already satisfied: retrying>=1.3.3 in c:\users\emman\anaconda3\lib\site-packages (from plotly) (1.3.3)
Requirement already satisfied: six in c:\users\emman\anaconda3\lib\site-packages (from plotly) (1.15.0)
!pip install datetime
Requirement already satisfied: datetime in c:\users\emman\anaconda3\lib\site-packages (4.3)
Requirement already satisfied: zope.interface in c:\users\emman\anaconda3\lib\site-packages (from datetime) (5.2.0)
Requirement already satisfied: pytz in c:\users\emman\anaconda3\lib\site-packages (from datetime) (2021.1)
Requirement already satisfied: setuptools in c:\users\emman\anaconda3\lib\site-packages (from zope.interface->datetime) (52.0.0.post20210125)

PART #2

Import ipywidgets to interact Jupyter Notebook over HTML

Key Feature is "Yahoo! Finance" to downloading histrocial market data.

from ipywidgets import interact
import pandas as pd 
from pandas_datareader import data 
import plotly.graph_objects as go 
import plotly.express as px # Plotly Dark Templates
import yfinance as yf # Key Import
from datetime import date 
from dateutil.relativedelta import relativedelta 
import numpy as np 
from sklearn.linear_model import LinearRegression # Machine Leraning (Linear Model)
from sklearn.model_selection import train_test_split # Machine Leraning (Train and Tool Model)

Below the Bash Colors in Python from python_bash_font GitHub

class color:
   RED = '\033[91m'
   BOLD = '\033[1m'
   UNDERLINE = '\033[4m'
   PURPLE = '\033[95m'
   GREEN = '\033[92m'
   YELLOW = '\033[93m'
   CYAN = '\033[96m'
   DARKCYAN = '\033[36m'
   BLUE = '\033[94m'
   END = '\033[0m'

PART #3

INTERACT TEST CODE:

Using Interact

The ipywidgets library provides the simplest way to get started writing interactive documents. Although the library itself has its own documentation, we will provide a quick overview to let you get started as quickly as possible.

#Testing Interact from ipywidgets
def square(x):
    return x * x
interact(square, x=10);
interact(square, x=(0, 100, 10));
def friends(name, number):
    return '{} has {} friends!'.format(name, number)
interact(friends, name='Sam', number=(5, 10));
interact(friends, name='Sam', number={'One': 1, 'Five': 5, 'Ten': 10});
## Now we can move on to CORE CODE!

CORE CODE:

As Machine Learning, our SVR (SVM) Model predicts from Yahoo Finance Librery Stock Historcal source.

From Pandas, "pandas_datareader" we're using "data" library, It's important because help during the process imported every time the END USER Ineraction.

from pandas_datareader import data


# Date Vars Definicion (YYY-MM-DD)
start_date = '2020-01-01'
end_date = '2020-01-15'


# WHILE-TRUE as END USER Inputs for DataFrame interaction with Yahoo Finance.
# From PANDAS, DATAREADER to get our Final Data interaction.
while True:
    try:
        symbol = input('Enter a valid Stock Tricker Symbol: ')
        # We're using the "symbol" as Stock ticker, then "yahoo" for Yahoo Finance historial data, and last, "start_date" and "end_date" as Date manual input search criteria. 
        df = data.DataReader(symbol, 'yahoo', start_date, end_date)
        break
    # As en error respond: (Example: An invalid Stock Symbol) our END USER gerts the below to submit a valid ticker. 
    except(KeyError, OSError):
        print(color.RED + color.DARKCYAN + f'> {symbol} is not a valid Stock Symbol. Please submit a valid Stock Symbol, Example: BAC for Bank of America' + color.END) 




# Make a User Menu
print(color.BOLD + color.UNDERLINE + color.DARKCYAN + '\n> Please select from below an option to Analyzing your Stock Ticker Data:' + color.END)
choice = True
while choice:
    print(f'''\n SELECT FROM THE BELOW YOUR ANALYSIS OPTION: \n
    1 - Machine Learning 15 days Prediction (SVR Model) from Your Stock "{symbol}" Tricker.
    2 - Machine Learning 30 days Prediction (SVR Model) from Your Stock "{symbol}" Tricker.
    3 - Price Date Range Chart (YYY-MM-DD) from your Stock "{symbol}" Tricker.
    4 - Price Comparison from your Stock "{symbol}" Tricker with another Tricker.
    5 - Your Stock "{symbol}" Tricker 180 Past-Days Analysis.

    Q - Quit and Restart the Process using different Symbol or Stock Tricker.
    ''')
    choice = (input('''\nPlease select a Numeric Option (Example: For the Second Option type "1" and or "Q" to Quit.): '''))
    
    
    
    
    
    
    # ALL CONDITIONS (1 to 5 including Q option)
    
    # OPTION 1: Machine Learning 15 days Prediction from Your Stock "{symbol}" Tricker.
    if choice == '1' or choice == 'A' or choice == 'a':
        
        today = date.today()
        today = today.strftime('%Y-%m-%d')

        df = data.DataReader(symbol, 'yahoo', '2000-01-01', 'today')

        df = df[['Adj Close']]

        # N as Variable for 15 days
        n = 7


        df['Prediction'] = df[['Adj Close']].shift(-n)
        

        # Creating Independent DataSet "X"
        X = df.drop(['Prediction'],1)

        X = np.array(X)

        X = X[:-n]

        # Create the Dependent "Y" DataSet
        Y = df['Prediction']

        Y = np.array(Y)

        # Remove the last "n" rows
        Y = Y[:-n]

        # Split the data into 80% train data and 20 % test data
        x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2)

        # Create Linear Regression Model
        lr = LinearRegression()
        # Train the model
        lr.fit(x_train, y_train)

        # We want the last 30 rows  
        forecast = np.array(df.drop(['Prediction'],1))[-n:]


        # Print the predictions for the next "n" days
        lr_prediction = lr.predict(forecast)

  
        predictions = pd.DataFrame(lr_prediction, columns = ['Prediction'])
        # "predictions" has 1 column with the predicted values

        df = df.reset_index()

        # From "Date" we need the to get the last value
        d = df['Date'].iloc[-1]
        d = d + relativedelta(days =+ 1)

        # Now we make a list with the respective daterange for our prediction, 15 days after that. 
        datelist = pd.date_range(d, periods = 7).tolist()

        # We add the variable to our Dataframe "predictions"
        predictions['Date'] = datelist
        
        # Save the date of today 3 months older
        trhee_months = date.today() - relativedelta(months=+6)
        trhee_months = trhee_months.strftime('%Y-%m-%d')

        # Get the data for plotting
        df = data.DataReader(symbol, 'yahoo', trhee_months, today)
        df = df.reset_index()

        # Plotting the chart
        fig = go.Figure()
        # Add the data from the first stock
        fig.add_trace(go.Scatter(
                        x=df.Date,
                        y=df['Adj Close'],
                        name=f'{symbol} stock',
                        line_color='dodgerblue',
                        opacity=0.9))
        
        # Add the data from the predictions
        fig.add_trace(go.Scatter(
                        x=predictions.Date,
                        y=predictions['Prediction'],
                        name=f'ML Prediction',
                        line=dict(color='green', dash = 'dot'),
                        opacity=0.9))
    
        fig.update_layout(title=f'Historical {symbol} Quote Stock Value - With 15 Days Prediction',
                                    yaxis_title='Closing Day Price Value in USD',
                                    template='plotly_dark',
                                    xaxis_tickfont_size=14,
                                    yaxis_tickfont_size=14)
        
        fig.show()


   
    
    
    # OPTION 2: Machine Learning 30 days Prediction from Your Stock "{symbol}" Tricker.
    # Same model as above, but using 4 Months data for 30 precition price. 

    elif choice == '2' or choice == 'B' or choice == 'b':
        
        # Get the date of today
        today = date.today()
        # Change the format
        today = today.strftime('%Y-%m-%d')

        df = data.DataReader(symbol, 'yahoo', '2000-01-01', 'today')

        df = df[['Adj Close']]

        # N as Variable for 30 days
        n = 30

        # Create another column "Prediction" shifted "n" units up
        df['Prediction'] = df[['Adj Close']].shift(-n)
        
        X = df.drop(['Prediction'],1)
        X = np.array(X)
        X = X[:-n]


        Y = df['Prediction']
        Y = np.array(Y)
        Y = Y[:-n]

        # Split the data into 80% train data and 20 % test data
        x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2)


        lr = LinearRegression()

        lr.fit(x_train, y_train)
 
        forecast = np.array(df.drop(['Prediction'],1))[-n:]

        lr_prediction = lr.predict(forecast)


        predictions = pd.DataFrame(lr_prediction, columns = ['Prediction'])

        df = df.reset_index()

        d = df['Date'].iloc[-1]
        d = d + relativedelta(days =+ 1)


        datelist = pd.date_range(d, periods = 30).tolist()

        predictions['Date'] = datelist

        

        four_months = date.today() - relativedelta(months=+4)
        four_months = four_months.strftime('%Y-%m-%d')


        df = data.DataReader(symbol, 'yahoo', four_months, today)
        df = df.reset_index()


        fig = go.Figure()

        fig.add_trace(go.Scatter(
                        x=df.Date,
                        y=df['Adj Close'],
                        name=f'{symbol} stock',
                        line_color='dodgerblue',
                        opacity=0.9))
        

        fig.add_trace(go.Scatter(
                        x=predictions.Date,
                        y=predictions['Prediction'],
                        name=f'ML Prediction',
                        line=dict(color='green', dash = 'dot'),
                        opacity=0.9))
    
        fig.update_layout(title=f'Historical {symbol} Quote Stock Value - With 30 Days Prediction',
                                    yaxis_title='Closing Day Price Value in USD',
                                    template='plotly_dark',
                                    xaxis_tickfont_size=14,
                                    yaxis_tickfont_size=14)
        
        fig.show()





    # OPTION 3: Price Date Range Chart from Date Selected. 

    elif choice == '3' or choice == 'C' or choice == 'c':
    
        start_date = input('\nSubmit you Starting Date Analysis (With YYYY-MM-DD Format): ')
        end_date = input('Submit you Ending Date Analysis (With YYYY-MM-DD Format): ')
    
        df = data.DataReader(symbol, 'yahoo', start_date, end_date)
    
        df = df.reset_index()

        fig = go.Figure()
        fig.add_trace(go.Scatter(x=df.Date,
                                 y=df['Adj Close'],
                                 line_color='dodgerblue'))
        
        fig.update_layout(title=f'{symbol} Stock Price from {start_date} to {end_date}',
                                    yaxis_title='Closing Day Price Value in USD',
                                    template='plotly_dark',
                                    xaxis_tickfont_size=14,
                                    yaxis_tickfont_size=14)

        fig.show()
     
    
    



    # OPTION 4: Price Comparison from your Stock Tricker.
    elif choice == '4' or choice == 'D' or choice == 'd':
        start_date = input('\nSubmit you Starting Date Analysis (With YYYY-MM-DD Format): ')
        end_date = input('Submit you Ending Date Analysis (With YYYY-MM-DD Format): ')
    
        df = data.DataReader(symbol, 'yahoo', start_date, end_date)
        df = df.reset_index()
        
        while True:
            try:
                symbol_2 = input(f'\nWith which stock would you like to compare {symbol} stock? \nPlease enter a valid Stock Symbol: ')
                df_2 = data.DataReader(symbol_2, 'yahoo', start_date, end_date)
                df_2 = df_2.reset_index()
                break
            except(KeyError, OSError):
                print(color.BOLD + color.UNDERLINE + f'> {symbol_2} is not a valid stock symbol. Please try again...' + color.END)

                
        fig = go.Figure()

        fig.add_trace(go.Scatter(
                    x=df.Date,
                    y=df['Adj Close'],
                    name=f'{symbol} Stock',
                    line_color='dodgerblue',
                    opacity=0.9))
        
        fig.add_trace(go.Scatter(
                    x=df_2.Date,
                    y=df_2['Adj Close'],
                    name=f'{symbol_2} Stock',
                    line_color='dimgray',
                    opacity=0.9))
    
    
        fig.update_layout(title=f'Price Comparison of {symbol} Stock and {symbol_2} Stock from {start_date} to {end_date}', 
                                    yaxis_title='Closing Day Price Value in USD',
                                    template='plotly_dark',
                                    xaxis_tickfont_size=14,
                                    yaxis_tickfont_size=14)
        
        fig.show()
    

        
   
    
    
    # Option 5: Your Stock Tricker 180 Past-Days Analysis.
    elif choice == '5' or choice == 'E' or choice == 'e':

        try:
            # Save the date of today in the variable "today"
            today = date.today()
            # We convert the type of the variable in the format %Y-%m-%d
            today = today.strftime('%Y-%m-%d')
            # Save the date of today 6 months ago, by subtracting 6 months from the date of today
            six_months = date.today() - relativedelta(months=+6)
            six_months = six_months.strftime('%Y-%m-%d')
        
            df2 = yf.Ticker(symbol)
            # Save the Analyst Recommendations in "rec"
            rec = df2.recommendations
            # The DataFrame "rec" has 4 columns: "Firm", "To Grade", "From Grade" and "Action"
            # The index is the date ("DatetimeIndex")
    
            # Now we select only those columns which have the index(date) from "six months" to "today"
            rec = rec.loc[six_months:today,]
        
            # Unfortunately in some cases no data is available, so that the DataFrame is empty. Then the user gets the following message
            if rec.empty:
                print(color.BOLD + color.UNDERLINE + "\n> Unfortunately, there are no recommendations by analysts provided for your chosen stock!" + color.END)
                    
                    
            else:    
                # Replace the index with simple sequential numbers and save the old index ("DatetimeIndex") as a variable "Date"
                rec = rec.reset_index()
    
                # For our analysis we don't need the variables/columns "Firm", "From Grade" and "Action", therefore we delete them
                rec.drop(['Firm', 'From Grade', 'Action'], axis=1, inplace=True)

                # We change the name of the variables/columns
                rec.columns = (['date', 'grade'])
        
                # Now we add a new variable/column "value", which we give the value 1 for each row in order to sum up the values based on the contents of "grade"
                rec['value'] = 1

                # Now we group by the content of "grade" and sum their respective values 
                rec = rec.groupby(['grade']).sum()
                # The DataFrame "rec" has now 1 variable/column which is the value, the index are the different names from the variable "grade"
                # However for the plotting we need the index as a variable 
                rec = rec.reset_index()
        
                # For the labels we assign the content/names of the variable "grade" and for the values we assign the content of "values" 
                fig = go.Figure(data=[go.Pie(labels=rec.grade,
                                                values=rec.value,
                                                hole=.3)])
                # Give a title
                fig.update_layout(template='plotly_dark', title_text=f'Analyst Recommendations of {symbol} Stock from {six_months} to {today}')

                # Plotting the chart
                fig.show()  
            

    
        # For some stocks the imported data is distorted and in a wrong format, so that an error appears
        # In this cases the user gets the following message:
        except(ValueError,AttributeError):
            print(color.BOLD + color.UNDERLINE + '\n> Unfortunately, there are no recommendations provided for your chosen stock!' + color.END) 

 

    
    # OPTION 6: Quit the program
    elif choice == '6' or choice == 'Q' or choice == 'q':
        print(color.BLUE + color.BOLD + '\n> If you like our results, please share our solution with others! Thank you!' + color.END)
        choice = None
        

    # If user inputs a non valid option
    else:
        print(color.BOLD + color.UNDERLINE + '\n> Your Selection is INVALID! Please select a correct Option from our list.' + color.END)

> Please select from below an option to Analyzing your Stock Ticker Data:

 SELECT FROM THE BELOW YOUR ANALYSIS OPTION: 

    1 - Machine Learning 15 days Prediction (SVR Model) from Your Stock "BAC" Tricker.
    2 - Machine Learning 30 days Prediction (SVR Model) from Your Stock "BAC" Tricker.
    3 - Price Date Range Chart (YYY-MM-DD) from your Stock "BAC" Tricker.
    4 - Price Comparison from your Stock "BAC" Tricker with another Tricker.
    5 - Your Stock "BAC" Tricker 180 Past-Days Analysis.

    Q - Quit and Restart the Process using different Symbol or Stock Tricker.
    
 SELECT FROM THE BELOW YOUR ANALYSIS OPTION: 

    1 - Machine Learning 15 days Prediction (SVR Model) from Your Stock "BAC" Tricker.
    2 - Machine Learning 30 days Prediction (SVR Model) from Your Stock "BAC" Tricker.
    3 - Price Date Range Chart (YYY-MM-DD) from your Stock "BAC" Tricker.
    4 - Price Comparison from your Stock "BAC" Tricker with another Tricker.
    5 - Your Stock "BAC" Tricker 180 Past-Days Analysis.

    Q - Quit and Restart the Process using different Symbol or Stock Tricker.
    
 SELECT FROM THE BELOW YOUR ANALYSIS OPTION: 

    1 - Machine Learning 15 days Prediction (SVR Model) from Your Stock "BAC" Tricker.
    2 - Machine Learning 30 days Prediction (SVR Model) from Your Stock "BAC" Tricker.
    3 - Price Date Range Chart (YYY-MM-DD) from your Stock "BAC" Tricker.
    4 - Price Comparison from your Stock "BAC" Tricker with another Tricker.
    5 - Your Stock "BAC" Tricker 180 Past-Days Analysis.

    Q - Quit and Restart the Process using different Symbol or Stock Tricker.
    
 SELECT FROM THE BELOW YOUR ANALYSIS OPTION: 

    1 - Machine Learning 15 days Prediction (SVR Model) from Your Stock "BAC" Tricker.
    2 - Machine Learning 30 days Prediction (SVR Model) from Your Stock "BAC" Tricker.
    3 - Price Date Range Chart (YYY-MM-DD) from your Stock "BAC" Tricker.
    4 - Price Comparison from your Stock "BAC" Tricker with another Tricker.
    5 - Your Stock "BAC" Tricker 180 Past-Days Analysis.

    Q - Quit and Restart the Process using different Symbol or Stock Tricker.
    

> If you like our results, please share our solution with others! Thank you!

Potential Stock Prediction