From ae9655807562331646d466f8da7fb47cb70a51ff Mon Sep 17 00:00:00 2001 From: Seth Michael Larson Date: Wed, 28 Oct 2020 07:57:10 -0500 Subject: [PATCH] Add source for 'elastic.co/guide' to 'docs/guide' --- docs/Makefile | 2 +- docs/guide/index.asciidoc | 9 + docs/guide/installation.asciidoc | 16 + docs/guide/overview.asciidoc | 66 + docs/make.bat | 2 +- .../examples/online_retail_analysis.ipynb | 1453 --------------- docs/{source => sphinx}/conf.py | 0 .../development/contributing.rst | 0 .../development/implementation.rst | 0 docs/{source => sphinx}/development/index.rst | 0 .../examples/data/online-retail.csv.gz | Bin .../examples/demo_notebook.ipynb | 548 +++++- docs/{source => sphinx}/examples/index.rst | 0 .../introduction_to_eland_webinar.ipynb | 0 .../examples/online_retail_analysis.ipynb | 1635 +++++++++++++++++ docs/{source => sphinx}/index.rst | 0 docs/{source => sphinx}/logo/eland.png | Bin .../{source => sphinx}/logo/eland_favicon.png | Bin .../reference/api/eland-DataFrame-hist-1.png | Bin .../reference/api/eland-Series-hist-2.png | Bin .../reference/api/eland.DataFrame.agg.rst | 0 .../api/eland.DataFrame.aggregate.rst | 0 .../reference/api/eland.DataFrame.columns.rst | 0 .../reference/api/eland.DataFrame.count.rst | 0 .../api/eland.DataFrame.describe.rst | 0 .../reference/api/eland.DataFrame.drop.rst | 0 .../reference/api/eland.DataFrame.dtypes.rst | 0 .../reference/api/eland.DataFrame.empty.rst | 0 .../api/eland.DataFrame.es_dtypes.rst | 0 .../reference/api/eland.DataFrame.es_info.rst | 0 .../api/eland.DataFrame.es_query.rst | 0 .../reference/api/eland.DataFrame.filter.rst | 0 .../reference/api/eland.DataFrame.get.rst | 0 .../reference/api/eland.DataFrame.groupby.rst | 0 .../reference/api/eland.DataFrame.head.rst | 0 .../reference/api/eland.DataFrame.hist.rst | 0 .../reference/api/eland.DataFrame.index.rst | 0 .../reference/api/eland.DataFrame.info.rst | 0 .../reference/api/eland.DataFrame.keys.rst | 0 .../reference/api/eland.DataFrame.mad.rst | 0 .../reference/api/eland.DataFrame.max.rst | 0 .../reference/api/eland.DataFrame.mean.rst | 0 .../reference/api/eland.DataFrame.median.rst | 0 .../reference/api/eland.DataFrame.min.rst | 0 .../reference/api/eland.DataFrame.ndim.rst | 0 .../reference/api/eland.DataFrame.nunique.rst | 0 .../reference/api/eland.DataFrame.query.rst | 0 .../reference/api/eland.DataFrame.rst | 0 .../reference/api/eland.DataFrame.sample.rst | 0 .../api/eland.DataFrame.select_dtypes.rst | 0 .../reference/api/eland.DataFrame.shape.rst | 0 .../reference/api/eland.DataFrame.size.rst | 0 .../reference/api/eland.DataFrame.std.rst | 0 .../reference/api/eland.DataFrame.sum.rst | 0 .../reference/api/eland.DataFrame.tail.rst | 0 .../reference/api/eland.DataFrame.to_csv.rst | 0 .../reference/api/eland.DataFrame.to_html.rst | 0 .../api/eland.DataFrame.to_numpy.rst | 0 .../api/eland.DataFrame.to_pandas.rst | 0 .../api/eland.DataFrame.to_string.rst | 0 .../reference/api/eland.DataFrame.values.rst | 0 .../reference/api/eland.DataFrame.var.rst | 0 .../reference/api/eland.Index.rst | 0 .../reference/api/eland.Series.add.rst | 0 .../reference/api/eland.Series.describe.rst | 0 .../reference/api/eland.Series.div.rst | 0 .../reference/api/eland.Series.divide.rst | 0 .../reference/api/eland.Series.dtype.rst | 0 .../reference/api/eland.Series.dtypes.rst | 0 .../reference/api/eland.Series.empty.rst | 0 .../reference/api/eland.Series.es_dtype.rst | 0 .../reference/api/eland.Series.es_dtypes.rst | 0 .../reference/api/eland.Series.es_info.rst | 0 .../reference/api/eland.Series.filter.rst | 0 .../reference/api/eland.Series.floordiv.rst | 0 .../reference/api/eland.Series.head.rst | 0 .../reference/api/eland.Series.hist.rst | 0 .../reference/api/eland.Series.index.rst | 0 .../reference/api/eland.Series.isin.rst | 0 .../reference/api/eland.Series.isna.rst | 0 .../reference/api/eland.Series.isnull.rst | 0 .../reference/api/eland.Series.mad.rst | 0 .../reference/api/eland.Series.max.rst | 0 .../reference/api/eland.Series.mean.rst | 0 .../reference/api/eland.Series.median.rst | 0 .../reference/api/eland.Series.min.rst | 0 .../reference/api/eland.Series.mod.rst | 0 .../reference/api/eland.Series.mul.rst | 0 .../reference/api/eland.Series.multiply.rst | 0 .../reference/api/eland.Series.name.rst | 0 .../reference/api/eland.Series.ndim.rst | 0 .../reference/api/eland.Series.notna.rst | 0 .../reference/api/eland.Series.notnull.rst | 0 .../reference/api/eland.Series.nunique.rst | 0 .../reference/api/eland.Series.pow.rst | 0 .../reference/api/eland.Series.radd.rst | 0 .../reference/api/eland.Series.rdiv.rst | 0 .../reference/api/eland.Series.rdivide.rst | 0 .../reference/api/eland.Series.rename.rst | 0 .../reference/api/eland.Series.rfloordiv.rst | 0 .../reference/api/eland.Series.rmod.rst | 0 .../reference/api/eland.Series.rmul.rst | 0 .../reference/api/eland.Series.rmultiply.rst | 0 .../reference/api/eland.Series.rpow.rst | 0 .../reference/api/eland.Series.rst | 0 .../reference/api/eland.Series.rsub.rst | 0 .../reference/api/eland.Series.rsubtract.rst | 0 .../reference/api/eland.Series.rtruediv.rst | 0 .../reference/api/eland.Series.sample.rst | 0 .../reference/api/eland.Series.shape.rst | 0 .../reference/api/eland.Series.size.rst | 0 .../reference/api/eland.Series.std.rst | 0 .../reference/api/eland.Series.sub.rst | 0 .../reference/api/eland.Series.subtract.rst | 0 .../reference/api/eland.Series.sum.rst | 0 .../reference/api/eland.Series.tail.rst | 0 .../reference/api/eland.Series.to_numpy.rst | 0 .../reference/api/eland.Series.to_pandas.rst | 0 .../reference/api/eland.Series.to_string.rst | 0 .../reference/api/eland.Series.truediv.rst | 0 .../api/eland.Series.value_counts.rst | 0 .../reference/api/eland.Series.var.rst | 0 .../reference/api/eland.csv_to_eland.rst | 0 .../reference/api/eland.eland_to_pandas.rst | 0 .../eland.groupby.DataFrameGroupBy.agg.rst | 0 ...and.groupby.DataFrameGroupBy.aggregate.rst | 0 .../eland.groupby.DataFrameGroupBy.count.rst | 0 .../eland.groupby.DataFrameGroupBy.mad.rst | 0 .../eland.groupby.DataFrameGroupBy.max.rst | 0 .../eland.groupby.DataFrameGroupBy.mean.rst | 0 .../eland.groupby.DataFrameGroupBy.median.rst | 0 .../eland.groupby.DataFrameGroupBy.min.rst | 0 ...eland.groupby.DataFrameGroupBy.nunique.rst | 0 .../api/eland.groupby.DataFrameGroupBy.rst | 0 .../eland.groupby.DataFrameGroupBy.std.rst | 0 .../eland.groupby.DataFrameGroupBy.sum.rst | 0 .../eland.groupby.DataFrameGroupBy.var.rst | 0 .../reference/api/eland.groupby.GroupBy.rst | 0 .../api/eland.ml.MLModel.delete_model.rst | 0 .../api/eland.ml.MLModel.exists_model.rst | 0 .../api/eland.ml.MLModel.import_model.rst | 0 .../api/eland.ml.MLModel.predict.rst | 0 .../reference/api/eland.ml.MLModel.rst | 0 .../reference/api/eland.pandas_to_eland.rst | 0 .../reference/dataframe.rst | 0 .../reference/general_utility_functions.rst | 0 docs/{source => sphinx}/reference/index.rst | 0 .../{source => sphinx}/reference/indexing.rst | 0 docs/{source => sphinx}/reference/io.rst | 0 docs/{source => sphinx}/reference/ml.rst | 0 docs/{source => sphinx}/reference/series.rst | 0 .../reference/supported_apis.rst | 0 152 files changed, 2176 insertions(+), 1555 deletions(-) create mode 100644 docs/guide/index.asciidoc create mode 100644 docs/guide/installation.asciidoc create mode 100644 docs/guide/overview.asciidoc delete mode 100644 docs/source/examples/online_retail_analysis.ipynb rename docs/{source => sphinx}/conf.py (100%) rename docs/{source => sphinx}/development/contributing.rst (100%) rename docs/{source => sphinx}/development/implementation.rst (100%) rename docs/{source => sphinx}/development/index.rst (100%) rename docs/{source => sphinx}/examples/data/online-retail.csv.gz (100%) rename docs/{source => sphinx}/examples/demo_notebook.ipynb (56%) rename docs/{source => sphinx}/examples/index.rst (100%) rename docs/{source => sphinx}/examples/introduction_to_eland_webinar.ipynb (100%) create mode 100644 docs/sphinx/examples/online_retail_analysis.ipynb rename docs/{source => sphinx}/index.rst (100%) rename docs/{source => sphinx}/logo/eland.png (100%) rename docs/{source => sphinx}/logo/eland_favicon.png (100%) rename docs/{source => sphinx}/reference/api/eland-DataFrame-hist-1.png (100%) rename docs/{source => sphinx}/reference/api/eland-Series-hist-2.png (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.agg.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.aggregate.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.columns.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.count.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.describe.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.drop.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.dtypes.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.empty.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.es_dtypes.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.es_info.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.es_query.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.filter.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.get.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.groupby.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.head.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.hist.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.index.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.info.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.keys.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.mad.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.max.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.mean.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.median.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.min.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.ndim.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.nunique.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.query.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.sample.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.select_dtypes.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.shape.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.size.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.std.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.sum.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.tail.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.to_csv.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.to_html.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.to_numpy.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.to_pandas.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.to_string.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.values.rst (100%) rename docs/{source => sphinx}/reference/api/eland.DataFrame.var.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Index.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.add.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.describe.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.div.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.divide.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.dtype.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.dtypes.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.empty.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.es_dtype.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.es_dtypes.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.es_info.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.filter.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.floordiv.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.head.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.hist.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.index.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.isin.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.isna.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.isnull.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.mad.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.max.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.mean.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.median.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.min.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.mod.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.mul.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.multiply.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.name.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.ndim.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.notna.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.notnull.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.nunique.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.pow.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.radd.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rdiv.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rdivide.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rename.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rfloordiv.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rmod.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rmul.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rmultiply.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rpow.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rsub.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rsubtract.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.rtruediv.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.sample.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.shape.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.size.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.std.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.sub.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.subtract.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.sum.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.tail.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.to_numpy.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.to_pandas.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.to_string.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.truediv.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.value_counts.rst (100%) rename docs/{source => sphinx}/reference/api/eland.Series.var.rst (100%) rename docs/{source => sphinx}/reference/api/eland.csv_to_eland.rst (100%) rename docs/{source => sphinx}/reference/api/eland.eland_to_pandas.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.agg.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.aggregate.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.count.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.mad.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.max.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.mean.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.median.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.min.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.nunique.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.std.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.sum.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.DataFrameGroupBy.var.rst (100%) rename docs/{source => sphinx}/reference/api/eland.groupby.GroupBy.rst (100%) rename docs/{source => sphinx}/reference/api/eland.ml.MLModel.delete_model.rst (100%) rename docs/{source => sphinx}/reference/api/eland.ml.MLModel.exists_model.rst (100%) rename docs/{source => sphinx}/reference/api/eland.ml.MLModel.import_model.rst (100%) rename docs/{source => sphinx}/reference/api/eland.ml.MLModel.predict.rst (100%) rename docs/{source => sphinx}/reference/api/eland.ml.MLModel.rst (100%) rename docs/{source => sphinx}/reference/api/eland.pandas_to_eland.rst (100%) rename docs/{source => sphinx}/reference/dataframe.rst (100%) rename docs/{source => sphinx}/reference/general_utility_functions.rst (100%) rename docs/{source => sphinx}/reference/index.rst (100%) rename docs/{source => sphinx}/reference/indexing.rst (100%) rename docs/{source => sphinx}/reference/io.rst (100%) rename docs/{source => sphinx}/reference/ml.rst (100%) rename docs/{source => sphinx}/reference/series.rst (100%) rename docs/{source => sphinx}/reference/supported_apis.rst (100%) diff --git a/docs/Makefile b/docs/Makefile index d0c3cbf..db852fb 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -5,7 +5,7 @@ # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build -SOURCEDIR = source +SOURCEDIR = sphinx BUILDDIR = build # Put it first so that "make" without argument is like "make help". diff --git a/docs/guide/index.asciidoc b/docs/guide/index.asciidoc new file mode 100644 index 0000000..bacb324 --- /dev/null +++ b/docs/guide/index.asciidoc @@ -0,0 +1,9 @@ += eland + +:doctype: book + +include::{asciidoc-dir}/../../shared/attributes.asciidoc[] + +include::overview.asciidoc[] + +include::installation.asciidoc[] diff --git a/docs/guide/installation.asciidoc b/docs/guide/installation.asciidoc new file mode 100644 index 0000000..62e8423 --- /dev/null +++ b/docs/guide/installation.asciidoc @@ -0,0 +1,16 @@ +[[installation]] +== Installation + +Eland can be installed with https://pip.pypa.io[pip] from https://pypi.org/project/eland[PyPI]: + +[source,sh] +----------------------------- +$ python -m pip install eland +----------------------------- + +and can also be installed with https://docs.conda.io[Conda] from https://anaconda.org/conda-forge/eland[Conda Forge]: + +[source,sh] +------------------------------------ +$ conda install -c conda-forge eland +------------------------------------ diff --git a/docs/guide/overview.asciidoc b/docs/guide/overview.asciidoc new file mode 100644 index 0000000..f99f2bc --- /dev/null +++ b/docs/guide/overview.asciidoc @@ -0,0 +1,66 @@ +[[overview]] +== Overview + +Eland is a Python client and toolkit for DataFrames and {ml} in {es}. +Full documentation is available on https://eland.readthedocs.io[Read the Docs]. +Source code is available on https://github.com/elastic/eland[GitHub]. + +[discrete] +=== Compatibility + +The library is compatible with all {es} versions since `7.6.x` but you +**have to use a matching major version**: + +The recommended way to set your requirements in your `setup.py` or +`requirements.txt` is:: + + # Elasticsearch 7.x + eland>=7,<8 + +Because Eland uses some experimental APIs for {ml} it +is also recommended to install the same major and minor for `elasticsearch-py` +as your cluster. For example if your cluster is v7.8.1 you would install +like so:: + + $ python -m pip install 'eland>=7,<8' 'elasticsearch>=7.8,<7.9' + +[discrete] +=== Getting Started + +Create a `DataFrame` object connected to an {es} cluster running on `localhost:9200`: + +[source,python] +------------------------------------ +>>> import eland as ed +>>> df = ed.DataFrame( +... es_client="localhost:9200", +... es_index_pattern="flights", +... ) +>>> df + AvgTicketPrice Cancelled ... dayOfWeek timestamp +0 841.265642 False ... 0 2018-01-01 00:00:00 +1 882.982662 False ... 0 2018-01-01 18:27:00 +2 190.636904 False ... 0 2018-01-01 17:11:14 +3 181.694216 True ... 0 2018-01-01 10:33:28 +4 730.041778 False ... 0 2018-01-01 05:13:00 +... ... ... ... ... ... +13054 1080.446279 False ... 6 2018-02-11 20:42:25 +13055 646.612941 False ... 6 2018-02-11 01:41:57 +13056 997.751876 False ... 6 2018-02-11 04:09:27 +13057 1102.814465 False ... 6 2018-02-11 08:28:21 +13058 858.144337 False ... 6 2018-02-11 14:54:34 + +[13059 rows x 27 columns] +------------------------------------ + +Eland can also be used for complex queries and aggregations: + +[source,python] +------------------------------------ +>>> df[df.Carrier != "Kibana Airlines"].groupby("Carrier").mean(numeric_only=False) + AvgTicketPrice Cancelled timestamp +Carrier +ES-Air 630.235816 0.129814 2018-01-21 20:45:00.200000000 +JetBeats 627.457373 0.134698 2018-01-21 14:43:18.112400635 +Logstash Airways 624.581974 0.125188 2018-01-21 16:14:50.711798340 +------------------------------------ diff --git a/docs/make.bat b/docs/make.bat index 6247f7e..c97bc68 100644 --- a/docs/make.bat +++ b/docs/make.bat @@ -7,7 +7,7 @@ REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) -set SOURCEDIR=source +set SOURCEDIR=sphinx set BUILDDIR=build if "%1" == "" goto help diff --git a/docs/source/examples/online_retail_analysis.ipynb b/docs/source/examples/online_retail_analysis.ipynb deleted file mode 100644 index 53652b2..0000000 --- a/docs/source/examples/online_retail_analysis.ipynb +++ /dev/null @@ -1,1453 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import eland as ed\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "# Fix console size for consistent test results\n", - "from eland.conftest import *" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Online Retail Analysis" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Getting Started\n", - "\n", - "To get started, let's create an `eland.DataFrame` by reading a csv file. This creates and populates the \n", - "`online-retail` index in the local Elasticsearch cluster." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "df = ed.csv_to_eland(\"data/online-retail.csv.gz\",\n", - " es_client='localhost', \n", - " es_dest_index='online-retail', \n", - " es_if_exists='replace', \n", - " es_dropna=True,\n", - " es_refresh=True,\n", - " compression='gzip',\n", - " index_col=0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we see that the `\"_id\"` field was used to index our data frame. " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'_id'" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.index.es_index_field" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, we can check which field from elasticsearch are available to our eland data frame. `columns` is available as a parameter when instantiating the data frame which allows one to choose only a subset of fields from your index to be included in the data frame. Since we didn't set this parameter, we have access to all fields." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode',\n", - " 'UnitPrice'],\n", - " dtype='object')" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.columns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, let's see the data types of our fields. Running `df.dtypes`, we can see that elasticsearch field types are mapped to pandas field types." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Country object\n", - "CustomerID float64\n", - "Description object\n", - "InvoiceDate object\n", - "InvoiceNo object\n", - "Quantity int64\n", - "StockCode object\n", - "UnitPrice float64\n", - "dtype: object" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.dtypes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We also offer a `.es_info()` data frame method that shows all info about the underlying index. It also contains information about operations being passed from data frame methods to elasticsearch. More on this later." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "es_index_pattern: online-retail\n", - "Index:\n", - " es_index_field: _id\n", - " is_source_field: False\n", - "Mappings:\n", - " capabilities:\n", - " es_field_name is_source es_dtype es_date_format pd_dtype is_searchable is_aggregatable is_scripted aggregatable_es_field_name\n", - "Country Country True keyword None object True True False Country\n", - "CustomerID CustomerID True double None float64 True True False CustomerID\n", - "Description Description True keyword None object True True False Description\n", - "InvoiceDate InvoiceDate True keyword None object True True False InvoiceDate\n", - "InvoiceNo InvoiceNo True keyword None object True True False InvoiceNo\n", - "Quantity Quantity True long None int64 True True False Quantity\n", - "StockCode StockCode True keyword None object True True False StockCode\n", - "UnitPrice UnitPrice True double None float64 True True False UnitPrice\n", - "Operations:\n", - " tasks: []\n", - " size: None\n", - " sort_params: None\n", - " _source: ['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode', 'UnitPrice']\n", - " body: {}\n", - " post_processing: []\n", - "\n" - ] - } - ], - "source": [ - "print(df.es_info())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Selecting and Indexing Data\n", - "\n", - "Now that we understand how to create a data frame and get access to it's underlying attributes, let's see how we can select subsets of our data." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### head and tail\n", - "\n", - "much like pandas, eland data frames offer `.head(n)` and `.tail(n)` methods that return the first and last n rows, respectively." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountryCustomerID...StockCodeUnitPrice
1000United Kingdom14729.0...211231.25
1001United Kingdom14729.0...211241.25
\n", - "
\n", - "

2 rows × 8 columns

" - ], - "text/plain": [ - " Country CustomerID ... StockCode UnitPrice\n", - "1000 United Kingdom 14729.0 ... 21123 1.25\n", - "1001 United Kingdom 14729.0 ... 21124 1.25\n", - "\n", - "[2 rows x 8 columns]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "es_index_pattern: online-retail\n", - "Index:\n", - " es_index_field: _id\n", - " is_source_field: False\n", - "Mappings:\n", - " capabilities:\n", - " es_field_name is_source es_dtype es_date_format pd_dtype is_searchable is_aggregatable is_scripted aggregatable_es_field_name\n", - "Country Country True keyword None object True True False Country\n", - "CustomerID CustomerID True double None float64 True True False CustomerID\n", - "Description Description True keyword None object True True False Description\n", - "InvoiceDate InvoiceDate True keyword None object True True False InvoiceDate\n", - "InvoiceNo InvoiceNo True keyword None object True True False InvoiceNo\n", - "Quantity Quantity True long None int64 True True False Quantity\n", - "StockCode StockCode True keyword None object True True False StockCode\n", - "UnitPrice UnitPrice True double None float64 True True False UnitPrice\n", - "Operations:\n", - " tasks: [('tail': ('sort_field': '_doc', 'count': 2)), ('head': ('sort_field': '_doc', 'count': 2)), ('tail': ('sort_field': '_doc', 'count': 2))]\n", - " size: 2\n", - " sort_params: _doc:desc\n", - " _source: ['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode', 'UnitPrice']\n", - " body: {}\n", - " post_processing: [('sort_index'), ('head': ('count': 2)), ('tail': ('count': 2))]\n", - "\n" - ] - } - ], - "source": [ - "print(df.tail(2).head(2).tail(2).es_info())" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountryCustomerID...StockCodeUnitPrice
14998United Kingdom17419.0...217731.25
14999United Kingdom17419.0...221492.10
\n", - "
\n", - "

2 rows × 8 columns

" - ], - "text/plain": [ - " Country CustomerID ... StockCode UnitPrice\n", - "14998 United Kingdom 17419.0 ... 21773 1.25\n", - "14999 United Kingdom 17419.0 ... 22149 2.10\n", - "\n", - "[2 rows x 8 columns]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.tail(2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Selecting columns\n", - "\n", - "you can also pass a list of columns to select columns from the data frame in a specified order." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountryInvoiceDate
1000United Kingdom2010-12-01 12:43:00
1001United Kingdom2010-12-01 12:43:00
1002United Kingdom2010-12-01 12:43:00
1003United Kingdom2010-12-01 12:43:00
1004United Kingdom2010-12-01 12:43:00
\n", - "
\n", - "

5 rows × 2 columns

" - ], - "text/plain": [ - " Country InvoiceDate\n", - "1000 United Kingdom 2010-12-01 12:43:00\n", - "1001 United Kingdom 2010-12-01 12:43:00\n", - "1002 United Kingdom 2010-12-01 12:43:00\n", - "1003 United Kingdom 2010-12-01 12:43:00\n", - "1004 United Kingdom 2010-12-01 12:43:00\n", - "\n", - "[5 rows x 2 columns]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['Country', 'InvoiceDate']].head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Boolean Indexing\n", - "\n", - "we also allow you to filter the data frame using boolean indexing. Under the hood, a boolean index maps to a `terms` query that is then passed to elasticsearch to filter the index." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'term': {'Country': 'Germany'}}\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountryCustomerID...StockCodeUnitPrice
1109Germany12662.0...228092.95
1110Germany12662.0...843472.55
1111Germany12662.0...849450.85
1112Germany12662.0...222421.65
1113Germany12662.0...222441.95
\n", - "
\n", - "

5 rows × 8 columns

" - ], - "text/plain": [ - " Country CustomerID ... StockCode UnitPrice\n", - "1109 Germany 12662.0 ... 22809 2.95\n", - "1110 Germany 12662.0 ... 84347 2.55\n", - "1111 Germany 12662.0 ... 84945 0.85\n", - "1112 Germany 12662.0 ... 22242 1.65\n", - "1113 Germany 12662.0 ... 22244 1.95\n", - "\n", - "[5 rows x 8 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# the construction of a boolean vector maps directly to an elasticsearch query\n", - "print(df['Country']=='Germany')\n", - "df[(df['Country']=='Germany')].head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "we can also filter the data frame using a list of values." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'terms': {'Country': ['Germany', 'United States']}}\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountryCustomerID...StockCodeUnitPrice
1000United Kingdom14729.0...211231.25
1001United Kingdom14729.0...211241.25
1002United Kingdom14729.0...211221.25
1003United Kingdom14729.0...843781.25
1004United Kingdom14729.0...219850.29
\n", - "
\n", - "

5 rows × 8 columns

" - ], - "text/plain": [ - " Country CustomerID ... StockCode UnitPrice\n", - "1000 United Kingdom 14729.0 ... 21123 1.25\n", - "1001 United Kingdom 14729.0 ... 21124 1.25\n", - "1002 United Kingdom 14729.0 ... 21122 1.25\n", - "1003 United Kingdom 14729.0 ... 84378 1.25\n", - "1004 United Kingdom 14729.0 ... 21985 0.29\n", - "\n", - "[5 rows x 8 columns]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print(df['Country'].isin(['Germany', 'United States']))\n", - "df[df['Country'].isin(['Germany', 'United Kingdom'])].head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also combine boolean vectors to further filter the data frame." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountryCustomerID...StockCodeUnitPrice
\n", - "
\n", - "

0 rows × 8 columns

" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: [Country, CustomerID, Description, InvoiceDate, InvoiceNo, Quantity, StockCode, UnitPrice]\n", - "Index: []\n", - "\n", - "[0 rows x 8 columns]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[(df['Country']=='Germany') & (df['Quantity']>90)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using this example, let see how eland translates this boolean filter to an elasticsearch `bool` query." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "es_index_pattern: online-retail\n", - "Index:\n", - " es_index_field: _id\n", - " is_source_field: False\n", - "Mappings:\n", - " capabilities:\n", - " es_field_name is_source es_dtype es_date_format pd_dtype is_searchable is_aggregatable is_scripted aggregatable_es_field_name\n", - "Country Country True keyword None object True True False Country\n", - "CustomerID CustomerID True double None float64 True True False CustomerID\n", - "Description Description True keyword None object True True False Description\n", - "InvoiceDate InvoiceDate True keyword None object True True False InvoiceDate\n", - "InvoiceNo InvoiceNo True keyword None object True True False InvoiceNo\n", - "Quantity Quantity True long None int64 True True False Quantity\n", - "StockCode StockCode True keyword None object True True False StockCode\n", - "UnitPrice UnitPrice True double None float64 True True False UnitPrice\n", - "Operations:\n", - " tasks: [('boolean_filter': ('boolean_filter': {'bool': {'must': [{'term': {'Country': 'Germany'}}, {'range': {'Quantity': {'gt': 90}}}]}}))]\n", - " size: None\n", - " sort_params: None\n", - " _source: ['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode', 'UnitPrice']\n", - " body: {'query': {'bool': {'must': [{'term': {'Country': 'Germany'}}, {'range': {'Quantity': {'gt': 90}}}]}}}\n", - " post_processing: []\n", - "\n" - ] - } - ], - "source": [ - "print(df[(df['Country']=='Germany') & (df['Quantity']>90)].es_info())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Aggregation and Descriptive Statistics\n", - "\n", - "Let's begin to ask some questions of our data and use eland to get the answers." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**How many different countries are there?**" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['Country'].nunique()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**What is the total sum of products ordered?**" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "111960.0" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['Quantity'].sum()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Show me the sum, mean, min, and max of the qunatity and unit_price fields**" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
QuantityUnitPrice
sum111960.00061548.490000
mean7.4644.103233
max2880.000950.990000
min-9360.0000.000000
\n", - "
" - ], - "text/plain": [ - " Quantity UnitPrice\n", - "sum 111960.000 61548.490000\n", - "mean 7.464 4.103233\n", - "max 2880.000 950.990000\n", - "min -9360.000 0.000000" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['Quantity','UnitPrice']].agg(['sum', 'mean', 'max', 'min'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Give me descriptive statistics for the entire data frame**" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CustomerIDQuantityUnitPrice
count10729.00000015000.00000015000.000000
mean15590.7766807.4640004.103233
std1764.02516085.92438720.104873
min12347.000000-9360.0000000.000000
25%14223.6723481.0000001.250000
50%15666.8262302.0000002.510000
75%17212.6900926.5801174.212883
max18239.0000002880.000000950.990000
\n", - "
" - ], - "text/plain": [ - " CustomerID Quantity UnitPrice\n", - "count 10729.000000 15000.000000 15000.000000\n", - "mean 15590.776680 7.464000 4.103233\n", - "std 1764.025160 85.924387 20.104873\n", - "min 12347.000000 -9360.000000 0.000000\n", - "25% 14223.672348 1.000000 1.250000\n", - "50% 15666.826230 2.000000 2.510000\n", - "75% 17212.690092 6.580117 4.212883\n", - "max 18239.000000 2880.000000 950.990000" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# NBVAL_IGNORE_OUTPUT\n", - "df.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Show me a histogram of numeric columns**" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAAEICAYAAACQ+wgHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3df7RfdX3n++dLEH+gEn50jhiYJh0yutCMymQBjnN7z4iFgE7D3KUMHToELl25cxdabTNtoZ17uVVZCzsyFGxlJlOowTICpVq4laoZ9NwOMxdE1IqAXlIIkjSAmoANjNQw7/vH93Pka8zhnJN9cs757jwfa5119v7sz97fzzv77O/3nf397M8nVYUkSZKkffeihW6AJEmSNOpMqiVJkqSOTKolSZKkjkyqJUmSpI5MqiVJkqSOTKolSZKkjkyqpSFJdiX5mYVuhyRpIMm/T/J/LNbjSZNMqrXgkpyX5N4kzyR5LMnHkhw2D687keSXhsuq6hVV9VDb/vEkH9rf7ZCkPktSSY7bo+z/SvJHM9m/qv5VVX2w7TeeZOtejvXDdlPkyST/LclbZnI8aS6ZVGtBJVkPfBj4NeAw4GRgGfD5JC9ewKZJkkbHjVX1CuCngDuATyXJnpWSHDTvLdMBw6RaCybJq4DfBt5bVZ+tqh9W1RbgLOBngH+x593iPe9SJLkoyV8l+Zsk9yf5Z0PbzktyR5KPJNmZ5OEkp7dtlwL/E/B77e7G77XySnJcknXAOcCvt+3/d5JfS/Ine8RwVZIr99e/kST13eT7epL1SZ5Isj3J+UPbP57kQ0kOBf4ceE17X96V5DXDx6qqHwIbgVcDR7Z9r05yW5KngX+yl8+VNUm+luT77fNkdSs/LMk1rT3bWhtMyjUlk2otpH8EvBT41HBhVe0CbgNOncEx/opBcnwYgwT9j5IcPbT9JOBbwFHA7wDXJElV/RbwX4D3tC4f79mjDRuA64Hfadv/KfBHwOokSwCSHAycDVw3u7AlSXt4NYP38aXABcDvJzl8uEJVPQ2cDvx1e19+RVX99XCdJC8BzgMerarvtuJ/AVwKvJLBXezh+icyeA//NWAJ8LPAlrb548Bu4DjgzQw+k36sy6A0zKRaC+ko4LtVtXsv27Yz+BrvBVXVH1fVX1fV/6iqG4EHgROHqjxSVf+xqp5jcPfiaGBsXxpbVduBvwDe3YpWt/bfsy/HkyT9yA+BD7RvLG8DdgGvncX+ZyV5EngU+IfAPxvadktV/df2OfGDPfa7ALi2qja17duq6ptJxoAzgPdX1dNV9QRwBYMbKdJeHbzQDdAB7bvAUUkO3ktifXTb/oKSnAv8KoN+2ACvYJCsT3pscqGqnmld7F7Roc0bgf8d+I/ALwKf6HAsSToQPAfs+YzMixkk0pO+t8fnwDPM7r36pqr6xSm2PfoC+x3L4JvRPf10a+P2oa7ZL5rmWDrAeadaC+n/BZ4F/pfhwiSvYPAV3wTwNPDyoc2vHqr30wyS2/cAR1bVEuAbwE88nDKF2oftfwr8gyRvAN7JoIuIJGlq3+b5Gx+TlgOP7MOxpnvfnu0+jwJ/b4ryZ4GjqmpJ+3lVVb1+H15fBwiTai2YqnqKQT/ojyZZneTFSZYBNzG4S3098DXgjCRHJHk18P6hQxzK4M3yOwDtwZY3zKIJjzN4IHLG29tXhzcD/wn4UlV9exavJ0kHohuBf5PkmCQvSvJ24J8yeC+drccZPIA4V8OuXgOcn+SU1ralSV7Xuvt9Hrg8yavatr+X5H+eo9dVD5lUa0FV1e8Avwl8BPgb4GEGd6bf3h5K+QTwlwweHPk8gzfnyX3vBy5ncMf7cWAl8F9n8fJXAu9qI4NctZft1wDHt3FP/3SofGN7Lbt+SNL0PgD8NwYPCe5k8ND4OVX1jdkeqKq+CXwSeKi9N79mun2mOd6XgPMZ9Jd+Cvh/GHT9ADgXOAS4v7X7ZgZdE6W9StW+fJMi7R/tbvMHgLcu1rvASf4u8E3g1VX1/YVujyRJWng+qKhFpar+MMluBsPtLbqkOsmLGDwYeYMJtSRJmuSdammG2sQDjzN4uGZ1VfkUuCRJAkyqJUmSpM58UFGSJEnqaFH3qT7qqKNq2bJlC90MAJ5++mkOPfTQhW7GfmFso6evccHijO2ee+75blVNO8On9s2+vNcvxr+TudLn2KDf8fU5Nuh/fF3f6xd1Ur1s2TK+/OUvL3QzAJiYmGB8fHyhm7FfGNvo6WtcsDhjS7Ivk1RohvblvX4x/p3MlT7HBv2Or8+xQf/j6/peb/cPSZIkqSOTakmSJKkjk2pJkiSpI5NqSZIkqSOTakmSJKkjk2pJkiSpI5NqSZIkqSOTakmSJKkjk2pJkiSpo0U9o6I0F5Zd9Jlp62y57B3z0BJJc+XebU9x3jTXtte1pPnknWpJkiSpI5NqSZIkqSOTakmSJKkjk2pJkiSpI5NqSZIkqSOTakmSJKmjGSXVSX4lyX1JvpHkk0lemmR5kruSbE5yY5JDWt2XtPXNbfuyoeNc3Mq/leS0/ROSJEmSNL+mTaqTLAV+GVhVVW8ADgLOBj4MXFFVxwE7gQvaLhcAO1v5Fa0eSY5v+70eWA18LMlBcxuOJEmSNP9m2v3jYOBlSQ4GXg5sB94G3Ny2bwTObMtr2jpt+ylJ0spvqKpnq+phYDNwYvcQJEmSpIU17YyKVbUtyUeAbwP/Hfg8cA/wZFXtbtW2Akvb8lLg0bbv7iRPAUe28juHDj28z48kWQesAxgbG2NiYmL2Ue0Hu3btWjRtmWt9j239yuemrTdq8ff9nPU1NklSf02bVCc5nMFd5uXAk8AfM+i+sV9U1QZgA8CqVatqfHx8f73UrExMTLBY2jLX+h7b5Xc8PW29LeeM7//GzKG+n7O+xiZJ6q+ZdP94O/BwVX2nqn4IfAp4K7CkdQcBOAbY1pa3AccCtO2HAd8bLt/LPpIkSdLImklS/W3g5CQvb32jTwHuB74IvKvVWQvc0pZvbeu07V+oqmrlZ7fRQZYDK4AvzU0YkiRJ0sKZSZ/qu5LcDHwF2A18lUH3jM8ANyT5UCu7pu1yDfCJJJuBHQxG/KCq7ktyE4OEfDdwYVVN39lVkiRJWuSmTaoBquoS4JI9ih9iL6N3VNUPgHdPcZxLgUtn2UZJkiRpUXNGRUmSJKkjk2pJkiSpI5NqSZIkqSOTakmSJKkjk2pJkiSpI5NqSRJJfiXJfUm+keSTSV6aZHmSu5JsTnJjkkNa3Ze09c1t+7Kh41zcyr+V5LSFikeS5ptJtSQd4JIsBX4ZWFVVbwAOYjDHwIeBK6rqOGAncEHb5QJgZyu/otUjyfFtv9cDq4GPJTloPmORpIViUi1JgsG8BS9LcjDwcmA78Dbg5rZ9I3BmW17T1mnbT2kz7q4BbqiqZ6vqYWAze5nPQJL6aEaTv0iS+quqtiX5CPBt4L8DnwfuAZ6sqt2t2lZgaVteCjza9t2d5CngyFZ+59Chh/f5MUnWAesAxsbGmJiYmFWbx14G61fufsE6sz3mYrFr166RbftM9Dm+PscG/Y+vK5NqSTrAJTmcwV3m5cCTwB8z6L6x31TVBmADwKpVq2p8fHxW+3/0+lu4/N4X/gjbcs7sjrlYTExMMNt/j1HS5/j6HBv0P76u7P4hSXo78HBVfaeqfgh8CngrsKR1BwE4BtjWlrcBxwK07YcB3xsu38s+ktRrJtWSpG8DJyd5eesbfQpwP/BF4F2tzlrglrZ8a1unbf9CVVUrP7uNDrIcWAF8aZ5ikKQFZfcPSTrAVdVdSW4GvgLsBr7KoGvGZ4AbknyolV3TdrkG+ESSzcAOBiN+UFX3JbmJQUK+G7iwqp6b12AkaYGYVEuSqKpLgEv2KH6IvYzeUVU/AN49xXEuBS6d8wZK0iJn9w9JkiSpo2mT6iSvTfK1oZ/vJ3l/kiOSbEryYPt9eKufJFe1GbW+nuSEoWOtbfUfTLJ26leVJEmSRse0SXVVfauq3lRVbwL+IfAM8GngIuD2qloB3N7WAU5n8HDKCgZjkF4NkOQIBl8tnsTg68RLJhNxSZIkaZTNtvvHKcBfVdUj/PiMWnvOtHVdDdzJYEimo4HTgE1VtaOqdgKb2M/joEqSJEnzYbZJ9dnAJ9vyWFVtb8uPAWNt+UczbTWTM2pNVS5JkiSNtBmP/pHkEODngYv33FZVlaTmokFdp67dX/o8NWffY1u/cvoRvUYt/r6fs77GJknqr9kMqXc68JWqerytP57k6Kra3rp3PNHKp5pRaxswvkf5xJ4v0nXq2v2lz1Nz9j22y+94etp6ozadcd/PWV9jkyT112y6f/wCz3f9gB+fUWvPmbbObaOAnAw81bqJfA44Ncnh7QHFU1uZJEmSNNJmdKc6yaHAzwH/21DxZcBNSS4AHgHOauW3AWcAmxmMFHI+QFXtSPJB4O5W7wNVtaNzBJIkSdICm1FSXVVPA0fuUfY9BqOB7Fm3gAunOM61wLWzb6YkSZK0eDmjoiRJktSRSbUkSZLUkUm1JEmS1JFJtSRJktSRSbUkSZLUkUm1JEmS1JFJtSRJktSRSbUkSZLUkUm1JEmS1JFJtSRJktSRSbUkSZLUkUm1JEmS1JFJtSRJktSRSbUkSZLUkUm1JEmS1JFJtSRJktTRjJLqJEuS3Jzkm0keSPKWJEck2ZTkwfb78FY3Sa5KsjnJ15OcMHScta3+g0nW7q+gJEmSpPk00zvVVwKfrarXAW8EHgAuAm6vqhXA7W0d4HRgRftZB1wNkOQI4BLgJOBE4JLJRFySJEkaZdMm1UkOA34WuAagqv62qp4E1gAbW7WNwJlteQ1wXQ3cCSxJcjRwGrCpqnZU1U5gE7B6TqORJEmSFsDBM6izHPgO8IdJ3gjcA7wPGKuq7a3OY8BYW14KPDq0/9ZWNlX5j0myjsEdbsbGxpiYmJhpLPvVrl27Fk1b5lrfY1u/8rlp641a/H0/Z32NTZLUXzNJqg8GTgDeW1V3JbmS57t6AFBVlaTmokFVtQHYALBq1aoaHx+fi8N2NjExwWJpy1zre2yX3/H0tPW2nDO+/xszh/p+zvoamySpv2bSp3orsLWq7mrrNzNIsh9v3Tpov59o27cBxw7tf0wrm6pckiRJGmnTJtVV9RjwaJLXtqJTgPuBW4HJETzWAre05VuBc9soICcDT7VuIp8DTk1yeHtA8dRWJkmSJI20mXT/AHgvcH2SQ4CHgPMZJOQ3JbkAeAQ4q9W9DTgD2Aw80+pSVTuSfBC4u9X7QFXtmJMoJEmSpAU0o6S6qr4GrNrLplP2UreAC6c4zrXAtbNpoCRJkrTYOaOiJEmS1JFJtSRJktSRSbUkiSRLktyc5JtJHkjyliRHJNmU5MH2+/BWN0muSrI5ydeTnDB0nLWt/oNJ1k79ipLULybVkiSAK4HPVtXrgDcCDzCYk+D2qloB3M7zcxScDqxoP+uAqwGSHAFcApwEnAhcMpmIS1LfmVRL0gEuyWHAzwLXAFTV31bVk8AaYGOrthE4sy2vAa6rgTuBJW2+gtOATVW1o6p2ApuA1fMYiiQtmJkOqSdJ6q/lwHeAP0zyRuAe4H3AWJtnAOAxYKwtLwUeHdp/ayubqvwnJFnH4C43Y2Njs56afuxlsH7l7hesM6rT3e/atWtk2z4TfY6vz7FB/+PryqRaknQwg5ly31tVdyW5kue7egCD4VKT1Fy9YFVtADYArFq1qmY7Nf1Hr7+Fy+994Y+wLefM7piLxcTEBLP99xglfY6vz7FB/+Pryu4fkqStwNaququt38wgyX68deug/X6ibd8GHDu0/zGtbKpySeo9k2pJOsBV1WPAo0le24pOAe4HbgUmR/BYC9zSlm8Fzm2jgJwMPNW6iXwOODXJ4e0BxVNbmST1nt0/JEkA7wWuT3II8BBwPoMbLzcluQB4BDir1b0NOAPYDDzT6lJVO5J8ELi71ftAVe2YvxAkaeGYVEuSqKqvAav2sumUvdQt4MIpjnMtcO3ctk6SFj+7f0iSJEkdmVRLkiRJHZlUS5IkSR2ZVEuSJEkdmVRLkiRJHc0oqU6yJcm9Sb6W5Mut7Igkm5I82H4f3sqT5Kokm5N8PckJQ8dZ2+o/mGTtVK8nSZIkjZLZ3Kn+J1X1pqqaHHLpIuD2qloB3M7zU9qeDqxoP+uAq2GQhAOXACcBJwKXTCbikiRJ0ijr0v1jDbCxLW8Ezhwqv64G7gSWtOltTwM2VdWOqtoJbAJWd3h9SZIkaVGY6eQvBXw+SQH/oao2AGNtWlqAx4CxtrwUeHRo362tbKryH5NkHYM73IyNjTExMTHDJu5fu3btWjRtmWt9j239yuemrTdq8ff9nPU1NklSf800qf7HVbUtyd8BNiX55vDGqqqWcHfWEvYNAKtWrarx8fG5OGxnExMTLJa2zLW+x3b5HU9PW2/LOeP7vzFzqO/nrK+xSZL6a0bdP6pqW/v9BPBpBn2iH2/dOmi/n2jVtwHHDu1+TCubqlySJEkaadMm1UkOTfLKyWXgVOAbwK3A5Agea4Fb2vKtwLltFJCTgadaN5HPAacmObw9oHhqK5MkSZJG2ky6f4wBn04yWf8/VdVnk9wN3JTkAuAR4KxW/zbgDGAz8AxwPkBV7UjyQeDuVu8DVbVjziKRJEmSFsi0SXVVPQS8cS/l3wNO2Ut5ARdOcaxrgWtn30xJkiRp8XJGRUmSJKkjk2pJkiSpI5NqSZIkqSOTakmSJKkjk2pJkiSpI5NqSZIkqSOTakmSJKkjk2pJkiSpI5NqSZIkqSOTakmSJKkjk2pJkiSpI5NqSZIkqSOTakmSJKkjk2pJkiSpI5NqSZIkqaMZJ9VJDkry1SR/1taXJ7kryeYkNyY5pJW/pK1vbtuXDR3j4lb+rSSnzXUwkiRJ0kKYzZ3q9wEPDK1/GLiiqo4DdgIXtPILgJ2t/IpWjyTHA2cDrwdWAx9LclC35kuSJEkLb0ZJdZJjgHcAf9DWA7wNuLlV2Qic2ZbXtHXa9lNa/TXADVX1bFU9DGwGTpyLICRJkqSFdPAM6/0u8OvAK9v6kcCTVbW7rW8FlrblpcCjAFW1O8lTrf5S4M6hYw7v8yNJ1gHrAMbGxpiYmJhpLPvVrl27Fk1b5lrfY1u/8rlp641a/H0/Z32NTZLUX9Mm1UneCTxRVfckGd/fDaqqDcAGgFWrVtX4+H5/yRmZmJhgsbRlrvU9tsvveHraelvOGd//jZlDfT9nfY1NktRfM7lT/Vbg55OcAbwUeBVwJbAkycHtbvUxwLZWfxtwLLA1ycHAYcD3hsonDe8jSZIkjaxp+1RX1cVVdUxVLWPwoOEXquoc4IvAu1q1tcAtbfnWtk7b/oWqqlZ+dhsdZDmwAvjSnEUiSZIkLZAu41T/BvCrSTYz6DN9TSu/Bjiylf8qcBFAVd0H3ATcD3wWuLCqpu/sKkmaFw6dKkn7bqYPKgJQVRPARFt+iL2M3lFVPwDePcX+lwKXzraRkqR5MTl06qva+uTQqTck+fcMhky9mqGhU5Oc3er98z2GTn0N8J+T/H1voEg6EDijoiTJoVMlqaNZ3amWJPXWvA2dCt2HTx17GaxfufsF64zq0Ix9H1ayz/H1OTbof3xdmVRL0gFuvodOhe7Dp370+lu4/N4X/ggbtaEyJ/V9WMk+x9fn2KD/8XVlUi1JcuhUSerIPtWSdIBz6FRJ6s471ZKkqfwGcEOSDwFf5ceHTv1EGzp1B4NEnKq6L8nk0Km7cehUSQcQk2pJ0o84dKok7Ru7f0iSJEkdmVRLkiRJHZlUS5IkSR2ZVEuSJEkdmVRLkiRJHTn6hySpl5Zd9Jlp62y57B3z0BJJBwLvVEuSJEkdmVRLkiRJHZlUS5IkSR1Nm1QneWmSLyX5yyT3JfntVr48yV1JNie5MckhrfwlbX1z275s6FgXt/JvJTltfwUlSZIkzaeZ3Kl+FnhbVb0ReBOwOsnJwIeBK6rqOGAncEGrfwGws5Vf0eqR5HjgbOD1wGrgY0kOmstgJEmSpIUwbVJdA7va6ovbTwFvA25u5RuBM9vymrZO235KkrTyG6rq2ap6GNgMnDgnUUiSJEkLaEZD6rU7yvcAxwG/D/wV8GRV7W5VtgJL2/JS4FGAqtqd5CngyFZ+59Bhh/cZfq11wDqAsbExJiYmZhfRfrJr165F05a51vfY1q98btp6oxZ/389ZX2OTJPXXjJLqqnoOeFOSJcCngdftrwZV1QZgA8CqVatqfHx8f73UrExMTLBY2jLX+h7b5Xc8PW29LeeM7//GzKG+n7O+xiZJ6q9Zjf5RVU8CXwTeAixJMpmUHwNsa8vbgGMB2vbDgO8Nl+9lH0mSJGlkzWT0j59qd6hJ8jLg54AHGCTX72rV1gK3tOVb2zpt+xeqqlr52W10kOXACuBLcxWIJEmStFBm0v3jaGBj61f9IuCmqvqzJPcDNyT5EPBV4JpW/xrgE0k2AzsYjPhBVd2X5CbgfmA3cGHrViJJkiSNtGmT6qr6OvDmvZQ/xF5G76iqHwDvnuJYlwKXzr6ZkiRJ0uLljIqSJElSRybVkiRJUkcm1ZIkSVJHJtWSJElSRybVkiRJUkcm1ZIkSVJHM5qmXOq7ZRd9Zto6Wy57xzy0RJIkjSLvVEuSJEkdmVRLkiRJHZlUS5IkSR2ZVEuSJEkdmVRLkiRJHZlUS5IkSR2ZVEuSJEkdmVRLkiRJHU2bVCc5NskXk9yf5L4k72vlRyTZlOTB9vvwVp4kVyXZnOTrSU4YOtbaVv/BJGv3X1iSJEnS/JnJnerdwPqqOh44GbgwyfHARcDtVbUCuL2tA5wOrGg/64CrYZCEA5cAJwEnApdMJuKSJEnSKJs2qa6q7VX1lbb8N8ADwFJgDbCxVdsInNmW1wDX1cCdwJIkRwOnAZuqakdV7QQ2AavnNBpJkiRpAcyqT3WSZcCbgbuAsara3jY9Boy15aXAo0O7bW1lU5VLkiRJI+3gmVZM8grgT4D3V9X3k/xoW1VVkpqLBiVZx6DbCGNjY0xMTMzFYTvbtWvXomnLXOt7bOtXPjcnx1pM/0Z9P2d9jW2xSnIscB2DmyMFbKiqK1u3vRuBZcAW4Kyq2pnBB8CVwBnAM8B5k99otudl/k079IeqaiOSdACYUVKd5MUMEurrq+pTrfjxJEdX1fbWveOJVr4NOHZo92Na2TZgfI/yiT1fq6o2ABsAVq1aVePj43tWWRATExMslrbMtb7HdvkdT8/JsbacMz4nx5kLfT9nfY1tEZt8duYrSV4J3JNkE3Aeg2dnLktyEYNnZ36DH3925iQGz86cNPTszCoGyfk9SW5tXf4kqddmMvpHgGuAB6rq3w1tuhWYHMFjLXDLUPm5bRSQk4GnWjeRzwGnJjm8PaB4aiuTJC0gn52RpO5mcqf6rcC/BO5N8rVW9pvAZcBNSS4AHgHOattuY/CV4GYGXwueD1BVO5J8ELi71ftAVe2YkygkSXNivp6d6drVb+xlsH7l7lntszeLsatR37tA9Tm+PscG/Y+vq2mT6qq6A8gUm0/ZS/0CLpziWNcC186mgZKk+TFfz86043Xq6vfR62/h8ntn/FjQlBZTt65Jfe8C1ef4+hwb9D++rpxRUZL0gs/OtO0zfXZmb+WS1Hsm1ZJ0gPPZGUnqrvt3Z5KkUeezM5LUkUm1JB3gfHZGkrqz+4ckSZLUkUm1JEmS1JFJtSRJktSRSbUkSZLUkUm1JEmS1JGjf0hzZNlFn5m2zpbL3jEPLZEkSfPNO9WSJElSRybVkiRJUkcm1ZIkSVJHJtWSJElSRybVkiRJUkcm1ZIkSVJH0ybVSa5N8kSSbwyVHZFkU5IH2+/DW3mSXJVkc5KvJzlhaJ+1rf6DSdbun3AkSZKk+TeTO9UfB1bvUXYRcHtVrQBub+sApwMr2s864GoYJOHAJcBJwInAJZOJuCRJkjTqpk2qq+ovgB17FK8BNrbljcCZQ+XX1cCdwJIkRwOnAZuqakdV7QQ28ZOJuiRJkjSS9nVGxbGq2t6WHwPG2vJS4NGheltb2VTlPyHJOgZ3uRkbG2NiYmIfmzi3du3atWjaMtf6Htv6lc/NybGm+zdav3J352PMVN/PWV9j0+Iz3UyozoIqaaY6T1NeVZWk5qIx7XgbgA0Aq1atqvHx8bk6dCcTExMslrbMtb7HdvkdT8/JsbacM/6C28+byTTl0xxjpvp+zvoamySpv/Z19I/HW7cO2u8nWvk24Nihese0sqnKJUmSpJG3r0n1rcDkCB5rgVuGys9to4CcDDzVuol8Djg1yeHtAcVTW5kkSZI08qbt/pHkk8A4cFSSrQxG8bgMuCnJBcAjwFmt+m3AGcBm4BngfICq2pHkg8Ddrd4HqmrPhx+lRW26vpeSJOnANW1SXVW/MMWmU/ZSt4ALpzjOtcC1s2qdJEmSNAKcUVGSJEnqyKRakiRJ6sikWpIkSerIpFqSJEnqqPPkL5IWJ2eKkyRp/ninWpIkSerIpFqSJEnqyO4fkiRNYSaTPtmVShJ4p1qSJEnqzKRakiRJ6sikWpIkSerIpFqSJEnqyKRakiRJ6sikWpIkSerIpFqSJEnqyHGqJfWGYwpLkhbKvCfVSVYDVwIHAX9QVZfNdxvUH9MlUetX7mYx/d9xrpK+e7c9xXkzONZ8MJHVng609/mZXAMz4XUijbZ5zTaSHAT8PvBzwFbg7iS3VtX989kOaTGbyQf0+pXz0BDmLlnQgcP3eUkHqvm+hXcisLmqHgJIcgOwBvDN9gBjsqY9Tf5NrF+5e8q78N7JGwm+z++jmVwDMzHddeK3S9L+kaqavxdL3gWsrqpfauv/Ejipqt4zVGcdsK6tvhb41rw18IUdBXx3oRuxnxjb6OlrXLA4Y/vpqvqphW7EKJjJ+3wr7/pevxj/TuZKn2ODfsfX59ig//G9tqpeua87L57Opk1VbQA2LHQ79pTky1W1aqHbsT8Y2+jpa1zQ79j0vK7v9X3+O+lzbNDv+PocGxwY8XXZf76H1NsGHDu0fkwrkyT1g+/zkg5I851U3w2sSLI8ySHA2cCt89wGSdL+4/u8pAPSvHb/qKrdSd4DfI7BUEvXVtV989mGDhZdl7qlnqAAAAVLSURBVJQ5ZGyjp69xQb9j6715fJ/v899Jn2ODfsfX59jA+F7QvD6oKEmSJPWR05RLkiRJHZlUS5IkSR2ZVM9QkvVJKslRbT1JrkqyOcnXk5yw0G2crST/Nsk3W/s/nWTJ0LaLW2zfSnLaQrZzXyRZ3dq+OclFC92eLpIcm+SLSe5Pcl+S97XyI5JsSvJg+334Qrd1XyQ5KMlXk/xZW1+e5K527m5sD7tJQL+ubej/9Q39vsaTLElyc/ssfSDJW/py7pL8Svub/EaSTyZ56SifuyTXJnkiyTeGyvZ6rvY1xzOpnoEkxwKnAt8eKj4dWNF+1gFXL0DTutoEvKGq/gHw/wEXAyQ5nsET+68HVgMfy2Dq4ZGQ56dJPh04HviFFtOo2g2sr6rjgZOBC1s8FwG3V9UK4Pa2PoreBzwwtP5h4IqqOg7YCVywIK3SotPDaxv6f31Dv6/xK4HPVtXrgDcyiHPkz12SpcAvA6uq6g0MHjo+m9E+dx9nkNMMm+pc7VOOZ1I9M1cAvw4MP9W5BriuBu4EliQ5ekFat4+q6vNVtbut3slgPFkYxHZDVT1bVQ8DmxlMPTwqfjRNclX9LTA5TfJIqqrtVfWVtvw3DN60lzKIaWOrthE4c2FauO+SHAO8A/iDth7gbcDNrcpIxqX9plfXNvT7+oZ+X+NJDgN+FrgGoKr+tqqepCfnjsEIcS9LcjDwcmA7I3zuquovgB17FE91rvYpxzOpnkaSNcC2qvrLPTYtBR4dWt/aykbV/wr8eVse9dhGvf1TSrIMeDNwFzBWVdvbpseAsQVqVhe/y+A/rP+jrR8JPDn0n73enDvNid5e29DL6xv6fY0vB74D/GHr3vIHSQ6lB+euqrYBH2HwDf124CngHvpz7iZNda726b3GpBpI8p9bn6E9f9YAvwn8nwvdxn01TWyTdX6LwVeQ1y9cSzWdJK8A/gR4f1V9f3hbDcbGHKnxMZO8E3iiqu5Z6LZIC61v1zccENf4wcAJwNVV9Wbgafbo6jHC5+5wBndrlwOvAQ7lJ7tO9MpcnKt5nfxlsaqqt++tPMlKBn9Qfzn4xopjgK8kOZERmYp3qtgmJTkPeCdwSj0/aPlIxPYCRr39PyHJixl84F5fVZ9qxY8nObqqtrevpZ5YuBbuk7cCP5/kDOClwKsY9E9ckuTgdjdk5M+d5lTvrm3o7fUN/b/GtwJbq+qutn4zg6S6D+fu7cDDVfUdgCSfYnA++3LuJk11rvbpvcY71S+gqu6tqr9TVcuqahmDC+iEqnqMwbS757YnRE8Gnhr6CmEkJFnN4Gu5n6+qZ4Y23QqcneQlSZYz6Kj/pYVo4z7q1TTJrQ/iNcADVfXvhjbdCqxty2uBW+a7bV1U1cVVdUy7ts4GvlBV5wBfBN7Vqo1cXNqvenVtQ3+vb+j/Nd5ygUeTvLYVnQLcTw/OHYNuHycneXn7G52MrRfnbshU52qfcjxnVJyFJFsYPAn73fZH9nsMvg55Bji/qr68kO2brSSbgZcA32tFd1bVv2rbfotBP+vdDL6O/PO9H2VxandGfpfnp0m+dIGbtM+S/GPgvwD38ny/xN9k0O/yJuDvAo8AZ1XVng9hjIQk48C/rqp3JvkZBg+gHQF8FfjFqnp2IdunxaNP1zYcGNc39PcaT/ImBg9hHgI8BJzP4IblyJ+7JL8N/HMGecBXgV9i0K94JM9dkk8C48BRwOPAJcCfspdzta85nkm1JEmS1JHdPyRJkqSOTKolSZKkjkyqJUmSpI5MqiVJkqSOTKolSZKkjkyqJUmSpI5MqiVJkqSO/n9OJWhO/k3EZwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "df[(df['Quantity']>-50) & \n", - " (df['Quantity']<50) & \n", - " (df['UnitPrice']>0) & \n", - " (df['UnitPrice']<100)][['Quantity', 'UnitPrice']].hist(figsize=[12,4], bins=30)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "df[(df['Quantity']>-50) & \n", - " (df['Quantity']<50) & \n", - " (df['UnitPrice']>0) & \n", - " (df['UnitPrice']<100)][['Quantity', 'UnitPrice']].hist(figsize=[12,4], bins=30, log=True)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountryCustomerID...StockCodeUnitPrice
1228United Kingdom15485.0...220862.55
1237Norway12433.0...224441.06
1286Norway12433.0...840501.25
1293Norway12433.0...221970.85
1333United Kingdom18144.0...848791.69
..................
14784United Kingdom15061.0...2242310.95
14785United Kingdom15061.0...220751.45
14788United Kingdom15061.0...170380.07
14974United Kingdom14739.0...217040.72
14980United Kingdom14739.0...221781.06
\n", - "
\n", - "

258 rows × 8 columns

" - ], - "text/plain": [ - " Country CustomerID ... StockCode UnitPrice\n", - "1228 United Kingdom 15485.0 ... 22086 2.55\n", - "1237 Norway 12433.0 ... 22444 1.06\n", - "1286 Norway 12433.0 ... 84050 1.25\n", - "1293 Norway 12433.0 ... 22197 0.85\n", - "1333 United Kingdom 18144.0 ... 84879 1.69\n", - "... ... ... ... ... ...\n", - "14784 United Kingdom 15061.0 ... 22423 10.95\n", - "14785 United Kingdom 15061.0 ... 22075 1.45\n", - "14788 United Kingdom 15061.0 ... 17038 0.07\n", - "14974 United Kingdom 14739.0 ... 21704 0.72\n", - "14980 United Kingdom 14739.0 ... 22178 1.06\n", - "\n", - "[258 rows x 8 columns]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.query('Quantity>50 & UnitPrice<100')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Arithmetic Operations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Numeric values" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1000 1\n", - "1001 1\n", - "1002 1\n", - "1003 1\n", - "1004 12\n", - "Name: Quantity, dtype: int64" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['Quantity'].head()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1000 1.25\n", - "1001 1.25\n", - "1002 1.25\n", - "1003 1.25\n", - "1004 0.29\n", - "Name: UnitPrice, dtype: float64" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['UnitPrice'].head()" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "product = df['Quantity'] * df['UnitPrice']" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1000 1.25\n", - "1001 1.25\n", - "1002 1.25\n", - "1003 1.25\n", - "1004 3.48\n", - "dtype: float64" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "product.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "String concatenation" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1000 United Kingdom21123\n", - "1001 United Kingdom21124\n", - "1002 United Kingdom21122\n", - "1003 United Kingdom84378\n", - "1004 United Kingdom21985\n", - " ... \n", - "14995 United Kingdom72349B\n", - "14996 United Kingdom72741\n", - "14997 United Kingdom22762\n", - "14998 United Kingdom21773\n", - "14999 United Kingdom22149\n", - "Length: 15000, dtype: object" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['Country'] + df['StockCode']" - ] - } - ], - "metadata": { - "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.9" - }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "metadata": { - "collapsed": false - }, - "source": [] - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/source/conf.py b/docs/sphinx/conf.py similarity index 100% rename from docs/source/conf.py rename to docs/sphinx/conf.py diff --git a/docs/source/development/contributing.rst b/docs/sphinx/development/contributing.rst similarity index 100% rename from docs/source/development/contributing.rst rename to docs/sphinx/development/contributing.rst diff --git a/docs/source/development/implementation.rst b/docs/sphinx/development/implementation.rst similarity index 100% rename from docs/source/development/implementation.rst rename to docs/sphinx/development/implementation.rst diff --git a/docs/source/development/index.rst b/docs/sphinx/development/index.rst similarity index 100% rename from docs/source/development/index.rst rename to docs/sphinx/development/index.rst diff --git a/docs/source/examples/data/online-retail.csv.gz b/docs/sphinx/examples/data/online-retail.csv.gz similarity index 100% rename from docs/source/examples/data/online-retail.csv.gz rename to docs/sphinx/examples/data/online-retail.csv.gz diff --git a/docs/source/examples/demo_notebook.ipynb b/docs/sphinx/examples/demo_notebook.ipynb similarity index 56% rename from docs/source/examples/demo_notebook.ipynb rename to docs/sphinx/examples/demo_notebook.ipynb index 624cbaf..7ffabf8 100644 --- a/docs/source/examples/demo_notebook.ipynb +++ b/docs/sphinx/examples/demo_notebook.ipynb @@ -11,6 +11,12 @@ "cell_type": "code", "execution_count": 1, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:17.434617Z", + "iopub.status.busy": "2020-10-27T16:17:17.432684Z", + "iopub.status.idle": "2020-10-27T16:17:18.241160Z", + "shell.execute_reply": "2020-10-27T16:17:18.240727Z" + }, "pycharm": { "is_executing": false } @@ -46,6 +52,12 @@ "cell_type": "code", "execution_count": 2, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:18.244126Z", + "iopub.status.busy": "2020-10-27T16:17:18.243768Z", + "iopub.status.idle": "2020-10-27T16:17:18.264005Z", + "shell.execute_reply": "2020-10-27T16:17:18.264318Z" + }, "pycharm": { "is_executing": false } @@ -59,6 +71,12 @@ "cell_type": "code", "execution_count": 3, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:18.268054Z", + "iopub.status.busy": "2020-10-27T16:17:18.267667Z", + "iopub.status.idle": "2020-10-27T16:17:18.270335Z", + "shell.execute_reply": "2020-10-27T16:17:18.270020Z" + }, "pycharm": { "is_executing": false } @@ -70,7 +88,7 @@ "eland.dataframe.DataFrame" ] }, - "execution_count": 3, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -90,6 +108,12 @@ "cell_type": "code", "execution_count": 4, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:18.272997Z", + "iopub.status.busy": "2020-10-27T16:17:18.272590Z", + "iopub.status.idle": "2020-10-27T16:17:20.373613Z", + "shell.execute_reply": "2020-10-27T16:17:20.373896Z" + }, "pycharm": { "is_executing": false } @@ -103,6 +127,12 @@ "cell_type": "code", "execution_count": 5, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.376419Z", + "iopub.status.busy": "2020-10-27T16:17:20.376072Z", + "iopub.status.idle": "2020-10-27T16:17:20.378145Z", + "shell.execute_reply": "2020-10-27T16:17:20.378451Z" + }, "pycharm": { "is_executing": false } @@ -114,7 +144,7 @@ "pandas.core.frame.DataFrame" ] }, - "execution_count": 5, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -141,6 +171,12 @@ "cell_type": "code", "execution_count": 6, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.381831Z", + "iopub.status.busy": "2020-10-27T16:17:20.381460Z", + "iopub.status.idle": "2020-10-27T16:17:20.383919Z", + "shell.execute_reply": "2020-10-27T16:17:20.383535Z" + }, "pycharm": { "is_executing": false } @@ -158,7 +194,7 @@ " dtype='object')" ] }, - "execution_count": 6, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -171,6 +207,12 @@ "cell_type": "code", "execution_count": 7, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.386709Z", + "iopub.status.busy": "2020-10-27T16:17:20.386345Z", + "iopub.status.idle": "2020-10-27T16:17:20.388311Z", + "shell.execute_reply": "2020-10-27T16:17:20.388603Z" + }, "pycharm": { "is_executing": false } @@ -188,7 +230,7 @@ " dtype='object')" ] }, - "execution_count": 7, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -208,6 +250,12 @@ "cell_type": "code", "execution_count": 8, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.392262Z", + "iopub.status.busy": "2020-10-27T16:17:20.391894Z", + "iopub.status.idle": "2020-10-27T16:17:20.394517Z", + "shell.execute_reply": "2020-10-27T16:17:20.394125Z" + }, "pycharm": { "is_executing": false } @@ -230,7 +278,7 @@ "Length: 27, dtype: object" ] }, - "execution_count": 8, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -243,6 +291,12 @@ "cell_type": "code", "execution_count": 9, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.398028Z", + "iopub.status.busy": "2020-10-27T16:17:20.397678Z", + "iopub.status.idle": "2020-10-27T16:17:20.400104Z", + "shell.execute_reply": "2020-10-27T16:17:20.399770Z" + }, "pycharm": { "is_executing": false } @@ -265,7 +319,7 @@ "Length: 27, dtype: object" ] }, - "execution_count": 9, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -285,6 +339,12 @@ "cell_type": "code", "execution_count": 10, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.412252Z", + "iopub.status.busy": "2020-10-27T16:17:20.411891Z", + "iopub.status.idle": "2020-10-27T16:17:20.417965Z", + "shell.execute_reply": "2020-10-27T16:17:20.418282Z" + }, "pycharm": { "is_executing": false } @@ -429,7 +489,7 @@ "[13059 rows x 7 columns]" ] }, - "execution_count": 10, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -442,6 +502,12 @@ "cell_type": "code", "execution_count": 11, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.436700Z", + "iopub.status.busy": "2020-10-27T16:17:20.435626Z", + "iopub.status.idle": "2020-10-27T16:17:20.489145Z", + "shell.execute_reply": "2020-10-27T16:17:20.489442Z" + }, "pycharm": { "is_executing": false } @@ -586,7 +652,7 @@ "[13059 rows x 7 columns]" ] }, - "execution_count": 11, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -606,6 +672,12 @@ "cell_type": "code", "execution_count": 12, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.491916Z", + "iopub.status.busy": "2020-10-27T16:17:20.491552Z", + "iopub.status.idle": "2020-10-27T16:17:20.494093Z", + "shell.execute_reply": "2020-10-27T16:17:20.493732Z" + }, "pycharm": { "is_executing": false } @@ -617,7 +689,7 @@ "False" ] }, - "execution_count": 12, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -630,6 +702,12 @@ "cell_type": "code", "execution_count": 13, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.497015Z", + "iopub.status.busy": "2020-10-27T16:17:20.496410Z", + "iopub.status.idle": "2020-10-27T16:17:20.499949Z", + "shell.execute_reply": "2020-10-27T16:17:20.499637Z" + }, "pycharm": { "is_executing": false } @@ -641,7 +719,7 @@ "False" ] }, - "execution_count": 13, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -661,6 +739,12 @@ "cell_type": "code", "execution_count": 14, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.502914Z", + "iopub.status.busy": "2020-10-27T16:17:20.502477Z", + "iopub.status.idle": "2020-10-27T16:17:20.504555Z", + "shell.execute_reply": "2020-10-27T16:17:20.504853Z" + }, "pycharm": { "is_executing": false } @@ -672,7 +756,7 @@ "(13059, 27)" ] }, - "execution_count": 14, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -685,6 +769,12 @@ "cell_type": "code", "execution_count": 15, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.507229Z", + "iopub.status.busy": "2020-10-27T16:17:20.506875Z", + "iopub.status.idle": "2020-10-27T16:17:20.510431Z", + "shell.execute_reply": "2020-10-27T16:17:20.510078Z" + }, "pycharm": { "is_executing": false } @@ -696,7 +786,7 @@ "(13059, 27)" ] }, - "execution_count": 15, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -718,6 +808,12 @@ "cell_type": "code", "execution_count": 16, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.514365Z", + "iopub.status.busy": "2020-10-27T16:17:20.513814Z", + "iopub.status.idle": "2020-10-27T16:17:20.516320Z", + "shell.execute_reply": "2020-10-27T16:17:20.516786Z" + }, "pycharm": { "is_executing": false } @@ -732,7 +828,7 @@ " dtype='object', length=13059)" ] }, - "execution_count": 16, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -745,6 +841,12 @@ "cell_type": "code", "execution_count": 17, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.519329Z", + "iopub.status.busy": "2020-10-27T16:17:20.518969Z", + "iopub.status.idle": "2020-10-27T16:17:20.521177Z", + "shell.execute_reply": "2020-10-27T16:17:20.521661Z" + }, "pycharm": { "is_executing": false } @@ -753,10 +855,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 17, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -770,6 +872,12 @@ "cell_type": "code", "execution_count": 18, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.524275Z", + "iopub.status.busy": "2020-10-27T16:17:20.523893Z", + "iopub.status.idle": "2020-10-27T16:17:20.526316Z", + "shell.execute_reply": "2020-10-27T16:17:20.525950Z" + }, "pycharm": { "is_executing": false } @@ -781,7 +889,7 @@ "'_id'" ] }, - "execution_count": 18, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -803,6 +911,12 @@ "cell_type": "code", "execution_count": 19, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.529896Z", + "iopub.status.busy": "2020-10-27T16:17:20.528134Z", + "iopub.status.idle": "2020-10-27T16:17:20.578407Z", + "shell.execute_reply": "2020-10-27T16:17:20.578684Z" + }, "pycharm": { "is_executing": false } @@ -826,7 +940,7 @@ " Timestamp('2018-02-11 14:54:34')]], dtype=object)" ] }, - "execution_count": 19, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -839,6 +953,12 @@ "cell_type": "code", "execution_count": 20, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.581530Z", + "iopub.status.busy": "2020-10-27T16:17:20.581061Z", + "iopub.status.idle": "2020-10-27T16:17:20.583671Z", + "shell.execute_reply": "2020-10-27T16:17:20.583260Z" + }, "pycharm": { "is_executing": false } @@ -877,6 +997,12 @@ "cell_type": "code", "execution_count": 21, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.591290Z", + "iopub.status.busy": "2020-10-27T16:17:20.590913Z", + "iopub.status.idle": "2020-10-27T16:17:20.593347Z", + "shell.execute_reply": "2020-10-27T16:17:20.593042Z" + }, "pycharm": { "is_executing": false } @@ -967,7 +1093,7 @@ "[5 rows x 27 columns]" ] }, - "execution_count": 21, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -980,6 +1106,12 @@ "cell_type": "code", "execution_count": 22, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.596191Z", + "iopub.status.busy": "2020-10-27T16:17:20.595738Z", + "iopub.status.idle": "2020-10-27T16:17:20.646906Z", + "shell.execute_reply": "2020-10-27T16:17:20.646520Z" + }, "pycharm": { "is_executing": false } @@ -1070,7 +1202,7 @@ "[5 rows x 27 columns]" ] }, - "execution_count": 22, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1090,6 +1222,12 @@ "cell_type": "code", "execution_count": 23, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.658283Z", + "iopub.status.busy": "2020-10-27T16:17:20.657896Z", + "iopub.status.idle": "2020-10-27T16:17:20.660175Z", + "shell.execute_reply": "2020-10-27T16:17:20.659800Z" + }, "pycharm": { "is_executing": false } @@ -1180,7 +1318,7 @@ "[5 rows x 27 columns]" ] }, - "execution_count": 23, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1193,6 +1331,12 @@ "cell_type": "code", "execution_count": 24, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.662789Z", + "iopub.status.busy": "2020-10-27T16:17:20.662428Z", + "iopub.status.idle": "2020-10-27T16:17:20.711546Z", + "shell.execute_reply": "2020-10-27T16:17:20.711245Z" + }, "pycharm": { "is_executing": false } @@ -1283,7 +1427,7 @@ "[5 rows x 27 columns]" ] }, - "execution_count": 24, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1303,6 +1447,12 @@ "cell_type": "code", "execution_count": 25, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.714619Z", + "iopub.status.busy": "2020-10-27T16:17:20.714263Z", + "iopub.status.idle": "2020-10-27T16:17:20.716268Z", + "shell.execute_reply": "2020-10-27T16:17:20.716729Z" + }, "pycharm": { "is_executing": false } @@ -1320,7 +1470,7 @@ " dtype='object')" ] }, - "execution_count": 25, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1333,6 +1483,12 @@ "cell_type": "code", "execution_count": 26, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.719676Z", + "iopub.status.busy": "2020-10-27T16:17:20.719288Z", + "iopub.status.idle": "2020-10-27T16:17:20.722143Z", + "shell.execute_reply": "2020-10-27T16:17:20.721818Z" + }, "pycharm": { "is_executing": false } @@ -1350,7 +1506,7 @@ " dtype='object')" ] }, - "execution_count": 26, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1370,6 +1526,12 @@ "cell_type": "code", "execution_count": 27, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.728157Z", + "iopub.status.busy": "2020-10-27T16:17:20.727763Z", + "iopub.status.idle": "2020-10-27T16:17:20.730107Z", + "shell.execute_reply": "2020-10-27T16:17:20.729721Z" + }, "pycharm": { "is_executing": false } @@ -1392,7 +1554,7 @@ "Name: Carrier, Length: 13059, dtype: object" ] }, - "execution_count": 27, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1405,6 +1567,12 @@ "cell_type": "code", "execution_count": 28, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.733529Z", + "iopub.status.busy": "2020-10-27T16:17:20.733182Z", + "iopub.status.idle": "2020-10-27T16:17:20.751169Z", + "shell.execute_reply": "2020-10-27T16:17:20.750645Z" + }, "pycharm": { "is_executing": false } @@ -1427,7 +1595,7 @@ "Name: Carrier, Length: 13059, dtype: object" ] }, - "execution_count": 28, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1440,6 +1608,12 @@ "cell_type": "code", "execution_count": 29, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.758508Z", + "iopub.status.busy": "2020-10-27T16:17:20.758123Z", + "iopub.status.idle": "2020-10-27T16:17:20.760372Z", + "shell.execute_reply": "2020-10-27T16:17:20.760662Z" + }, "pycharm": { "is_executing": false } @@ -1548,7 +1722,7 @@ "[13059 rows x 2 columns]" ] }, - "execution_count": 29, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1568,6 +1742,12 @@ "cell_type": "code", "execution_count": 30, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.763331Z", + "iopub.status.busy": "2020-10-27T16:17:20.762981Z", + "iopub.status.idle": "2020-10-27T16:17:20.764642Z", + "shell.execute_reply": "2020-10-27T16:17:20.764969Z" + }, "pycharm": { "is_executing": false } @@ -1599,6 +1779,12 @@ "cell_type": "code", "execution_count": 31, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.780634Z", + "iopub.status.busy": "2020-10-27T16:17:20.780132Z", + "iopub.status.idle": "2020-10-27T16:17:20.782735Z", + "shell.execute_reply": "2020-10-27T16:17:20.782433Z" + }, "pycharm": { "is_executing": false } @@ -1743,7 +1929,7 @@ "[68 rows x 27 columns]" ] }, - "execution_count": 31, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1765,6 +1951,12 @@ "cell_type": "code", "execution_count": 32, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.806255Z", + "iopub.status.busy": "2020-10-27T16:17:20.805883Z", + "iopub.status.idle": "2020-10-27T16:17:20.918973Z", + "shell.execute_reply": "2020-10-27T16:17:20.919273Z" + }, "pycharm": { "is_executing": false } @@ -1909,7 +2101,7 @@ "[68 rows x 27 columns]" ] }, - "execution_count": 32, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -1929,6 +2121,12 @@ "cell_type": "code", "execution_count": 33, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.929241Z", + "iopub.status.busy": "2020-10-27T16:17:20.928836Z", + "iopub.status.idle": "2020-10-27T16:17:20.934400Z", + "shell.execute_reply": "2020-10-27T16:17:20.934031Z" + }, "pycharm": { "is_executing": false } @@ -2073,7 +2271,7 @@ "[68 rows x 27 columns]" ] }, - "execution_count": 33, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2088,6 +2286,12 @@ "cell_type": "code", "execution_count": 34, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:20.940176Z", + "iopub.status.busy": "2020-10-27T16:17:20.939772Z", + "iopub.status.idle": "2020-10-27T16:17:21.044650Z", + "shell.execute_reply": "2020-10-27T16:17:21.044336Z" + }, "pycharm": { "is_executing": false } @@ -2232,7 +2436,7 @@ "[68 rows x 27 columns]" ] }, - "execution_count": 34, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2261,6 +2465,12 @@ "cell_type": "code", "execution_count": 35, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.048481Z", + "iopub.status.busy": "2020-10-27T16:17:21.048112Z", + "iopub.status.idle": "2020-10-27T16:17:21.055098Z", + "shell.execute_reply": "2020-10-27T16:17:21.054776Z" + }, "pycharm": { "is_executing": false } @@ -2318,7 +2528,7 @@ "std 4.578438e+03 2.663969e+02" ] }, - "execution_count": 35, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2338,6 +2548,12 @@ "cell_type": "code", "execution_count": 36, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.059349Z", + "iopub.status.busy": "2020-10-27T16:17:21.058996Z", + "iopub.status.idle": "2020-10-27T16:17:21.068144Z", + "shell.execute_reply": "2020-10-27T16:17:21.067821Z" + }, "pycharm": { "is_executing": false } @@ -2395,7 +2611,7 @@ "std 4.578614e+03 2.664071e+02" ] }, - "execution_count": 36, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2422,6 +2638,12 @@ "cell_type": "code", "execution_count": 37, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.087789Z", + "iopub.status.busy": "2020-10-27T16:17:21.087425Z", + "iopub.status.idle": "2020-10-27T16:17:21.091718Z", + "shell.execute_reply": "2020-10-27T16:17:21.091351Z" + }, "pycharm": { "is_executing": false } @@ -2444,7 +2666,7 @@ "Length: 27, dtype: int64" ] }, - "execution_count": 37, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2457,6 +2679,12 @@ "cell_type": "code", "execution_count": 38, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.094639Z", + "iopub.status.busy": "2020-10-27T16:17:21.094288Z", + "iopub.status.idle": "2020-10-27T16:17:21.118725Z", + "shell.execute_reply": "2020-10-27T16:17:21.118353Z" + }, "pycharm": { "is_executing": false } @@ -2479,7 +2707,7 @@ "Length: 27, dtype: int64" ] }, - "execution_count": 38, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2499,6 +2727,12 @@ "cell_type": "code", "execution_count": 39, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.121561Z", + "iopub.status.busy": "2020-10-27T16:17:21.121162Z", + "iopub.status.idle": "2020-10-27T16:17:21.141614Z", + "shell.execute_reply": "2020-10-27T16:17:21.141890Z" + }, "pycharm": { "is_executing": false } @@ -2616,7 +2850,7 @@ "[8 rows x 7 columns]" ] }, - "execution_count": 39, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2636,6 +2870,12 @@ "cell_type": "code", "execution_count": 40, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.147256Z", + "iopub.status.busy": "2020-10-27T16:17:21.146823Z", + "iopub.status.idle": "2020-10-27T16:17:21.259198Z", + "shell.execute_reply": "2020-10-27T16:17:21.258827Z" + }, "pycharm": { "is_executing": false } @@ -2704,15 +2944,15 @@ " \n", " \n", " 25%\n", - " 410.011039\n", + " 410.008918\n", " 2470.545974\n", " ...\n", - " 252.282880\n", + " 251.938710\n", " 1.000000\n", " \n", " \n", " 50%\n", - " 640.362667\n", + " 640.387285\n", " 7612.072403\n", " ...\n", " 503.148975\n", @@ -2720,11 +2960,11 @@ " \n", " \n", " 75%\n", - " 842.233478\n", + " 842.213490\n", " 9735.660463\n", " ...\n", " 720.505705\n", - " 4.070833\n", + " 4.000000\n", " \n", " \n", " max\n", @@ -2745,15 +2985,15 @@ "mean 628.253689 7092.142457 ... 511.127842 2.835975\n", "std 266.386661 4578.263193 ... 334.741135 1.939365\n", "min 100.020531 0.000000 ... 0.000000 0.000000\n", - "25% 410.011039 2470.545974 ... 252.282880 1.000000\n", - "50% 640.362667 7612.072403 ... 503.148975 3.000000\n", - "75% 842.233478 9735.660463 ... 720.505705 4.070833\n", + "25% 410.008918 2470.545974 ... 251.938710 1.000000\n", + "50% 640.387285 7612.072403 ... 503.148975 3.000000\n", + "75% 842.213490 9735.660463 ... 720.505705 4.000000\n", "max 1199.729004 19881.482422 ... 1902.901978 6.000000\n", "\n", "[8 rows x 7 columns]" ] }, - "execution_count": 40, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2774,6 +3014,12 @@ "cell_type": "code", "execution_count": 41, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.278982Z", + "iopub.status.busy": "2020-10-27T16:17:21.278615Z", + "iopub.status.idle": "2020-10-27T16:17:21.285374Z", + "shell.execute_reply": "2020-10-27T16:17:21.285002Z" + }, "pycharm": { "is_executing": false } @@ -2828,6 +3074,12 @@ "cell_type": "code", "execution_count": 42, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.288125Z", + "iopub.status.busy": "2020-10-27T16:17:21.287770Z", + "iopub.status.idle": "2020-10-27T16:17:21.354304Z", + "shell.execute_reply": "2020-10-27T16:17:21.353922Z" + }, "pycharm": { "is_executing": false } @@ -2870,7 +3122,7 @@ " 25 dayOfWeek 13059 non-null int64 \n", " 26 timestamp 13059 non-null datetime64[ns]\n", "dtypes: bool(2), datetime64[ns](1), float64(5), int64(2), object(17)\n", - "memory usage: 80.0 bytes\n" + "memory usage: 64.0 bytes\n" ] } ], @@ -2896,6 +3148,12 @@ "cell_type": "code", "execution_count": 43, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.357200Z", + "iopub.status.busy": "2020-10-27T16:17:21.356752Z", + "iopub.status.idle": "2020-10-27T16:17:21.360771Z", + "shell.execute_reply": "2020-10-27T16:17:21.360482Z" + }, "pycharm": { "is_executing": false } @@ -2904,19 +3162,19 @@ { "data": { "text/plain": [ - "AvgTicketPrice 1199.73\n", - "Cancelled True\n", - "DistanceKilometers 19881.5\n", - "DistanceMiles 12353.8\n", - "FlightDelay True\n", - "FlightDelayMin 360\n", - "FlightTimeHour 31.715\n", - "FlightTimeMin 1902.9\n", - "dayOfWeek 6\n", - "dtype: object" + "AvgTicketPrice 1199.729053\n", + "Cancelled 1.000000\n", + "DistanceKilometers 19881.482315\n", + "DistanceMiles 12353.780369\n", + "FlightDelay 1.000000\n", + "FlightDelayMin 360.000000\n", + "FlightTimeHour 31.715034\n", + "FlightTimeMin 1902.902032\n", + "dayOfWeek 6.000000\n", + "dtype: float64" ] }, - "execution_count": 43, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2936,6 +3194,12 @@ "cell_type": "code", "execution_count": 44, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.366961Z", + "iopub.status.busy": "2020-10-27T16:17:21.366569Z", + "iopub.status.idle": "2020-10-27T16:17:21.373194Z", + "shell.execute_reply": "2020-10-27T16:17:21.372786Z" + }, "pycharm": { "is_executing": false } @@ -2944,19 +3208,19 @@ { "data": { "text/plain": [ - "AvgTicketPrice 1199.73\n", - "Cancelled True\n", - "DistanceKilometers 19881.5\n", - "DistanceMiles 12353.8\n", - "FlightDelay True\n", - "FlightDelayMin 360\n", - "FlightTimeHour 31.715\n", - "FlightTimeMin 1902.9\n", - "dayOfWeek 6\n", - "dtype: object" + "AvgTicketPrice 1199.729004\n", + "Cancelled 1.000000\n", + "DistanceKilometers 19881.482422\n", + "DistanceMiles 12353.780273\n", + "FlightDelay 1.000000\n", + "FlightDelayMin 360.000000\n", + "FlightTimeHour 31.715034\n", + "FlightTimeMin 1902.901978\n", + "dayOfWeek 6.000000\n", + "dtype: float64" ] }, - "execution_count": 44, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -2976,6 +3240,12 @@ "cell_type": "code", "execution_count": 45, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.375925Z", + "iopub.status.busy": "2020-10-27T16:17:21.375583Z", + "iopub.status.idle": "2020-10-27T16:17:21.380053Z", + "shell.execute_reply": "2020-10-27T16:17:21.380420Z" + }, "pycharm": { "is_executing": false } @@ -2984,19 +3254,19 @@ { "data": { "text/plain": [ - "AvgTicketPrice 100.021\n", - "Cancelled False\n", - "DistanceKilometers 0\n", - "DistanceMiles 0\n", - "FlightDelay False\n", - "FlightDelayMin 0\n", - "FlightTimeHour 0\n", - "FlightTimeMin 0\n", - "dayOfWeek 0\n", - "dtype: object" + "AvgTicketPrice 100.020528\n", + "Cancelled 0.000000\n", + "DistanceKilometers 0.000000\n", + "DistanceMiles 0.000000\n", + "FlightDelay 0.000000\n", + "FlightDelayMin 0.000000\n", + "FlightTimeHour 0.000000\n", + "FlightTimeMin 0.000000\n", + "dayOfWeek 0.000000\n", + "dtype: float64" ] }, - "execution_count": 45, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3009,6 +3279,12 @@ "cell_type": "code", "execution_count": 46, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.386321Z", + "iopub.status.busy": "2020-10-27T16:17:21.382896Z", + "iopub.status.idle": "2020-10-27T16:17:21.392616Z", + "shell.execute_reply": "2020-10-27T16:17:21.392932Z" + }, "pycharm": { "is_executing": false } @@ -3017,19 +3293,19 @@ { "data": { "text/plain": [ - "AvgTicketPrice 100.021\n", - "Cancelled False\n", - "DistanceKilometers 0\n", - "DistanceMiles 0\n", - "FlightDelay False\n", - "FlightDelayMin 0\n", - "FlightTimeHour 0\n", - "FlightTimeMin 0\n", - "dayOfWeek 0\n", - "dtype: object" + "AvgTicketPrice 100.020531\n", + "Cancelled 0.000000\n", + "DistanceKilometers 0.000000\n", + "DistanceMiles 0.000000\n", + "FlightDelay 0.000000\n", + "FlightDelayMin 0.000000\n", + "FlightTimeHour 0.000000\n", + "FlightTimeMin 0.000000\n", + "dayOfWeek 0.000000\n", + "dtype: float64" ] }, - "execution_count": 46, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3049,6 +3325,12 @@ "cell_type": "code", "execution_count": 47, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.395518Z", + "iopub.status.busy": "2020-10-27T16:17:21.395174Z", + "iopub.status.idle": "2020-10-27T16:17:21.398935Z", + "shell.execute_reply": "2020-10-27T16:17:21.399260Z" + }, "pycharm": { "is_executing": false } @@ -3069,7 +3351,7 @@ "dtype: float64" ] }, - "execution_count": 47, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3082,6 +3364,12 @@ "cell_type": "code", "execution_count": 48, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.405936Z", + "iopub.status.busy": "2020-10-27T16:17:21.405574Z", + "iopub.status.idle": "2020-10-27T16:17:21.420288Z", + "shell.execute_reply": "2020-10-27T16:17:21.420624Z" + }, "pycharm": { "is_executing": false } @@ -3102,7 +3390,7 @@ "dtype: float64" ] }, - "execution_count": 48, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3122,6 +3410,12 @@ "cell_type": "code", "execution_count": 49, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.423557Z", + "iopub.status.busy": "2020-10-27T16:17:21.423200Z", + "iopub.status.idle": "2020-10-27T16:17:21.427201Z", + "shell.execute_reply": "2020-10-27T16:17:21.427495Z" + }, "pycharm": { "is_executing": false } @@ -3142,7 +3436,7 @@ "dtype: float64" ] }, - "execution_count": 49, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3155,6 +3449,12 @@ "cell_type": "code", "execution_count": 50, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.433476Z", + "iopub.status.busy": "2020-10-27T16:17:21.433116Z", + "iopub.status.idle": "2020-10-27T16:17:21.444725Z", + "shell.execute_reply": "2020-10-27T16:17:21.444363Z" + }, "pycharm": { "is_executing": false } @@ -3175,7 +3475,7 @@ "dtype: float64" ] }, - "execution_count": 50, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3195,6 +3495,12 @@ "cell_type": "code", "execution_count": 51, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.450213Z", + "iopub.status.busy": "2020-10-27T16:17:21.449464Z", + "iopub.status.idle": "2020-10-27T16:17:21.456753Z", + "shell.execute_reply": "2020-10-27T16:17:21.456416Z" + }, "pycharm": { "is_executing": false } @@ -3209,7 +3515,7 @@ "dtype: int64" ] }, - "execution_count": 51, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3222,6 +3528,12 @@ "cell_type": "code", "execution_count": 52, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.460469Z", + "iopub.status.busy": "2020-10-27T16:17:21.460109Z", + "iopub.status.idle": "2020-10-27T16:17:21.466324Z", + "shell.execute_reply": "2020-10-27T16:17:21.466621Z" + }, "pycharm": { "is_executing": false } @@ -3236,7 +3548,7 @@ "dtype: int64" ] }, - "execution_count": 52, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3256,6 +3568,12 @@ "cell_type": "code", "execution_count": 53, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.477544Z", + "iopub.status.busy": "2020-10-27T16:17:21.469190Z", + "iopub.status.idle": "2020-10-27T16:17:21.487492Z", + "shell.execute_reply": "2020-10-27T16:17:21.487130Z" + }, "pycharm": { "is_executing": false } @@ -3400,7 +3718,7 @@ "[13059 rows x 20 columns]" ] }, - "execution_count": 53, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3419,6 +3737,12 @@ "cell_type": "code", "execution_count": 54, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.492046Z", + "iopub.status.busy": "2020-10-27T16:17:21.491688Z", + "iopub.status.idle": "2020-10-27T16:17:21.578922Z", + "shell.execute_reply": "2020-10-27T16:17:21.579230Z" + }, "pycharm": { "is_executing": false } @@ -3563,7 +3887,7 @@ "[13059 rows x 20 columns]" ] }, - "execution_count": 54, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -3589,6 +3913,12 @@ "cell_type": "code", "execution_count": 55, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:21.591728Z", + "iopub.status.busy": "2020-10-27T16:17:21.591369Z", + "iopub.status.idle": "2020-10-27T16:17:22.194833Z", + "shell.execute_reply": "2020-10-27T16:17:22.194501Z" + }, "pycharm": { "is_executing": false } @@ -3596,7 +3926,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmIAAAJOCAYAAAAUOGurAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdfZxcZX3//9db7oSAJIjdQoiElngDpty4BfrV6lYUwo0Gv1+1IDUBU6MttNqmasB+vyBIG63ADxDRIJGAgRhvaCJEIWJWa5UAQSSEm2aFYBJDIiQEFhRd/Pz+ONfCYZjZ7M7dmdl5Px+PeezMdW6u68zMZ+dzznXOdRQRmJmZmVnzvazoBpiZmZl1KidiZmZmZgVxImZmZmZWECdiZmZmZgVxImZmZmZWECdiZmZmZgVxItaGJH1J0v8dxny9kv62GW0qqffVkvol7dDsuq04w/1etgNJp0q6Jfc6JB1YZJvMYHTFWZ6k1ZJ60vNzJX2t4CY1jROxOkqJz1ZJu9S4nu+mRKZf0u8l/S73+ksR8ZGIOL9e7S5T/0sSuPRD9HRqwwZJF1VKtCLilxGxe0Q816g2WvNJWivpN5KekvSEpJ9I+oiklwEM93uZ1vP2xrd4yDZMTN/pHdNrSbpM0gOSxkfEgog4puA29khaX2QbrPlGaZz9rKR87/S7tnawLCIOjojeZrexFTgRqxNJE4G/BAJ4Vy3riojjUiKzO7AA+Nzg64j4SM2Nrd4hqU1HA+8HPlQ6w+APm41a74yIPYD9gTnAJ4Grim1SbdIP3JeBHuCtEbGh2BbVh2OxrY22ONtN0htyr98PPFxUY1qNE7H6mQbcBlwNTJe0S9qbef7LJ+lVaU/nj9LrT0jaKOlXkv52uN0fkq6W9Jnc66mS7pb0pKRfSJpSZpl9JN0j6ePp9VFpT+sJST/PHRK+gCyh/EI6+vWF0nVFxAPAfwFvyO3xzJD0S+AHZY427CXpq2k7t0r6z1y7TkxtH9zz+7PhvNlWrIjYFhFLgL8m+76/If+9THu8N6bPdYuk/5L0MknXAq8GvpO+X59I839D0qOStkn6kaSDB+tK671c0k3pKMEKSX+am36wpGWpnk2Szk7lL5M0O8XE45IWSdqrZFN2AL4KdAM9EbEpLXuapB+X23ZJe0q6RtKvJT0i6V8Hj1ak5f5b0sVp2x+S9L9S+TpJmyVNz61rF0mfl/TL1PYvSdpV0hjgu8C+euFo+L5DbVOFWHy5pK+leZ+QdIekrho+emuiURRn1wLTc6+nAdfkZ9AQR/BU4fcqTTstxdlTkh6WdOqI3+iCORGrn2lkR68WAMcCY4FvA6fk5nkf8MOI2KwsWfpn4O3AgWR74yMm6QiyL/THU51vAdaWzHMA8EPgCxHxH5LGAzcBnwH2Av4F+JakV0XEp8iSrDPTEbgzy9R5EFmylj/c/Fbg9WnbS10L7AYcDPwRcHFaz2HAPODDwCvJjkosUY1du9Y8EXE7sJ7s+5A3K5W/CugCzs5mjw8AvyTb4989Ij6X5v8uMIns+3EXWRzlnQx8GhgH9AEXAEjaA/g+8D1gX7JYujUt8w/ASWTfzX2BrcDlJetdALwWeFtEPD7Mzb4M2BP4k7TuacDpuelHAveQfaevAxYCf57a9jdkOzm7p3nnAK8BDk3TxwP/LyKeBo4DfpU7Gv6rYW5TPhanp7ZOSO35CPCbYW6ntYhREGdfA06WtEP6/dgdWDGcbR/q9yrtsFwKHJeOIP4v4O7hrLeVOBGrA0lvJjuEvCgiVgK/IDv0eh3ZF3vQYBlkSdlXI2J1RDwDnFtl9TOAeRGxLCL+EBEb0hGrQQcBy4FzImJuKvsbYGlELE3LLAPuBI7fTl13SdoKfAf4CtmRhEHnRsTTEfGif/KS9iH7QflIRGyNiN9HxA/T5JnAlyNiRUQ8FxHzgWeBo0b8LliRfkX2DzLv98A+wP7pM/+vGOLGthExLyKeiohnyWLhEEl75ma5ISJuj4gBsh+PQ1P5icCjEXFhRPw2rWPwH/xHgE9FxPrcet+jF3fZHQN8IyKeGM6GKjsv8mTgrFTXWuBC4AO52R6OiK+mcyS/TpYEnRcRz0bELcDvgAMliSwG/ikitkTEU8C/8eL/GaWGs035WPw9WQJ2YIqxlRHx5HC21VpOO8fZeuBBsgMP08h2zodre79XfyDrndk1IjZGxOoRrLslOBGrj+nALRHxWHp9XSpbTtY3fqSyc8gOBW5I8+wLrMutI/98JCaQJX6VnApsAL6ZK9sfeG86zPuEpCeAN5MF9FAOj4hxEfGnEfGvEfGH3LRK7Z8AbImIrWWm7Q/MKmnHBLL3xtrHeGBLSdl/kO1R35K6DWZXWjjtJc9JXRtP8sIR3b1zsz2ae/4M2R41DP393x+4Iffduh94juzIwaATgXMkfbDi1r3Y3sBOwCO5skfI3oNBm3LPfwMw2OWZK9ud7CjGbsDKXBu/l8orGc425WPxWuBmYKGyUwM+J2mn7W+mtaB2jjPIem5OI+slGkkiVvH3Kh05/muyZHBj6lZ93QjW3RKciNVI0q5kR7femvreHwX+CTgEeAOwiOyLdwpwY9rrBdgI7Jdb1YQqm7AO+NMhpp8LPAZcpxeuclwHXBsRY3OPMRExJ02vuEc1hErLrAP2kjS2wrQLStqxW0RcX0X9VgBJf072A/Gi86nSHvOsiPgTsotX/lnS0YOTS1bzfmAq2d7ynsDEwdUPownryLoIK007ruT79fJ48cn4PwHeCVwi6f3DqO8xsqMQ++fKXk22szNSj5ElZQfn2rdnZBfEQPmYGs42Pb9cOkry6Yg4iKzb5kSyIxLWRkZBnAF8CzgBeCgifjmMOvPrr/h7FRE3R8Q7yA4kPABcOYJ1twQnYrU7iSz7P4jsiNehZOdn/BfZP7zryDL2U3mhWxKyBO10Sa+XtBtQ7bgwV6X1HJ1Omhxfskfwe+C9wBjgGmUnFX8NeKekY9Ne0suVXSo/mBhuonLQjUhEbCQ7L+GLksZJ2knSW9LkK4GPpCOGkjRG0gnpfARrYZJeIelEsvOfvhYRq0qmnyhpsPttG1mMDB5BLf1+7UHWJf042RGifxtBU24E9pH0MWUnvu8h6cg07UvABZL2T216laSppStIXeX/G5gr6f8MVVnqblyU1rtHWvc/k8XUiKQjylcCF+uFC3jGSxo8z3IT8MqSrqNhbdMgSX8laXLaCXuS7P/BHyrNb61llMXZ08DbgJGObVnx90pSl7KL1cakbeunDb/fTsRqN53sXK9fRsSjgw/gC2TJ10rgabLutu8OLhQR3yU7yXA52aHl29KkZ0dSeWQncZ5OdgL8NrKT8vcvmed3ZD80XWQnx28g2zM6G/g12R7Hx3nh+3AJWR//VkmXjqQ9FXyA7AfgAWAz8LHUrjvJhsD4AtkJnn1kh66tdX1H0lNk35lPARfx4hPVB00iO7m3H/gp8MWIWJ6m/Tvwr6mb4V/IuiweIfte3scLsbBd6QjzO8iOaj0KrAH+Kk2+BFhC1m3zVFrvkRXWs4xsh2m+pHdup9p/IIvph8iOUFxHFlfV+CQp/lN30ffJLh4YvDr5euCh9F7tO5JtSv6Y7LSEJ8m6jH7IyLqFrBijNc7ujIihTqUpt8w6Kv9evYxsR+hXZN22bwX+biTrbwUa4rw+ayJJrwfuBXZJJ0qamZnZKOcjYgWS9O50mHcc8FngO07CzMzMOocTsWJ9mKyr7hdkffttd0jVzMzMqueuSTMzM7OC+IiYmZmZWUHa9qawe++9d0ycOLHh9Tz99NOMGTOm4fW4/tat/4EHHngsIoYaZLMlDRUjRb+vpVqpPW5LZZXas3LlyraMEWivOGkEb2PzVIyTiGjLxxvf+MZohuXLlzelHtffuvUDd0YLfOdH+hgqRop+X0u1UnvclsoqtaddYyTaLE4awdvYPJXixF2TZg2UBh+8XdLPJa2W9OlUfoCkFZL6JH1d0s6pfJf0ui9Nn5hb11mp/MHcoJ9mbc0xYp3OiZhZYz0LvC0iDiG768IUSUeRDVdycUQcSDaY7Yw0/wxgayq/OM2HpIPIbgZ9MDCF7E4FO2DW/hwj1tGciJk1UDoi3Z9e7pQeQXarj8Ebsc8nu1UWZCNIz0/PvwkcnW5fMhVYGBHPRsTDZKOxH9GETTBrKMeIdbq2PVnfrF2kvfKVwIHA5WTjxj0RLwzeu57shr6kv+sAImJA0jbglak8f0uS/DL5umYCMwG6urro7e0t26b+/v6K04rQSu1xWyprVHuaGSOpvraMk0bwNhbPiZhZg0V2o+hDJY0FbgBet51FaqlrLjAXoLu7O3p6esrO19vbS6VpRWil9rgtlTWqPc2MkVRfW8ZJI3gbi+dEzLZr4uybqlpu7ZwT6tyS9hYRT0haDvwFMFbSjmmPfz+yG/GS/k4A1kvaEdgTeDxXPii/zIit2rCN06r4XP2ZWiO1UoyA48Saw4mYWQNJehXw+/QDsyvwDrKTi5cD7wEWAtOBxWmRJen1T9P0H0RESFoCXCfpImBfYBJwe1M3po1Uu/MAcPWU4scb6iSOkeJMnH0TsyYPjDjZdKJZX07EzBprH2B+OgfmZcCiiLhR0n3AQkmfAX4GXJXmvwq4VlIfsIXsKjAiYrWkRcB9wABwRurOMWt3jhHraE7EzBooIu4BDitT/hBlruiKiN8C762wrguAC+rdRrMiOUas0zkR6yDVdNfMmjyAvyZmZmaN4XHEzMzMzAriRMzMzMysIE7EzMzMzAriRMzMzMysIE7EzMzMzAriRMzMzMysIB6XwBrGt0YyMzMbmo+ImZmZmRXER8TaUC330TMzM7PW4SNiZmZmZgXxETEza1k++mu2fY6T9uYjYmZmZmYFcSJmZmZmVhAnYmZmZmYFcSJmZmZmVhAnYmYNJGmCpOWS7pO0WtJHU/m5kjZIujs9js8tc5akPkkPSjo2Vz4llfVJml3E9pjVm2PEOp2vmjRrrAFgVkTcJWkPYKWkZWnaxRHx+fzMkg4CTgYOBvYFvi/pNWny5cA7gPXAHZKWRMR9TdkKs8ZxjFhHqzoRkzQPOBHYHBFvSGXnAh8Cfp1mOzsilqZpZwEzgOeAf4yIm1P5FOASYAfgKxExp9o2tZvhXHI8a/IAp/nS5LYVERuBjen5U5LuB8YPschUYGFEPAs8LKkPOCJN64uIhwAkLUzz+kfG2ppjxDpdLUfErga+AFxTUu49GLMyJE0EDgNWAG8CzpQ0DbiT7IjAVrIfoNtyi63nhR+ldSXlR5apYyYwE6Crq4ve3t6ybenaNUvyR6rS+mrV399fdt3VtLFRbSlCK7UFGt+eZsRIqqct46SSWuKkmm1spe/kcLRaHJWqOhGLiB+loBkO78FYR5O0O/At4GMR8aSkK4DzgUh/LwQ+WGs9ETEXmAvQ3d0dPT09Zee7bMFiLlw18vBfe2r59dWqt7eXcm0t4mjw1VPGlG1LESq9L0VpZHuaFSPQvnFSSS1xMmvywIi3sdnbV6tWi6NSjThHrCF7MDD8vZh6amQmPZy9kGr3yOqliPrz73fRezL9/f01r0PSTmQ/MAsi4tsAEbEpN/1K4Mb0cgMwIbf4fqmMIcrN2ppjxDpZvROxhu3BwPD3YuqpkZn0cPZiqtlbqaci6s/vbRW9J1NrEihJwFXA/RFxUa58n3RuDMC7gXvT8yXAdZIuIuvGnwTcDgiYJOkAsh+Xk4H319Q4sxbgGLFOV9dfWO/BmL3Em4APAKsk3Z3KzgZOkXQo2U7LWuDDABGxWtIisu75AeCMiHgOQNKZwM1kF7bMi4jVzdwQswZxjFhHq2si5j0YsxeLiB+Tfc9LLR1imQuAC8qULx1qObN25BixTlfL8BXXAz3A3pLWA+cAPd6DMTMzMxueWq6aPKVM8VVDzO89GDMzM7Mcj6xfB8MZmNXMzMyslO81aWZmZlYQJ2JmZmZmBXEiZmZmZlYQJ2JmZmZmBXEiZmZmZlYQJ2JmZmZmBXEiZmZmZlYQJ2JmZmZmBXEiZmZmZlYQJ2JmZmZmBXEiZmZmZlYQJ2JmZmZmBXEiZtZAkiZIWi7pPkmrJX00le8laZmkNenvuFQuSZdK6pN0j6TDc+uanuZfI2l6UdtkVk+OEet0OxbdgFYycfZNLymbNXmA08qUmw3TADArIu6StAewUtIy4DTg1oiYI2k2MBv4JHAcMCk9jgSuAI6UtBdwDtANRFrPkojY2vQtMqsvx4h1NB8RM2ugiNgYEXel508B9wPjganA/DTbfOCk9HwqcE1kbgPGStoHOBZYFhFb0g/LMmBKEzfFrCEcI9bpfETMrEkkTQQOA1YAXRGxMU16FOhKz8cD63KLrU9llcpL65gJzATo6uqit7e3bFu6ds2O9o5UpfXVqr+/v+y6q2ljo9pShFZqCzS+Pc2IkVRPW8ZJJbXESTXb2ErfyeFotTgq5UTMrAkk7Q58C/hYRDwp6flpERGSoh71RMRcYC5Ad3d39PT0lJ3vsgWLuXDVyMN/7anl11er3t5eyrW1iNMCrp4ypmxbilDpfSlKI9vTrBhJ62vLOKmkljiZNXlgxNvY7O2rVavFUSl3TZo1mKSdyH5gFkTEt1PxptSdQvq7OZVvACbkFt8vlVUqN2t7jhHrZE7EzBpI2W79VcD9EXFRbtISYPCqrunA4lz5tHRl2FHAttQ9czNwjKRx6eqxY1KZWVtzjFinc9ekWWO9CfgAsErS3ansbGAOsEjSDOAR4H1p2lLgeKAPeAY4HSAitkg6H7gjzXdeRGxpziaYNZRjxDqaEzGzBoqIHwOqMPnoMvMHcEaFdc0D5tWvdWbFc4xYp3PXpJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZmZmZFaSmREzSPEmbJd2bK9tL0jJJa9Lfcalcki6V1CfpHkmH55aZnuZfI2l6ubrMzMzMRptaj4hdDUwpKZsN3BoRk4Bb02uA44BJ6TETuAKyxA04BzgSOAI4ZzB5MzMzMxvNakrEIuJHQOm9vKYC89Pz+cBJufJrInMbMFbSPsCxwLKI2BIRW4FlvDS5MzMzMxt1GnGvya6I2JiePwp0pefjgXW5+danskrlLyFpJtnRNLq6uujt7a1fq4FZkwdeUta1a/nyZunE+vOfa39/f90/55Ho7+8vrG4zMxv9GnrT74gISVHH9c0F5gJ0d3dHT09PvVYNwGmzb3pJ2azJA1y4qrh7o3di/WtP7Xn+eW9vL/X+nEeiyCTQzMxGv0ZcNbkpdTmS/m5O5RuACbn59ktllcrNzMzMRrVGJGJLgMErH6cDi3Pl09LVk0cB21IX5s3AMZLGpZP0j0llZmZmZqNarcNXXA/8FHitpPWSZgBzgHdIWgO8Pb0GWAo8BPQBVwJ/DxARW4DzgTvS47xUZtb2Kgzxcq6kDZLuTo/jc9POSkO8PCjp2Fz5lFTWJ2l2aT1m7coxYp2uppN/IuKUCpOOLjNvAGdUWM88YF4tbTFrUVcDXwCuKSm/OCI+ny+QdBBwMnAwsC/wfUmvSZMvB95BdjHLHZKWRMR9jWy4WZNcjWPEOlhxZ4GbdYCI+JGkicOcfSqwMCKeBR6W1Ec2th5AX0Q8BCBpYZrXPzLW9hwj1umciJkV40xJ04A7gVlpDL3xwG25efJDuZQO8XJkuZUOd4iXaocladRVpJWGKSli6Jaih0zJa6W2QNPb05AYgfaNk0pqiZNqtrGVvpPD0WpxVMqJmFnzXUF2XmSkvxcCH6zHioc7xMtlCxZXNSxJfmiReqo0TEm5IWUa7eopYwodMiWv6OFbSjWxPQ2LEWjfOKmkljipZoiiZm9frVotjko5ETNrsojYNPhc0pXAjenlUEO5eIgX6xiOEeskjRi+wsyGMDjOXvJuYPBqsSXAyZJ2kXQA2X1Zbye7mniSpAMk7Ux2svKSZrbZrJkcI9ZJfETMrIHSEC89wN6S1pPd4L5H0qFk3S5rgQ8DRMRqSYvITjAeAM6IiOfSes4kG19vB2BeRKxu8qaYNYRjxDqdEzGzBqowxMtVQ8x/AXBBmfKlZGPxmY0qjhHrdO6aNDMzMyvIqDwiNrGAK63MzMzMRspHxMzMzMwKMiqPiJmZVWvVhm1Vjcu0ds4JDWiNWeupttfJMVKej4iZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBPHyFtZz8pdGzJg8MeygBXxptZmbtxkfEzMzMzAriRMzMzMysIE7EzMzMzAriRMzMzMysIE7EzMzMzAriRMysgSTNk7RZ0r25sr0kLZO0Jv0dl8ol6VJJfZLukXR4bpnpaf41kqYXsS1mjeI4sU7mRMyssa4GppSUzQZujYhJwK3pNcBxwKT0mAlcAdkPEnAOcCRwBHDO4I+S2ShxNY4T61BOxMwaKCJ+BGwpKZ4KzE/P5wMn5cqvicxtwFhJ+wDHAssiYktEbAWW8dIfLbO25TixTuYBXc2arysiNqbnjwJd6fl4YF1uvvWprFL5S0iaSXaUgK6uLnp7e8s3YNdssNyRqrS+WvX395dddzVtrFUrvTeV3peiNLk9jpNhqiVOqt3GahT1XW61OCrlRMysQBERkqKO65sLzAXo7u6Onp6esvNdtmAxF64aefivPbX8+mrV29tLubYO964K9TRr8kDLvDeV3peiFNUex8nQaomTar/v1Wj2+zKo1eKolLsmzZpvU+pKIf3dnMo3ABNy8+2XyiqVm41mjhPrCE7EzJpvCTB4Rdd0YHGufFq6KuwoYFvqmrkZOEbSuHTy8TGpzGw0c5xYR3DXpFkDSboe6AH2lrSe7KquOcAiSTOAR4D3pdmXAscDfcAzwOkAEbFF0vnAHWm+8yKi9MRms7blOLFO1rBETNJa4CngOWAgIrrT5cVfByYCa4H3RcRWSQIuIQuuZ4DTIuKuRrXNrFki4pQKk44uM28AZ1RYzzxgXh2bZtYyHCfWyRrdNflXEXFoRHSn1yMaF8bMzMxsNGv2OWIjHRfGzMzMbNRq5DliAdySLjn+crpceKTjwmzMlQ177Jd6jonSzDFWXH9t9TdqHCczM7NGaWQi9uaI2CDpj4Blkh7IT6xmXJjhjv1Sz7GHmjnGiuuvrf5GjeNkZmbWKA3rmoyIDenvZuAGsnt/jXRcGDMzM7NRqyGHOiSNAV4WEU+l58cA5/HCuDBzeOm4MGdKWkh2w9ZtuS5MM2sRE6s82rx2zgl1bolZ63Kc2Eg0qs+pC7ghG5WCHYHrIuJ7ku5gBOPCmJmZmY1mDUnEIuIh4JAy5Y8zwnFhzKz9be8IwazJA4XcV9KslVR7JM3am0fWt1Gjln9i7hIwM7Mi+F6TZmZmZgVxImZmZmZWEHdNmpnVga+UMxuaY6Q8HxEzMzMzK4gTMTMzM7OCOBEzMzMzK4gTMbOCSForaZWkuyXdmcr2krRM0pr0d1wql6RLJfVJukfS4cW23qw5HCc22vlkfbNi/VVEPJZ7PRu4NSLmSJqdXn8SOA6YlB5HAlekv9bmhjqBeaiBbkf7CcwlHCcdbLSf5O8jYmatZSowPz2fD5yUK78mMrcBYyXtU0QDzVqA48RGDR8RMytOALdICuDLETEX6Mrd8P5Rsvu2AowH1uWWXZ/KNubKkDQTmAnQ1dVFb29v2Yq7ds2OtrSKVmpPu7Sl0mfbSP39/UXU6zhpoNG8jYOfa0Hf22FzImZWnDdHxAZJfwQsk/RAfmJERPrxGbb0IzUXoLu7O3p6esrOd9mCxVy4qnXCf9bkgZZpT7u0Ze2pPc1tDNkPW6XvVAM5Thqolb7v9TYYIwV9b4fNXZNmBYmIDenvZuAG4Ahg02BXSvq7Oc2+AZiQW3y/VGY2qjlObLQbnWmwWYuTNAZ4WUQ8lZ4fA5wHLAGmA3PS38VpkSXAmZIWkp18vC3XNWMdaLSfwAyOE6vNYIwMddFLOc2OESdiZsXoAm6QBFkcXhcR35N0B7BI0gzgEeB9af6lwPFAH/AMcHrzm2zWdI4TG/WciJkVICIeAg4pU/44cHSZ8gDOaELTzFqG48Q6gc8RMzMzMyuIEzEzMzOzgjgRMzMzMyuIEzEzMzOzgjgRMzMzMyuIEzEzMzOzgjgRMzMzMyuIEzEzMzOzgjgRMzMzMyuIEzEzMzOzgjgRMzMzMyuIEzEzMzOzgjgRMzMzMyvIjkU3wMzMmmfi7JuqWm7tnBPq3BKz1lRtjEB1ceIjYmZmZmYFaZlETNIUSQ9K6pM0u+j2mLUax4jZ9jlOrN20RCImaQfgcuA44CDgFEkHFdsqs9bhGDHbPseJtaOWSMSAI4C+iHgoIn4HLASmFtwms1biGDHbPseJtR1FRNFtQNJ7gCkR8bfp9QeAIyPizJL5ZgIz08vXAg82oXl7A481oR7X37r1j4mIVxXYhkbESNHva6lWao/bUlml9uxfdIxAR8RJI3gbm6dsnLTVVZMRMReY28w6Jd0ZEd3NrNP1t1z9E4uqf6SGGyNFv6+lWqk9bktlrdaearVrnDSCt7F4rdI1uQGYkHu9Xyozs4xjxGz7HCfWdlolEbsDmCTpAEk7AycDSwpuk1krcYyYbZ/jxNpOS3RNRsSApDOBm4EdgHkRsbrgZg1qaleo63f95TQgRlpiu3JaqT1uS2Wt1p4X6YA4aQRvY8Fa4mR9MzMzs07UKl2TZmZmZh3HiZiZmZlZQTo6EZM0QdJySfdJWi3po6n8XEkbJN2dHsfnljkr3TrjQUnH1qENayWtSvXcmcr2krRM0pr0d1wql6RLU/33SDq8xrpfm9vGuyU9Keljjd5+SfMkbZZ0b65sxNssaXqaf42k6TXU/R+SHkjrv0HS2FQ+UdJvcu/Dl3LLvDF9bn2pfarmvSiCmnQLmHp9t+v4Odet7pF+/hXaM+I4q/TZKTs5fUUq/7qyE9UrtaXS/73C3p9W06wYaZQiY69RWi2m6yoiOvYB7AMcnp7vAfwP2W0xzgX+pcz8BwE/B3YBDgB+AexQYxvWAnuXlH0OmJ2ezwY+m54fD3wXEHAUsKKO78UOwKPA/o3efuAtwMKmO/oAACAASURBVOHAvdVuM7AX8FD6Oy49H1dl3ccAO6bnn83VPTE/X8l6bk/tUWrfcUV/n0fwOf8C+BNg5/R5HtSgumr+btf5c65b3SP9/Cu0Z0RxNtRnBywCTk7PvwT83RBtqfR/r7D3p5UezYyRBm5DYbHXwG1qqZiu56Ojj4hFxMaIuCs9fwq4Hxg/xCJTgYUR8WxEPAz0kd1So96mAvPT8/nASbnyayJzGzBW0j51qvNo4BcR8ch22lXz9kfEj4AtZdY9km0+FlgWEVsiYiuwDJhSTd0RcUtEDKSXt5GNPVRRqv8VEXFbZBF8Ta69ra7oW8AU9jnXq+5qPv8K7amkUpyV/ezSnvvbgG+W2bZyban0f6+w96fFFB0jjdKU2GuUVovpeuroRCxP0kTgMGBFKjozHdKcN3i4k+yf1brcYusZOnEbjgBukbRS2W03ALoiYmN6/ijQ1cD6B50MXJ973aztHzTSbW5UWz5Itjc06ABJP5P0Q0l/mWvT+gbU3QyN/AxL1eO7Xc/21qvuen7+I4mzSuWvBJ7I7UwMuz0l//da8f0pQjNjpFFaLfYaZVR8Z52IAZJ2B74FfCwingSuAP4UOBTYCFzYwOrfHBGHA8cBZ0h6S35iys4bOsZIOp/kXcA3UlEzt/8lmrHN5Uj6FDAALEhFG4FXR8RhwD8D10l6RbPb1cYK/25XUmTdOYXGWZn/e89rkffHqteysdco7bxNHZ+ISdqJ7J/Rgoj4NkBEbIqI5yLiD8CVvND9VvfbZ0TEhvR3M3BDqmvTYJdj+ru5UfUnxwF3RcSm1JambX/OSLe5rm2RdBpwInBqCmhS19Dj6flKsvNGXpPqyXdfttNtVJp2C5g6fbfr2d561V2Xz7+KOKtU/jhZ18uOJeUVlfu/R4u9PwVq+9sktWDsNcqo+M52dCKWzq24Crg/Ii7KlefPu3o3MHiVxhLgZEm7SDoAmER2gl+19Y+RtMfgc7KTxu9N9QxezTEdWJyrf1q6IuQoYFvusGwtTiHXLdms7S8x0m2+GThG0rjUpXNMKhsxSVOATwDviohncuWvkrRDev4nZNv7UKr/SUlHpe/QtFx7W11TbgFTx+923T7netVdr8+/ijgr+9mlHYflwHvKbFu5esv+36PF3p8CtfVtklo09hpldHxnowWu8CjqAbyZ7FDmPcDd6XE8cC2wKpUvAfbJLfMpsiMjD1LjVRVkV+X8PD1WA59K5a8EbgXWAN8H9krlAi5P9a8CuuvwHowh26PeM1fW0O0nS/o2Ar8n64ufUc02k53P1Zcep9dQdx/ZeQOD34EvpXn/T/pc7gbuAt6ZW0832T+3XwBfIN2loh0e6Tv+P6ntn2pQHXX7btfxc65b3SP9/Cu0Z8RxVumzS+/37amd3wB2GaItlf7vFfb+tNqjGTHSwLYXGnsN3K6Wiul6PnyLIzMzM7OCdHTXpJmZmVmRnIiZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIg1gKSJkkLSjun1dyVNH+ayvZL+trEtLLZOSWdL+kqz6rPW0irxIelUSbfUY11mjeSYeVEbviTp/xbZhnpzIlYjSWsl/UZS/+AD2Dc/T0QcFxHz61DXi4IxlZ0m6blc/Q9L+qqk19RaXxXt603tO6Sk/IZU3gMQEf8WEU1NNq0YRcZHSvgH6/1tSZysjogFEXFMrfVWaMtaSW8vKTtN0o8bUZ+NHh0eM7+TtHdJ+c9SGycCRMRHIuL8RrShKE7E6uOdEbH74AP4VZPr/2mqd0/g7cBvgJWS3tDkdgD8DzBt8IWkVwJ/Afy6gLZYaygkPlLCP1jnR0hxkh4HN6MNzZDfMbNRo1Nj5mHglMEXkiYDuzWh3kI5EWuC/KFhSTtIulDSY+no1ZmlR7mA/SX9t6SnJN2S20P4Ufr7RNpD+Yt8PRHxXET8IiL+HvghcG6uDUdJ+omkJyT9fPDoVJm2/qmkH0h6PLVxgaSxadrHJX2rZP5LJV2SK1oA/LWkHdLrU4AbgN/lljlX0tfS88E9sumSfpnq/NT231UbLZoVH2XqfdERqlTP30tak9Z9foqHn0h6UtIiSTvn5j9R0t0ppn4i6c9GuN2vT9v+hKTVkt5V7j0Zoq1nSFoDrBlJvdb+RnHMXEtuRx6YDlxT0oarJX0mPe+RtF7SLEmbJW2UdPow3sKW4kSs+T4EHAccChwOnFRmnvcDpwN/BOwM/Esqf0v6Ozbtofx0iHq+DfwlgKTxwE3AZ4C90vq+JelVZZYT8O9kh8JfD0zghYTua8CUXGK2I3AyLw6UXwH3AYOHr6eVTK/kzcBrgaOB/yfp9cNYxkafZsVHJccCbwSOAj4BzAX+hiwO3kDaW5d0GDAP+DDwSuDLwBJJuwynEkk7Ad8Bbknb8Q/AAkmvHUFbTwKOBA4awTI2+oymmLkNeEXaSdmB7Pfla9up/4/JeoPGAzOAyyWNq2I7CuNErD7+M2X4T0j6z+3M+z7gkohYHxFbgTll5vlqRPxPRPwGWEQWYCP1K7KkC7KgWBoRSyPiDxGxDLgTOL50oYjoi4hlEfFsRPwauAh4a5q2kWwP6r1p9inAYxGxsmQ11wDTJL2OLMCHE9yfjojfRMTPgZ8Dh2xvAWsbrRgflXwuIp6MiNXAvcAtEfFQRGwDvgscluabCXw5IlakI9HzgWfJfowG5bf7CeCLuWlHAbsDcyLidxHxA+BGct0yw/DvEbElvQ82unRqzMALR8XeAdwPbNhO/b8HzouI30fEUqCfbKe+bTgRq4+TImJsepTbG8nbF1iXe72uzDyP5p4/Q/YPe6TGA1vS8/2B95b8KLwZ2Kd0IUldkhZK2iDpSbK9kfzJk/PJEjvS32vL1P1t4G3AmRWml1OPbbbW1IrxUcmm3PPflHk9WNf+wKySmJrAi0+qzm/3WODvc9P2BdZFxB9yZY+Qxe1wlXtvbHTo1JiB7Dfj/cBpDK835fGIGMi9brvfDydizbcR2C/3esIIlo0RzPtu4L/S83XAtfkfhYgYExHl9pz+LdUzOSJeQZZsKTf9P4E/U3YhwIlk54S9uJERz5DtCf0dw0/EzKB58VGrdcAFJTG1W0RcP8zlfwVMkJT/H/xqXtj7f5oXn6T8x2XW0czttdY1qmImIh4hO2n/eLKd+lHPiVjzLQI+Kml8OtfqkyNY9tfAH4A/KTcxnbR5gKTLgB7g02nS14B3Sjo2zfPydJLjfmVWswfZod1t6dyyj+cnRsRvgW8C1wG3R8QvK7T1bOCtEbF2BNtn1rD4qLMrgY9IOlKZMZJOkLTHMJdfQbbn/glJOym7eOadwMI0/W7gf0vaTdKBZOe+mJUzGmNmBvC2iHi6Ce0qnBOx5ruS7ATde4CfAUuBAeC57S2YjjRdAPx3OrQ72Lf+F8rGmnkS6AVeAfx5RKxKy60DppIlR78m2zP5OOU//0+TnfC5jewE/3J7JPOByQxxtCsifhURHjPJRqoR8VF3EXEn2UnSXwC2An1kXSnDXf53ZInXccBjZOePTYuIB9IsF5NdabyJLN5ecuTZLBl1MZOu/r+zUW1pNYrw0e0iSToO+FJE7F90W4ZL0quBB4A/jogni26PjV7tGB9mRXLMtB8fEWsySbtKOl7Sjqnr7xyycbbaQjqn5Z+BhU7CrN7aPT7Mms0x0/58RKzJJO1GNtjq68iuKLkJ+Gg7JDWSxpB1lTwCTEldnmZ1087xYVYEx0z7cyJmZmZmVhB3TZqZmZkVxImYmZmZWUF23P4srWnvvfeOiRMnlp329NNPM2bMmOY2aJjctuoU2baVK1c+FhHl7svZ0to1RipptzZ3UnvbNUag/eLEbRqeVmxTxTiJiLZ8vPGNb4xKli9fXnFa0dy26hTZNuDOaIHv/Egf7RojlbRbmzupve0aI9GGceI2DU8rtqlSnLhr0szMzKwgTsTMzMzMCuJEzMzMzKwg203EJM2TtFnSvbmyvSQtk7Qm/R2XyiXpUkl9ku6RdHhumelp/jWSpufK3yhpVVrmUkmq90aamZmZtaLhHBG7GphSUjYbuDUiJgG3pteQ3cB2UnrMBK6ALHEju+3CkcARwDmDyVua50O55UrrMjMzMxuVtjt8RUT8SNLEkuKpQE96Ph/oBT6Zyq9JVwfcJmmspH3SvMsiYguApGXAFEm9wCsi4rZUfg1wEvDdWjZq1YZtnDb7phEvt3bOCbVUa2YVTKwiHsExaZ1lOHEya/LAS37fHCftrdpxxLoiYmN6/ijQlZ6PB/L3H1yfyoYqX1+mvCxJM8mOtNHV1UVvb2/5xu2afVlHqtL66qm/v78p9VTDbTMzM2uumgd0jYiQ1JQbVkbEXGAuQHd3d/T09JSd77IFi7lw1cg3be2p5ddXT729vVRqd9HcNjMzs+aq9qrJTanLkfR3cyrfAEzIzbdfKhuqfL8y5WZmZmajXrWJ2BJg8MrH6cDiXPm0dPXkUcC21IV5M3CMpHHpJP1jgJvTtCclHZWulpyWW5eZmZnZqLbd/jtJ15OdbL+3pPVkVz/OARZJmgE8Arwvzb4UOB7oA54BTgeIiC2SzgfuSPOdN3jiPvD3ZFdm7kp2kn5NJ+qbmZmZtYvhXDV5SoVJR5eZN4AzKqxnHjCvTPmdwBu21w4zMzOz0cYj65s1kKSXS7pd0s8lrZb06VR+gKQVaSDjr0vaOZXvkl73pekTc+s6K5U/KOnYYrbIrL4cI9bpnIiZNdazwNsi4hDgULLx844CPgtcHBEHAluBGWn+GcDWVH5xmg9JBwEnAweTDXr8RUk7NHVLzBrDMWIdzYmYWQNFpj+93Ck9Angb8M1UPp9sIGPIBkWen55/Ezg6XcgyFVgYEc9GxMNk52Ee0YRNMGsox4h1uprHETOzoaW98pXAgcDlwC+AJyJicNTh/EDGzw9+HBEDkrYBr0zlt+VWW3bw4+EOetzsAXKrGWAZXjzIcrsN6uv2Dl8zYyTV17ZxUm7A8qK/Z634XW/FNlXiRMyswSLiOeBQSWOBG4DXNbCuYQ163OwBcqu55Ri8eJDldhvU1+0dvmbGSKqvbeNk1uSBlwxY3ozByIfSit/1VmxTJe6aNGuSiHgCWA78BTBW0uB/0/xAxs8Pfpym7wk8TuVBkc1GDceIdSInYmYNJOlVaS8fSbsC7wDuJ/uxeU+arXRQ5MHBkt8D/CANC7MEODldMXYAMAm4vTlbYdY4jhHrdO6aNGusfYD56RyYlwGLIuJGSfcBCyV9BvgZcFWa/yrgWkl9wBayq8CIiNWSFgH3AQPAGak7x6zdOUasozkRM2ugiLgHOKxM+UOUuaIrIn4LvLfCui4ALqh3G82K5BixTudEzKwDrdqwraoT6NfOOaEBrTFrTY4TawafI2ZmZmZWECdiZmZmZgVxImZmZmZWECdiZmZmZgVxImZmZmZWECdiZmZmZgVxImZmZmZWECdiZmZmZgVxImZmZmZWkJoSMUn/JGm1pHslXS/p5ZIOkLRCUp+kr0vaOc27S3rdl6ZPzK3nrFT+oKRja9skMzMzs/ZQdSImaTzwj0B3RLwB2IHs5qufBS6OiAOBrcCMtMgMYGsqvzjNh6SD0nIHA1OAL6abv5qZmZmNarV2Te4I7CppR2A3YCPwNuCbafp84KT0fGp6TZp+tCSl8oUR8WxEPAz0UeZGr2ZmZmajTdU3/Y6IDZI+D/wS+A1wC7ASeCIiBtJs64Hx6fl4YF1adkDSNuCVqfy23Krzy7yIpJnATICuri56e3vLtq1rV5g1eaDstKFUWl899ff3N6Wearht9SdpAnAN0AUEMDciLpF0LvAh4Ndp1rMjYmla5iyyI8jPAf8YETen8inAJWRHn78SEXOauS1FmJi74fKsyQPDvgGzb7rcPhwjtZtYxY3JwXHSKqpOxCSNIzuadQDwBPANsq7FhomIucBcgO7u7ujp6Sk732ULFnPhqpFv2tpTy6+vnnp7e6nU7qK5bQ0xAMyKiLsk7QGslLQsTbs4Ij6fn7mkq35f4PuSXpMmXw68g2xn5Q5JSyLivqZshVnjOEaso1WdiAFvBx6OiF8DSPo28CZgrKQd01Gx/YANaf4NwARgferK3BN4PFc+KL+MWVuLiI1kXfZExFOS7qfCEd/k+a564GFJ+a76voh4CEDSwjSvf2SsrTlGrNPVkoj9EjhK0m5kXZNHA3cCy4H3AAuB6cDiNP+S9PqnafoPIiIkLQGuk3QR2d7NJOD2Gtpl1pLSlcKHASvIdlrOlDSNLG5mRcRWhu6qX1dSfmSZOlqy+76aukqNpM2t0I3dbt3prdDeZsRIqqdt46TaNpVTr8+7Fb47pVqxTZXUco7YCknfBO4iO7T8M7Juw5uAhZI+k8quSotcBVyb9l62kB1aJiJWS1pEttcyAJwREc9V2y6zViRpd+BbwMci4klJVwDnk50Tcz5wIfDBWutp1e774Z7bNZRZkweG3eZmnGawPe3WnV50e5sVI9DecTKSONieesVJ0d+dclqxTZXU9GlGxDnAOSXFD1HmqseI+C3w3grruQC4oJa2mLUqSTuR/cAsiIhvA0TEptz0K4Eb08uhuurdhW+jkmPEOplH1jdroDREy1XA/RFxUa58n9xs7wbuTc+XACenAZAP4IWu+juASWnA5J3JjigvacY2mDWSY8Q6XX2Ob5pZJW8CPgCsknR3KjsbOEXSoWTdLmuBD8PQXfWSzgRuJrs0f15ErG7mhpg1iGPEOpoTMbMGiogfAyozaekQy5Ttqk9jKFVczqwdOUas07lr0szMzKwgTsTMzMzMCuJEzMzMzKwgTsTMzMzMCuJEzMzMzKwgTsTMzMzMCuJEzMzMzKwgTsTMzMzMCuJEzMzMzKwgTsTMzMzMCuJEzMzMzKwgTsTMzMzMCuJEzMzMzKwgTsTMGkjSBEnLJd0nabWkj6byvSQtk7Qm/R2XyiXpUkl9ku6RdHhuXdPT/GskTS9qm8zqyTFinc6JmFljDQCzIuIg4CjgDEkHAbOBWyNiEnBreg1wHDApPWYCV0D2owScAxwJHAGcM/jDZNbmHCPW0ZyImTVQRGyMiLvS86eA+4HxwFRgfpptPnBSej4VuCYytwFjJe0DHAssi4gtEbEVWAZMaeKmmDWEY8Q63Y5FN8CsU0iaCBwGrAC6ImJjmvQo0JWejwfW5RZbn8oqlZfWMZPsKAFdXV309vaWbUvXrjBr8sCIt6HS+ranmrpKjaTN1baznvr7+1uiHcPVCu1tRoyketo2TqptUzn1+rxb4btTqhXbVElNiZikscBXgDcAAXwQeBD4OjARWAu8LyK2ShJwCXA88Axw2uBeUOrL/9e02s9ExHzMRhFJuwPfAj4WEU9m4ZCJiJAU9agnIuYCcwG6u7ujp6en7HyXLVjMhatGHv5rTy2/vu05bfZNVS2XN2vywLDbXG0766m3t5dK738rKrq9zYqRtL62jZORxMH21CtOiv7ulNOKbaqk1q7JS4DvRcTrgEPIDim7X98sR9JOZD8wCyLi26l4U+pOIf3dnMo3ABNyi++XyiqVm7U9x4h1sqoTMUl7Am8BrgKIiN9FxBO4X9/seelI8FXA/RFxUW7SEmDwqq7pwOJc+bR0ZdhRwLbUPXMzcIykcWlH5ZhUZtbWHCPW6Wo5vnkA8Gvgq5IOAVYCH6UD+/VHopX7rd22hngT8AFglaS7U9nZwBxgkaQZwCPA+9K0pWTd931kXfinA0TEFknnA3ek+c6LiC3N2QSzhnKMWEerJRHbETgc+IeIWCHpEl7ohgQ6p19/JFq539ptq7+I+DGgCpOPLjN/AGdUWNc8YF79WmdWPMeIdbpazhFbD6yPiBXp9TfJEjP365uZmZkNQ9WJWEQ8CqyT9NpUdDRwH+7XNzMzMxuWWq+B/QdggaSdgYfI+upfhvv1zczMzLarpkQsIu4GustMcr++mZmZ2Xb4FkdmZmZmBXEiZmZmZlYQJ2JmZmZmBXEiZmZmZlYQJ2JmZmZmBXEiZmZmZlYQJ2JmZmZmBal1QFcz6yATZ99UdBPMWp7jxEbCR8TMzMzMCuJEzMzMzKwgTsTMGkjSPEmbJd2bKztX0gZJd6fH8blpZ0nqk/SgpGNz5VNSWZ+k2c3eDrNGcYxYp/M5YmaNdTXwBeCakvKLI+Lz+QJJBwEnAwcD+wLfl/SaNPly4B3AeuAOSUsi4r5GNryd1XKOzto5J9SxJTYMV+MYKUS1ceIYqS8nYmYNFBE/kjRxmLNPBRZGxLPAw5L6gCPStL6IeAhA0sI0r39krO05RqzTOREzK8aZkqYBdwKzImIrMB64LTfP+lQGsK6k/MhyK5U0E5gJ0NXVRW9vb9nKu3aFWZMHaml/0zWrzZXes5Hq7++v27qaoQXb25AYgfaOk1ZoU+n71YLfnZZsUyVOxMya7wrgfCDS3wuBD9ZjxRExF5gL0N3dHT09PWXnu2zBYi5c1V7hP2vyQFPavPbUnrqsp7e3l0rvfytqsfY2LEagveOkWXEwlNIYabHvDtCabaqktb5hZh0gIjYNPpd0JXBjerkBmJCbdb9UxhDlZqOOY8Q6ia+aNGsySfvkXr4bGLxabAlwsqRdJB0ATAJuB+4AJkk6QNLOZCcrL2lmm82ayTFincRHxMwaSNL1QA+wt6T1wDlAj6RDybpd1gIfBoiI1ZIWkZ1gPACcERHPpfWcCdwM7ADMi4jVTd4Us4ZwjFincyJm1kARcUqZ4quGmP8C4IIy5UuBpXVsmllLcIxYp6u5a1LSDpJ+JunG9PoASSvSoHpfT4eJSYeSv57KV+QvV640QJ+ZmZnZaFaPc8Q+Ctyfe/1ZsoH4DgS2AjNS+Qxgayq/OM1XOkDfFOCLknaoQ7vMzMzMWlpNiZik/YATgK+k1wLeBnwzzTIfOCk9n5pek6YfneZ/foC+iHgYyA/QZ2ZmZjZq1XqO2P8HfALYI71+JfBERAyONpcfbG88acC9iBiQtC3NP9QAfS/S6EH4mjH4WysPMue2mZmZNVfViZikE4HNEbFSUk/9mlRZowfhq9dAjkNp5UHm3DYzM7PmquWI2JuAd0k6Hng58ArgEmCspB3TUbH8oHqDA/Gtl7QjsCfwOEMP0GdmZmY2alV9jlhEnBUR+0XERLKT7X8QEacCy4H3pNmmA4vT8yXpNWn6DyIiqDxAn5mZmdmo1ohxxD4JLJT0GeBnvDAezFXAtZL6gC1kyduQA/SZmZmZjWZ1ScQiohfoTc8fosxVjxHxW+C9FZYvO0CfmZmZ2Wjme02amZmZFcSJmJmZmVlBnIiZmZmZFcSJmJmZmVlBnIiZNZCkeZI2S7o3V7aXpGWS1qS/41K5JF0qqU/SPZIOzy0zPc2/RtL0cnWZtSvHiXUyJ2JmjXU12c3s82YDt0bEJODW9BrgOLJx9CaR3crrCsh+kIBzgCPJrkg+Z/BHyWyUuBrHiXUoJ2JmDRQRPyIbNy9vKjA/PZ8PnJQrvyYyt5HdpWIf4FhgWURsiYitwDJe+qNl1rYcJ9bJGjGgq5kNrSsiNqbnjwJd6fl4YF1uvvWprFL5S0iaSXaUgK6uroo3Su/aFWZNHqiy+cVoVpvrdXP5drtRfQu213FSRiu0qfT9asHvTku2qRInYmYFioiQFHVc31xgLkB3d3dUulH6ZQsWc+Gq9gr/WZMHmtLmtaf21GU97Xaj+lZur+PkBc2Kg6GUxkgrfndasU2VuGvSrPk2pa4U0t/NqXwDMCE3336prFK52WjmOLGO4ETMrPmWAINXdE0HFufKp6Wrwo4CtqWumZuBYySNSycfH5PKzEYzx4l1hNY65mo2yki6HugB9pa0nuyqrjnAIkkzgEeA96XZlwLHA33AM8DpABGxRdL5wB1pvvMiovTEZrO25TixTuZEzKyBIuKUCpOOLjNvAGdUWM88YF4dm2bWMhwn1sncNWlmZmZWECdiZmZmZgVxImZmZmZWECdiZmZmZgVxImZmZmZWECdiZmZmZgXx8BVmZjkTZ99U1XJr55xQ55aYtabSGJk1eYDThhE3jpHyqj4iJmmCpOWS7pO0WtJHU/lekpZJWpP+jkvlknSppD5J90g6PLeu6Wn+NZKmV6rTzMzMbDSppWtyAJgVEQcBRwFnSDoImA3cGhGTgFvTa4DjgEnpMRO4ArLEjWwU5SOBI4BzBpM3MzMzs9Gs6kQsIjZGxF3p+VPA/cB4YCowP802HzgpPZ8KXBOZ24Cx6UauxwLLImJLRGwFlgFTqm2XmZmZWbuoyzlikiYChwErgK50A1aAR4Gu9Hw8sC632PpUVqm8XD0zyY6m0dXVRW9vb9n2dO2a9VmPVKX11VN/f39T6qmG22ZmZtZcNSdiknYHvgV8LCKelPT8tIgISVFrHbn1zQXmAnR3d0dPT0/Z+S5bsJgLV41809ae+v+3d//BkpX1ncffHwdUAkQgmCkE4uAWmw3JbJCdAEbjjhJhwFQwiXExRkfiFruJRq3M7jr5UavRuIWp0k10WXTUiZCQIPHHMlE2OIvOotmAgEEBCTLBYWEKmSg/BM1Gx3z3j35Gm0vfuT/m3vv07ft+VZ3q0885fc63+/Zz7+eec57u0dtbSDt27GC6unuzNkmSltYBfXxFkoMZhLDLquojrfn+dsqRdrunte8Gjh96+HGtbbp2SZKkiXYgoyYDvB+4vareMbRoG7Bv5ONG4Mqh9le00ZOnAw+3U5hXA2cmObJdpH9ma5MmWpJdSW5JcnOSG1vbnEcdS5PMfqJJdyBHxJ4NvBx4fusgNyc5B7gQeEGSO4GfbvcBrgLuAnYC7wV+DaCqHgDeAtzQpje3NmkleF5VnVxV69r9OY06llYI+4km1ryvEauqzwCZZvEZI9YvzRRYLQAAGdZJREFU4NXTbGsrsHW+tUgT5FxgfZu/BNgBvIGhUcfAdUmOSHLM0MAYaSWxn2hi+Mn6Uj8FfKINaHlPG4wy11HHj/kDs9gji3sa95qnvtbLbaTvGNdrPxmynGtayvfXGL+fH8cgJvXznKraneQHge1J/nZ44XxGHS/2yOKeNq3dO9Y1Tx11vdxG+o5xvfaTIePYD2Zb01J8MsE+Y/x+fhy/9FvqpKp2t9s9wEcZfLPEXEcdSxPNfqJJZxCTOkhyaJLD980zGC18K3MfdSxNLPuJVoLxOr4prRyrgY+2D0A+CPjTqvrLJDcAVyR5FXA38JK2/lXAOQxGHX8TOH/pS5aWnP1EE88gJnVQVXcBPz6i/WvMcdSxNKnsJ1oJPDUpSZLUiUFMkiSpE4OYJElSJ14jJkkLYM3mjz/m/qa1e3nllLZRdl34wsUqSRorU/vIbE16H/GImCRJUicGMUmSpE4MYpIkSZ0YxCRJkjoxiEmSJHXiqElJ6siRZNL+zaePbFq7l/ULX8qiMIhp0fgHRpKk/TOILYC5BI7hzxZa6sAxU53Tfe7RcglG8w1+sHyeoyRpshjENKMDCTiSJGl6YxPEkmwA/hBYBbyvqi5c6hqWOnAYcEYb9brM9lPKJ9k49BFp3NlPtNyMRRBLsgq4CHgBcC9wQ5JtVfXFvpVJ48E+oqm8BvPx7Ccatlz6yLh8fMWpwM6ququqvgVcDpzbuSZpnNhHpJnZT7TsjMURMeBY4J6h+/cCp3WqRRpH9hEtiOmOEsx0+n+ZHEmzn+iALfXAr3EJYrOS5ALggnb30SR3TLPq0cBXl6aquXmttc3LYteWt+138dMXa78LbRL6yHTG+f05yqTVOyl9BJZ3PxnH95U1fc98+sm4BLHdwPFD949rbY9RVVuALTNtLMmNVbVu4cpbONY2P+Nc2xJZMX1kOsutZuvtYuL7iTXNzjjWNJ1xuUbsBuDEJCckeSJwHrCtc03SOLGPSDOzn2jZGYsjYlW1N8lrgKsZDDneWlW3dS5LGhv2EWlm9hMtR2MRxACq6irgqgXa3IyHnDuytvkZ59qWxArqI9NZbjVbbwcroJ9Y0+yMY00jpap61yBJkrQijcs1YpIkSSvORAWxJBuS3JFkZ5LNHfa/NcmeJLcOtR2VZHuSO9vtka09Sd7Zav1CklMWubbjk3wqyReT3JbkdeNSX5InJ/lsks+32n63tZ+Q5PpWwwfbxbckeVK7v7MtX7NYtU2i3v1kJnPpR+Ngrn1rHMy1z600PftIkl1Jbklyc5IbW9uS/p5eqL9lSTa29e9MsnERanpTkt3ttbo5yTlDy36z1XRHkrOG2sfv919VTcTE4MLMvwOeATwR+Dxw0hLX8FzgFODWobbfBza3+c3A29r8OcD/BAKcDly/yLUdA5zS5g8HvgScNA71tX0c1uYPBq5v+7wCOK+1vxv41Tb/a8C72/x5wAd7v/+WyzQO/WQWNc66H43DNNe+NQ7TXPvcSpp69xFgF3D0lLYl/T29EH/LgKOAu9rtkW3+yAWu6U3Afxix7knt5/Yk4IT281zV+2c73TRJR8S6f7VFVV0LPDCl+VzgkjZ/CfCiofZLa+A64IgkxyxibfdV1efa/CPA7Qw+hbp7fW0fj7a7B7epgOcDH5qmtn01fwg4I0kWo7YJ1L2fzGSO/ai7efSt7ubR51aScewjS/p7eoH+lp0FbK+qB6rqQWA7sGGBa5rOucDlVfWPVfVlYCeDn+s4/mwnKoiN+mqLYzvVMmx1Vd3X5r8CrG7z3eptp/KeyeC/4LGoL8mqJDcDexh02L8DHqqqvSP2/93a2vKHgR9YrNomzLj2k5lM9z4dK7PsW2Nhjn1uJendRwr4RJKbMvgGABiP39NzrWGpantNOyW6dej0f++a5mSSgtjYq8Ex067DVJMcBnwYeH1VfX14Wc/6quo7VXUyg0/CPhX4Fz3q0Pgbh340yrj2renY58bWc6rqFOBs4NVJnju8cBzeS+NQQ3Mx8M+Ak4H7gLf3LWd+JimIzeqrLTq4f9+h4na7p7Uveb1JDmbwh+KyqvrIuNUHUFUPAZ8CnsXgEPe+z7ob3v93a2vLnwJ8bbFrmxDj2k9mMt37dCzMsW+NlVn2uZWkax+pqt3tdg/wUQYheRx+T8+1hkWvrarub/9Q/BPwXgavVdea5mOSgti4frXFNmDfaJGNwJVD7a9oI05OBx4eOuy74No1VO8Hbq+qd4xTfUmemuSINn8I8AIG19l8CnjxNLXtq/nFwCfbf2ia2bj2k5lM9z7tbh59q7t59LmVpFsfSXJoksP3zQNnArcyBr+n51HD1cCZSY5spwzPbG0LZsr1cD/H4LXaV9N5GYywPwE4Efgs4/r7r+dIgYWeGIze+BKDax1+u8P+/4zB4dFvMzj3/CoG1y5dA9wJ/C/gqLZugItarbcA6xa5tucwOJT8BeDmNp0zDvUB/xL4m1bbrcB/bu3PYNB5dgJ/DjyptT+53d/Zlj+j93tvOU29+8ks6pt1PxqHaa59axymufa5lTb16iPt9f98m27bt++l/j29UH/LgF9p76WdwPmLUNMft31+gUGgOmZo/d9uNd0BnN37Z7u/yU/WlyRJ6mSSTk1KkiQtKwYxSZKkTgxikiRJnRjEJEmSOjGISZIkdWIQkyRJ6sQgJkmS1IlBTJIkqRODmCRJUicGMUmSpE4MYpIkSZ0YxCRJkjoxiEmSJHViEJMkSerEINZJkg8k+b0l2tevJrk/yaNJfmCJ9rkmSSU5aCn2J0nScmQQW+aS/GSSTyZ5JMnDSf4iyUlDyw8G3gGcWVWHAf8lycXDy5N8Y5q205f0yUiStMIYxJaxJM8CPgFcCTwNOAH4PPBXSZ7RVlsNPBm4rd2/Fnju0GbWAf8X+KkpbQA3LU7lkiQJDGJLJskzk3yuHbn6IINwRJIjk3wsyd8nebDNH9eW/WKSm6Zs5zeSXNnu/j5waVX9YVU9UlUPVNXvANcBb0ryz4E72roPJfkkgyD2I0mObu0/BVwOHDql7a+r6ttJnpbkw62+Lyd57VAtT0iyOcnfJflakiuSHDXN8/+FJLuS/NiBvZKSJE0Og9gSSPJE4H8AfwwcBfw58Att8ROAPwKeDvwQ8A/Af2vLtgEnJPmRoc29HLg0yfcBP9m2NdUVwAuq6kvAj7a2I6rq+VV1D3A33zsC9lzg08D/mdJ2bZInAH/B4CjbscAZwOuTnNXW+3XgRcC/ZnBE7kHgohHP/3zgbcBPV9Wt079SkiStLAaxpXE6cDDwB1X17ar6EHADQFV9rao+XFXfrKpHgLcyCDZU1T8CHwR+GSDJjwJrgI8xCHRPAO4bsb/7gKNHtO/zv4HntqB1KoMjaJ8eant2W+cngKdW1Zur6ltVdRfwXuC8tp1/D/x2Vd3ban0T8OIpF+i/HviPwPqq2jmrV0uSpBXCILY0ngbsrqoaarsbIMn3JXlPkruTfJ3BqcMjkqxq610C/FKSMDgadkULPQ8C/wQcM2J/xwBf3U89+64TWwvcVVXfBD4z1HYIcD2Do3RPS/LQvgn4LQbXndGWf3Ro2e3Ad4aWwyCEXVRV987wGkmStOIYxJbGfcCxLUzt80PtdhPww8BpVfX9fO9C+gBU1XXAtxicNvwlBqc3qapvAH8N/OKI/b0EuGY/9VwL/DjwQgZHwmBwMf/xre2Gqvp/wD3Al6vqiKHp8Ko6pz3mHuDsKcufXFW7h/Z1JvA7SX4BSZL0GAaxpfHXwF7gte2jIX6ewSlBgMMZXBf2ULvQ/Y0jHn8pg+vGvl1Vnxlq3wxsTPLaJIe3C/9/D3gW8LvTFdNOEd4PvI4WxNrRuutb27Vt1c8CjyR5Q5JDkqxK8mNJfqItfzfw1iRPB0jy1CTnTtndbcAG4KIkP7vfV0mSpBXGILYEqupbwM8DrwQeAP4N8JG2+A8YnAr8KoNrtf5yxCb+GPgx4E+mbPczwFlt2/cxON35TOA5VXXnDGVdCzwV+Kuhtk8DP9iWUVXfAX4GOBn4cqvxfcBT2vp/yGBAwSeSPNLqP23E8/982857k5w9Q12SJK0YeexlSxpHSQ4B9gCnzCJgSZKkZcIjYsvDrzK4bssQJknSBPF7AMdckl0MLtx/UedSJEnSAvPUpCRJUieempQkSepk2Z6aPProo2vNmjUjl33jG9/g0EMPXdqCFoi197G/2m+66aavVtVTl7gkSdIKsGyD2Jo1a7jxxhtHLtuxYwfr169f2oIWiLX3sb/ak9y9tNVIklYKT01KkiR1YhCTJEnqxCAmSZLUiUFMkiSpk3kHsSTHJ/lUki8muS3J61r7UUm2J7mz3R7Z2pPknUl2JvlCklOGtrWxrX9nko0H/rQkSZLG34GMmtwLbKqqzyU5HLgpyXYGX2x9TVVdmGQzsBl4A3A2cGKbTgMuBk5LchTwRmAdUG0726rqwfkWdsvuh3nl5o/P+XG7LnzhfHcpSZI0Z/M+IlZV91XV59r8I8DtwLHAucAlbbVL+N5X85wLXFoD1wFHJDkGOAvYXlUPtPC1Hdgw37okSZKWiwX5HLEka4BnAtcDq6vqvrboK8DqNn8scM/Qw+5tbdO1j9rPBcAFAKtXr2bHjh0j61l9CGxau3fOz2O67S2lRx99dCzqGHbL7odntd7qQ+Bdl1353ftrj33KYpW04MbxdZckTb4DDmJJDgM+DLy+qr6e5LvLqqqSLNiXWVbVFmALwLp162q6D+B812VX8vZb5v7Udr1s9PaW0jh+KOpsT/NuWrv3Ma/7OLyeszWOr7skafId0KjJJAczCGGXVdVHWvP97ZQj7XZPa98NHD/08ONa23TtkiRJE+1ARk0GeD9we1W9Y2jRNmDfyMeNwJVD7a9ooydPBx5upzCvBs5McmQbYXlma5MkSZpoB3Jq8tnAy4Fbktzc2n4LuBC4IsmrgLuBl7RlVwHnADuBbwLnA1TVA0neAtzQ1ntzVT1wAHUtG2tGnPLbtHbvjKcCHd0pSdJkmHcQq6rPAJlm8Rkj1i/g1dNsayuwdb61LJRRwWg2DEaSJGk+FmTUpJaH+QbNpWYgliStFH7FkSRJUicGMUmSpE4MYpIkSZ0YxCRJkjoxiEmSJHViEJMkSerEICZJktSJQUySJKkTg5gkSVInBjFJkqRODGKSJEmdGMQkSZI6MYhJkiR1YhCTJEnqxCAmSZLUiUFMkiSpE4OYJElSJwYxSZKkTgxikiRJnRjEJEmSOjGISZIkdWIQkyRJ6sQgJkmS1IlBTJIkqRODmCRJUicGMUmSpE7mHcSSbE2yJ8mtQ21vSrI7yc1tOmdo2W8m2ZnkjiRnDbVvaG07k2ye/1ORJElaXg7kiNgHgA0j2v9rVZ3cpqsAkpwEnAf8aHvMf0+yKskq4CLgbOAk4KVtXUmSpIl30HwfWFXXJlkzy9XPBS6vqn8EvpxkJ3BqW7azqu4CSHJ5W/eL861LkiRpuZh3ENuP1yR5BXAjsKmqHgSOBa4bWufe1gZwz5T206bbcJILgAsAVq9ezY4dO0aut/oQ2LR273zrn7Pp6pjJqBpnU/tC7m8hTa19qeuc7/4AHn300QN6vCRJ87HQQexi4C1Atdu3A7+yUBuvqi3AFoB169bV+vXrR673rsuu5O23LEbGHG3Xy0bXMZNXbv7449o2rd07Y+0Lub+FNLX2pa5zvvuDQYib7v0kSdJiWdC0UlX375tP8l7gY+3ubuD4oVWPa23sp12SJGmiLejHVyQ5ZujuzwH7RlRuA85L8qQkJwAnAp8FbgBOTHJCkicyuKB/20LWJEmSNK7mfUQsyZ8B64Gjk9wLvBFYn+RkBqcmdwH/DqCqbktyBYOL8PcCr66q77TtvAa4GlgFbK2q2+b9bCRJkpaRAxk1+dIRze/fz/pvBd46ov0q4Kr51iFJkrRc+cn6kiRJnRjEJEmSOjGISZIkdWIQkyRJ6sQgJkmS1IlBTJIkqRODmCRJUidL94WM0iJbcwDfpfmBDYcuYCWSJM2OR8QkSZI6MYhJkiR1YhCTJEnqxCAmSZLUiUFMkiSpE4OYJElSJwYxSZKkTgxikiRJnRjEJEmSOjGISZIkdWIQkyRJ6sQgJkmS1IlBTJIkqRODmCRJUicGMUmSpE4MYpIkSZ0YxCRJkjoxiEmSJHVyQEEsydYke5LcOtR2VJLtSe5st0e29iR5Z5KdSb6Q5JShx2xs69+ZZOOB1CRJkrRcHOgRsQ8AG6a0bQauqaoTgWvafYCzgRPbdAFwMQyCG/BG4DTgVOCN+8KbJEnSJDugIFZV1wIPTGk+F7ikzV8CvGio/dIauA44IskxwFnA9qp6oKoeBLbz+HAnSZI0cQ5ahG2urqr72vxXgNVt/ljgnqH17m1t07U/TpILGBxNY/Xq1ezYsWN0AYfAprV751n+3E1Xx0xG1Tib2hdyfwtpau3jWucojz766LzrlSRpvhYjiH1XVVWSWsDtbQG2AKxbt67Wr18/cr13XXYlb79lUZ/aY+x62eg6ZvLKzR9/XNumtXtnrH0h97eQptY+rnWO8oENhzLd+0mSpMWyGKMm72+nHGm3e1r7buD4ofWOa23TtUuSJE20xQhi24B9Ix83AlcOtb+ijZ48HXi4ncK8GjgzyZHtIv0zW5skSdJEO6Dzd0n+DFgPHJ3kXgajHy8ErkjyKuBu4CVt9auAc4CdwDeB8wGq6oEkbwFuaOu9uaqmDgCQJEmaOAcUxKrqpdMsOmPEugW8eprtbAW2HkgtkiRJy42frC9JktSJQUySJKkTg5gkSVInBjFJkqRODGKSJEmdGMQkSZI6MYhJkiR1YhCTJEnqxCAmSZLUiUFMkiSpE4OYJElSJwYxSZKkTgxikiRJnRjEJEmSOjGISZIkdWIQkyRJ6sQgJkmS1IlBTJIkqRODmCRJUicGMUmSpE4MYpIkSZ0YxCRJkjoxiEmSJHViEJMkSerEICZJktSJQUySJKmTRQtiSXYluSXJzUlubG1HJdme5M52e2RrT5J3JtmZ5AtJTlmsuiRJksbFYh8Re15VnVxV69r9zcA1VXUicE27D3A2cGKbLgAuXuS6JEmSulvqU5PnApe0+UuAFw21X1oD1wFHJDlmiWuTJElaUqmqxdlw8mXgQaCA91TVliQPVdURbXmAB6vqiCQfAy6sqs+0ZdcAb6iqG6ds8wIGR8xYvXr1v7r88stH7nvPAw9z/z8sytMaae2xT5nX427Z/fDj2lYfwoy1L+T+FtLU2se1zlFOeMoqDjvssJHLnve85900dFRXkqQFc9Aibvs5VbU7yQ8C25P87fDCqqokc0qBVbUF2AKwbt26Wr9+/cj13nXZlbz9lsV8ao+162Wj65jJKzd//HFtm9bunbH2hdzfQppa+7jWOcoHNhzKdO8nSZIWy6Kdmqyq3e12D/BR4FTg/n2nHNvtnrb6buD4oYcf19okSZIm1qIEsSSHJjl83zxwJnArsA3Y2FbbCFzZ5rcBr2ijJ08HHq6q+xajNkmSpHGxWOfvVgMfHVwGxkHAn1bVXya5AbgiyauAu4GXtPWvAs4BdgLfBM5fpLokSZLGxqIEsaq6C/jxEe1fA84Y0V7AqxejFkmSpHHlJ+tLkiR1YhCTJEnqxCAmSZLUiUFMkiSpE4OYJElSJwYxSZKkTgxikiRJnRjEJEmSOjGISZIkdWIQkyRJ6sQgJkmS1IlBTJIkqRODmCRJUicGMUmSpE4MYpIkSZ0YxCRJkjoxiEmSJHViEJMkSerEICZJktSJQUySJKkTg5gkSVInBjFJkqRODGKSJEmdGMQkSZI6MYhJkiR1YhCTJEnqxCAmSZLUydgEsSQbktyRZGeSzb3rkSRJWmxjEcSSrAIuAs4GTgJemuSkvlVJkiQtrrEIYsCpwM6ququqvgVcDpzbuSZJkqRFlarqXQNJXgxsqKp/2+6/HDitql4zZb0LgAva3R8G7phmk0cDX12kchebtfexv9qfXlVPXcpiJEkrw0G9C5iLqtoCbJlpvSQ3VtW6JShpwVl7H8u5dknS8jUupyZ3A8cP3T+utUmSJE2scQliNwAnJjkhyROB84BtnWuSJElaVGNxarKq9iZ5DXA1sArYWlW3HcAmZzx9OcasvY/lXLskaZkai4v1JUmSVqJxOTUpSZK04hjEJEmSOpmoILZcvyYpyfFJPpXki0luS/K63jXNVZJVSf4mycd61zIXSY5I8qEkf5vk9iTP6l2TJGnlmJhrxNrXJH0JeAFwL4ORmC+tqi92LWwWkhwDHFNVn0tyOHAT8KLlUPs+SX4DWAd8f1X9TO96ZivJJcCnq+p9bcTu91XVQ73rkiStDJN0RGzZfk1SVd1XVZ9r848AtwPH9q1q9pIcB7wQeF/vWuYiyVOA5wLvB6iqbxnCJElLaZKC2LHAPUP372UZhZl9kqwBnglc37eSOfkD4D8B/9S7kDk6Afh74I/aadX3JTm0d1GSpJVjkoLYspfkMODDwOur6uu965mNJD8D7Kmqm3rXMg8HAacAF1fVM4FvAMvm2kJJ0vI3SUFsWX9NUpKDGYSwy6rqI73rmYNnAz+bZBeD08HPT/InfUuatXuBe6tq39HHDzEIZpIkLYlJCmLL9muSkoTBdUq3V9U7etczF1X1m1V1XFWtYfCaf7KqfrlzWbNSVV8B7knyw63pDGDZDJCQJC1/Y/EVRwthEb4maSk9G3g5cEuSm1vbb1XVVR1rWil+Hbishfe7gPM71yNJWkEm5uMrJEmSlptJOjUpSZK0rBjEJEmSOjGISZIkdWIQkyRJ6sQgJkmS1IlBTJIkqRODmCRJUif/H7jr5TZA+wXPAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -3616,6 +3946,12 @@ "cell_type": "code", "execution_count": 56, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:22.214142Z", + "iopub.status.busy": "2020-10-27T16:17:22.204809Z", + "iopub.status.idle": "2020-10-27T16:17:22.888740Z", + "shell.execute_reply": "2020-10-27T16:17:22.888418Z" + }, "pycharm": { "is_executing": false } @@ -3623,7 +3959,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -3650,6 +3986,12 @@ "cell_type": "code", "execution_count": 57, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:22.894194Z", + "iopub.status.busy": "2020-10-27T16:17:22.893834Z", + "iopub.status.idle": "2020-10-27T16:17:22.897870Z", + "shell.execute_reply": "2020-10-27T16:17:22.897542Z" + }, "pycharm": { "is_executing": false } @@ -3665,6 +4007,12 @@ "cell_type": "code", "execution_count": 58, "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:22.902873Z", + "iopub.status.busy": "2020-10-27T16:17:22.902460Z", + "iopub.status.idle": "2020-10-27T16:17:22.904581Z", + "shell.execute_reply": "2020-10-27T16:17:22.904966Z" + }, "pycharm": { "is_executing": false } @@ -3717,7 +4065,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.8.6" }, "pycharm": { "stem_cell": { diff --git a/docs/source/examples/index.rst b/docs/sphinx/examples/index.rst similarity index 100% rename from docs/source/examples/index.rst rename to docs/sphinx/examples/index.rst diff --git a/docs/source/examples/introduction_to_eland_webinar.ipynb b/docs/sphinx/examples/introduction_to_eland_webinar.ipynb similarity index 100% rename from docs/source/examples/introduction_to_eland_webinar.ipynb rename to docs/sphinx/examples/introduction_to_eland_webinar.ipynb diff --git a/docs/sphinx/examples/online_retail_analysis.ipynb b/docs/sphinx/examples/online_retail_analysis.ipynb new file mode 100644 index 0000000..31982c4 --- /dev/null +++ b/docs/sphinx/examples/online_retail_analysis.ipynb @@ -0,0 +1,1635 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:24.880429Z", + "iopub.status.busy": "2020-10-27T16:17:24.880035Z", + "iopub.status.idle": "2020-10-27T16:17:25.392040Z", + "shell.execute_reply": "2020-10-27T16:17:25.391672Z" + } + }, + "outputs": [], + "source": [ + "import eland as ed\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Fix console size for consistent test results\n", + "from eland.conftest import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Online Retail Analysis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting Started\n", + "\n", + "To get started, let's create an `eland.DataFrame` by reading a csv file. This creates and populates the \n", + "`online-retail` index in the local Elasticsearch cluster." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:25.397998Z", + "iopub.status.busy": "2020-10-27T16:17:25.397644Z", + "iopub.status.idle": "2020-10-27T16:17:28.819185Z", + "shell.execute_reply": "2020-10-27T16:17:28.818652Z" + } + }, + "outputs": [], + "source": [ + "df = ed.csv_to_eland(\"data/online-retail.csv.gz\",\n", + " es_client='localhost', \n", + " es_dest_index='online-retail', \n", + " es_if_exists='replace', \n", + " es_dropna=True,\n", + " es_refresh=True,\n", + " compression='gzip',\n", + " index_col=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we see that the `\"_id\"` field was used to index our data frame. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.823297Z", + "iopub.status.busy": "2020-10-27T16:17:28.822935Z", + "iopub.status.idle": "2020-10-27T16:17:28.825526Z", + "shell.execute_reply": "2020-10-27T16:17:28.825229Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'_id'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index.es_index_field" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we can check which field from elasticsearch are available to our eland data frame. `columns` is available as a parameter when instantiating the data frame which allows one to choose only a subset of fields from your index to be included in the data frame. Since we didn't set this parameter, we have access to all fields." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.828159Z", + "iopub.status.busy": "2020-10-27T16:17:28.827813Z", + "iopub.status.idle": "2020-10-27T16:17:28.830145Z", + "shell.execute_reply": "2020-10-27T16:17:28.829779Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode',\n", + " 'UnitPrice'],\n", + " dtype='object')" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, let's see the data types of our fields. Running `df.dtypes`, we can see that elasticsearch field types are mapped to pandas field types." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.833415Z", + "iopub.status.busy": "2020-10-27T16:17:28.833059Z", + "iopub.status.idle": "2020-10-27T16:17:28.835205Z", + "shell.execute_reply": "2020-10-27T16:17:28.834894Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Country object\n", + "CustomerID float64\n", + "Description object\n", + "InvoiceDate object\n", + "InvoiceNo object\n", + "Quantity int64\n", + "StockCode object\n", + "UnitPrice float64\n", + "dtype: object" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dtypes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also offer a `.es_info()` data frame method that shows all info about the underlying index. It also contains information about operations being passed from data frame methods to elasticsearch. More on this later." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.840515Z", + "iopub.status.busy": "2020-10-27T16:17:28.840166Z", + "iopub.status.idle": "2020-10-27T16:17:28.842305Z", + "shell.execute_reply": "2020-10-27T16:17:28.841993Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "es_index_pattern: online-retail\n", + "Index:\n", + " es_index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities:\n", + " es_field_name is_source es_dtype es_date_format pd_dtype is_searchable is_aggregatable is_scripted aggregatable_es_field_name\n", + "Country Country True keyword None object True True False Country\n", + "CustomerID CustomerID True double None float64 True True False CustomerID\n", + "Description Description True keyword None object True True False Description\n", + "InvoiceDate InvoiceDate True keyword None object True True False InvoiceDate\n", + "InvoiceNo InvoiceNo True keyword None object True True False InvoiceNo\n", + "Quantity Quantity True long None int64 True True False Quantity\n", + "StockCode StockCode True keyword None object True True False StockCode\n", + "UnitPrice UnitPrice True double None float64 True True False UnitPrice\n", + "Operations:\n", + " tasks: []\n", + " size: None\n", + " sort_params: None\n", + " _source: ['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode', 'UnitPrice']\n", + " body: {}\n", + " post_processing: []\n", + "\n" + ] + } + ], + "source": [ + "print(df.es_info())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting and Indexing Data\n", + "\n", + "Now that we understand how to create a data frame and get access to it's underlying attributes, let's see how we can select subsets of our data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### head and tail\n", + "\n", + "much like pandas, eland data frames offer `.head(n)` and `.tail(n)` methods that return the first and last n rows, respectively." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.845036Z", + "iopub.status.busy": "2020-10-27T16:17:28.844630Z", + "iopub.status.idle": "2020-10-27T16:17:28.868732Z", + "shell.execute_reply": "2020-10-27T16:17:28.869091Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...StockCodeUnitPrice
0United Kingdom17850.0...85123A2.55
1United Kingdom17850.0...710533.39
\n", + "
\n", + "

2 rows × 8 columns

" + ], + "text/plain": [ + " Country CustomerID ... StockCode UnitPrice\n", + "0 United Kingdom 17850.0 ... 85123A 2.55\n", + "1 United Kingdom 17850.0 ... 71053 3.39\n", + "\n", + "[2 rows x 8 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.872591Z", + "iopub.status.busy": "2020-10-27T16:17:28.872174Z", + "iopub.status.idle": "2020-10-27T16:17:28.878217Z", + "shell.execute_reply": "2020-10-27T16:17:28.877852Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "es_index_pattern: online-retail\n", + "Index:\n", + " es_index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities:\n", + " es_field_name is_source es_dtype es_date_format pd_dtype is_searchable is_aggregatable is_scripted aggregatable_es_field_name\n", + "Country Country True keyword None object True True False Country\n", + "CustomerID CustomerID True double None float64 True True False CustomerID\n", + "Description Description True keyword None object True True False Description\n", + "InvoiceDate InvoiceDate True keyword None object True True False InvoiceDate\n", + "InvoiceNo InvoiceNo True keyword None object True True False InvoiceNo\n", + "Quantity Quantity True long None int64 True True False Quantity\n", + "StockCode StockCode True keyword None object True True False StockCode\n", + "UnitPrice UnitPrice True double None float64 True True False UnitPrice\n", + "Operations:\n", + " tasks: [('tail': ('sort_field': '_doc', 'count': 2)), ('head': ('sort_field': '_doc', 'count': 2)), ('tail': ('sort_field': '_doc', 'count': 2))]\n", + " size: 2\n", + " sort_params: _doc:desc\n", + " _source: ['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode', 'UnitPrice']\n", + " body: {}\n", + " post_processing: [('sort_index'), ('head': ('count': 2)), ('tail': ('count': 2))]\n", + "\n" + ] + } + ], + "source": [ + "print(df.tail(2).head(2).tail(2).es_info())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.881414Z", + "iopub.status.busy": "2020-10-27T16:17:28.880806Z", + "iopub.status.idle": "2020-10-27T16:17:28.905628Z", + "shell.execute_reply": "2020-10-27T16:17:28.905926Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...StockCodeUnitPrice
12494United Kingdom16710.0...215872.55
14448United Kingdom14282.0...85099C1.95
\n", + "
\n", + "

2 rows × 8 columns

" + ], + "text/plain": [ + " Country CustomerID ... StockCode UnitPrice\n", + "12494 United Kingdom 16710.0 ... 21587 2.55\n", + "14448 United Kingdom 14282.0 ... 85099C 1.95\n", + "\n", + "[2 rows x 8 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.tail(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Selecting columns\n", + "\n", + "you can also pass a list of columns to select columns from the data frame in a specified order." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.909532Z", + "iopub.status.busy": "2020-10-27T16:17:28.909029Z", + "iopub.status.idle": "2020-10-27T16:17:28.924762Z", + "shell.execute_reply": "2020-10-27T16:17:28.924423Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryInvoiceDate
0United Kingdom2010-12-01 08:26:00
1United Kingdom2010-12-01 08:26:00
2United Kingdom2010-12-01 08:26:00
3United Kingdom2010-12-01 08:26:00
4United Kingdom2010-12-01 08:26:00
\n", + "
\n", + "

5 rows × 2 columns

" + ], + "text/plain": [ + " Country InvoiceDate\n", + "0 United Kingdom 2010-12-01 08:26:00\n", + "1 United Kingdom 2010-12-01 08:26:00\n", + "2 United Kingdom 2010-12-01 08:26:00\n", + "3 United Kingdom 2010-12-01 08:26:00\n", + "4 United Kingdom 2010-12-01 08:26:00\n", + "\n", + "[5 rows x 2 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['Country', 'InvoiceDate']].head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Boolean Indexing\n", + "\n", + "we also allow you to filter the data frame using boolean indexing. Under the hood, a boolean index maps to a `terms` query that is then passed to elasticsearch to filter the index." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.929161Z", + "iopub.status.busy": "2020-10-27T16:17:28.928761Z", + "iopub.status.idle": "2020-10-27T16:17:28.957492Z", + "shell.execute_reply": "2020-10-27T16:17:28.957119Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'term': {'Country': 'Germany'}}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...StockCodeUnitPrice
5067Germany12738.0...229520.55
5070Germany12738.0...219770.55
5071Germany12738.0...849910.55
5072Germany12738.0...212120.55
5073Germany12738.0...POST18.00
\n", + "
\n", + "

5 rows × 8 columns

" + ], + "text/plain": [ + " Country CustomerID ... StockCode UnitPrice\n", + "5067 Germany 12738.0 ... 22952 0.55\n", + "5070 Germany 12738.0 ... 21977 0.55\n", + "5071 Germany 12738.0 ... 84991 0.55\n", + "5072 Germany 12738.0 ... 21212 0.55\n", + "5073 Germany 12738.0 ... POST 18.00\n", + "\n", + "[5 rows x 8 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# the construction of a boolean vector maps directly to an elasticsearch query\n", + "print(df['Country']=='Germany')\n", + "df[(df['Country']=='Germany')].head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we can also filter the data frame using a list of values." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.961855Z", + "iopub.status.busy": "2020-10-27T16:17:28.961492Z", + "iopub.status.idle": "2020-10-27T16:17:28.994828Z", + "shell.execute_reply": "2020-10-27T16:17:28.994527Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'terms': {'Country': ['Germany', 'United States']}}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...StockCodeUnitPrice
0United Kingdom17850.0...85123A2.55
1United Kingdom17850.0...710533.39
2United Kingdom17850.0...84406B2.75
3United Kingdom17850.0...84029G3.39
4United Kingdom17850.0...84029E3.39
\n", + "
\n", + "

5 rows × 8 columns

" + ], + "text/plain": [ + " Country CustomerID ... StockCode UnitPrice\n", + "0 United Kingdom 17850.0 ... 85123A 2.55\n", + "1 United Kingdom 17850.0 ... 71053 3.39\n", + "2 United Kingdom 17850.0 ... 84406B 2.75\n", + "3 United Kingdom 17850.0 ... 84029G 3.39\n", + "4 United Kingdom 17850.0 ... 84029E 3.39\n", + "\n", + "[5 rows x 8 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(df['Country'].isin(['Germany', 'United States']))\n", + "df[df['Country'].isin(['Germany', 'United Kingdom'])].head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also combine boolean vectors to further filter the data frame." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:28.999512Z", + "iopub.status.busy": "2020-10-27T16:17:28.999126Z", + "iopub.status.idle": "2020-10-27T16:17:29.036479Z", + "shell.execute_reply": "2020-10-27T16:17:29.036094Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...StockCodeUnitPrice
\n", + "
\n", + "

0 rows × 8 columns

" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [Country, CustomerID, Description, InvoiceDate, InvoiceNo, Quantity, StockCode, UnitPrice]\n", + "Index: []\n", + "\n", + "[0 rows x 8 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[(df['Country']=='Germany') & (df['Quantity']>90)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using this example, let see how eland translates this boolean filter to an elasticsearch `bool` query." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:29.043222Z", + "iopub.status.busy": "2020-10-27T16:17:29.042872Z", + "iopub.status.idle": "2020-10-27T16:17:29.044991Z", + "shell.execute_reply": "2020-10-27T16:17:29.044580Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "es_index_pattern: online-retail\n", + "Index:\n", + " es_index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities:\n", + " es_field_name is_source es_dtype es_date_format pd_dtype is_searchable is_aggregatable is_scripted aggregatable_es_field_name\n", + "Country Country True keyword None object True True False Country\n", + "CustomerID CustomerID True double None float64 True True False CustomerID\n", + "Description Description True keyword None object True True False Description\n", + "InvoiceDate InvoiceDate True keyword None object True True False InvoiceDate\n", + "InvoiceNo InvoiceNo True keyword None object True True False InvoiceNo\n", + "Quantity Quantity True long None int64 True True False Quantity\n", + "StockCode StockCode True keyword None object True True False StockCode\n", + "UnitPrice UnitPrice True double None float64 True True False UnitPrice\n", + "Operations:\n", + " tasks: [('boolean_filter': ('boolean_filter': {'bool': {'must': [{'term': {'Country': 'Germany'}}, {'range': {'Quantity': {'gt': 90}}}]}}))]\n", + " size: None\n", + " sort_params: None\n", + " _source: ['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode', 'UnitPrice']\n", + " body: {'query': {'bool': {'must': [{'term': {'Country': 'Germany'}}, {'range': {'Quantity': {'gt': 90}}}]}}}\n", + " post_processing: []\n", + "\n" + ] + } + ], + "source": [ + "print(df[(df['Country']=='Germany') & (df['Quantity']>90)].es_info())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aggregation and Descriptive Statistics\n", + "\n", + "Let's begin to ask some questions of our data and use eland to get the answers." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**How many different countries are there?**" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:29.048752Z", + "iopub.status.busy": "2020-10-27T16:17:29.048204Z", + "iopub.status.idle": "2020-10-27T16:17:29.053029Z", + "shell.execute_reply": "2020-10-27T16:17:29.053330Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "16" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Country'].nunique()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**What is the total sum of products ordered?**" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:29.056956Z", + "iopub.status.busy": "2020-10-27T16:17:29.056547Z", + "iopub.status.idle": "2020-10-27T16:17:29.061156Z", + "shell.execute_reply": "2020-10-27T16:17:29.060738Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "111960" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Quantity'].sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Show me the sum, mean, min, and max of the qunatity and unit_price fields**" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:29.065013Z", + "iopub.status.busy": "2020-10-27T16:17:29.064600Z", + "iopub.status.idle": "2020-10-27T16:17:29.073924Z", + "shell.execute_reply": "2020-10-27T16:17:29.074225Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
QuantityUnitPrice
sum111960.00061548.490000
mean7.4644.103233
max2880.000950.990000
min-9360.0000.000000
\n", + "
" + ], + "text/plain": [ + " Quantity UnitPrice\n", + "sum 111960.000 61548.490000\n", + "mean 7.464 4.103233\n", + "max 2880.000 950.990000\n", + "min -9360.000 0.000000" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['Quantity','UnitPrice']].agg(['sum', 'mean', 'max', 'min'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Give me descriptive statistics for the entire data frame**" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:29.077672Z", + "iopub.status.busy": "2020-10-27T16:17:29.077310Z", + "iopub.status.idle": "2020-10-27T16:17:29.153081Z", + "shell.execute_reply": "2020-10-27T16:17:29.153392Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CustomerIDQuantityUnitPrice
count10729.00000015000.00000015000.000000
mean15590.7766807.4640004.103233
std1764.02516085.92438720.104873
min12347.000000-9360.0000000.000000
25%14223.0054051.0000001.250000
50%15664.3926222.0000002.510000
75%17218.8653856.4224144.213396
max18239.0000002880.000000950.990000
\n", + "
" + ], + "text/plain": [ + " CustomerID Quantity UnitPrice\n", + "count 10729.000000 15000.000000 15000.000000\n", + "mean 15590.776680 7.464000 4.103233\n", + "std 1764.025160 85.924387 20.104873\n", + "min 12347.000000 -9360.000000 0.000000\n", + "25% 14223.005405 1.000000 1.250000\n", + "50% 15664.392622 2.000000 2.510000\n", + "75% 17218.865385 6.422414 4.213396\n", + "max 18239.000000 2880.000000 950.990000" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# NBVAL_IGNORE_OUTPUT\n", + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Show me a histogram of numeric columns**" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:29.161424Z", + "iopub.status.busy": "2020-10-27T16:17:29.160640Z", + "iopub.status.idle": "2020-10-27T16:17:29.420989Z", + "shell.execute_reply": "2020-10-27T16:17:29.420512Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df[(df['Quantity']>-50) & \n", + " (df['Quantity']<50) & \n", + " (df['UnitPrice']>0) & \n", + " (df['UnitPrice']<100)][['Quantity', 'UnitPrice']].hist(figsize=[12,4], bins=30)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:29.428090Z", + "iopub.status.busy": "2020-10-27T16:17:29.427699Z", + "iopub.status.idle": "2020-10-27T16:17:30.159656Z", + "shell.execute_reply": "2020-10-27T16:17:30.159959Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df[(df['Quantity']>-50) & \n", + " (df['Quantity']<50) & \n", + " (df['UnitPrice']>0) & \n", + " (df['UnitPrice']<100)][['Quantity', 'UnitPrice']].hist(figsize=[12,4], bins=30, log=True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:30.170572Z", + "iopub.status.busy": "2020-10-27T16:17:30.170202Z", + "iopub.status.idle": "2020-10-27T16:17:30.268612Z", + "shell.execute_reply": "2020-10-27T16:17:30.268290Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...StockCodeUnitPrice
46United Kingdom13748.0...220862.55
83United Kingdom15291.0...217332.55
96United Kingdom14688.0...212120.42
102United Kingdom14688.0...85071B0.38
176United Kingdom16029.0...85099C1.65
..................
14293United Kingdom14733.0...224691.45
14298United Kingdom14733.0...220862.55
14321United Kingdom13756.0...228341.85
14322United Kingdom13756.0...228671.85
14440United Kingdom17491.0...225851.06
\n", + "
\n", + "

258 rows × 8 columns

" + ], + "text/plain": [ + " Country CustomerID ... StockCode UnitPrice\n", + "46 United Kingdom 13748.0 ... 22086 2.55\n", + "83 United Kingdom 15291.0 ... 21733 2.55\n", + "96 United Kingdom 14688.0 ... 21212 0.42\n", + "102 United Kingdom 14688.0 ... 85071B 0.38\n", + "176 United Kingdom 16029.0 ... 85099C 1.65\n", + "... ... ... ... ... ...\n", + "14293 United Kingdom 14733.0 ... 22469 1.45\n", + "14298 United Kingdom 14733.0 ... 22086 2.55\n", + "14321 United Kingdom 13756.0 ... 22834 1.85\n", + "14322 United Kingdom 13756.0 ... 22867 1.85\n", + "14440 United Kingdom 17491.0 ... 22585 1.06\n", + "\n", + "[258 rows x 8 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.query('Quantity>50 & UnitPrice<100')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Arithmetic Operations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Numeric values" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:30.272347Z", + "iopub.status.busy": "2020-10-27T16:17:30.271763Z", + "iopub.status.idle": "2020-10-27T16:17:30.279020Z", + "shell.execute_reply": "2020-10-27T16:17:30.279319Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 6\n", + "1 6\n", + "2 8\n", + "3 6\n", + "4 6\n", + "Name: Quantity, dtype: int64" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Quantity'].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:30.283067Z", + "iopub.status.busy": "2020-10-27T16:17:30.282549Z", + "iopub.status.idle": "2020-10-27T16:17:30.290201Z", + "shell.execute_reply": "2020-10-27T16:17:30.290501Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 2.55\n", + "1 3.39\n", + "2 2.75\n", + "3 3.39\n", + "4 3.39\n", + "Name: UnitPrice, dtype: float64" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['UnitPrice'].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:30.297390Z", + "iopub.status.busy": "2020-10-27T16:17:30.297033Z", + "iopub.status.idle": "2020-10-27T16:17:30.298852Z", + "shell.execute_reply": "2020-10-27T16:17:30.298521Z" + } + }, + "outputs": [], + "source": [ + "product = df['Quantity'] * df['UnitPrice']" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:30.301389Z", + "iopub.status.busy": "2020-10-27T16:17:30.301033Z", + "iopub.status.idle": "2020-10-27T16:17:30.344992Z", + "shell.execute_reply": "2020-10-27T16:17:30.345332Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 15.30\n", + "1 20.34\n", + "2 22.00\n", + "3 20.34\n", + "4 20.34\n", + "dtype: float64" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "product.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "String concatenation" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "execution": { + "iopub.execute_input": "2020-10-27T16:17:30.354604Z", + "iopub.status.busy": "2020-10-27T16:17:30.354160Z", + "iopub.status.idle": "2020-10-27T16:17:30.375519Z", + "shell.execute_reply": "2020-10-27T16:17:30.375879Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 United Kingdom85123A\n", + "1 United Kingdom71053\n", + "2 United Kingdom84406B\n", + "3 United Kingdom84029G\n", + "4 United Kingdom84029E\n", + " ... \n", + "12492 United Kingdom10124A\n", + "12494 United Kingdom21587\n", + "14444 United Kingdom21929\n", + "14446 United Kingdom21928\n", + "14448 United Kingdom85099C\n", + "Length: 15000, dtype: object" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Country'] + df['StockCode']" + ] + } + ], + "metadata": { + "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.8.6" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [] + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/source/index.rst b/docs/sphinx/index.rst similarity index 100% rename from docs/source/index.rst rename to docs/sphinx/index.rst diff --git a/docs/source/logo/eland.png b/docs/sphinx/logo/eland.png similarity index 100% rename from docs/source/logo/eland.png rename to docs/sphinx/logo/eland.png diff --git a/docs/source/logo/eland_favicon.png b/docs/sphinx/logo/eland_favicon.png similarity index 100% rename from docs/source/logo/eland_favicon.png rename to docs/sphinx/logo/eland_favicon.png diff --git a/docs/source/reference/api/eland-DataFrame-hist-1.png b/docs/sphinx/reference/api/eland-DataFrame-hist-1.png similarity index 100% rename from docs/source/reference/api/eland-DataFrame-hist-1.png rename to docs/sphinx/reference/api/eland-DataFrame-hist-1.png diff --git a/docs/source/reference/api/eland-Series-hist-2.png b/docs/sphinx/reference/api/eland-Series-hist-2.png similarity index 100% rename from docs/source/reference/api/eland-Series-hist-2.png rename to docs/sphinx/reference/api/eland-Series-hist-2.png diff --git a/docs/source/reference/api/eland.DataFrame.agg.rst b/docs/sphinx/reference/api/eland.DataFrame.agg.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.agg.rst rename to docs/sphinx/reference/api/eland.DataFrame.agg.rst diff --git a/docs/source/reference/api/eland.DataFrame.aggregate.rst b/docs/sphinx/reference/api/eland.DataFrame.aggregate.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.aggregate.rst rename to docs/sphinx/reference/api/eland.DataFrame.aggregate.rst diff --git a/docs/source/reference/api/eland.DataFrame.columns.rst b/docs/sphinx/reference/api/eland.DataFrame.columns.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.columns.rst rename to docs/sphinx/reference/api/eland.DataFrame.columns.rst diff --git a/docs/source/reference/api/eland.DataFrame.count.rst b/docs/sphinx/reference/api/eland.DataFrame.count.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.count.rst rename to docs/sphinx/reference/api/eland.DataFrame.count.rst diff --git a/docs/source/reference/api/eland.DataFrame.describe.rst b/docs/sphinx/reference/api/eland.DataFrame.describe.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.describe.rst rename to docs/sphinx/reference/api/eland.DataFrame.describe.rst diff --git a/docs/source/reference/api/eland.DataFrame.drop.rst b/docs/sphinx/reference/api/eland.DataFrame.drop.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.drop.rst rename to docs/sphinx/reference/api/eland.DataFrame.drop.rst diff --git a/docs/source/reference/api/eland.DataFrame.dtypes.rst b/docs/sphinx/reference/api/eland.DataFrame.dtypes.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.dtypes.rst rename to docs/sphinx/reference/api/eland.DataFrame.dtypes.rst diff --git a/docs/source/reference/api/eland.DataFrame.empty.rst b/docs/sphinx/reference/api/eland.DataFrame.empty.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.empty.rst rename to docs/sphinx/reference/api/eland.DataFrame.empty.rst diff --git a/docs/source/reference/api/eland.DataFrame.es_dtypes.rst b/docs/sphinx/reference/api/eland.DataFrame.es_dtypes.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.es_dtypes.rst rename to docs/sphinx/reference/api/eland.DataFrame.es_dtypes.rst diff --git a/docs/source/reference/api/eland.DataFrame.es_info.rst b/docs/sphinx/reference/api/eland.DataFrame.es_info.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.es_info.rst rename to docs/sphinx/reference/api/eland.DataFrame.es_info.rst diff --git a/docs/source/reference/api/eland.DataFrame.es_query.rst b/docs/sphinx/reference/api/eland.DataFrame.es_query.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.es_query.rst rename to docs/sphinx/reference/api/eland.DataFrame.es_query.rst diff --git a/docs/source/reference/api/eland.DataFrame.filter.rst b/docs/sphinx/reference/api/eland.DataFrame.filter.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.filter.rst rename to docs/sphinx/reference/api/eland.DataFrame.filter.rst diff --git a/docs/source/reference/api/eland.DataFrame.get.rst b/docs/sphinx/reference/api/eland.DataFrame.get.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.get.rst rename to docs/sphinx/reference/api/eland.DataFrame.get.rst diff --git a/docs/source/reference/api/eland.DataFrame.groupby.rst b/docs/sphinx/reference/api/eland.DataFrame.groupby.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.groupby.rst rename to docs/sphinx/reference/api/eland.DataFrame.groupby.rst diff --git a/docs/source/reference/api/eland.DataFrame.head.rst b/docs/sphinx/reference/api/eland.DataFrame.head.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.head.rst rename to docs/sphinx/reference/api/eland.DataFrame.head.rst diff --git a/docs/source/reference/api/eland.DataFrame.hist.rst b/docs/sphinx/reference/api/eland.DataFrame.hist.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.hist.rst rename to docs/sphinx/reference/api/eland.DataFrame.hist.rst diff --git a/docs/source/reference/api/eland.DataFrame.index.rst b/docs/sphinx/reference/api/eland.DataFrame.index.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.index.rst rename to docs/sphinx/reference/api/eland.DataFrame.index.rst diff --git a/docs/source/reference/api/eland.DataFrame.info.rst b/docs/sphinx/reference/api/eland.DataFrame.info.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.info.rst rename to docs/sphinx/reference/api/eland.DataFrame.info.rst diff --git a/docs/source/reference/api/eland.DataFrame.keys.rst b/docs/sphinx/reference/api/eland.DataFrame.keys.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.keys.rst rename to docs/sphinx/reference/api/eland.DataFrame.keys.rst diff --git a/docs/source/reference/api/eland.DataFrame.mad.rst b/docs/sphinx/reference/api/eland.DataFrame.mad.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.mad.rst rename to docs/sphinx/reference/api/eland.DataFrame.mad.rst diff --git a/docs/source/reference/api/eland.DataFrame.max.rst b/docs/sphinx/reference/api/eland.DataFrame.max.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.max.rst rename to docs/sphinx/reference/api/eland.DataFrame.max.rst diff --git a/docs/source/reference/api/eland.DataFrame.mean.rst b/docs/sphinx/reference/api/eland.DataFrame.mean.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.mean.rst rename to docs/sphinx/reference/api/eland.DataFrame.mean.rst diff --git a/docs/source/reference/api/eland.DataFrame.median.rst b/docs/sphinx/reference/api/eland.DataFrame.median.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.median.rst rename to docs/sphinx/reference/api/eland.DataFrame.median.rst diff --git a/docs/source/reference/api/eland.DataFrame.min.rst b/docs/sphinx/reference/api/eland.DataFrame.min.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.min.rst rename to docs/sphinx/reference/api/eland.DataFrame.min.rst diff --git a/docs/source/reference/api/eland.DataFrame.ndim.rst b/docs/sphinx/reference/api/eland.DataFrame.ndim.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.ndim.rst rename to docs/sphinx/reference/api/eland.DataFrame.ndim.rst diff --git a/docs/source/reference/api/eland.DataFrame.nunique.rst b/docs/sphinx/reference/api/eland.DataFrame.nunique.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.nunique.rst rename to docs/sphinx/reference/api/eland.DataFrame.nunique.rst diff --git a/docs/source/reference/api/eland.DataFrame.query.rst b/docs/sphinx/reference/api/eland.DataFrame.query.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.query.rst rename to docs/sphinx/reference/api/eland.DataFrame.query.rst diff --git a/docs/source/reference/api/eland.DataFrame.rst b/docs/sphinx/reference/api/eland.DataFrame.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.rst rename to docs/sphinx/reference/api/eland.DataFrame.rst diff --git a/docs/source/reference/api/eland.DataFrame.sample.rst b/docs/sphinx/reference/api/eland.DataFrame.sample.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.sample.rst rename to docs/sphinx/reference/api/eland.DataFrame.sample.rst diff --git a/docs/source/reference/api/eland.DataFrame.select_dtypes.rst b/docs/sphinx/reference/api/eland.DataFrame.select_dtypes.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.select_dtypes.rst rename to docs/sphinx/reference/api/eland.DataFrame.select_dtypes.rst diff --git a/docs/source/reference/api/eland.DataFrame.shape.rst b/docs/sphinx/reference/api/eland.DataFrame.shape.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.shape.rst rename to docs/sphinx/reference/api/eland.DataFrame.shape.rst diff --git a/docs/source/reference/api/eland.DataFrame.size.rst b/docs/sphinx/reference/api/eland.DataFrame.size.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.size.rst rename to docs/sphinx/reference/api/eland.DataFrame.size.rst diff --git a/docs/source/reference/api/eland.DataFrame.std.rst b/docs/sphinx/reference/api/eland.DataFrame.std.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.std.rst rename to docs/sphinx/reference/api/eland.DataFrame.std.rst diff --git a/docs/source/reference/api/eland.DataFrame.sum.rst b/docs/sphinx/reference/api/eland.DataFrame.sum.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.sum.rst rename to docs/sphinx/reference/api/eland.DataFrame.sum.rst diff --git a/docs/source/reference/api/eland.DataFrame.tail.rst b/docs/sphinx/reference/api/eland.DataFrame.tail.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.tail.rst rename to docs/sphinx/reference/api/eland.DataFrame.tail.rst diff --git a/docs/source/reference/api/eland.DataFrame.to_csv.rst b/docs/sphinx/reference/api/eland.DataFrame.to_csv.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.to_csv.rst rename to docs/sphinx/reference/api/eland.DataFrame.to_csv.rst diff --git a/docs/source/reference/api/eland.DataFrame.to_html.rst b/docs/sphinx/reference/api/eland.DataFrame.to_html.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.to_html.rst rename to docs/sphinx/reference/api/eland.DataFrame.to_html.rst diff --git a/docs/source/reference/api/eland.DataFrame.to_numpy.rst b/docs/sphinx/reference/api/eland.DataFrame.to_numpy.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.to_numpy.rst rename to docs/sphinx/reference/api/eland.DataFrame.to_numpy.rst diff --git a/docs/source/reference/api/eland.DataFrame.to_pandas.rst b/docs/sphinx/reference/api/eland.DataFrame.to_pandas.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.to_pandas.rst rename to docs/sphinx/reference/api/eland.DataFrame.to_pandas.rst diff --git a/docs/source/reference/api/eland.DataFrame.to_string.rst b/docs/sphinx/reference/api/eland.DataFrame.to_string.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.to_string.rst rename to docs/sphinx/reference/api/eland.DataFrame.to_string.rst diff --git a/docs/source/reference/api/eland.DataFrame.values.rst b/docs/sphinx/reference/api/eland.DataFrame.values.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.values.rst rename to docs/sphinx/reference/api/eland.DataFrame.values.rst diff --git a/docs/source/reference/api/eland.DataFrame.var.rst b/docs/sphinx/reference/api/eland.DataFrame.var.rst similarity index 100% rename from docs/source/reference/api/eland.DataFrame.var.rst rename to docs/sphinx/reference/api/eland.DataFrame.var.rst diff --git a/docs/source/reference/api/eland.Index.rst b/docs/sphinx/reference/api/eland.Index.rst similarity index 100% rename from docs/source/reference/api/eland.Index.rst rename to docs/sphinx/reference/api/eland.Index.rst diff --git a/docs/source/reference/api/eland.Series.add.rst b/docs/sphinx/reference/api/eland.Series.add.rst similarity index 100% rename from docs/source/reference/api/eland.Series.add.rst rename to docs/sphinx/reference/api/eland.Series.add.rst diff --git a/docs/source/reference/api/eland.Series.describe.rst b/docs/sphinx/reference/api/eland.Series.describe.rst similarity index 100% rename from docs/source/reference/api/eland.Series.describe.rst rename to docs/sphinx/reference/api/eland.Series.describe.rst diff --git a/docs/source/reference/api/eland.Series.div.rst b/docs/sphinx/reference/api/eland.Series.div.rst similarity index 100% rename from docs/source/reference/api/eland.Series.div.rst rename to docs/sphinx/reference/api/eland.Series.div.rst diff --git a/docs/source/reference/api/eland.Series.divide.rst b/docs/sphinx/reference/api/eland.Series.divide.rst similarity index 100% rename from docs/source/reference/api/eland.Series.divide.rst rename to docs/sphinx/reference/api/eland.Series.divide.rst diff --git a/docs/source/reference/api/eland.Series.dtype.rst b/docs/sphinx/reference/api/eland.Series.dtype.rst similarity index 100% rename from docs/source/reference/api/eland.Series.dtype.rst rename to docs/sphinx/reference/api/eland.Series.dtype.rst diff --git a/docs/source/reference/api/eland.Series.dtypes.rst b/docs/sphinx/reference/api/eland.Series.dtypes.rst similarity index 100% rename from docs/source/reference/api/eland.Series.dtypes.rst rename to docs/sphinx/reference/api/eland.Series.dtypes.rst diff --git a/docs/source/reference/api/eland.Series.empty.rst b/docs/sphinx/reference/api/eland.Series.empty.rst similarity index 100% rename from docs/source/reference/api/eland.Series.empty.rst rename to docs/sphinx/reference/api/eland.Series.empty.rst diff --git a/docs/source/reference/api/eland.Series.es_dtype.rst b/docs/sphinx/reference/api/eland.Series.es_dtype.rst similarity index 100% rename from docs/source/reference/api/eland.Series.es_dtype.rst rename to docs/sphinx/reference/api/eland.Series.es_dtype.rst diff --git a/docs/source/reference/api/eland.Series.es_dtypes.rst b/docs/sphinx/reference/api/eland.Series.es_dtypes.rst similarity index 100% rename from docs/source/reference/api/eland.Series.es_dtypes.rst rename to docs/sphinx/reference/api/eland.Series.es_dtypes.rst diff --git a/docs/source/reference/api/eland.Series.es_info.rst b/docs/sphinx/reference/api/eland.Series.es_info.rst similarity index 100% rename from docs/source/reference/api/eland.Series.es_info.rst rename to docs/sphinx/reference/api/eland.Series.es_info.rst diff --git a/docs/source/reference/api/eland.Series.filter.rst b/docs/sphinx/reference/api/eland.Series.filter.rst similarity index 100% rename from docs/source/reference/api/eland.Series.filter.rst rename to docs/sphinx/reference/api/eland.Series.filter.rst diff --git a/docs/source/reference/api/eland.Series.floordiv.rst b/docs/sphinx/reference/api/eland.Series.floordiv.rst similarity index 100% rename from docs/source/reference/api/eland.Series.floordiv.rst rename to docs/sphinx/reference/api/eland.Series.floordiv.rst diff --git a/docs/source/reference/api/eland.Series.head.rst b/docs/sphinx/reference/api/eland.Series.head.rst similarity index 100% rename from docs/source/reference/api/eland.Series.head.rst rename to docs/sphinx/reference/api/eland.Series.head.rst diff --git a/docs/source/reference/api/eland.Series.hist.rst b/docs/sphinx/reference/api/eland.Series.hist.rst similarity index 100% rename from docs/source/reference/api/eland.Series.hist.rst rename to docs/sphinx/reference/api/eland.Series.hist.rst diff --git a/docs/source/reference/api/eland.Series.index.rst b/docs/sphinx/reference/api/eland.Series.index.rst similarity index 100% rename from docs/source/reference/api/eland.Series.index.rst rename to docs/sphinx/reference/api/eland.Series.index.rst diff --git a/docs/source/reference/api/eland.Series.isin.rst b/docs/sphinx/reference/api/eland.Series.isin.rst similarity index 100% rename from docs/source/reference/api/eland.Series.isin.rst rename to docs/sphinx/reference/api/eland.Series.isin.rst diff --git a/docs/source/reference/api/eland.Series.isna.rst b/docs/sphinx/reference/api/eland.Series.isna.rst similarity index 100% rename from docs/source/reference/api/eland.Series.isna.rst rename to docs/sphinx/reference/api/eland.Series.isna.rst diff --git a/docs/source/reference/api/eland.Series.isnull.rst b/docs/sphinx/reference/api/eland.Series.isnull.rst similarity index 100% rename from docs/source/reference/api/eland.Series.isnull.rst rename to docs/sphinx/reference/api/eland.Series.isnull.rst diff --git a/docs/source/reference/api/eland.Series.mad.rst b/docs/sphinx/reference/api/eland.Series.mad.rst similarity index 100% rename from docs/source/reference/api/eland.Series.mad.rst rename to docs/sphinx/reference/api/eland.Series.mad.rst diff --git a/docs/source/reference/api/eland.Series.max.rst b/docs/sphinx/reference/api/eland.Series.max.rst similarity index 100% rename from docs/source/reference/api/eland.Series.max.rst rename to docs/sphinx/reference/api/eland.Series.max.rst diff --git a/docs/source/reference/api/eland.Series.mean.rst b/docs/sphinx/reference/api/eland.Series.mean.rst similarity index 100% rename from docs/source/reference/api/eland.Series.mean.rst rename to docs/sphinx/reference/api/eland.Series.mean.rst diff --git a/docs/source/reference/api/eland.Series.median.rst b/docs/sphinx/reference/api/eland.Series.median.rst similarity index 100% rename from docs/source/reference/api/eland.Series.median.rst rename to docs/sphinx/reference/api/eland.Series.median.rst diff --git a/docs/source/reference/api/eland.Series.min.rst b/docs/sphinx/reference/api/eland.Series.min.rst similarity index 100% rename from docs/source/reference/api/eland.Series.min.rst rename to docs/sphinx/reference/api/eland.Series.min.rst diff --git a/docs/source/reference/api/eland.Series.mod.rst b/docs/sphinx/reference/api/eland.Series.mod.rst similarity index 100% rename from docs/source/reference/api/eland.Series.mod.rst rename to docs/sphinx/reference/api/eland.Series.mod.rst diff --git a/docs/source/reference/api/eland.Series.mul.rst b/docs/sphinx/reference/api/eland.Series.mul.rst similarity index 100% rename from docs/source/reference/api/eland.Series.mul.rst rename to docs/sphinx/reference/api/eland.Series.mul.rst diff --git a/docs/source/reference/api/eland.Series.multiply.rst b/docs/sphinx/reference/api/eland.Series.multiply.rst similarity index 100% rename from docs/source/reference/api/eland.Series.multiply.rst rename to docs/sphinx/reference/api/eland.Series.multiply.rst diff --git a/docs/source/reference/api/eland.Series.name.rst b/docs/sphinx/reference/api/eland.Series.name.rst similarity index 100% rename from docs/source/reference/api/eland.Series.name.rst rename to docs/sphinx/reference/api/eland.Series.name.rst diff --git a/docs/source/reference/api/eland.Series.ndim.rst b/docs/sphinx/reference/api/eland.Series.ndim.rst similarity index 100% rename from docs/source/reference/api/eland.Series.ndim.rst rename to docs/sphinx/reference/api/eland.Series.ndim.rst diff --git a/docs/source/reference/api/eland.Series.notna.rst b/docs/sphinx/reference/api/eland.Series.notna.rst similarity index 100% rename from docs/source/reference/api/eland.Series.notna.rst rename to docs/sphinx/reference/api/eland.Series.notna.rst diff --git a/docs/source/reference/api/eland.Series.notnull.rst b/docs/sphinx/reference/api/eland.Series.notnull.rst similarity index 100% rename from docs/source/reference/api/eland.Series.notnull.rst rename to docs/sphinx/reference/api/eland.Series.notnull.rst diff --git a/docs/source/reference/api/eland.Series.nunique.rst b/docs/sphinx/reference/api/eland.Series.nunique.rst similarity index 100% rename from docs/source/reference/api/eland.Series.nunique.rst rename to docs/sphinx/reference/api/eland.Series.nunique.rst diff --git a/docs/source/reference/api/eland.Series.pow.rst b/docs/sphinx/reference/api/eland.Series.pow.rst similarity index 100% rename from docs/source/reference/api/eland.Series.pow.rst rename to docs/sphinx/reference/api/eland.Series.pow.rst diff --git a/docs/source/reference/api/eland.Series.radd.rst b/docs/sphinx/reference/api/eland.Series.radd.rst similarity index 100% rename from docs/source/reference/api/eland.Series.radd.rst rename to docs/sphinx/reference/api/eland.Series.radd.rst diff --git a/docs/source/reference/api/eland.Series.rdiv.rst b/docs/sphinx/reference/api/eland.Series.rdiv.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rdiv.rst rename to docs/sphinx/reference/api/eland.Series.rdiv.rst diff --git a/docs/source/reference/api/eland.Series.rdivide.rst b/docs/sphinx/reference/api/eland.Series.rdivide.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rdivide.rst rename to docs/sphinx/reference/api/eland.Series.rdivide.rst diff --git a/docs/source/reference/api/eland.Series.rename.rst b/docs/sphinx/reference/api/eland.Series.rename.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rename.rst rename to docs/sphinx/reference/api/eland.Series.rename.rst diff --git a/docs/source/reference/api/eland.Series.rfloordiv.rst b/docs/sphinx/reference/api/eland.Series.rfloordiv.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rfloordiv.rst rename to docs/sphinx/reference/api/eland.Series.rfloordiv.rst diff --git a/docs/source/reference/api/eland.Series.rmod.rst b/docs/sphinx/reference/api/eland.Series.rmod.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rmod.rst rename to docs/sphinx/reference/api/eland.Series.rmod.rst diff --git a/docs/source/reference/api/eland.Series.rmul.rst b/docs/sphinx/reference/api/eland.Series.rmul.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rmul.rst rename to docs/sphinx/reference/api/eland.Series.rmul.rst diff --git a/docs/source/reference/api/eland.Series.rmultiply.rst b/docs/sphinx/reference/api/eland.Series.rmultiply.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rmultiply.rst rename to docs/sphinx/reference/api/eland.Series.rmultiply.rst diff --git a/docs/source/reference/api/eland.Series.rpow.rst b/docs/sphinx/reference/api/eland.Series.rpow.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rpow.rst rename to docs/sphinx/reference/api/eland.Series.rpow.rst diff --git a/docs/source/reference/api/eland.Series.rst b/docs/sphinx/reference/api/eland.Series.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rst rename to docs/sphinx/reference/api/eland.Series.rst diff --git a/docs/source/reference/api/eland.Series.rsub.rst b/docs/sphinx/reference/api/eland.Series.rsub.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rsub.rst rename to docs/sphinx/reference/api/eland.Series.rsub.rst diff --git a/docs/source/reference/api/eland.Series.rsubtract.rst b/docs/sphinx/reference/api/eland.Series.rsubtract.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rsubtract.rst rename to docs/sphinx/reference/api/eland.Series.rsubtract.rst diff --git a/docs/source/reference/api/eland.Series.rtruediv.rst b/docs/sphinx/reference/api/eland.Series.rtruediv.rst similarity index 100% rename from docs/source/reference/api/eland.Series.rtruediv.rst rename to docs/sphinx/reference/api/eland.Series.rtruediv.rst diff --git a/docs/source/reference/api/eland.Series.sample.rst b/docs/sphinx/reference/api/eland.Series.sample.rst similarity index 100% rename from docs/source/reference/api/eland.Series.sample.rst rename to docs/sphinx/reference/api/eland.Series.sample.rst diff --git a/docs/source/reference/api/eland.Series.shape.rst b/docs/sphinx/reference/api/eland.Series.shape.rst similarity index 100% rename from docs/source/reference/api/eland.Series.shape.rst rename to docs/sphinx/reference/api/eland.Series.shape.rst diff --git a/docs/source/reference/api/eland.Series.size.rst b/docs/sphinx/reference/api/eland.Series.size.rst similarity index 100% rename from docs/source/reference/api/eland.Series.size.rst rename to docs/sphinx/reference/api/eland.Series.size.rst diff --git a/docs/source/reference/api/eland.Series.std.rst b/docs/sphinx/reference/api/eland.Series.std.rst similarity index 100% rename from docs/source/reference/api/eland.Series.std.rst rename to docs/sphinx/reference/api/eland.Series.std.rst diff --git a/docs/source/reference/api/eland.Series.sub.rst b/docs/sphinx/reference/api/eland.Series.sub.rst similarity index 100% rename from docs/source/reference/api/eland.Series.sub.rst rename to docs/sphinx/reference/api/eland.Series.sub.rst diff --git a/docs/source/reference/api/eland.Series.subtract.rst b/docs/sphinx/reference/api/eland.Series.subtract.rst similarity index 100% rename from docs/source/reference/api/eland.Series.subtract.rst rename to docs/sphinx/reference/api/eland.Series.subtract.rst diff --git a/docs/source/reference/api/eland.Series.sum.rst b/docs/sphinx/reference/api/eland.Series.sum.rst similarity index 100% rename from docs/source/reference/api/eland.Series.sum.rst rename to docs/sphinx/reference/api/eland.Series.sum.rst diff --git a/docs/source/reference/api/eland.Series.tail.rst b/docs/sphinx/reference/api/eland.Series.tail.rst similarity index 100% rename from docs/source/reference/api/eland.Series.tail.rst rename to docs/sphinx/reference/api/eland.Series.tail.rst diff --git a/docs/source/reference/api/eland.Series.to_numpy.rst b/docs/sphinx/reference/api/eland.Series.to_numpy.rst similarity index 100% rename from docs/source/reference/api/eland.Series.to_numpy.rst rename to docs/sphinx/reference/api/eland.Series.to_numpy.rst diff --git a/docs/source/reference/api/eland.Series.to_pandas.rst b/docs/sphinx/reference/api/eland.Series.to_pandas.rst similarity index 100% rename from docs/source/reference/api/eland.Series.to_pandas.rst rename to docs/sphinx/reference/api/eland.Series.to_pandas.rst diff --git a/docs/source/reference/api/eland.Series.to_string.rst b/docs/sphinx/reference/api/eland.Series.to_string.rst similarity index 100% rename from docs/source/reference/api/eland.Series.to_string.rst rename to docs/sphinx/reference/api/eland.Series.to_string.rst diff --git a/docs/source/reference/api/eland.Series.truediv.rst b/docs/sphinx/reference/api/eland.Series.truediv.rst similarity index 100% rename from docs/source/reference/api/eland.Series.truediv.rst rename to docs/sphinx/reference/api/eland.Series.truediv.rst diff --git a/docs/source/reference/api/eland.Series.value_counts.rst b/docs/sphinx/reference/api/eland.Series.value_counts.rst similarity index 100% rename from docs/source/reference/api/eland.Series.value_counts.rst rename to docs/sphinx/reference/api/eland.Series.value_counts.rst diff --git a/docs/source/reference/api/eland.Series.var.rst b/docs/sphinx/reference/api/eland.Series.var.rst similarity index 100% rename from docs/source/reference/api/eland.Series.var.rst rename to docs/sphinx/reference/api/eland.Series.var.rst diff --git a/docs/source/reference/api/eland.csv_to_eland.rst b/docs/sphinx/reference/api/eland.csv_to_eland.rst similarity index 100% rename from docs/source/reference/api/eland.csv_to_eland.rst rename to docs/sphinx/reference/api/eland.csv_to_eland.rst diff --git a/docs/source/reference/api/eland.eland_to_pandas.rst b/docs/sphinx/reference/api/eland.eland_to_pandas.rst similarity index 100% rename from docs/source/reference/api/eland.eland_to_pandas.rst rename to docs/sphinx/reference/api/eland.eland_to_pandas.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.agg.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.agg.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.agg.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.agg.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.aggregate.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.aggregate.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.aggregate.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.aggregate.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.count.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.count.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.count.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.count.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.mad.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.mad.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.mad.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.mad.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.max.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.max.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.max.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.max.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.mean.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.mean.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.mean.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.mean.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.median.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.median.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.median.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.median.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.min.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.min.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.min.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.min.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.nunique.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.nunique.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.nunique.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.nunique.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.std.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.std.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.std.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.std.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.sum.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.sum.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.sum.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.sum.rst diff --git a/docs/source/reference/api/eland.groupby.DataFrameGroupBy.var.rst b/docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.var.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.DataFrameGroupBy.var.rst rename to docs/sphinx/reference/api/eland.groupby.DataFrameGroupBy.var.rst diff --git a/docs/source/reference/api/eland.groupby.GroupBy.rst b/docs/sphinx/reference/api/eland.groupby.GroupBy.rst similarity index 100% rename from docs/source/reference/api/eland.groupby.GroupBy.rst rename to docs/sphinx/reference/api/eland.groupby.GroupBy.rst diff --git a/docs/source/reference/api/eland.ml.MLModel.delete_model.rst b/docs/sphinx/reference/api/eland.ml.MLModel.delete_model.rst similarity index 100% rename from docs/source/reference/api/eland.ml.MLModel.delete_model.rst rename to docs/sphinx/reference/api/eland.ml.MLModel.delete_model.rst diff --git a/docs/source/reference/api/eland.ml.MLModel.exists_model.rst b/docs/sphinx/reference/api/eland.ml.MLModel.exists_model.rst similarity index 100% rename from docs/source/reference/api/eland.ml.MLModel.exists_model.rst rename to docs/sphinx/reference/api/eland.ml.MLModel.exists_model.rst diff --git a/docs/source/reference/api/eland.ml.MLModel.import_model.rst b/docs/sphinx/reference/api/eland.ml.MLModel.import_model.rst similarity index 100% rename from docs/source/reference/api/eland.ml.MLModel.import_model.rst rename to docs/sphinx/reference/api/eland.ml.MLModel.import_model.rst diff --git a/docs/source/reference/api/eland.ml.MLModel.predict.rst b/docs/sphinx/reference/api/eland.ml.MLModel.predict.rst similarity index 100% rename from docs/source/reference/api/eland.ml.MLModel.predict.rst rename to docs/sphinx/reference/api/eland.ml.MLModel.predict.rst diff --git a/docs/source/reference/api/eland.ml.MLModel.rst b/docs/sphinx/reference/api/eland.ml.MLModel.rst similarity index 100% rename from docs/source/reference/api/eland.ml.MLModel.rst rename to docs/sphinx/reference/api/eland.ml.MLModel.rst diff --git a/docs/source/reference/api/eland.pandas_to_eland.rst b/docs/sphinx/reference/api/eland.pandas_to_eland.rst similarity index 100% rename from docs/source/reference/api/eland.pandas_to_eland.rst rename to docs/sphinx/reference/api/eland.pandas_to_eland.rst diff --git a/docs/source/reference/dataframe.rst b/docs/sphinx/reference/dataframe.rst similarity index 100% rename from docs/source/reference/dataframe.rst rename to docs/sphinx/reference/dataframe.rst diff --git a/docs/source/reference/general_utility_functions.rst b/docs/sphinx/reference/general_utility_functions.rst similarity index 100% rename from docs/source/reference/general_utility_functions.rst rename to docs/sphinx/reference/general_utility_functions.rst diff --git a/docs/source/reference/index.rst b/docs/sphinx/reference/index.rst similarity index 100% rename from docs/source/reference/index.rst rename to docs/sphinx/reference/index.rst diff --git a/docs/source/reference/indexing.rst b/docs/sphinx/reference/indexing.rst similarity index 100% rename from docs/source/reference/indexing.rst rename to docs/sphinx/reference/indexing.rst diff --git a/docs/source/reference/io.rst b/docs/sphinx/reference/io.rst similarity index 100% rename from docs/source/reference/io.rst rename to docs/sphinx/reference/io.rst diff --git a/docs/source/reference/ml.rst b/docs/sphinx/reference/ml.rst similarity index 100% rename from docs/source/reference/ml.rst rename to docs/sphinx/reference/ml.rst diff --git a/docs/source/reference/series.rst b/docs/sphinx/reference/series.rst similarity index 100% rename from docs/source/reference/series.rst rename to docs/sphinx/reference/series.rst diff --git a/docs/source/reference/supported_apis.rst b/docs/sphinx/reference/supported_apis.rst similarity index 100% rename from docs/source/reference/supported_apis.rst rename to docs/sphinx/reference/supported_apis.rst