diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index da431a6..c59a71e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -154,9 +154,9 @@ currently using a minimum version of PyCharm 2019.2.4. - Setup Elasticsearch instance (assumes `localhost:9200`), and run `python -m eland.tests.setup_tests` to setup test environment -*note this modifies Elasticsearch indices* -- Run `pytest --doctest-modules` to validate install +- Run `pytest --nbval --doctest-modules` to validate install ### Documentation - Install documentation requirements. Open terminal in virtual - environment and run `pip install -r requirements-dev.txt` + environment and run `pip install -r docs/requirements-docs.txt` diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt index 73b6b25..61f1395 100644 --- a/docs/requirements-docs.txt +++ b/docs/requirements-docs.txt @@ -4,3 +4,4 @@ matplotlib pytest>=5.2.1 git+https://github.com/pandas-dev/pandas-sphinx-theme.git@master numpydoc==0.8 +nbsphinx diff --git a/docs/source/conf.py b/docs/source/conf.py index 05dfbc7..5897d58 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -55,6 +55,7 @@ extensions = [ 'numpydoc', "matplotlib.sphinxext.plot_directive", "sphinx.ext.todo", + "nbsphinx", ] doctest_global_setup = ''' @@ -91,7 +92,7 @@ templates_path = ['_templates'] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [] +exclude_patterns = ['**.ipynb_checkpoints'] # -- Options for HTML output ------------------------------------------------- diff --git a/docs/source/examples/data/online-retail.csv.gz b/docs/source/examples/data/online-retail.csv.gz new file mode 100644 index 0000000..369660e Binary files /dev/null and b/docs/source/examples/data/online-retail.csv.gz differ diff --git a/docs/source/examples/demo_notebook.ipynb b/docs/source/examples/demo_notebook.ipynb new file mode 100644 index 0000000..1786ce1 --- /dev/null +++ b/docs/source/examples/demo_notebook.ipynb @@ -0,0 +1,3583 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Eland Demo Notebook" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [], + "source": [ + "import eland as ed\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from elasticsearch import Elasticsearch\n", + "\n", + "# Import standard test settings for consistent results\n", + "from eland.conftest import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compare eland DataFrame vs pandas DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create an eland.DataFrame from a `flights` index" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [], + "source": [ + "ed_flights = ed.read_es('localhost', 'flights')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "eland.dataframe.DataFrame" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(ed_flights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compare to pandas DataFrame (created from the same data)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [], + "source": [ + "pd_flights = ed.eland_to_pandas(ed_flights)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(pd_flights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Attributes and underlying data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['AvgTicketPrice', 'Cancelled', 'Carrier', 'Dest', 'DestAirportID', 'DestCityName',\n", + " 'DestCountry', 'DestLocation', 'DestRegion', 'DestWeather', 'DistanceKilometers',\n", + " 'DistanceMiles', 'FlightDelay', 'FlightDelayMin', 'FlightDelayType', 'FlightNum',\n", + " 'FlightTimeHour', 'FlightTimeMin', 'Origin', 'OriginAirportID', 'OriginCityName',\n", + " 'OriginCountry', 'OriginLocation', 'OriginRegion', 'OriginWeather', 'dayOfWeek',\n", + " 'timestamp'],\n", + " dtype='object')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['AvgTicketPrice', 'Cancelled', 'Carrier', 'Dest', 'DestAirportID', 'DestCityName',\n", + " 'DestCountry', 'DestLocation', 'DestRegion', 'DestWeather', 'DistanceKilometers',\n", + " 'DistanceMiles', 'FlightDelay', 'FlightDelayMin', 'FlightDelayType', 'FlightNum',\n", + " 'FlightTimeHour', 'FlightTimeMin', 'Origin', 'OriginAirportID', 'OriginCityName',\n", + " 'OriginCountry', 'OriginLocation', 'OriginRegion', 'OriginWeather', 'dayOfWeek',\n", + " 'timestamp'],\n", + " dtype='object')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AvgTicketPrice float64\n", + "Cancelled bool\n", + "Carrier object\n", + "Dest object\n", + "DestAirportID object\n", + " ... \n", + "OriginLocation object\n", + "OriginRegion object\n", + "OriginWeather object\n", + "dayOfWeek int64\n", + "timestamp datetime64[ns]\n", + "Length: 27, dtype: object" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AvgTicketPrice float64\n", + "Cancelled bool\n", + "Carrier object\n", + "Dest object\n", + "DestAirportID object\n", + " ... \n", + "OriginLocation object\n", + "OriginRegion object\n", + "OriginWeather object\n", + "dayOfWeek int64\n", + "timestamp datetime64[ns]\n", + "Length: 27, dtype: object" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.dtypes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.select_dtypes" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AvgTicketPriceDistanceKilometers...FlightTimeMindayOfWeek
0841.26564216492.326654...1030.7704160
1882.9826628823.400140...464.3894810
2190.6369040.000000...0.0000000
3181.694216555.737767...222.7490590
4730.04177813358.244200...785.7790710
..................
130541080.4462798058.581753...402.9290886
13055646.6129417088.598322...644.4180296
13056997.75187610920.652972...937.5408116
130571102.81446518748.859647...1697.4049716
13058858.14433716809.141923...1610.7618276
\n", + "

13059 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " AvgTicketPrice DistanceKilometers ... FlightTimeMin dayOfWeek\n", + "0 841.265642 16492.326654 ... 1030.770416 0\n", + "1 882.982662 8823.400140 ... 464.389481 0\n", + "2 190.636904 0.000000 ... 0.000000 0\n", + "3 181.694216 555.737767 ... 222.749059 0\n", + "4 730.041778 13358.244200 ... 785.779071 0\n", + "... ... ... ... ... ...\n", + "13054 1080.446279 8058.581753 ... 402.929088 6\n", + "13055 646.612941 7088.598322 ... 644.418029 6\n", + "13056 997.751876 10920.652972 ... 937.540811 6\n", + "13057 1102.814465 18748.859647 ... 1697.404971 6\n", + "13058 858.144337 16809.141923 ... 1610.761827 6\n", + "\n", + "[13059 rows x 7 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.select_dtypes(include=np.number)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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", + "
AvgTicketPriceDistanceKilometers...FlightTimeMindayOfWeek
0841.26564216492.326654...1030.7704160
1882.9826628823.400140...464.3894810
2190.6369040.000000...0.0000000
3181.694216555.737767...222.7490590
4730.04177813358.244200...785.7790710
..................
130541080.4462798058.581753...402.9290886
13055646.6129417088.598322...644.4180296
13056997.75187610920.652972...937.5408116
130571102.81446518748.859647...1697.4049716
13058858.14433716809.141923...1610.7618276
\n", + "
\n", + "

13059 rows × 7 columns

" + ], + "text/plain": [ + " AvgTicketPrice DistanceKilometers ... FlightTimeMin dayOfWeek\n", + "0 841.265642 16492.326654 ... 1030.770416 0\n", + "1 882.982662 8823.400140 ... 464.389481 0\n", + "2 190.636904 0.000000 ... 0.000000 0\n", + "3 181.694216 555.737767 ... 222.749059 0\n", + "4 730.041778 13358.244200 ... 785.779071 0\n", + "... ... ... ... ... ...\n", + "13054 1080.446279 8058.581753 ... 402.929088 6\n", + "13055 646.612941 7088.598322 ... 644.418029 6\n", + "13056 997.751876 10920.652972 ... 937.540811 6\n", + "13057 1102.814465 18748.859647 ... 1697.404971 6\n", + "13058 858.144337 16809.141923 ... 1610.761827 6\n", + "\n", + "[13059 rows x 7 columns]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.select_dtypes(include=np.number)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.empty" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.empty" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.empty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(13059, 27)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(13059, 27)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.index\n", + "\n", + "Note, `eland.DataFrame.index` does not mirror `pandas.DataFrame.index`. " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n", + " ...\n", + " '13049', '13050', '13051', '13052', '13053', '13054', '13055', '13056', '13057', '13058'],\n", + " dtype='object', length=13059)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.index" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# NBVAL_IGNORE_OUTPUT\n", + "ed_flights.index" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'_id'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.index.index_field" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.values\n", + "\n", + "Note, `eland.DataFrame.values` is not supported." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[841.2656419677076, False, 'Kibana Airlines', ..., 'Sunny', 0,\n", + " Timestamp('2018-01-01 00:00:00')],\n", + " [882.9826615595518, False, 'Logstash Airways', ..., 'Clear', 0,\n", + " Timestamp('2018-01-01 18:27:00')],\n", + " [190.6369038508356, False, 'Logstash Airways', ..., 'Rain', 0,\n", + " Timestamp('2018-01-01 17:11:14')],\n", + " ...,\n", + " [997.7518761454494, False, 'Logstash Airways', ..., 'Sunny', 6,\n", + " Timestamp('2018-02-11 04:09:27')],\n", + " [1102.8144645388556, False, 'JetBeats', ..., 'Hail', 6,\n", + " Timestamp('2018-02-11 08:28:21')],\n", + " [858.1443369038839, False, 'JetBeats', ..., 'Rain', 6,\n", + " Timestamp('2018-02-11 14:54:34')]], dtype=object)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.values" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This method would scan/scroll the entire Elasticsearch index(s) into memory. If this is explicitly required, and there is sufficient memory, call `ed.eland_to_pandas(ed_df).values`\n" + ] + } + ], + "source": [ + "try:\n", + " ed_flights.values\n", + "except AttributeError as e:\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Indexing, iteration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.head" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "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", + "
AvgTicketPriceCancelled...dayOfWeektimestamp
0841.265642False...02018-01-01 00:00:00
1882.982662False...02018-01-01 18:27:00
2190.636904False...02018-01-01 17:11:14
3181.694216True...02018-01-01 10:33:28
4730.041778False...02018-01-01 05:13:00
\n", + "

5 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " AvgTicketPrice Cancelled ... dayOfWeek timestamp\n", + "0 841.265642 False ... 0 2018-01-01 00:00:00\n", + "1 882.982662 False ... 0 2018-01-01 18:27:00\n", + "2 190.636904 False ... 0 2018-01-01 17:11:14\n", + "3 181.694216 True ... 0 2018-01-01 10:33:28\n", + "4 730.041778 False ... 0 2018-01-01 05:13:00\n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "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", + "
AvgTicketPriceCancelled...dayOfWeektimestamp
0841.265642False...02018-01-01 00:00:00
1882.982662False...02018-01-01 18:27:00
2190.636904False...02018-01-01 17:11:14
3181.694216True...02018-01-01 10:33:28
4730.041778False...02018-01-01 05:13:00
\n", + "
\n", + "

5 rows × 27 columns

" + ], + "text/plain": [ + " AvgTicketPrice Cancelled ... dayOfWeek timestamp\n", + "0 841.265642 False ... 0 2018-01-01 00:00:00\n", + "1 882.982662 False ... 0 2018-01-01 18:27:00\n", + "2 190.636904 False ... 0 2018-01-01 17:11:14\n", + "3 181.694216 True ... 0 2018-01-01 10:33:28\n", + "4 730.041778 False ... 0 2018-01-01 05:13:00\n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## DataFrame.tail" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "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", + "
AvgTicketPriceCancelled...dayOfWeektimestamp
130541080.446279False...62018-02-11 20:42:25
13055646.612941False...62018-02-11 01:41:57
13056997.751876False...62018-02-11 04:09:27
130571102.814465False...62018-02-11 08:28:21
13058858.144337False...62018-02-11 14:54:34
\n", + "

5 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " AvgTicketPrice Cancelled ... dayOfWeek timestamp\n", + "13054 1080.446279 False ... 6 2018-02-11 20:42:25\n", + "13055 646.612941 False ... 6 2018-02-11 01:41:57\n", + "13056 997.751876 False ... 6 2018-02-11 04:09:27\n", + "13057 1102.814465 False ... 6 2018-02-11 08:28:21\n", + "13058 858.144337 False ... 6 2018-02-11 14:54:34\n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "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", + "
AvgTicketPriceCancelled...dayOfWeektimestamp
130541080.446279False...62018-02-11 20:42:25
13055646.612941False...62018-02-11 01:41:57
13056997.751876False...62018-02-11 04:09:27
130571102.814465False...62018-02-11 08:28:21
13058858.144337False...62018-02-11 14:54:34
\n", + "
\n", + "

5 rows × 27 columns

" + ], + "text/plain": [ + " AvgTicketPrice Cancelled ... dayOfWeek timestamp\n", + "13054 1080.446279 False ... 6 2018-02-11 20:42:25\n", + "13055 646.612941 False ... 6 2018-02-11 01:41:57\n", + "13056 997.751876 False ... 6 2018-02-11 04:09:27\n", + "13057 1102.814465 False ... 6 2018-02-11 08:28:21\n", + "13058 858.144337 False ... 6 2018-02-11 14:54:34\n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.keys" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['AvgTicketPrice', 'Cancelled', 'Carrier', 'Dest', 'DestAirportID', 'DestCityName',\n", + " 'DestCountry', 'DestLocation', 'DestRegion', 'DestWeather', 'DistanceKilometers',\n", + " 'DistanceMiles', 'FlightDelay', 'FlightDelayMin', 'FlightDelayType', 'FlightNum',\n", + " 'FlightTimeHour', 'FlightTimeMin', 'Origin', 'OriginAirportID', 'OriginCityName',\n", + " 'OriginCountry', 'OriginLocation', 'OriginRegion', 'OriginWeather', 'dayOfWeek',\n", + " 'timestamp'],\n", + " dtype='object')" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['AvgTicketPrice', 'Cancelled', 'Carrier', 'Dest', 'DestAirportID', 'DestCityName',\n", + " 'DestCountry', 'DestLocation', 'DestRegion', 'DestWeather', 'DistanceKilometers',\n", + " 'DistanceMiles', 'FlightDelay', 'FlightDelayMin', 'FlightDelayType', 'FlightNum',\n", + " 'FlightTimeHour', 'FlightTimeMin', 'Origin', 'OriginAirportID', 'OriginCityName',\n", + " 'OriginCountry', 'OriginLocation', 'OriginRegion', 'OriginWeather', 'dayOfWeek',\n", + " 'timestamp'],\n", + " dtype='object')" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.keys()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.get" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 Kibana Airlines\n", + "1 Logstash Airways\n", + "2 Logstash Airways\n", + "3 Kibana Airlines\n", + "4 Kibana Airlines\n", + " ... \n", + "13054 Logstash Airways\n", + "13055 Logstash Airways\n", + "13056 Logstash Airways\n", + "13057 JetBeats\n", + "13058 JetBeats\n", + "Name: Carrier, Length: 13059, dtype: object" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.get('Carrier')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 Kibana Airlines\n", + "1 Logstash Airways\n", + "2 Logstash Airways\n", + "3 Kibana Airlines\n", + "4 Kibana Airlines\n", + " ... \n", + "13054 Logstash Airways\n", + "13055 Logstash Airways\n", + "13056 Logstash Airways\n", + "13057 JetBeats\n", + "13058 JetBeats\n", + "Name: Carrier, Length: 13059, dtype: object" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.get('Carrier')" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "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", + "
CarrierOrigin
0Kibana AirlinesFrankfurt am Main Airport
1Logstash AirwaysCape Town International Airport
2Logstash AirwaysVenice Marco Polo Airport
3Kibana AirlinesNaples International Airport
4Kibana AirlinesLicenciado Benito Juarez International Airport
.........
13054Logstash AirwaysPisa International Airport
13055Logstash AirwaysWinnipeg / James Armstrong Richardson Internat...
13056Logstash AirwaysLicenciado Benito Juarez International Airport
13057JetBeatsItami Airport
13058JetBeatsAdelaide International Airport
\n", + "

13059 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " Carrier Origin\n", + "0 Kibana Airlines Frankfurt am Main Airport\n", + "1 Logstash Airways Cape Town International Airport\n", + "2 Logstash Airways Venice Marco Polo Airport\n", + "3 Kibana Airlines Naples International Airport\n", + "4 Kibana Airlines Licenciado Benito Juarez International Airport\n", + "... ... ...\n", + "13054 Logstash Airways Pisa International Airport\n", + "13055 Logstash Airways Winnipeg / James Armstrong Richardson Internat...\n", + "13056 Logstash Airways Licenciado Benito Juarez International Airport\n", + "13057 JetBeats Itami Airport\n", + "13058 JetBeats Adelaide International Airport\n", + "\n", + "[13059 rows x 2 columns]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.get(['Carrier', 'Origin'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "List input not currently supported by `eland.DataFrame.get`" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "unhashable type: 'list'\n" + ] + } + ], + "source": [ + "try:\n", + " ed_flights.get(['Carrier', 'Origin'])\n", + "except TypeError as e:\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.query" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "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", + "
AvgTicketPriceCancelled...dayOfWeektimestamp
8960.869736True...02018-01-01 12:09:35
26975.812632True...02018-01-01 15:38:32
311946.358410True...02018-01-01 11:51:12
651975.383864True...22018-01-03 21:13:17
950907.836523True...22018-01-03 05:14:51
..................
12820909.973606True...52018-02-10 05:11:35
12906983.429244True...62018-02-11 06:19:58
129181136.678150True...62018-02-11 16:03:10
129191105.211803True...62018-02-11 05:36:05
130131055.350213True...62018-02-11 13:20:16
\n", + "

68 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " AvgTicketPrice Cancelled ... dayOfWeek timestamp\n", + "8 960.869736 True ... 0 2018-01-01 12:09:35\n", + "26 975.812632 True ... 0 2018-01-01 15:38:32\n", + "311 946.358410 True ... 0 2018-01-01 11:51:12\n", + "651 975.383864 True ... 2 2018-01-03 21:13:17\n", + "950 907.836523 True ... 2 2018-01-03 05:14:51\n", + "... ... ... ... ... ...\n", + "12820 909.973606 True ... 5 2018-02-10 05:11:35\n", + "12906 983.429244 True ... 6 2018-02-11 06:19:58\n", + "12918 1136.678150 True ... 6 2018-02-11 16:03:10\n", + "12919 1105.211803 True ... 6 2018-02-11 05:36:05\n", + "13013 1055.350213 True ... 6 2018-02-11 13:20:16\n", + "\n", + "[68 rows x 27 columns]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.query('Carrier == \"Kibana Airlines\" & AvgTicketPrice > 900.0 & Cancelled == True')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`eland.DataFrame.query` requires qualifier on bool i.e.\n", + "\n", + "`ed_flights.query('Carrier == \"Kibana Airlines\" & AvgTicketPrice > 900.0 & Cancelled')` fails" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "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", + "
AvgTicketPriceCancelled...dayOfWeektimestamp
8960.869736True...02018-01-01 12:09:35
26975.812632True...02018-01-01 15:38:32
311946.358410True...02018-01-01 11:51:12
651975.383864True...22018-01-03 21:13:17
950907.836523True...22018-01-03 05:14:51
..................
12820909.973606True...52018-02-10 05:11:35
12906983.429244True...62018-02-11 06:19:58
129181136.678150True...62018-02-11 16:03:10
129191105.211803True...62018-02-11 05:36:05
130131055.350213True...62018-02-11 13:20:16
\n", + "
\n", + "

68 rows × 27 columns

" + ], + "text/plain": [ + " AvgTicketPrice Cancelled ... dayOfWeek timestamp\n", + "8 960.869736 True ... 0 2018-01-01 12:09:35\n", + "26 975.812632 True ... 0 2018-01-01 15:38:32\n", + "311 946.358410 True ... 0 2018-01-01 11:51:12\n", + "651 975.383864 True ... 2 2018-01-03 21:13:17\n", + "950 907.836523 True ... 2 2018-01-03 05:14:51\n", + "... ... ... ... ... ...\n", + "12820 909.973606 True ... 5 2018-02-10 05:11:35\n", + "12906 983.429244 True ... 6 2018-02-11 06:19:58\n", + "12918 1136.678150 True ... 6 2018-02-11 16:03:10\n", + "12919 1105.211803 True ... 6 2018-02-11 05:36:05\n", + "13013 1055.350213 True ... 6 2018-02-11 13:20:16\n", + "\n", + "[68 rows x 27 columns]" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.query('Carrier == \"Kibana Airlines\" & AvgTicketPrice > 900.0 & Cancelled == True')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Boolean indexing query" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "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", + "
AvgTicketPriceCancelled...dayOfWeektimestamp
8960.869736True...02018-01-01 12:09:35
26975.812632True...02018-01-01 15:38:32
311946.358410True...02018-01-01 11:51:12
651975.383864True...22018-01-03 21:13:17
950907.836523True...22018-01-03 05:14:51
..................
12820909.973606True...52018-02-10 05:11:35
12906983.429244True...62018-02-11 06:19:58
129181136.678150True...62018-02-11 16:03:10
129191105.211803True...62018-02-11 05:36:05
130131055.350213True...62018-02-11 13:20:16
\n", + "

68 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " AvgTicketPrice Cancelled ... dayOfWeek timestamp\n", + "8 960.869736 True ... 0 2018-01-01 12:09:35\n", + "26 975.812632 True ... 0 2018-01-01 15:38:32\n", + "311 946.358410 True ... 0 2018-01-01 11:51:12\n", + "651 975.383864 True ... 2 2018-01-03 21:13:17\n", + "950 907.836523 True ... 2 2018-01-03 05:14:51\n", + "... ... ... ... ... ...\n", + "12820 909.973606 True ... 5 2018-02-10 05:11:35\n", + "12906 983.429244 True ... 6 2018-02-11 06:19:58\n", + "12918 1136.678150 True ... 6 2018-02-11 16:03:10\n", + "12919 1105.211803 True ... 6 2018-02-11 05:36:05\n", + "13013 1055.350213 True ... 6 2018-02-11 13:20:16\n", + "\n", + "[68 rows x 27 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights[(pd_flights.Carrier==\"Kibana Airlines\") & \n", + " (pd_flights.AvgTicketPrice > 900.0) &\n", + " (pd_flights.Cancelled == True)]" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "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", + "
AvgTicketPriceCancelled...dayOfWeektimestamp
8960.869736True...02018-01-01 12:09:35
26975.812632True...02018-01-01 15:38:32
311946.358410True...02018-01-01 11:51:12
651975.383864True...22018-01-03 21:13:17
950907.836523True...22018-01-03 05:14:51
..................
12820909.973606True...52018-02-10 05:11:35
12906983.429244True...62018-02-11 06:19:58
129181136.678150True...62018-02-11 16:03:10
129191105.211803True...62018-02-11 05:36:05
130131055.350213True...62018-02-11 13:20:16
\n", + "
\n", + "

68 rows × 27 columns

" + ], + "text/plain": [ + " AvgTicketPrice Cancelled ... dayOfWeek timestamp\n", + "8 960.869736 True ... 0 2018-01-01 12:09:35\n", + "26 975.812632 True ... 0 2018-01-01 15:38:32\n", + "311 946.358410 True ... 0 2018-01-01 11:51:12\n", + "651 975.383864 True ... 2 2018-01-03 21:13:17\n", + "950 907.836523 True ... 2 2018-01-03 05:14:51\n", + "... ... ... ... ... ...\n", + "12820 909.973606 True ... 5 2018-02-10 05:11:35\n", + "12906 983.429244 True ... 6 2018-02-11 06:19:58\n", + "12918 1136.678150 True ... 6 2018-02-11 16:03:10\n", + "12919 1105.211803 True ... 6 2018-02-11 05:36:05\n", + "13013 1055.350213 True ... 6 2018-02-11 13:20:16\n", + "\n", + "[68 rows x 27 columns]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights[(ed_flights.Carrier==\"Kibana Airlines\") & \n", + " (ed_flights.AvgTicketPrice > 900.0) &\n", + " (ed_flights.Cancelled == True)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Function application, GroupBy & window" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.aggs" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "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", + "
DistanceKilometersAvgTicketPrice
sum9.261629e+078.204365e+06
min0.000000e+001.000205e+02
std4.578438e+032.663969e+02
\n", + "
" + ], + "text/plain": [ + " DistanceKilometers AvgTicketPrice\n", + "sum 9.261629e+07 8.204365e+06\n", + "min 0.000000e+00 1.000205e+02\n", + "std 4.578438e+03 2.663969e+02" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights[['DistanceKilometers', 'AvgTicketPrice']].aggregate(['sum', 'min', 'std'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`eland.DataFrame.aggregate` currently only supported numeric columns" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "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", + "
DistanceKilometersAvgTicketPrice
sum9.261629e+078.204365e+06
min0.000000e+001.000205e+02
std4.578263e+032.663867e+02
\n", + "
" + ], + "text/plain": [ + " DistanceKilometers AvgTicketPrice\n", + "sum 9.261629e+07 8.204365e+06\n", + "min 0.000000e+00 1.000205e+02\n", + "std 4.578263e+03 2.663867e+02" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights[['DistanceKilometers', 'AvgTicketPrice']].aggregate(['sum', 'min', 'std'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Computations / descriptive stats" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.count" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AvgTicketPrice 13059\n", + "Cancelled 13059\n", + "Carrier 13059\n", + "Dest 13059\n", + "DestAirportID 13059\n", + " ... \n", + "OriginLocation 13059\n", + "OriginRegion 13059\n", + "OriginWeather 13059\n", + "dayOfWeek 13059\n", + "timestamp 13059\n", + "Length: 27, dtype: int64" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AvgTicketPrice 13059\n", + "Cancelled 13059\n", + "Carrier 13059\n", + "Dest 13059\n", + "DestAirportID 13059\n", + " ... \n", + "OriginLocation 13059\n", + "OriginRegion 13059\n", + "OriginWeather 13059\n", + "dayOfWeek 13059\n", + "timestamp 13059\n", + "Length: 27, dtype: int64" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.count()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.describe" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "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", + "
AvgTicketPriceDistanceKilometers...FlightTimeMindayOfWeek
count13059.00000013059.000000...13059.00000013059.000000
mean628.2536897092.142455...511.1278422.835975
std266.3968614578.438497...334.7539521.939439
min100.0205280.000000...0.0000000.000000
25%409.8938162459.705673...252.3331921.000000
50%640.5566687610.330866...503.0451703.000000
75%842.1854709736.637600...720.4160364.000000
max1199.72905319881.482315...1902.9020326.000000
\n", + "

8 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " AvgTicketPrice DistanceKilometers ... FlightTimeMin dayOfWeek\n", + "count 13059.000000 13059.000000 ... 13059.000000 13059.000000\n", + "mean 628.253689 7092.142455 ... 511.127842 2.835975\n", + "std 266.396861 4578.438497 ... 334.753952 1.939439\n", + "min 100.020528 0.000000 ... 0.000000 0.000000\n", + "25% 409.893816 2459.705673 ... 252.333192 1.000000\n", + "50% 640.556668 7610.330866 ... 503.045170 3.000000\n", + "75% 842.185470 9736.637600 ... 720.416036 4.000000\n", + "max 1199.729053 19881.482315 ... 1902.902032 6.000000\n", + "\n", + "[8 rows x 7 columns]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Values returned from `eland.DataFrame.describe` may vary due to results of Elasticsearch aggregations." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "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", + "
AvgTicketPriceDistanceKilometers...FlightTimeMindayOfWeek
count13059.00000013059.000000...13059.00000013059.000000
mean628.2536897092.142457...511.1278422.835975
std266.3866614578.263193...334.7411351.939365
min100.0205310.000000...0.0000000.000000
25%409.9832192470.545974...251.7385131.000000
50%640.3872857612.072403...503.1489753.000000
75%842.2553959735.860651...720.5615644.230496
max1199.72900419881.482422...1902.9019786.000000
\n", + "

8 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " AvgTicketPrice DistanceKilometers ... FlightTimeMin dayOfWeek\n", + "count 13059.000000 13059.000000 ... 13059.000000 13059.000000\n", + "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% 409.983219 2470.545974 ... 251.738513 1.000000\n", + "50% 640.387285 7612.072403 ... 503.148975 3.000000\n", + "75% 842.255395 9735.860651 ... 720.561564 4.230496\n", + "max 1199.729004 19881.482422 ... 1902.901978 6.000000\n", + "\n", + "[8 rows x 7 columns]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# NBVAL_IGNORE_OUTPUT\n", + "ed_flights.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.info" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Index: 13059 entries, 0 to 13058\n", + "Data columns (total 27 columns):\n", + "AvgTicketPrice 13059 non-null float64\n", + "Cancelled 13059 non-null bool\n", + "Carrier 13059 non-null object\n", + "Dest 13059 non-null object\n", + "DestAirportID 13059 non-null object\n", + "DestCityName 13059 non-null object\n", + "DestCountry 13059 non-null object\n", + "DestLocation 13059 non-null object\n", + "DestRegion 13059 non-null object\n", + "DestWeather 13059 non-null object\n", + "DistanceKilometers 13059 non-null float64\n", + "DistanceMiles 13059 non-null float64\n", + "FlightDelay 13059 non-null bool\n", + "FlightDelayMin 13059 non-null int64\n", + "FlightDelayType 13059 non-null object\n", + "FlightNum 13059 non-null object\n", + "FlightTimeHour 13059 non-null float64\n", + "FlightTimeMin 13059 non-null float64\n", + "Origin 13059 non-null object\n", + "OriginAirportID 13059 non-null object\n", + "OriginCityName 13059 non-null object\n", + "OriginCountry 13059 non-null object\n", + "OriginLocation 13059 non-null object\n", + "OriginRegion 13059 non-null object\n", + "OriginWeather 13059 non-null object\n", + "dayOfWeek 13059 non-null int64\n", + "timestamp 13059 non-null datetime64[ns]\n", + "dtypes: bool(2), datetime64[ns](1), float64(5), int64(2), object(17)\n", + "memory usage: 3.2+ MB\n" + ] + } + ], + "source": [ + "pd_flights.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Index: 13059 entries, 0 to 13058\n", + "Data columns (total 27 columns):\n", + "AvgTicketPrice 13059 non-null float64\n", + "Cancelled 13059 non-null bool\n", + "Carrier 13059 non-null object\n", + "Dest 13059 non-null object\n", + "DestAirportID 13059 non-null object\n", + "DestCityName 13059 non-null object\n", + "DestCountry 13059 non-null object\n", + "DestLocation 13059 non-null object\n", + "DestRegion 13059 non-null object\n", + "DestWeather 13059 non-null object\n", + "DistanceKilometers 13059 non-null float64\n", + "DistanceMiles 13059 non-null float64\n", + "FlightDelay 13059 non-null bool\n", + "FlightDelayMin 13059 non-null int64\n", + "FlightDelayType 13059 non-null object\n", + "FlightNum 13059 non-null object\n", + "FlightTimeHour 13059 non-null float64\n", + "FlightTimeMin 13059 non-null float64\n", + "Origin 13059 non-null object\n", + "OriginAirportID 13059 non-null object\n", + "OriginCityName 13059 non-null object\n", + "OriginCountry 13059 non-null object\n", + "OriginLocation 13059 non-null object\n", + "OriginRegion 13059 non-null object\n", + "OriginWeather 13059 non-null object\n", + "dayOfWeek 13059 non-null int64\n", + "timestamp 13059 non-null datetime64[ns]\n", + "dtypes: bool(2), datetime64[ns](1), float64(5), int64(2), object(17)\n", + "memory usage: 96.0 bytes\n" + ] + } + ], + "source": [ + "ed_flights.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.max, DataFrame.min, DataFrame.mean, DataFrame.sum" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### max" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "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, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.max(numeric_only=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`eland.DataFrame.max,min,mean,sum` only aggregate numeric columns" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "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, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.max(numeric_only=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### min" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "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, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.min(numeric_only=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "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, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.min(numeric_only=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### mean" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AvgTicketPrice 628.253689\n", + "Cancelled 0.128494\n", + "DistanceKilometers 7092.142455\n", + "DistanceMiles 4406.853013\n", + "FlightDelay 0.251168\n", + "FlightDelayMin 47.335171\n", + "FlightTimeHour 8.518797\n", + "FlightTimeMin 511.127842\n", + "dayOfWeek 2.835975\n", + "dtype: float64" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.mean(numeric_only=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AvgTicketPrice 628.253689\n", + "Cancelled 0.128494\n", + "DistanceKilometers 7092.142457\n", + "DistanceMiles 4406.853010\n", + "FlightDelay 0.251168\n", + "FlightDelayMin 47.335171\n", + "FlightTimeHour 8.518797\n", + "FlightTimeMin 511.127842\n", + "dayOfWeek 2.835975\n", + "dtype: float64" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.mean(numeric_only=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### sum" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AvgTicketPrice 8.204365e+06\n", + "Cancelled 1.678000e+03\n", + "DistanceKilometers 9.261629e+07\n", + "DistanceMiles 5.754909e+07\n", + "FlightDelay 3.280000e+03\n", + "FlightDelayMin 6.181500e+05\n", + "FlightTimeHour 1.112470e+05\n", + "FlightTimeMin 6.674818e+06\n", + "dayOfWeek 3.703500e+04\n", + "dtype: float64" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.sum(numeric_only=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AvgTicketPrice 8.204365e+06\n", + "Cancelled 1.678000e+03\n", + "DistanceKilometers 9.261629e+07\n", + "DistanceMiles 5.754909e+07\n", + "FlightDelay 3.280000e+03\n", + "FlightDelayMin 6.181500e+05\n", + "FlightTimeHour 1.112470e+05\n", + "FlightTimeMin 6.674818e+06\n", + "dayOfWeek 3.703500e+04\n", + "dtype: float64" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.sum(numeric_only=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.nunique" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Carrier 4\n", + "Origin 156\n", + "Dest 156\n", + "dtype: int64" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights[['Carrier', 'Origin', 'Dest']].nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Carrier 4\n", + "Origin 156\n", + "Dest 156\n", + "dtype: int64" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights[['Carrier', 'Origin', 'Dest']].nunique()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DataFrame.drop" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "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", + "
CarrierDestLocation...dayOfWeektimestamp
0Kibana Airlines{'lat': '-33.94609833', 'lon': '151.177002'}...02018-01-01 00:00:00
1Logstash Airways{'lat': '45.505299', 'lon': '12.3519'}...02018-01-01 18:27:00
2Logstash Airways{'lat': '45.505299', 'lon': '12.3519'}...02018-01-01 17:11:14
3Kibana Airlines{'lat': '45.648399', 'lon': '12.1944'}...02018-01-01 10:33:28
4Kibana Airlines{'lat': '34.447102', 'lon': '108.751999'}...02018-01-01 05:13:00
..................
13054Logstash Airways{'lat': '34.447102', 'lon': '108.751999'}...62018-02-11 20:42:25
13055Logstash Airways{'lat': '47.464699', 'lon': '8.54917'}...62018-02-11 01:41:57
13056Logstash Airways{'lat': '51.169997', 'lon': '128.445007'}...62018-02-11 04:09:27
13057JetBeats{'lat': '-34.8222', 'lon': '-58.5358'}...62018-02-11 08:28:21
13058JetBeats{'lat': '38.94449997', 'lon': '-77.45580292'}...62018-02-11 14:54:34
\n", + "

13059 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " Carrier DestLocation ... dayOfWeek \\\n", + "0 Kibana Airlines {'lat': '-33.94609833', 'lon': '151.177002'} ... 0 \n", + "1 Logstash Airways {'lat': '45.505299', 'lon': '12.3519'} ... 0 \n", + "2 Logstash Airways {'lat': '45.505299', 'lon': '12.3519'} ... 0 \n", + "3 Kibana Airlines {'lat': '45.648399', 'lon': '12.1944'} ... 0 \n", + "4 Kibana Airlines {'lat': '34.447102', 'lon': '108.751999'} ... 0 \n", + "... ... ... ... ... \n", + "13054 Logstash Airways {'lat': '34.447102', 'lon': '108.751999'} ... 6 \n", + "13055 Logstash Airways {'lat': '47.464699', 'lon': '8.54917'} ... 6 \n", + "13056 Logstash Airways {'lat': '51.169997', 'lon': '128.445007'} ... 6 \n", + "13057 JetBeats {'lat': '-34.8222', 'lon': '-58.5358'} ... 6 \n", + "13058 JetBeats {'lat': '38.94449997', 'lon': '-77.45580292'} ... 6 \n", + "\n", + " timestamp \n", + "0 2018-01-01 00:00:00 \n", + "1 2018-01-01 18:27:00 \n", + "2 2018-01-01 17:11:14 \n", + "3 2018-01-01 10:33:28 \n", + "4 2018-01-01 05:13:00 \n", + "... ... \n", + "13054 2018-02-11 20:42:25 \n", + "13055 2018-02-11 01:41:57 \n", + "13056 2018-02-11 04:09:27 \n", + "13057 2018-02-11 08:28:21 \n", + "13058 2018-02-11 14:54:34 \n", + "\n", + "[13059 rows x 21 columns]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd_flights.drop(columns=['AvgTicketPrice', \n", + " 'Cancelled', \n", + " 'Dest', \n", + " 'DestAirportID', \n", + " 'DestCityName', \n", + " 'DestCountry'])" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "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", + "
CarrierDestLocation...dayOfWeektimestamp
0Kibana Airlines{'lon': '151.177002', 'lat': '-33.94609833'}...02018-01-01 00:00:00
1Logstash Airways{'lon': '12.3519', 'lat': '45.505299'}...02018-01-01 18:27:00
2Logstash Airways{'lon': '12.3519', 'lat': '45.505299'}...02018-01-01 17:11:14
3Kibana Airlines{'lon': '12.1944', 'lat': '45.648399'}...02018-01-01 10:33:28
4Kibana Airlines{'lon': '108.751999', 'lat': '34.447102'}...02018-01-01 05:13:00
..................
13054Logstash Airways{'lon': '108.751999', 'lat': '34.447102'}...62018-02-11 20:42:25
13055Logstash Airways{'lon': '8.54917', 'lat': '47.464699'}...62018-02-11 01:41:57
13056Logstash Airways{'lon': '128.445007', 'lat': '51.169997'}...62018-02-11 04:09:27
13057JetBeats{'lon': '-58.5358', 'lat': '-34.8222'}...62018-02-11 08:28:21
13058JetBeats{'lon': '-77.45580292', 'lat': '38.94449997'}...62018-02-11 14:54:34
\n", + "
\n", + "

13059 rows × 21 columns

" + ], + "text/plain": [ + " Carrier DestLocation ... dayOfWeek \\\n", + "0 Kibana Airlines {'lon': '151.177002', 'lat': '-33.94609833'} ... 0 \n", + "1 Logstash Airways {'lon': '12.3519', 'lat': '45.505299'} ... 0 \n", + "2 Logstash Airways {'lon': '12.3519', 'lat': '45.505299'} ... 0 \n", + "3 Kibana Airlines {'lon': '12.1944', 'lat': '45.648399'} ... 0 \n", + "4 Kibana Airlines {'lon': '108.751999', 'lat': '34.447102'} ... 0 \n", + "... ... ... ... ... \n", + "13054 Logstash Airways {'lon': '108.751999', 'lat': '34.447102'} ... 6 \n", + "13055 Logstash Airways {'lon': '8.54917', 'lat': '47.464699'} ... 6 \n", + "13056 Logstash Airways {'lon': '128.445007', 'lat': '51.169997'} ... 6 \n", + "13057 JetBeats {'lon': '-58.5358', 'lat': '-34.8222'} ... 6 \n", + "13058 JetBeats {'lon': '-77.45580292', 'lat': '38.94449997'} ... 6 \n", + "\n", + " timestamp \n", + "0 2018-01-01 00:00:00 \n", + "1 2018-01-01 18:27:00 \n", + "2 2018-01-01 17:11:14 \n", + "3 2018-01-01 10:33:28 \n", + "4 2018-01-01 05:13:00 \n", + "... ... \n", + "13054 2018-02-11 20:42:25 \n", + "13055 2018-02-11 01:41:57 \n", + "13056 2018-02-11 04:09:27 \n", + "13057 2018-02-11 08:28:21 \n", + "13058 2018-02-11 14:54:34 \n", + "\n", + "[13059 rows x 21 columns]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.drop(columns=['AvgTicketPrice', \n", + " 'Cancelled', \n", + " 'Dest', \n", + " 'DestAirportID', \n", + " 'DestCityName', \n", + " 'DestCountry'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pd_flights.select_dtypes(include=np.number).hist(figsize=[10,10])\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ed_flights.select_dtypes(include=np.number).hist(figsize=[10,10])\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Elasticsearch utilities" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "ed_flights2 = ed_flights[(ed_flights.OriginAirportID == 'AMS') & (ed_flights.FlightDelayMin > 60)]\n", + "ed_flights2 = ed_flights2[['timestamp', 'OriginAirportID', 'DestAirportID', 'FlightDelayMin']]\n", + "ed_flights2 = ed_flights2.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index_pattern: flights\n", + "Index:\n", + " index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities: _source es_dtype pd_dtype searchable aggregatable\n", + "AvgTicketPrice True float float64 True True\n", + "Cancelled True boolean bool True True\n", + "Carrier True keyword object True True\n", + "Dest True keyword object True True\n", + "DestAirportID True keyword object True True\n", + "DestCityName True keyword object True True\n", + "DestCountry True keyword object True True\n", + "DestLocation True geo_point object True True\n", + "DestRegion True keyword object True True\n", + "DestWeather True keyword object True True\n", + "DistanceKilometers True float float64 True True\n", + "DistanceMiles True float float64 True True\n", + "FlightDelay True boolean bool True True\n", + "FlightDelayMin True integer int64 True True\n", + "FlightDelayType True keyword object True True\n", + "FlightNum True keyword object True True\n", + "FlightTimeHour True float float64 True True\n", + "FlightTimeMin True float float64 True True\n", + "Origin True keyword object True True\n", + "OriginAirportID True keyword object True True\n", + "OriginCityName True keyword object True True\n", + "OriginCountry True keyword object True True\n", + "OriginLocation True geo_point object True True\n", + "OriginRegion True keyword object True True\n", + "OriginWeather True keyword object True True\n", + "dayOfWeek True integer int64 True True\n", + "timestamp True date datetime64[ns] True True\n", + " date_fields_format: {}\n", + "Operations:\n", + " tasks: [('boolean_filter': ('boolean_filter': {'bool': {'must': [{'term': {'OriginAirportID': 'AMS'}}, {'range': {'FlightDelayMin': {'gt': 60}}}]}})), ('tail': ('sort_field': '_doc', 'count': 5))]\n", + " size: 5\n", + " sort_params: _doc:desc\n", + " _source: ['timestamp', 'OriginAirportID', 'DestAirportID', 'FlightDelayMin']\n", + " body: {'query': {'bool': {'must': [{'term': {'OriginAirportID': 'AMS'}}, {'range': {'FlightDelayMin': {'gt': 60}}}]}}, 'aggs': {}}\n", + " post_processing: [('sort_index')]\n", + "'field_to_display_names': {}\n", + "'display_to_field_names': {}\n", + "\n" + ] + } + ], + "source": [ + "print(ed_flights2.info_es())" + ] + } + ], + "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.7.5" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [] + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/source/examples/index.rst b/docs/source/examples/index.rst new file mode 100644 index 0000000..603743c --- /dev/null +++ b/docs/source/examples/index.rst @@ -0,0 +1,11 @@ +.. _examples: + +======== +Examples +======== + +.. toctree:: + :maxdepth: 2 + + demo_notebook + online_retail_analysis diff --git a/docs/source/examples/online_retail_analysis.ipynb b/docs/source/examples/online_retail_analysis.ipynb new file mode 100644 index 0000000..568bc27 --- /dev/null +++ b/docs/source/examples/online_retail_analysis.ipynb @@ -0,0 +1,1462 @@ +{ + "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.read_csv(\"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')" + ] + }, + { + "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.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', 'Unnamed: 0'],\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", + "Unnamed: 0 int64\n", + "dtype: object" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dtypes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also offer a `.info_es()` 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": [ + "index_pattern: online-retail\n", + "Index:\n", + " index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities: _source es_dtype pd_dtype searchable aggregatable\n", + "Country True keyword object True True\n", + "CustomerID True double float64 True True\n", + "Description True keyword object True True\n", + "InvoiceDate True keyword object True True\n", + "InvoiceNo True keyword object True True\n", + "Quantity True long int64 True True\n", + "StockCode True keyword object True True\n", + "UnitPrice True double float64 True True\n", + "Unnamed: 0 True long int64 True True\n", + " date_fields_format: {}\n", + "Operations:\n", + " tasks: []\n", + " size: None\n", + " sort_params: None\n", + " _source: None\n", + " body: {'aggs': {}}\n", + " post_processing: []\n", + "'field_to_display_names': {}\n", + "'display_to_field_names': {}\n", + "\n" + ] + } + ], + "source": [ + "print(df.info_es())" + ] + }, + { + "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...UnitPriceUnnamed: 0
1000United Kingdom14729.0...1.251000
1001United Kingdom14729.0...1.251001
\n", + "
\n", + "

2 rows × 9 columns

" + ], + "text/plain": [ + " Country CustomerID ... UnitPrice Unnamed: 0\n", + "1000 United Kingdom 14729.0 ... 1.25 1000\n", + "1001 United Kingdom 14729.0 ... 1.25 1001\n", + "\n", + "[2 rows x 9 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": [ + "index_pattern: online-retail\n", + "Index:\n", + " index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities: _source es_dtype pd_dtype searchable aggregatable\n", + "Country True keyword object True True\n", + "CustomerID True double float64 True True\n", + "Description True keyword object True True\n", + "InvoiceDate True keyword object True True\n", + "InvoiceNo True keyword object True True\n", + "Quantity True long int64 True True\n", + "StockCode True keyword object True True\n", + "UnitPrice True double float64 True True\n", + "Unnamed: 0 True long int64 True True\n", + " date_fields_format: {}\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: None\n", + " body: {'aggs': {}}\n", + " post_processing: [('sort_index'), ('head': ('count': 2)), ('tail': ('count': 2))]\n", + "'field_to_display_names': {}\n", + "'display_to_field_names': {}\n", + "\n" + ] + } + ], + "source": [ + "print(df.tail(2).head(2).tail(2).info_es())" + ] + }, + { + "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...UnitPriceUnnamed: 0
14998United Kingdom17419.0...1.2514998
14999United Kingdom17419.0...2.1014999
\n", + "
\n", + "

2 rows × 9 columns

" + ], + "text/plain": [ + " Country CustomerID ... UnitPrice Unnamed: 0\n", + "14998 United Kingdom 17419.0 ... 1.25 14998\n", + "14999 United Kingdom 17419.0 ... 2.10 14999\n", + "\n", + "[2 rows x 9 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...UnitPriceUnnamed: 0
1109Germany12662.0...2.951109
1110Germany12662.0...2.551110
1111Germany12662.0...0.851111
1112Germany12662.0...1.651112
1113Germany12662.0...1.951113
\n", + "
\n", + "

5 rows × 9 columns

" + ], + "text/plain": [ + " Country CustomerID ... UnitPrice Unnamed: 0\n", + "1109 Germany 12662.0 ... 2.95 1109\n", + "1110 Germany 12662.0 ... 2.55 1110\n", + "1111 Germany 12662.0 ... 0.85 1111\n", + "1112 Germany 12662.0 ... 1.65 1112\n", + "1113 Germany 12662.0 ... 1.95 1113\n", + "\n", + "[5 rows x 9 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...UnitPriceUnnamed: 0
1000United Kingdom14729.0...1.251000
1001United Kingdom14729.0...1.251001
1002United Kingdom14729.0...1.251002
1003United Kingdom14729.0...1.251003
1004United Kingdom14729.0...0.291004
\n", + "
\n", + "

5 rows × 9 columns

" + ], + "text/plain": [ + " Country CustomerID ... UnitPrice Unnamed: 0\n", + "1000 United Kingdom 14729.0 ... 1.25 1000\n", + "1001 United Kingdom 14729.0 ... 1.25 1001\n", + "1002 United Kingdom 14729.0 ... 1.25 1002\n", + "1003 United Kingdom 14729.0 ... 1.25 1003\n", + "1004 United Kingdom 14729.0 ... 0.29 1004\n", + "\n", + "[5 rows x 9 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...UnitPriceUnnamed: 0
\n", + "
\n", + "

0 rows × 9 columns

" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [Country, CustomerID, Description, InvoiceDate, InvoiceNo, Quantity, StockCode, UnitPrice, Unnamed: 0]\n", + "Index: []\n", + "\n", + "[0 rows x 9 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": [ + "index_pattern: online-retail\n", + "Index:\n", + " index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities: _source es_dtype pd_dtype searchable aggregatable\n", + "Country True keyword object True True\n", + "CustomerID True double float64 True True\n", + "Description True keyword object True True\n", + "InvoiceDate True keyword object True True\n", + "InvoiceNo True keyword object True True\n", + "Quantity True long int64 True True\n", + "StockCode True keyword object True True\n", + "UnitPrice True double float64 True True\n", + "Unnamed: 0 True long int64 True True\n", + " date_fields_format: {}\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: None\n", + " body: {'query': {'bool': {'must': [{'term': {'Country': 'Germany'}}, {'range': {'Quantity': {'gt': 90}}}]}}, 'aggs': {}}\n", + " post_processing: []\n", + "'field_to_display_names': {}\n", + "'display_to_field_names': {}\n", + "\n" + ] + } + ], + "source": [ + "print(df[(df['Country']=='Germany') & (df['Quantity']>90)].info_es())" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CustomerIDQuantityUnitPriceUnnamed: 0
count10729.00000015000.00000015000.00000015000.000000
mean15590.7766807.4640004.1032337499.500000
std1764.02516085.92438720.1048734330.127009
min12347.000000-9360.0000000.0000000.000000
25%14220.5816701.0000001.2500003756.500000
50%15666.5459352.0000002.5100007498.861278
75%17213.9783766.6140544.21551611249.500000
max18239.0000002880.000000950.99000014999.000000
\n", + "
" + ], + "text/plain": [ + " CustomerID Quantity UnitPrice Unnamed: 0\n", + "count 10729.000000 15000.000000 15000.000000 15000.000000\n", + "mean 15590.776680 7.464000 4.103233 7499.500000\n", + "std 1764.025160 85.924387 20.104873 4330.127009\n", + "min 12347.000000 -9360.000000 0.000000 0.000000\n", + "25% 14220.581670 1.000000 1.250000 3756.500000\n", + "50% 15666.545935 2.000000 2.510000 7498.861278\n", + "75% 17213.978376 6.614054 4.215516 11249.500000\n", + "max 18239.000000 2880.000000 950.990000 14999.000000" + ] + }, + "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": "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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": {}, + "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...UnitPriceUnnamed: 0
1228United Kingdom15485.0...2.551228
1237Norway12433.0...1.061237
1286Norway12433.0...1.251286
1293Norway12433.0...0.851293
1333United Kingdom18144.0...1.691333
..................
14784United Kingdom15061.0...10.9514784
14785United Kingdom15061.0...1.4514785
14788United Kingdom15061.0...0.0714788
14974United Kingdom14739.0...0.7214974
14980United Kingdom14739.0...1.0614980
\n", + "
\n", + "

258 rows × 9 columns

" + ], + "text/plain": [ + " Country CustomerID ... UnitPrice Unnamed: 0\n", + "1228 United Kingdom 15485.0 ... 2.55 1228\n", + "1237 Norway 12433.0 ... 1.06 1237\n", + "1286 Norway 12433.0 ... 1.25 1286\n", + "1293 Norway 12433.0 ... 0.85 1293\n", + "1333 United Kingdom 18144.0 ... 1.69 1333\n", + "... ... ... ... ... ...\n", + "14784 United Kingdom 15061.0 ... 10.95 14784\n", + "14785 United Kingdom 15061.0 ... 1.45 14785\n", + "14788 United Kingdom 15061.0 ... 0.07 14788\n", + "14974 United Kingdom 14739.0 ... 0.72 14974\n", + "14980 United Kingdom 14739.0 ... 1.06 14980\n", + "\n", + "[258 rows x 9 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.7.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/source/index.rst b/docs/source/index.rst index 943eaee..8a46d27 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -25,6 +25,8 @@ In general, the data resides in elasticsearch and not in memory, which allows el reference/index implementation/index development/index + examples/index + * :doc:`reference/index` @@ -43,3 +45,6 @@ In general, the data resides in elasticsearch and not in memory, which allows el * :doc:`development/index` * :doc:`development/contributing` + +* :doc:`examples/index` + diff --git a/eland/dataframe.py b/eland/dataframe.py index ce45872..0e5533c 100644 --- a/eland/dataframe.py +++ b/eland/dataframe.py @@ -312,8 +312,7 @@ class DataFrame(NDFrame): max_rows = min_rows return self.to_html(max_rows=max_rows, max_cols=max_cols, - show_dimensions=show_dimensions, notebook=True, - bold_rows=False) # set for consistency with pandas output + show_dimensions=show_dimensions, notebook=True) else: return None @@ -384,20 +383,35 @@ class DataFrame(NDFrame): index_field: _id is_source_field: False Mappings: - capabilities: _source es_dtype pd_dtype searchable aggregatable - AvgTicketPrice True float float64 True True - Cancelled True boolean bool True True - Carrier True keyword object True True - Dest True keyword object True True - DestAirportID True keyword object True True - ... ... ... ... ... ... - OriginLocation True geo_point object True True - OriginRegion True keyword object True True - OriginWeather True keyword object True True - dayOfWeek True integer int64 True True - timestamp True date datetime64[ns] True True - - [27 rows x 5 columns] + capabilities: _source es_dtype pd_dtype searchable aggregatable + AvgTicketPrice True float float64 True True + Cancelled True boolean bool True True + Carrier True keyword object True True + Dest True keyword object True True + DestAirportID True keyword object True True + DestCityName True keyword object True True + DestCountry True keyword object True True + DestLocation True geo_point object True True + DestRegion True keyword object True True + DestWeather True keyword object True True + DistanceKilometers True float float64 True True + DistanceMiles True float float64 True True + FlightDelay True boolean bool True True + FlightDelayMin True integer int64 True True + FlightDelayType True keyword object True True + FlightNum True keyword object True True + FlightTimeHour True float float64 True True + FlightTimeMin True float float64 True True + Origin True keyword object True True + OriginAirportID True keyword object True True + OriginCityName True keyword object True True + OriginCountry True keyword object True True + OriginLocation True geo_point object True True + OriginRegion True keyword object True True + OriginWeather True keyword object True True + dayOfWeek True integer int64 True True + timestamp True date datetime64[ns] True True + date_fields_format: {} Operations: tasks: [('boolean_filter': ('boolean_filter': {'bool': {'must': [{'term': {'OriginAirportID': 'AMS'}}, {'range': {'FlightDelayMin': {'gt': 60}}}]}})), ('tail': ('sort_field': '_doc', 'count': 5))] size: 5 diff --git a/eland/mappings.py b/eland/mappings.py index 9ed0d09..fbbb577 100644 --- a/eland/mappings.py +++ b/eland/mappings.py @@ -541,4 +541,5 @@ class Mappings: def info_es(self, buf): buf.write("Mappings:\n") - buf.write(" capabilities: {0}\n".format(self._mappings_capabilities)) + buf.write(" capabilities: {0}\n".format(self._mappings_capabilities.to_string())) + buf.write(" date_fields_format: {0}\n".format(self._date_fields_format)) diff --git a/eland/query_compiler.py b/eland/query_compiler.py index f8fe184..ae77d9f 100644 --- a/eland/query_compiler.py +++ b/eland/query_compiler.py @@ -564,7 +564,7 @@ class ElandQueryCompiler: raise ValueError( "Can not perform arithmetic operations on non aggregatable fields" "One of [{}, {}] is not aggregatable.".format(self_field, right_field) - ) + ) def arithmetic_op_fields(self, new_field_name, op, left_field, right_field, op_type=None): result = self.copy() @@ -667,6 +667,7 @@ class ElandQueryCompiler: buf.write("'field_to_display_names': {}\n".format(self._field_to_display_names)) buf.write("'display_to_field_names': {}\n".format(self._display_to_field_names)) + def elasticsearch_date_to_pandas_date(value: Union[int, str], date_format: str) -> pd.Timestamp: """ Given a specific Elasticsearch format for a date datatype, returns the diff --git a/eland/tests/Eland Demo Notebook.ipynb b/eland/tests/Eland Demo Notebook.ipynb deleted file mode 100644 index a2b3331..0000000 --- a/eland/tests/Eland Demo Notebook.ipynb +++ /dev/null @@ -1,10637 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Eland Demo Notebook" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "import eland as ed\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "from elasticsearch import Elasticsearch\n", - "\n", - "from eland.tests.common import TestData\n", - "\n", - "test_data = TestData()\n", - "\n", - "pd_flights = test_data.pd_flights()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Eland DataFrame from Elasticsearch Index" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "ed_flights = ed.read_es('localhost', 'flights')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledCarrierDestDestAirportIDDestCityNameDestCountryDestLocationDestRegionDestWeather...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseKibana AirlinesSydney Kingsford Smith International AirportSYDSydneyAU{'lat': '-33.94609833', 'lon': '151.177002'}SE-BDRain...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HESunny02018-01-01 00:00:00
1882.982662FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Sunny...464.389481Cape Town International AirportCPTCape TownZA{'lat': '-33.96480179', 'lon': '18.60169983'}SE-BDClear02018-01-01 18:27:00
2190.636904FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Cloudy...0.000000Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Rain02018-01-01 17:11:14
3181.694216TrueKibana AirlinesTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Clear...222.749059Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseKibana AirlinesXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFDamaging Wind02018-01-01 05:13:00
\n", - "
\n", - "

5 rows x 27 columns

" - ], - "text/plain": [ - " AvgTicketPrice Cancelled Carrier \\\n", - "0 841.265642 False Kibana Airlines \n", - "1 882.982662 False Logstash Airways \n", - "2 190.636904 False Logstash Airways \n", - "3 181.694216 True Kibana Airlines \n", - "4 730.041778 False Kibana Airlines \n", - "\n", - " Dest DestAirportID DestCityName \\\n", - "0 Sydney Kingsford Smith International Airport SYD Sydney \n", - "1 Venice Marco Polo Airport VE05 Venice \n", - "2 Venice Marco Polo Airport VE05 Venice \n", - "3 Treviso-Sant'Angelo Airport TV01 Treviso \n", - "4 Xi'an Xianyang International Airport XIY Xi'an \n", - "\n", - " DestCountry DestLocation DestRegion \\\n", - "0 AU {'lat': '-33.94609833', 'lon': '151.177002'} SE-BD \n", - "1 IT {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "2 IT {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "3 IT {'lat': '45.648399', 'lon': '12.1944'} IT-34 \n", - "4 CN {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "\n", - " DestWeather ... FlightTimeMin \\\n", - "0 Rain ... 1030.770416 \n", - "1 Sunny ... 464.389481 \n", - "2 Cloudy ... 0.000000 \n", - "3 Clear ... 222.749059 \n", - "4 Clear ... 785.779071 \n", - "\n", - " Origin OriginAirportID \\\n", - "0 Frankfurt am Main Airport FRA \n", - "1 Cape Town International Airport CPT \n", - "2 Venice Marco Polo Airport VE05 \n", - "3 Naples International Airport NA01 \n", - "4 Licenciado Benito Juarez International Airport AICM \n", - "\n", - " OriginCityName OriginCountry \\\n", - "0 Frankfurt am Main DE \n", - "1 Cape Town ZA \n", - "2 Venice IT \n", - "3 Naples IT \n", - "4 Mexico City MX \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "1 {'lat': '-33.96480179', 'lon': '18.60169983'} SE-BD \n", - "2 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "3 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "4 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "1 Clear 0 2018-01-01 18:27:00 \n", - "2 Rain 0 2018-01-01 17:11:14 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "\n", - "[5 rows x 27 columns]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "eland.dataframe.DataFrame" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(ed_flights.head())" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledCarrierDestDestAirportIDDestCityNameDestCountryDestLocationDestRegionDestWeather...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseKibana AirlinesSydney Kingsford Smith International AirportSYDSydneyAU{'lat': '-33.94609833', 'lon': '151.177002'}SE-BDRain...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HESunny02018-01-01 00:00:00
1882.982662FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Sunny...464.389481Cape Town International AirportCPTCape TownZA{'lat': '-33.96480179', 'lon': '18.60169983'}SE-BDClear02018-01-01 18:27:00
2190.636904FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Cloudy...0.000000Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Rain02018-01-01 17:11:14
3181.694216TrueKibana AirlinesTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Clear...222.749059Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseKibana AirlinesXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFDamaging Wind02018-01-01 05:13:00
\n", - "

5 rows × 27 columns

\n", - "
" - ], - "text/plain": [ - " AvgTicketPrice Cancelled Carrier \\\n", - "0 841.265642 False Kibana Airlines \n", - "1 882.982662 False Logstash Airways \n", - "2 190.636904 False Logstash Airways \n", - "3 181.694216 True Kibana Airlines \n", - "4 730.041778 False Kibana Airlines \n", - "\n", - " Dest DestAirportID DestCityName \\\n", - "0 Sydney Kingsford Smith International Airport SYD Sydney \n", - "1 Venice Marco Polo Airport VE05 Venice \n", - "2 Venice Marco Polo Airport VE05 Venice \n", - "3 Treviso-Sant'Angelo Airport TV01 Treviso \n", - "4 Xi'an Xianyang International Airport XIY Xi'an \n", - "\n", - " DestCountry DestLocation DestRegion \\\n", - "0 AU {'lat': '-33.94609833', 'lon': '151.177002'} SE-BD \n", - "1 IT {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "2 IT {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "3 IT {'lat': '45.648399', 'lon': '12.1944'} IT-34 \n", - "4 CN {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "\n", - " DestWeather ... FlightTimeMin \\\n", - "0 Rain ... 1030.770416 \n", - "1 Sunny ... 464.389481 \n", - "2 Cloudy ... 0.000000 \n", - "3 Clear ... 222.749059 \n", - "4 Clear ... 785.779071 \n", - "\n", - " Origin OriginAirportID \\\n", - "0 Frankfurt am Main Airport FRA \n", - "1 Cape Town International Airport CPT \n", - "2 Venice Marco Polo Airport VE05 \n", - "3 Naples International Airport NA01 \n", - "4 Licenciado Benito Juarez International Airport AICM \n", - "\n", - " OriginCityName OriginCountry \\\n", - "0 Frankfurt am Main DE \n", - "1 Cape Town ZA \n", - "2 Venice IT \n", - "3 Naples IT \n", - "4 Mexico City MX \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "1 {'lat': '-33.96480179', 'lon': '18.60169983'} SE-BD \n", - "2 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "3 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "4 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "1 Clear 0 2018-01-01 18:27:00 \n", - "2 Rain 0 2018-01-01 17:11:14 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "\n", - "[5 rows x 27 columns]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_flights.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
categorycurrencycustomer_birth_datecustomer_first_namecustomer_full_namecustomer_gendercustomer_idcustomer_last_namecustomer_phoneday_of_week...products.taxful_priceproducts.taxless_priceproducts.unit_discount_amountskutaxful_total_pricetaxless_total_pricetotal_quantitytotal_unique_productstypeuser
0[Men's Clothing]EURNoneEddieEddie UnderwoodMALE38UnderwoodMonday...[11.99, 24.99][11.99, 24.99][0, 0][ZO0549605496, ZO0299602996]36.9836.9822ordereddie
1[Women's Clothing]EURNoneMaryMary BaileyFEMALE20BaileySunday...[24.99, 28.99][24.99, 28.99][0, 0][ZO0489604896, ZO0185501855]53.9853.9822ordermary
2[Women's Shoes, Women's Clothing]EURNoneGwenGwen ButlerFEMALE26ButlerSunday...[99.99, 99.99][99.99, 99.99][0, 0][ZO0374603746, ZO0272202722]199.98199.9822ordergwen
3[Women's Shoes, Women's Clothing]EURNoneDianeDiane ChandlerFEMALE22ChandlerSunday...[74.99, 99.99][74.99, 99.99][0, 0][ZO0360303603, ZO0272002720]174.98174.9822orderdiane
4[Men's Clothing, Men's Accessories]EURNoneEddieEddie WeberMALE38WeberMonday...[59.99, 20.99][59.99, 20.99][0, 0][ZO0542505425, ZO0601306013]80.9880.9822ordereddie
\n", - "
\n", - "

5 rows x 45 columns

" - ], - "text/plain": [ - " category currency customer_birth_date \\\n", - "0 [Men's Clothing] EUR None \n", - "1 [Women's Clothing] EUR None \n", - "2 [Women's Shoes, Women's Clothing] EUR None \n", - "3 [Women's Shoes, Women's Clothing] EUR None \n", - "4 [Men's Clothing, Men's Accessories] EUR None \n", - "\n", - " customer_first_name customer_full_name customer_gender customer_id \\\n", - "0 Eddie Eddie Underwood MALE 38 \n", - "1 Mary Mary Bailey FEMALE 20 \n", - "2 Gwen Gwen Butler FEMALE 26 \n", - "3 Diane Diane Chandler FEMALE 22 \n", - "4 Eddie Eddie Weber MALE 38 \n", - "\n", - " customer_last_name customer_phone day_of_week ... products.taxful_price \\\n", - "0 Underwood Monday ... [11.99, 24.99] \n", - "1 Bailey Sunday ... [24.99, 28.99] \n", - "2 Butler Sunday ... [99.99, 99.99] \n", - "3 Chandler Sunday ... [74.99, 99.99] \n", - "4 Weber Monday ... [59.99, 20.99] \n", - "\n", - " products.taxless_price products.unit_discount_amount \\\n", - "0 [11.99, 24.99] [0, 0] \n", - "1 [24.99, 28.99] [0, 0] \n", - "2 [99.99, 99.99] [0, 0] \n", - "3 [74.99, 99.99] [0, 0] \n", - "4 [59.99, 20.99] [0, 0] \n", - "\n", - " sku taxful_total_price taxless_total_price \\\n", - "0 [ZO0549605496, ZO0299602996] 36.98 36.98 \n", - "1 [ZO0489604896, ZO0185501855] 53.98 53.98 \n", - "2 [ZO0374603746, ZO0272202722] 199.98 199.98 \n", - "3 [ZO0360303603, ZO0272002720] 174.98 174.98 \n", - "4 [ZO0542505425, ZO0601306013] 80.98 80.98 \n", - "\n", - " total_quantity total_unique_products type user \n", - "0 2 2 order eddie \n", - "1 2 2 order mary \n", - "2 2 2 order gwen \n", - "3 2 2 order diane \n", - "4 2 2 order eddie \n", - "\n", - "[5 rows x 45 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "es = Elasticsearch()\n", - "ed_ecommerce = ed.read_es(es, 'ecommerce')\n", - "ed_ecommerce.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledCarrierDestDestAirportIDDestCityNameDestCountryDestLocationDestRegionDestWeather...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseKibana AirlinesSydney Kingsford Smith International AirportSYDSydneyAU{'lat': '-33.94609833', 'lon': '151.177002'}SE-BDRain...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HESunny02018-01-01 00:00:00
1882.982662FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Sunny...464.389481Cape Town International AirportCPTCape TownZA{'lat': '-33.96480179', 'lon': '18.60169983'}SE-BDClear02018-01-01 18:27:00
2190.636904FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Cloudy...0.000000Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Rain02018-01-01 17:11:14
3181.694216TrueKibana AirlinesTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Clear...222.749059Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseKibana AirlinesXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFDamaging Wind02018-01-01 05:13:00
5418.152089FalseJetBeatsGenoa Cristoforo Colombo AirportGE01GenovaIT{'lat': '44.4133', 'lon': '8.8375'}IT-42Thunder & Lightning...393.590441Edmonton International AirportCYEGEdmontonCA{'lat': '53.30970001', 'lon': '-113.5800018'}CA-ABRain02018-01-01 01:43:03
6180.246816FalseJetBeatsZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHHail...300.000000Zurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHClear02018-01-01 13:49:53
7585.184310FalseKibana AirlinesOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONClear...614.942480Ciampino___G. B. Pastine International AirportRM12RomeIT{'lat': '41.7994', 'lon': '12.5949'}IT-62Thunder & Lightning02018-01-01 04:54:59
8960.869736TrueKibana AirlinesRajiv Gandhi International AirportHYDHyderabadIN{'lat': '17.23131752', 'lon': '78.42985535'}SE-BDCloudy...602.030591Milano Linate AirportMI11MilanIT{'lat': '45.445099', 'lon': '9.27674'}IT-25Heavy Fog02018-01-01 12:09:35
9296.877773FalseLogstash AirwaysTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Rain...174.822216Sheremetyevo International AirportSVOMoscowRU{'lat': '55.972599', 'lon': '37.4146'}RU-MOSCloudy02018-01-01 12:09:35
10906.437948FalseJetBeatsHelsinki Vantaa AirportHELHelsinkiFI{'lat': '60.31719971', 'lon': '24.9633007'}FI-ESRain...503.045170Albuquerque International Sunport AirportABQAlbuquerqueUS{'lat': '35.040199', 'lon': '-106.609001'}US-NMRain02018-01-01 22:06:14
11704.463771FalseLogstash AirwaysVienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Cloudy...36.075018Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Rain02018-01-01 11:52:34
12922.499077TrueLogstash AirwaysShanghai Pudong International AirportPVGShanghaiCN{'lat': '31.14340019', 'lon': '121.8050003'}SE-BDClear...679.768391Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFHeavy Fog02018-01-01 02:13:46
13374.959276FalseLogstash AirwaysOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONRain...330.418282Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Rain02018-01-01 14:21:13
14552.917371FalseLogstash AirwaysLuis Munoz Marin International AirportSJUSan JuanPR{'lat': '18.43939972', 'lon': '-66.00180054'}PR-U-AClear...407.145031Ciampino___G. B. Pastine International AirportRM12RomeIT{'lat': '41.7994', 'lon': '12.5949'}IT-62Cloudy02018-01-01 17:42:53
15566.487557TrueKibana AirlinesCologne Bonn AirportCGNCologneDE{'lat': '50.86589813', 'lon': '7.142739773'}DE-NWSunny...656.712658Chengdu Shuangliu International AirportCTUChengduCN{'lat': '30.57850075', 'lon': '103.9469986'}SE-BDThunder & Lightning02018-01-01 19:55:32
16989.952787TrueLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Damaging Wind...773.030334Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFThunder & Lightning02018-01-01 07:49:27
17569.613255FalseES-AirMinistro Pistarini International AirportEZEBuenos AiresAR{'lat': '-34.8222', 'lon': '-58.5358'}SE-BDCloudy...704.716920Cleveland Hopkins International AirportCLEClevelandUS{'lat': '41.4117012', 'lon': '-81.84980011'}US-OHRain02018-01-01 01:30:47
18277.429707FalseES-AirShanghai Pudong International AirportPVGShanghaiCN{'lat': '31.14340019', 'lon': '121.8050003'}SE-BDClear...355.957996Olenya Air BaseXLMOOlenegorskRU{'lat': '68.15180206', 'lon': '33.46390152'}RU-MURHail02018-01-01 07:58:17
19772.100846FalseJetBeatsIndira Gandhi International AirportDELNew DelhiIN{'lat': '28.5665', 'lon': '77.103104'}SE-BDClear...875.114675Casper-Natrona County International AirportCPRCasperUS{'lat': '42.90800095', 'lon': '-106.4639969'}US-WYCloudy02018-01-01 00:02:06
20167.599922FalseJetBeatsWichita Mid Continent AirportICTWichitaUS{'lat': '37.64989853', 'lon': '-97.43309784'}US-KSClear...373.966883Erie International Tom Ridge FieldERIErieUS{'lat': '42.08312701', 'lon': '-80.17386675'}US-PACloudy02018-01-01 01:08:20
21253.210065FalseES-AirOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONHail...130.667700Newark Liberty International AirportEWRNewarkUS{'lat': '40.69250107', 'lon': '-74.16870117'}US-NJClear02018-01-01 01:08:20
22917.247620FalseJetBeatsItami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDDamaging Wind...574.495310Copenhagen Kastrup AirportCPHCopenhagenDK{'lat': '55.61790085', 'lon': '12.65600014'}DK-84Sunny02018-01-01 07:48:35
23451.591176FalseLogstash AirwaysVienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Heavy Fog...579.728943Seattle Tacoma International AirportSEASeattleUS{'lat': '47.44900131', 'lon': '-122.3089981'}US-WAHeavy Fog02018-01-01 18:57:21
24307.067201FalseLogstash AirwaysCharles de Gaulle International AirportCDGParisFR{'lat': '49.01279831', 'lon': '2.549999952'}FR-JClear...50.157229Berlin-Tegel AirportTXLBerlinDE{'lat': '52.5597', 'lon': '13.2877'}DE-BERain02018-01-01 13:18:25
25268.241596FalseES-AirNarita International AirportNRTTokyoJP{'lat': '35.76470184', 'lon': '140.3860016'}SE-BDRain...527.567422Manchester AirportMANManchesterGB{'lat': '53.35369873', 'lon': '-2.274950027'}GB-ENGThunder & Lightning02018-01-01 08:20:35
26975.812632TrueKibana AirlinesItami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDHail...386.259764Helsinki Vantaa AirportHELHelsinkiFI{'lat': '60.31719971', 'lon': '24.9633007'}FI-ESRain02018-01-01 15:38:32
27134.214546FalseJetBeatsSan Diego International AirportSANSan DiegoUS{'lat': '32.73360062', 'lon': '-117.1900024'}US-CAClear...24.479650Phoenix Sky Harbor International AirportPHXPhoenixUS{'lat': '33.43429947', 'lon': '-112.012001'}US-AZClear02018-01-01 03:08:45
28988.897564FalseKibana AirlinesVerona Villafranca AirportVR10VeronaIT{'lat': '45.395699', 'lon': '10.8885'}IT-34Sunny...568.351033New Chitose AirportCTSChitose / TomakomaiJP{'lat': '42.77519989', 'lon': '141.6920013'}SE-BDDamaging Wind02018-01-01 01:16:59
29511.067220FalseLogstash AirwaysZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHRain...425.889194Tulsa International AirportTULTulsaUS{'lat': '36.19839859', 'lon': '-95.88809967'}US-OKRain02018-01-01 18:00:59
..................................................................
13029795.905278FalseKibana AirlinesMalpensa International AirportMI12MilanIT{'lat': '45.6306', 'lon': '8.72811'}IT-25Sunny...534.375826Itami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDSunny62018-02-11 20:10:13
13030863.388068FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDDamaging Wind...141.172633Tokyo Haneda International AirportHNDTokyoJP{'lat': '35.552299', 'lon': '139.779999'}SE-BDClear62018-02-11 18:59:53
13031575.183008FalseJetBeatsSavannah Hilton Head International AirportSAVSavannahUS{'lat': '32.12760162', 'lon': '-81.20210266'}US-GAThunder & Lightning...1113.137060OR Tambo International AirportJNBJohannesburgZA{'lat': '-26.1392', 'lon': '28.246'}SE-BDHail62018-02-11 00:57:48
13032817.368952FalseJetBeatsSyracuse Hancock International AirportSYRSyracuseUS{'lat': '43.11119843', 'lon': '-76.10630035'}US-NYRain...714.964864El Dorado International AirportBOGBogotaCO{'lat': '4.70159', 'lon': '-74.1469'}CO-CUNThunder & Lightning62018-02-11 12:02:49
13033579.582455FalseES-AirTampa International AirportTPATampaUS{'lat': '27.97550011', 'lon': '-82.53320313'}US-FLRain...234.929046Jorge Chavez International AirportLIMLimaPE{'lat': '-12.0219', 'lon': '-77.114304'}SE-BDThunder & Lightning62018-02-11 02:07:40
130341004.916638FalseJetBeatsOlenya Air BaseXLMOOlenegorskRU{'lat': '68.15180206', 'lon': '33.46390152'}RU-MURClear...526.895776Gimpo International AirportGMPSeoulKR{'lat': '37.5583', 'lon': '126.791'}SE-BDSunny62018-02-11 00:35:04
13035357.562842TrueLogstash AirwaysShanghai Pudong International AirportPVGShanghaiCN{'lat': '31.14340019', 'lon': '121.8050003'}SE-BDThunder & Lightning...0.000000Shanghai Pudong International AirportPVGShanghaiCN{'lat': '31.14340019', 'lon': '121.8050003'}SE-BDThunder & Lightning62018-02-11 11:19:12
13036429.580539FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Sunny...150.000000Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Cloudy62018-02-11 15:07:11
13037729.788171TrueES-AirVienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Rain...691.944839Ukrainka Air BaseXHBUBelogorskRU{'lat': '51.169997', 'lon': '128.445007'}RU-AMUDamaging Wind62018-02-11 10:24:42
13038564.897695FalseES-AirPisa International AirportPI05PisaIT{'lat': '43.683899', 'lon': '10.3927'}IT-52Heavy Fog...567.387339OR Tambo International AirportJNBJohannesburgZA{'lat': '-26.1392', 'lon': '28.246'}SE-BDDamaging Wind62018-02-11 00:42:06
130391014.052787FalseLogstash AirwaysVienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Thunder & Lightning...690.092327Montreal / Pierre Elliott Trudeau Internationa...YULMontrealCA{'lat': '45.47060013', 'lon': '-73.74079895'}CA-QCThunder & Lightning62018-02-11 10:56:31
13040455.243843FalseES-AirLondon Luton AirportLTNLondonGB{'lat': '51.87469864', 'lon': '-0.368333012'}GB-ENGCloudy...3.028293London Heathrow AirportLHRLondonGB{'lat': '51.4706', 'lon': '-0.461941'}GB-ENGClear62018-02-11 00:39:37
13041611.370232FalseLogstash AirwaysJorge Chavez International AirportLIMLimaPE{'lat': '-12.0219', 'lon': '-77.114304'}SE-BDSunny...338.875531Casper-Natrona County International AirportCPRCasperUS{'lat': '42.90800095', 'lon': '-106.4639969'}US-WYRain62018-02-11 10:24:30
13042595.961285FalseJetBeatsOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONClear...375.129587Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HEClear62018-02-11 09:02:07
13043782.747648FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...156.858481Tokyo Haneda International AirportHNDTokyoJP{'lat': '35.552299', 'lon': '139.779999'}SE-BDThunder & Lightning62018-02-11 04:45:06
13044891.117221FalseJetBeatsWinnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBClear...354.106457Vienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Thunder & Lightning62018-02-11 00:51:14
13045587.169921FalseLogstash AirwaysBrisbane International AirportBNEBrisbaneAU{'lat': '-27.38419914', 'lon': '153.1170044'}SE-BDRain...771.305442Amsterdam Airport SchipholAMSAmsterdamNL{'lat': '52.30860138', 'lon': '4.76388979'}NL-NHSunny62018-02-11 05:41:51
13046739.132165FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDRain...542.955572Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBHail62018-02-11 10:02:21
13047605.191876FalseJetBeatsPortland International Jetport AirportPWMPortlandUS{'lat': '43.64619827', 'lon': '-70.30930328'}US-METhunder & Lightning...564.599857Jeju International AirportCJUJeju CityKR{'lat': '33.51129913', 'lon': '126.4929962'}SE-BDCloudy62018-02-11 15:55:10
13048361.767659TrueLogstash AirwaysDubai International AirportDXBDubaiAE{'lat': '25.25279999', 'lon': '55.36439896'}SE-BDSunny...180.000000Dubai International AirportDXBDubaiAE{'lat': '25.25279999', 'lon': '55.36439896'}SE-BDHail62018-02-11 04:11:14
13049662.306992FalseES-AirWinnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBHeavy Fog...835.954429Ministro Pistarini International AirportEZEBuenos AiresAR{'lat': '-34.8222', 'lon': '-58.5358'}AR-BSunny62018-02-11 10:13:32
13050630.779526FalseJetBeatsHelsinki Vantaa AirportHELHelsinkiFI{'lat': '60.31719971', 'lon': '24.9633007'}FI-ESSunny...451.755639Beijing Capital International AirportPEKBeijingCN{'lat': '40.08010101', 'lon': '116.5849991'}SE-BDCloudy62018-02-11 11:23:23
13051937.771279TrueLogstash AirwaysLester B. Pearson International AirportYYZTorontoCA{'lat': '43.67720032', 'lon': '-79.63059998'}CA-ONSunny...507.451571Leonardo da Vinci___Fiumicino AirportRM11RomeIT{'lat': '41.8002778', 'lon': '12.2388889'}IT-62Hail62018-02-11 01:13:50
130521085.155339FalseLogstash AirwaysMelbourne International AirportMELMelbourneAU{'lat': '-37.673302', 'lon': '144.843002'}SE-BDCloudy...1044.451122Bologna Guglielmo Marconi AirportBO08BolognaIT{'lat': '44.5354', 'lon': '11.2887'}IT-45Cloudy62018-02-11 18:35:42
130531191.964104FalseLogstash AirwaysZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHHail...728.715904Portland International Jetport AirportPWMPortlandUS{'lat': '43.64619827', 'lon': '-70.30930328'}US-MEClear62018-02-11 19:02:10
130541080.446279FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDRain...402.929088Pisa International AirportPI05PisaIT{'lat': '43.683899', 'lon': '10.3927'}IT-52Sunny62018-02-11 20:42:25
13055646.612941FalseLogstash AirwaysZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHRain...644.418029Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBRain62018-02-11 01:41:57
13056997.751876FalseLogstash AirwaysUkrainka Air BaseXHBUBelogorskRU{'lat': '51.169997', 'lon': '128.445007'}RU-AMURain...937.540811Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFSunny62018-02-11 04:09:27
130571102.814465FalseJetBeatsMinistro Pistarini International AirportEZEBuenos AiresAR{'lat': '-34.8222', 'lon': '-58.5358'}SE-BDHail...1697.404971Itami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDHail62018-02-11 08:28:21
13058858.144337FalseJetBeatsWashington Dulles International AirportIADWashingtonUS{'lat': '38.94449997', 'lon': '-77.45580292'}US-DCHeavy Fog...1610.761827Adelaide International AirportADLAdelaideAU{'lat': '-34.945', 'lon': '138.531006'}SE-BDRain62018-02-11 14:54:34
\n", - "
\n", - "

13059 rows x 27 columns

" - ], - "text/plain": [ - " AvgTicketPrice Cancelled Carrier \\\n", - "0 841.265642 False Kibana Airlines \n", - "1 882.982662 False Logstash Airways \n", - "2 190.636904 False Logstash Airways \n", - "3 181.694216 True Kibana Airlines \n", - "4 730.041778 False Kibana Airlines \n", - "5 418.152089 False JetBeats \n", - "6 180.246816 False JetBeats \n", - "7 585.184310 False Kibana Airlines \n", - "8 960.869736 True Kibana Airlines \n", - "9 296.877773 False Logstash Airways \n", - "10 906.437948 False JetBeats \n", - "11 704.463771 False Logstash Airways \n", - "12 922.499077 True Logstash Airways \n", - "13 374.959276 False Logstash Airways \n", - "14 552.917371 False Logstash Airways \n", - "15 566.487557 True Kibana Airlines \n", - "16 989.952787 True Logstash Airways \n", - "17 569.613255 False ES-Air \n", - "18 277.429707 False ES-Air \n", - "19 772.100846 False JetBeats \n", - "20 167.599922 False JetBeats \n", - "21 253.210065 False ES-Air \n", - "22 917.247620 False JetBeats \n", - "23 451.591176 False Logstash Airways \n", - "24 307.067201 False Logstash Airways \n", - "25 268.241596 False ES-Air \n", - "26 975.812632 True Kibana Airlines \n", - "27 134.214546 False JetBeats \n", - "28 988.897564 False Kibana Airlines \n", - "29 511.067220 False Logstash Airways \n", - "... ... ... ... \n", - "13029 795.905278 False Kibana Airlines \n", - "13030 863.388068 False Logstash Airways \n", - "13031 575.183008 False JetBeats \n", - "13032 817.368952 False JetBeats \n", - "13033 579.582455 False ES-Air \n", - "13034 1004.916638 False JetBeats \n", - "13035 357.562842 True Logstash Airways \n", - "13036 429.580539 False Logstash Airways \n", - "13037 729.788171 True ES-Air \n", - "13038 564.897695 False ES-Air \n", - "13039 1014.052787 False Logstash Airways \n", - "13040 455.243843 False ES-Air \n", - "13041 611.370232 False Logstash Airways \n", - "13042 595.961285 False JetBeats \n", - "13043 782.747648 False Logstash Airways \n", - "13044 891.117221 False JetBeats \n", - "13045 587.169921 False Logstash Airways \n", - "13046 739.132165 False Logstash Airways \n", - "13047 605.191876 False JetBeats \n", - "13048 361.767659 True Logstash Airways \n", - "13049 662.306992 False ES-Air \n", - "13050 630.779526 False JetBeats \n", - "13051 937.771279 True Logstash Airways \n", - "13052 1085.155339 False Logstash Airways \n", - "13053 1191.964104 False Logstash Airways \n", - "13054 1080.446279 False Logstash Airways \n", - "13055 646.612941 False Logstash Airways \n", - "13056 997.751876 False Logstash Airways \n", - "13057 1102.814465 False JetBeats \n", - "13058 858.144337 False JetBeats \n", - "\n", - " Dest DestAirportID \\\n", - "0 Sydney Kingsford Smith International Airport SYD \n", - "1 Venice Marco Polo Airport VE05 \n", - "2 Venice Marco Polo Airport VE05 \n", - "3 Treviso-Sant'Angelo Airport TV01 \n", - "4 Xi'an Xianyang International Airport XIY \n", - "5 Genoa Cristoforo Colombo Airport GE01 \n", - "6 Zurich Airport ZRH \n", - "7 Ottawa Macdonald-Cartier International Airport YOW \n", - "8 Rajiv Gandhi International Airport HYD \n", - "9 Treviso-Sant'Angelo Airport TV01 \n", - "10 Helsinki Vantaa Airport HEL \n", - "11 Vienna International Airport VIE \n", - "12 Shanghai Pudong International Airport PVG \n", - "13 Ottawa Macdonald-Cartier International Airport YOW \n", - "14 Luis Munoz Marin International Airport SJU \n", - "15 Cologne Bonn Airport CGN \n", - "16 Venice Marco Polo Airport VE05 \n", - "17 Ministro Pistarini International Airport EZE \n", - "18 Shanghai Pudong International Airport PVG \n", - "19 Indira Gandhi International Airport DEL \n", - "20 Wichita Mid Continent Airport ICT \n", - "21 Ottawa Macdonald-Cartier International Airport YOW \n", - "22 Itami Airport ITM \n", - "23 Vienna International Airport VIE \n", - "24 Charles de Gaulle International Airport CDG \n", - "25 Narita International Airport NRT \n", - "26 Itami Airport ITM \n", - "27 San Diego International Airport SAN \n", - "28 Verona Villafranca Airport VR10 \n", - "29 Zurich Airport ZRH \n", - "... ... ... \n", - "13029 Malpensa International Airport MI12 \n", - "13030 Xi'an Xianyang International Airport XIY \n", - "13031 Savannah Hilton Head International Airport SAV \n", - "13032 Syracuse Hancock International Airport SYR \n", - "13033 Tampa International Airport TPA \n", - "13034 Olenya Air Base XLMO \n", - "13035 Shanghai Pudong International Airport PVG \n", - "13036 Venice Marco Polo Airport VE05 \n", - "13037 Vienna International Airport VIE \n", - "13038 Pisa International Airport PI05 \n", - "13039 Vienna International Airport VIE \n", - "13040 London Luton Airport LTN \n", - "13041 Jorge Chavez International Airport LIM \n", - "13042 Ottawa Macdonald-Cartier International Airport YOW \n", - "13043 Xi'an Xianyang International Airport XIY \n", - "13044 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13045 Brisbane International Airport BNE \n", - "13046 Xi'an Xianyang International Airport XIY \n", - "13047 Portland International Jetport Airport PWM \n", - "13048 Dubai International Airport DXB \n", - "13049 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13050 Helsinki Vantaa Airport HEL \n", - "13051 Lester B. Pearson International Airport YYZ \n", - "13052 Melbourne International Airport MEL \n", - "13053 Zurich Airport ZRH \n", - "13054 Xi'an Xianyang International Airport XIY \n", - "13055 Zurich Airport ZRH \n", - "13056 Ukrainka Air Base XHBU \n", - "13057 Ministro Pistarini International Airport EZE \n", - "13058 Washington Dulles International Airport IAD \n", - "\n", - " DestCityName DestCountry \\\n", - "0 Sydney AU \n", - "1 Venice IT \n", - "2 Venice IT \n", - "3 Treviso IT \n", - "4 Xi'an CN \n", - "5 Genova IT \n", - "6 Zurich CH \n", - "7 Ottawa CA \n", - "8 Hyderabad IN \n", - "9 Treviso IT \n", - "10 Helsinki FI \n", - "11 Vienna AT \n", - "12 Shanghai CN \n", - "13 Ottawa CA \n", - "14 San Juan PR \n", - "15 Cologne DE \n", - "16 Venice IT \n", - "17 Buenos Aires AR \n", - "18 Shanghai CN \n", - "19 New Delhi IN \n", - "20 Wichita US \n", - "21 Ottawa CA \n", - "22 Osaka JP \n", - "23 Vienna AT \n", - "24 Paris FR \n", - "25 Tokyo JP \n", - "26 Osaka JP \n", - "27 San Diego US \n", - "28 Verona IT \n", - "29 Zurich CH \n", - "... ... ... \n", - "13029 Milan IT \n", - "13030 Xi'an CN \n", - "13031 Savannah US \n", - "13032 Syracuse US \n", - "13033 Tampa US \n", - "13034 Olenegorsk RU \n", - "13035 Shanghai CN \n", - "13036 Venice IT \n", - "13037 Vienna AT \n", - "13038 Pisa IT \n", - "13039 Vienna AT \n", - "13040 London GB \n", - "13041 Lima PE \n", - "13042 Ottawa CA \n", - "13043 Xi'an CN \n", - "13044 Winnipeg CA \n", - "13045 Brisbane AU \n", - "13046 Xi'an CN \n", - "13047 Portland US \n", - "13048 Dubai AE \n", - "13049 Winnipeg CA \n", - "13050 Helsinki FI \n", - "13051 Toronto CA \n", - "13052 Melbourne AU \n", - "13053 Zurich CH \n", - "13054 Xi'an CN \n", - "13055 Zurich CH \n", - "13056 Belogorsk RU \n", - "13057 Buenos Aires AR \n", - "13058 Washington US \n", - "\n", - " DestLocation DestRegion \\\n", - "0 {'lat': '-33.94609833', 'lon': '151.177002'} SE-BD \n", - "1 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "2 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "3 {'lat': '45.648399', 'lon': '12.1944'} IT-34 \n", - "4 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "5 {'lat': '44.4133', 'lon': '8.8375'} IT-42 \n", - "6 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "7 {'lat': '45.32249832', 'lon': '-75.66919708'} CA-ON \n", - "8 {'lat': '17.23131752', 'lon': '78.42985535'} SE-BD \n", - "9 {'lat': '45.648399', 'lon': '12.1944'} IT-34 \n", - "10 {'lat': '60.31719971', 'lon': '24.9633007'} FI-ES \n", - "11 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "12 {'lat': '31.14340019', 'lon': '121.8050003'} SE-BD \n", - "13 {'lat': '45.32249832', 'lon': '-75.66919708'} CA-ON \n", - "14 {'lat': '18.43939972', 'lon': '-66.00180054'} PR-U-A \n", - "15 {'lat': '50.86589813', 'lon': '7.142739773'} DE-NW \n", - "16 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "17 {'lat': '-34.8222', 'lon': '-58.5358'} SE-BD \n", - "18 {'lat': '31.14340019', 'lon': '121.8050003'} SE-BD \n", - "19 {'lat': '28.5665', 'lon': '77.103104'} SE-BD \n", - "20 {'lat': '37.64989853', 'lon': '-97.43309784'} US-KS \n", - "21 {'lat': '45.32249832', 'lon': '-75.66919708'} CA-ON \n", - "22 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "23 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "24 {'lat': '49.01279831', 'lon': '2.549999952'} FR-J \n", - "25 {'lat': '35.76470184', 'lon': '140.3860016'} SE-BD \n", - "26 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "27 {'lat': '32.73360062', 'lon': '-117.1900024'} US-CA \n", - "28 {'lat': '45.395699', 'lon': '10.8885'} IT-34 \n", - "29 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "... ... ... \n", - "13029 {'lat': '45.6306', 'lon': '8.72811'} IT-25 \n", - "13030 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13031 {'lat': '32.12760162', 'lon': '-81.20210266'} US-GA \n", - "13032 {'lat': '43.11119843', 'lon': '-76.10630035'} US-NY \n", - "13033 {'lat': '27.97550011', 'lon': '-82.53320313'} US-FL \n", - "13034 {'lat': '68.15180206', 'lon': '33.46390152'} RU-MUR \n", - "13035 {'lat': '31.14340019', 'lon': '121.8050003'} SE-BD \n", - "13036 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "13037 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "13038 {'lat': '43.683899', 'lon': '10.3927'} IT-52 \n", - "13039 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "13040 {'lat': '51.87469864', 'lon': '-0.368333012'} GB-ENG \n", - "13041 {'lat': '-12.0219', 'lon': '-77.114304'} SE-BD \n", - "13042 {'lat': '45.32249832', 'lon': '-75.66919708'} CA-ON \n", - "13043 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13044 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13045 {'lat': '-27.38419914', 'lon': '153.1170044'} SE-BD \n", - "13046 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13047 {'lat': '43.64619827', 'lon': '-70.30930328'} US-ME \n", - "13048 {'lat': '25.25279999', 'lon': '55.36439896'} SE-BD \n", - "13049 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13050 {'lat': '60.31719971', 'lon': '24.9633007'} FI-ES \n", - "13051 {'lat': '43.67720032', 'lon': '-79.63059998'} CA-ON \n", - "13052 {'lat': '-37.673302', 'lon': '144.843002'} SE-BD \n", - "13053 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "13054 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13055 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "13056 {'lat': '51.169997', 'lon': '128.445007'} RU-AMU \n", - "13057 {'lat': '-34.8222', 'lon': '-58.5358'} SE-BD \n", - "13058 {'lat': '38.94449997', 'lon': '-77.45580292'} US-DC \n", - "\n", - " DestWeather ... FlightTimeMin \\\n", - "0 Rain ... 1030.770416 \n", - "1 Sunny ... 464.389481 \n", - "2 Cloudy ... 0.000000 \n", - "3 Clear ... 222.749059 \n", - "4 Clear ... 785.779071 \n", - "5 Thunder & Lightning ... 393.590441 \n", - "6 Hail ... 300.000000 \n", - "7 Clear ... 614.942480 \n", - "8 Cloudy ... 602.030591 \n", - "9 Rain ... 174.822216 \n", - "10 Rain ... 503.045170 \n", - "11 Cloudy ... 36.075018 \n", - "12 Clear ... 679.768391 \n", - "13 Rain ... 330.418282 \n", - "14 Clear ... 407.145031 \n", - "15 Sunny ... 656.712658 \n", - "16 Damaging Wind ... 773.030334 \n", - "17 Cloudy ... 704.716920 \n", - "18 Clear ... 355.957996 \n", - "19 Clear ... 875.114675 \n", - "20 Clear ... 373.966883 \n", - "21 Hail ... 130.667700 \n", - "22 Damaging Wind ... 574.495310 \n", - "23 Heavy Fog ... 579.728943 \n", - "24 Clear ... 50.157229 \n", - "25 Rain ... 527.567422 \n", - "26 Hail ... 386.259764 \n", - "27 Clear ... 24.479650 \n", - "28 Sunny ... 568.351033 \n", - "29 Rain ... 425.889194 \n", - "... ... ... ... \n", - "13029 Sunny ... 534.375826 \n", - "13030 Damaging Wind ... 141.172633 \n", - "13031 Thunder & Lightning ... 1113.137060 \n", - "13032 Rain ... 714.964864 \n", - "13033 Rain ... 234.929046 \n", - "13034 Clear ... 526.895776 \n", - "13035 Thunder & Lightning ... 0.000000 \n", - "13036 Sunny ... 150.000000 \n", - "13037 Rain ... 691.944839 \n", - "13038 Heavy Fog ... 567.387339 \n", - "13039 Thunder & Lightning ... 690.092327 \n", - "13040 Cloudy ... 3.028293 \n", - "13041 Sunny ... 338.875531 \n", - "13042 Clear ... 375.129587 \n", - "13043 Clear ... 156.858481 \n", - "13044 Clear ... 354.106457 \n", - "13045 Rain ... 771.305442 \n", - "13046 Rain ... 542.955572 \n", - "13047 Thunder & Lightning ... 564.599857 \n", - "13048 Sunny ... 180.000000 \n", - "13049 Heavy Fog ... 835.954429 \n", - "13050 Sunny ... 451.755639 \n", - "13051 Sunny ... 507.451571 \n", - "13052 Cloudy ... 1044.451122 \n", - "13053 Hail ... 728.715904 \n", - "13054 Rain ... 402.929088 \n", - "13055 Rain ... 644.418029 \n", - "13056 Rain ... 937.540811 \n", - "13057 Hail ... 1697.404971 \n", - "13058 Heavy Fog ... 1610.761827 \n", - "\n", - " Origin OriginAirportID \\\n", - "0 Frankfurt am Main Airport FRA \n", - "1 Cape Town International Airport CPT \n", - "2 Venice Marco Polo Airport VE05 \n", - "3 Naples International Airport NA01 \n", - "4 Licenciado Benito Juarez International Airport AICM \n", - "5 Edmonton International Airport CYEG \n", - "6 Zurich Airport ZRH \n", - "7 Ciampino___G. B. Pastine International Airport RM12 \n", - "8 Milano Linate Airport MI11 \n", - "9 Sheremetyevo International Airport SVO \n", - "10 Albuquerque International Sunport Airport ABQ \n", - "11 Venice Marco Polo Airport VE05 \n", - "12 Licenciado Benito Juarez International Airport AICM \n", - "13 Naples International Airport NA01 \n", - "14 Ciampino___G. B. Pastine International Airport RM12 \n", - "15 Chengdu Shuangliu International Airport CTU \n", - "16 Licenciado Benito Juarez International Airport AICM \n", - "17 Cleveland Hopkins International Airport CLE \n", - "18 Olenya Air Base XLMO \n", - "19 Casper-Natrona County International Airport CPR \n", - "20 Erie International Tom Ridge Field ERI \n", - "21 Newark Liberty International Airport EWR \n", - "22 Copenhagen Kastrup Airport CPH \n", - "23 Seattle Tacoma International Airport SEA \n", - "24 Berlin-Tegel Airport TXL \n", - "25 Manchester Airport MAN \n", - "26 Helsinki Vantaa Airport HEL \n", - "27 Phoenix Sky Harbor International Airport PHX \n", - "28 New Chitose Airport CTS \n", - "29 Tulsa International Airport TUL \n", - "... ... ... \n", - "13029 Itami Airport ITM \n", - "13030 Tokyo Haneda International Airport HND \n", - "13031 OR Tambo International Airport JNB \n", - "13032 El Dorado International Airport BOG \n", - "13033 Jorge Chavez International Airport LIM \n", - "13034 Gimpo International Airport GMP \n", - "13035 Shanghai Pudong International Airport PVG \n", - "13036 Venice Marco Polo Airport VE05 \n", - "13037 Ukrainka Air Base XHBU \n", - "13038 OR Tambo International Airport JNB \n", - "13039 Montreal / Pierre Elliott Trudeau Internationa... YUL \n", - "13040 London Heathrow Airport LHR \n", - "13041 Casper-Natrona County International Airport CPR \n", - "13042 Frankfurt am Main Airport FRA \n", - "13043 Tokyo Haneda International Airport HND \n", - "13044 Vienna International Airport VIE \n", - "13045 Amsterdam Airport Schiphol AMS \n", - "13046 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13047 Jeju International Airport CJU \n", - "13048 Dubai International Airport DXB \n", - "13049 Ministro Pistarini International Airport EZE \n", - "13050 Beijing Capital International Airport PEK \n", - "13051 Leonardo da Vinci___Fiumicino Airport RM11 \n", - "13052 Bologna Guglielmo Marconi Airport BO08 \n", - "13053 Portland International Jetport Airport PWM \n", - "13054 Pisa International Airport PI05 \n", - "13055 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13056 Licenciado Benito Juarez International Airport AICM \n", - "13057 Itami Airport ITM \n", - "13058 Adelaide International Airport ADL \n", - "\n", - " OriginCityName OriginCountry \\\n", - "0 Frankfurt am Main DE \n", - "1 Cape Town ZA \n", - "2 Venice IT \n", - "3 Naples IT \n", - "4 Mexico City MX \n", - "5 Edmonton CA \n", - "6 Zurich CH \n", - "7 Rome IT \n", - "8 Milan IT \n", - "9 Moscow RU \n", - "10 Albuquerque US \n", - "11 Venice IT \n", - "12 Mexico City MX \n", - "13 Naples IT \n", - "14 Rome IT \n", - "15 Chengdu CN \n", - "16 Mexico City MX \n", - "17 Cleveland US \n", - "18 Olenegorsk RU \n", - "19 Casper US \n", - "20 Erie US \n", - "21 Newark US \n", - "22 Copenhagen DK \n", - "23 Seattle US \n", - "24 Berlin DE \n", - "25 Manchester GB \n", - "26 Helsinki FI \n", - "27 Phoenix US \n", - "28 Chitose / Tomakomai JP \n", - "29 Tulsa US \n", - "... ... ... \n", - "13029 Osaka JP \n", - "13030 Tokyo JP \n", - "13031 Johannesburg ZA \n", - "13032 Bogota CO \n", - "13033 Lima PE \n", - "13034 Seoul KR \n", - "13035 Shanghai CN \n", - "13036 Venice IT \n", - "13037 Belogorsk RU \n", - "13038 Johannesburg ZA \n", - "13039 Montreal CA \n", - "13040 London GB \n", - "13041 Casper US \n", - "13042 Frankfurt am Main DE \n", - "13043 Tokyo JP \n", - "13044 Vienna AT \n", - "13045 Amsterdam NL \n", - "13046 Winnipeg CA \n", - "13047 Jeju City KR \n", - "13048 Dubai AE \n", - "13049 Buenos Aires AR \n", - "13050 Beijing CN \n", - "13051 Rome IT \n", - "13052 Bologna IT \n", - "13053 Portland US \n", - "13054 Pisa IT \n", - "13055 Winnipeg CA \n", - "13056 Mexico City MX \n", - "13057 Osaka JP \n", - "13058 Adelaide AU \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "1 {'lat': '-33.96480179', 'lon': '18.60169983'} SE-BD \n", - "2 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "3 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "4 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "5 {'lat': '53.30970001', 'lon': '-113.5800018'} CA-AB \n", - "6 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "7 {'lat': '41.7994', 'lon': '12.5949'} IT-62 \n", - "8 {'lat': '45.445099', 'lon': '9.27674'} IT-25 \n", - "9 {'lat': '55.972599', 'lon': '37.4146'} RU-MOS \n", - "10 {'lat': '35.040199', 'lon': '-106.609001'} US-NM \n", - "11 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "12 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "13 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "14 {'lat': '41.7994', 'lon': '12.5949'} IT-62 \n", - "15 {'lat': '30.57850075', 'lon': '103.9469986'} SE-BD \n", - "16 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "17 {'lat': '41.4117012', 'lon': '-81.84980011'} US-OH \n", - "18 {'lat': '68.15180206', 'lon': '33.46390152'} RU-MUR \n", - "19 {'lat': '42.90800095', 'lon': '-106.4639969'} US-WY \n", - "20 {'lat': '42.08312701', 'lon': '-80.17386675'} US-PA \n", - "21 {'lat': '40.69250107', 'lon': '-74.16870117'} US-NJ \n", - "22 {'lat': '55.61790085', 'lon': '12.65600014'} DK-84 \n", - "23 {'lat': '47.44900131', 'lon': '-122.3089981'} US-WA \n", - "24 {'lat': '52.5597', 'lon': '13.2877'} DE-BE \n", - "25 {'lat': '53.35369873', 'lon': '-2.274950027'} GB-ENG \n", - "26 {'lat': '60.31719971', 'lon': '24.9633007'} FI-ES \n", - "27 {'lat': '33.43429947', 'lon': '-112.012001'} US-AZ \n", - "28 {'lat': '42.77519989', 'lon': '141.6920013'} SE-BD \n", - "29 {'lat': '36.19839859', 'lon': '-95.88809967'} US-OK \n", - "... ... ... \n", - "13029 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "13030 {'lat': '35.552299', 'lon': '139.779999'} SE-BD \n", - "13031 {'lat': '-26.1392', 'lon': '28.246'} SE-BD \n", - "13032 {'lat': '4.70159', 'lon': '-74.1469'} CO-CUN \n", - "13033 {'lat': '-12.0219', 'lon': '-77.114304'} SE-BD \n", - "13034 {'lat': '37.5583', 'lon': '126.791'} SE-BD \n", - "13035 {'lat': '31.14340019', 'lon': '121.8050003'} SE-BD \n", - "13036 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "13037 {'lat': '51.169997', 'lon': '128.445007'} RU-AMU \n", - "13038 {'lat': '-26.1392', 'lon': '28.246'} SE-BD \n", - "13039 {'lat': '45.47060013', 'lon': '-73.74079895'} CA-QC \n", - "13040 {'lat': '51.4706', 'lon': '-0.461941'} GB-ENG \n", - "13041 {'lat': '42.90800095', 'lon': '-106.4639969'} US-WY \n", - "13042 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "13043 {'lat': '35.552299', 'lon': '139.779999'} SE-BD \n", - "13044 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "13045 {'lat': '52.30860138', 'lon': '4.76388979'} NL-NH \n", - "13046 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13047 {'lat': '33.51129913', 'lon': '126.4929962'} SE-BD \n", - "13048 {'lat': '25.25279999', 'lon': '55.36439896'} SE-BD \n", - "13049 {'lat': '-34.8222', 'lon': '-58.5358'} AR-B \n", - "13050 {'lat': '40.08010101', 'lon': '116.5849991'} SE-BD \n", - "13051 {'lat': '41.8002778', 'lon': '12.2388889'} IT-62 \n", - "13052 {'lat': '44.5354', 'lon': '11.2887'} IT-45 \n", - "13053 {'lat': '43.64619827', 'lon': '-70.30930328'} US-ME \n", - "13054 {'lat': '43.683899', 'lon': '10.3927'} IT-52 \n", - "13055 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13056 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "13057 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "13058 {'lat': '-34.945', 'lon': '138.531006'} SE-BD \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "1 Clear 0 2018-01-01 18:27:00 \n", - "2 Rain 0 2018-01-01 17:11:14 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "5 Rain 0 2018-01-01 01:43:03 \n", - "6 Clear 0 2018-01-01 13:49:53 \n", - "7 Thunder & Lightning 0 2018-01-01 04:54:59 \n", - "8 Heavy Fog 0 2018-01-01 12:09:35 \n", - "9 Cloudy 0 2018-01-01 12:09:35 \n", - "10 Rain 0 2018-01-01 22:06:14 \n", - "11 Rain 0 2018-01-01 11:52:34 \n", - "12 Heavy Fog 0 2018-01-01 02:13:46 \n", - "13 Rain 0 2018-01-01 14:21:13 \n", - "14 Cloudy 0 2018-01-01 17:42:53 \n", - "15 Thunder & Lightning 0 2018-01-01 19:55:32 \n", - "16 Thunder & Lightning 0 2018-01-01 07:49:27 \n", - "17 Rain 0 2018-01-01 01:30:47 \n", - "18 Hail 0 2018-01-01 07:58:17 \n", - "19 Cloudy 0 2018-01-01 00:02:06 \n", - "20 Cloudy 0 2018-01-01 01:08:20 \n", - "21 Clear 0 2018-01-01 01:08:20 \n", - "22 Sunny 0 2018-01-01 07:48:35 \n", - "23 Heavy Fog 0 2018-01-01 18:57:21 \n", - "24 Rain 0 2018-01-01 13:18:25 \n", - "25 Thunder & Lightning 0 2018-01-01 08:20:35 \n", - "26 Rain 0 2018-01-01 15:38:32 \n", - "27 Clear 0 2018-01-01 03:08:45 \n", - "28 Damaging Wind 0 2018-01-01 01:16:59 \n", - "29 Rain 0 2018-01-01 18:00:59 \n", - "... ... ... ... \n", - "13029 Sunny 6 2018-02-11 20:10:13 \n", - "13030 Clear 6 2018-02-11 18:59:53 \n", - "13031 Hail 6 2018-02-11 00:57:48 \n", - "13032 Thunder & Lightning 6 2018-02-11 12:02:49 \n", - "13033 Thunder & Lightning 6 2018-02-11 02:07:40 \n", - "13034 Sunny 6 2018-02-11 00:35:04 \n", - "13035 Thunder & Lightning 6 2018-02-11 11:19:12 \n", - "13036 Cloudy 6 2018-02-11 15:07:11 \n", - "13037 Damaging Wind 6 2018-02-11 10:24:42 \n", - "13038 Damaging Wind 6 2018-02-11 00:42:06 \n", - "13039 Thunder & Lightning 6 2018-02-11 10:56:31 \n", - "13040 Clear 6 2018-02-11 00:39:37 \n", - "13041 Rain 6 2018-02-11 10:24:30 \n", - "13042 Clear 6 2018-02-11 09:02:07 \n", - "13043 Thunder & Lightning 6 2018-02-11 04:45:06 \n", - "13044 Thunder & Lightning 6 2018-02-11 00:51:14 \n", - "13045 Sunny 6 2018-02-11 05:41:51 \n", - "13046 Hail 6 2018-02-11 10:02:21 \n", - "13047 Cloudy 6 2018-02-11 15:55:10 \n", - "13048 Hail 6 2018-02-11 04:11:14 \n", - "13049 Sunny 6 2018-02-11 10:13:32 \n", - "13050 Cloudy 6 2018-02-11 11:23:23 \n", - "13051 Hail 6 2018-02-11 01:13:50 \n", - "13052 Cloudy 6 2018-02-11 18:35:42 \n", - "13053 Clear 6 2018-02-11 19:02:10 \n", - "13054 Sunny 6 2018-02-11 20:42:25 \n", - "13055 Rain 6 2018-02-11 01:41:57 \n", - "13056 Sunny 6 2018-02-11 04:09:27 \n", - "13057 Hail 6 2018-02-11 08:28:21 \n", - "13058 Rain 6 2018-02-11 14:54:34 \n", - "\n", - "[13059 rows x 27 columns]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledCarrierDestDestAirportIDDestCityNameDestCountryDestLocationDestRegionDestWeather...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseKibana AirlinesSydney Kingsford Smith International AirportSYDSydneyAU{'lat': '-33.94609833', 'lon': '151.177002'}SE-BDRain...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HESunny02018-01-01 00:00:00
1882.982662FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Sunny...464.389481Cape Town International AirportCPTCape TownZA{'lat': '-33.96480179', 'lon': '18.60169983'}SE-BDClear02018-01-01 18:27:00
2190.636904FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Cloudy...0.000000Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Rain02018-01-01 17:11:14
3181.694216TrueKibana AirlinesTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Clear...222.749059Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseKibana AirlinesXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFDamaging Wind02018-01-01 05:13:00
..................................................................
130541080.446279FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDRain...402.929088Pisa International AirportPI05PisaIT{'lat': '43.683899', 'lon': '10.3927'}IT-52Sunny62018-02-11 20:42:25
13055646.612941FalseLogstash AirwaysZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHRain...644.418029Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBRain62018-02-11 01:41:57
13056997.751876FalseLogstash AirwaysUkrainka Air BaseXHBUBelogorskRU{'lat': '51.169997', 'lon': '128.445007'}RU-AMURain...937.540811Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFSunny62018-02-11 04:09:27
130571102.814465FalseJetBeatsMinistro Pistarini International AirportEZEBuenos AiresAR{'lat': '-34.8222', 'lon': '-58.5358'}SE-BDHail...1697.404971Itami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDHail62018-02-11 08:28:21
13058858.144337FalseJetBeatsWashington Dulles International AirportIADWashingtonUS{'lat': '38.94449997', 'lon': '-77.45580292'}US-DCHeavy Fog...1610.761827Adelaide International AirportADLAdelaideAU{'lat': '-34.945', 'lon': '138.531006'}SE-BDRain62018-02-11 14:54:34
\n", - "

13059 rows × 27 columns

\n", - "
" - ], - "text/plain": [ - " AvgTicketPrice Cancelled Carrier \\\n", - "0 841.265642 False Kibana Airlines \n", - "1 882.982662 False Logstash Airways \n", - "2 190.636904 False Logstash Airways \n", - "3 181.694216 True Kibana Airlines \n", - "4 730.041778 False Kibana Airlines \n", - "... ... ... ... \n", - "13054 1080.446279 False Logstash Airways \n", - "13055 646.612941 False Logstash Airways \n", - "13056 997.751876 False Logstash Airways \n", - "13057 1102.814465 False JetBeats \n", - "13058 858.144337 False JetBeats \n", - "\n", - " Dest DestAirportID \\\n", - "0 Sydney Kingsford Smith International Airport SYD \n", - "1 Venice Marco Polo Airport VE05 \n", - "2 Venice Marco Polo Airport VE05 \n", - "3 Treviso-Sant'Angelo Airport TV01 \n", - "4 Xi'an Xianyang International Airport XIY \n", - "... ... ... \n", - "13054 Xi'an Xianyang International Airport XIY \n", - "13055 Zurich Airport ZRH \n", - "13056 Ukrainka Air Base XHBU \n", - "13057 Ministro Pistarini International Airport EZE \n", - "13058 Washington Dulles International Airport IAD \n", - "\n", - " DestCityName DestCountry \\\n", - "0 Sydney AU \n", - "1 Venice IT \n", - "2 Venice IT \n", - "3 Treviso IT \n", - "4 Xi'an CN \n", - "... ... ... \n", - "13054 Xi'an CN \n", - "13055 Zurich CH \n", - "13056 Belogorsk RU \n", - "13057 Buenos Aires AR \n", - "13058 Washington US \n", - "\n", - " DestLocation DestRegion DestWeather \\\n", - "0 {'lat': '-33.94609833', 'lon': '151.177002'} SE-BD Rain \n", - "1 {'lat': '45.505299', 'lon': '12.3519'} IT-34 Sunny \n", - "2 {'lat': '45.505299', 'lon': '12.3519'} IT-34 Cloudy \n", - "3 {'lat': '45.648399', 'lon': '12.1944'} IT-34 Clear \n", - "4 {'lat': '34.447102', 'lon': '108.751999'} SE-BD Clear \n", - "... ... ... ... \n", - "13054 {'lat': '34.447102', 'lon': '108.751999'} SE-BD Rain \n", - "13055 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH Rain \n", - "13056 {'lat': '51.169997', 'lon': '128.445007'} RU-AMU Rain \n", - "13057 {'lat': '-34.8222', 'lon': '-58.5358'} SE-BD Hail \n", - "13058 {'lat': '38.94449997', 'lon': '-77.45580292'} US-DC Heavy Fog \n", - "\n", - " ... FlightTimeMin Origin \\\n", - "0 ... 1030.770416 Frankfurt am Main Airport \n", - "1 ... 464.389481 Cape Town International Airport \n", - "2 ... 0.000000 Venice Marco Polo Airport \n", - "3 ... 222.749059 Naples International Airport \n", - "4 ... 785.779071 Licenciado Benito Juarez International Airport \n", - "... ... ... ... \n", - "13054 ... 402.929088 Pisa International Airport \n", - "13055 ... 644.418029 Winnipeg / James Armstrong Richardson Internat... \n", - "13056 ... 937.540811 Licenciado Benito Juarez International Airport \n", - "13057 ... 1697.404971 Itami Airport \n", - "13058 ... 1610.761827 Adelaide International Airport \n", - "\n", - " OriginAirportID OriginCityName OriginCountry \\\n", - "0 FRA Frankfurt am Main DE \n", - "1 CPT Cape Town ZA \n", - "2 VE05 Venice IT \n", - "3 NA01 Naples IT \n", - "4 AICM Mexico City MX \n", - "... ... ... ... \n", - "13054 PI05 Pisa IT \n", - "13055 YWG Winnipeg CA \n", - "13056 AICM Mexico City MX \n", - "13057 ITM Osaka JP \n", - "13058 ADL Adelaide AU \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "1 {'lat': '-33.96480179', 'lon': '18.60169983'} SE-BD \n", - "2 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "3 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "4 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "... ... ... \n", - "13054 {'lat': '43.683899', 'lon': '10.3927'} IT-52 \n", - "13055 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13056 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "13057 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "13058 {'lat': '-34.945', 'lon': '138.531006'} SE-BD \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "1 Clear 0 2018-01-01 18:27:00 \n", - "2 Rain 0 2018-01-01 17:11:14 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "... ... ... ... \n", - "13054 Sunny 6 2018-02-11 20:42:25 \n", - "13055 Rain 6 2018-02-11 01:41:57 \n", - "13056 Sunny 6 2018-02-11 04:09:27 \n", - "13057 Hail 6 2018-02-11 08:28:21 \n", - "13058 Rain 6 2018-02-11 14:54:34 \n", - "\n", - "[13059 rows x 27 columns]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_flights" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "index_pattern: flights\n", - "Index:\n", - "\tindex_field: _id\n", - "\tis_source_field: False\n", - "Mappings:\n", - "\tcapabilities: _source es_dtype pd_dtype searchable \\\n", - "AvgTicketPrice True float float64 True \n", - "Cancelled True boolean bool True \n", - "Carrier True keyword object True \n", - "Dest True keyword object True \n", - "DestAirportID True keyword object True \n", - "DestCityName True keyword object True \n", - "DestCountry True keyword object True \n", - "DestLocation True geo_point object True \n", - "DestRegion True keyword object True \n", - "DestWeather True keyword object True \n", - "DistanceKilometers True float float64 True \n", - "DistanceMiles True float float64 True \n", - "FlightDelay True boolean bool True \n", - "FlightDelayMin True integer int64 True \n", - "FlightDelayType True keyword object True \n", - "FlightNum True keyword object True \n", - "FlightTimeHour True float float64 True \n", - "FlightTimeMin True float float64 True \n", - "Origin True keyword object True \n", - "OriginAirportID True keyword object True \n", - "OriginCityName True keyword object True \n", - "OriginCountry True keyword object True \n", - "OriginLocation True geo_point object True \n", - "OriginRegion True keyword object True \n", - "OriginWeather True keyword object True \n", - "dayOfWeek True integer int64 True \n", - "timestamp True date datetime64[ns] True \n", - "\n", - " aggregatable \n", - "AvgTicketPrice True \n", - "Cancelled True \n", - "Carrier True \n", - "Dest True \n", - "DestAirportID True \n", - "DestCityName True \n", - "DestCountry True \n", - "DestLocation True \n", - "DestRegion True \n", - "DestWeather True \n", - "DistanceKilometers True \n", - "DistanceMiles True \n", - "FlightDelay True \n", - "FlightDelayMin True \n", - "FlightDelayType True \n", - "FlightNum True \n", - "FlightTimeHour True \n", - "FlightTimeMin True \n", - "Origin True \n", - "OriginAirportID True \n", - "OriginCityName True \n", - "OriginCountry True \n", - "OriginLocation True \n", - "OriginRegion True \n", - "OriginWeather True \n", - "dayOfWeek True \n", - "timestamp True \n", - "Operations:\n", - "\ttasks: [('tail', ('_doc', 5)), ('head', ('_doc', 3))]\n", - "\tsize: 5\n", - "\tsort_params: _doc:desc\n", - "\tcolumns: None\n", - "\tpost_processing: ['sort_index', ('head', ('_doc', 3))]\n", - "\n" - ] - } - ], - "source": [ - "print(ed_flights.tail().head(3).info_es())" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "category object\n", - "currency object\n", - "customer_birth_date datetime64[ns]\n", - "customer_first_name object\n", - "customer_full_name object\n", - "customer_gender object\n", - "customer_id object\n", - "customer_last_name object\n", - "customer_phone object\n", - "day_of_week object\n", - "day_of_week_i int64\n", - "email object\n", - "geoip.city_name object\n", - "geoip.continent_name object\n", - "geoip.country_iso_code object\n", - "geoip.location object\n", - "geoip.region_name object\n", - "manufacturer object\n", - "order_date datetime64[ns]\n", - "order_id object\n", - "products._id object\n", - "products.base_price float64\n", - "products.base_unit_price float64\n", - "products.category object\n", - "products.created_on datetime64[ns]\n", - "products.discount_amount float64\n", - "products.discount_percentage float64\n", - "products.manufacturer object\n", - "products.min_price float64\n", - "products.price float64\n", - "products.product_id int64\n", - "products.product_name object\n", - "products.quantity int64\n", - "products.sku object\n", - "products.tax_amount float64\n", - "products.taxful_price float64\n", - "products.taxless_price float64\n", - "products.unit_discount_amount float64\n", - "sku object\n", - "taxful_total_price float64\n", - "taxless_total_price float64\n", - "total_quantity int64\n", - "total_unique_products int64\n", - "type object\n", - "user object\n", - "dtype: object" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_ecommerce.dtypes" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "index_pattern: flights\n", - "Index:\n", - "\tindex_field: _id\n", - "\tis_source_field: False\n", - "Mappings:\n", - "\tcapabilities: _source es_dtype pd_dtype searchable \\\n", - "AvgTicketPrice True float float64 True \n", - "Cancelled True boolean bool True \n", - "Carrier True keyword object True \n", - "Dest True keyword object True \n", - "DestAirportID True keyword object True \n", - "DestCityName True keyword object True \n", - "DestCountry True keyword object True \n", - "DestLocation True geo_point object True \n", - "DestRegion True keyword object True \n", - "DestWeather True keyword object True \n", - "DistanceKilometers True float float64 True \n", - "DistanceMiles True float float64 True \n", - "FlightDelay True boolean bool True \n", - "FlightDelayMin True integer int64 True \n", - "FlightDelayType True keyword object True \n", - "FlightNum True keyword object True \n", - "FlightTimeHour True float float64 True \n", - "FlightTimeMin True float float64 True \n", - "Origin True keyword object True \n", - "OriginAirportID True keyword object True \n", - "OriginCityName True keyword object True \n", - "OriginCountry True keyword object True \n", - "OriginLocation True geo_point object True \n", - "OriginRegion True keyword object True \n", - "OriginWeather True keyword object True \n", - "dayOfWeek True integer int64 True \n", - "timestamp True date datetime64[ns] True \n", - "\n", - " aggregatable \n", - "AvgTicketPrice True \n", - "Cancelled True \n", - "Carrier True \n", - "Dest True \n", - "DestAirportID True \n", - "DestCityName True \n", - "DestCountry True \n", - "DestLocation True \n", - "DestRegion True \n", - "DestWeather True \n", - "DistanceKilometers True \n", - "DistanceMiles True \n", - "FlightDelay True \n", - "FlightDelayMin True \n", - "FlightDelayType True \n", - "FlightNum True \n", - "FlightTimeHour True \n", - "FlightTimeMin True \n", - "Origin True \n", - "OriginAirportID True \n", - "OriginCityName True \n", - "OriginCountry True \n", - "OriginLocation True \n", - "OriginRegion True \n", - "OriginWeather True \n", - "dayOfWeek True \n", - "timestamp True \n", - "Operations:\n", - "\ttasks: [('tail', ('_doc', 5))]\n", - "\tsize: 5\n", - "\tsort_params: _doc:desc\n", - "\tcolumns: None\n", - "\tpost_processing: ['sort_index']\n", - "\n" - ] - } - ], - "source": [ - "ed_tail = ed_flights.tail()\n", - "print(ed_tail.info_es())" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Index: 13059 entries, 0 to 13058\n", - "Data columns (total 27 columns):\n", - "AvgTicketPrice 13059 non-null float64\n", - "Cancelled 13059 non-null bool\n", - "Carrier 13059 non-null object\n", - "Dest 13059 non-null object\n", - "DestAirportID 13059 non-null object\n", - "DestCityName 13059 non-null object\n", - "DestCountry 13059 non-null object\n", - "DestLocation 13059 non-null object\n", - "DestRegion 13059 non-null object\n", - "DestWeather 13059 non-null object\n", - "DistanceKilometers 13059 non-null float64\n", - "DistanceMiles 13059 non-null float64\n", - "FlightDelay 13059 non-null bool\n", - "FlightDelayMin 13059 non-null int64\n", - "FlightDelayType 13059 non-null object\n", - "FlightNum 13059 non-null object\n", - "FlightTimeHour 13059 non-null float64\n", - "FlightTimeMin 13059 non-null float64\n", - "Origin 13059 non-null object\n", - "OriginAirportID 13059 non-null object\n", - "OriginCityName 13059 non-null object\n", - "OriginCountry 13059 non-null object\n", - "OriginLocation 13059 non-null object\n", - "OriginRegion 13059 non-null object\n", - "OriginWeather 13059 non-null object\n", - "dayOfWeek 13059 non-null int64\n", - "timestamp 13059 non-null datetime64[ns]\n", - "dtypes: bool(2), datetime64[ns](1), float64(5), int64(2), object(17)\n", - "memory usage: 96.0 bytes\n" - ] - } - ], - "source": [ - "ed_flights.info()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - "
AvgTicketPriceDistanceKilometersDistanceMilesFlightDelayMinFlightTimeHourFlightTimeMindayOfWeek
count13059.00000013059.00000013059.00000013059.00000013059.00000013059.00000013059.000000
mean628.2536897092.1424574406.85301047.3351718.518797511.1278422.835975
std266.3866614578.2631932844.80085596.7430065.579019334.7411351.939365
min100.0205310.0000000.0000000.0000000.0000000.0000000.000000
25%410.0110392470.5459741535.1261180.0000004.194703251.6821991.000000
50%640.3872857612.0724034729.9224700.0000008.385816502.9867503.000000
75%842.2604829735.6604636050.31963213.60778412.008533720.5345324.066372
max1199.72900419881.48242212353.780273360.00000031.7150341902.9019786.000000
\n", - "
" - ], - "text/plain": [ - " AvgTicketPrice DistanceKilometers DistanceMiles FlightDelayMin \\\n", - "count 13059.000000 13059.000000 13059.000000 13059.000000 \n", - "mean 628.253689 7092.142457 4406.853010 47.335171 \n", - "std 266.386661 4578.263193 2844.800855 96.743006 \n", - "min 100.020531 0.000000 0.000000 0.000000 \n", - "25% 410.011039 2470.545974 1535.126118 0.000000 \n", - "50% 640.387285 7612.072403 4729.922470 0.000000 \n", - "75% 842.260482 9735.660463 6050.319632 13.607784 \n", - "max 1199.729004 19881.482422 12353.780273 360.000000 \n", - "\n", - " FlightTimeHour FlightTimeMin dayOfWeek \n", - "count 13059.000000 13059.000000 13059.000000 \n", - "mean 8.518797 511.127842 2.835975 \n", - "std 5.579019 334.741135 1.939365 \n", - "min 0.000000 0.000000 0.000000 \n", - "25% 4.194703 251.682199 1.000000 \n", - "50% 8.385816 502.986750 3.000000 \n", - "75% 12.008533 720.534532 4.066372 \n", - "max 31.715034 1902.901978 6.000000 " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - "
AvgTicketPriceDistanceKilometersDistanceMilesFlightDelayMinFlightTimeHourFlightTimeMindayOfWeek
count13059.00000013059.00000013059.00000013059.00000013059.00000013059.00000013059.000000
mean628.2536897092.1424554406.85301347.3351718.518797511.1278422.835975
std266.3968614578.4384972844.90978796.7467115.579233334.7539521.939439
min100.0205280.0000000.0000000.0000000.0000000.0000000.000000
25%409.8938162459.7056731528.3902470.0000004.205553252.3331921.000000
50%640.5566687610.3308664728.8403630.0000008.384086503.0451703.000000
75%842.1854709736.6376006050.06611415.00000012.006934720.4160364.000000
max1199.72905319881.48231512353.780369360.00000031.7150341902.9020326.000000
\n", - "
" - ], - "text/plain": [ - " AvgTicketPrice DistanceKilometers DistanceMiles FlightDelayMin \\\n", - "count 13059.000000 13059.000000 13059.000000 13059.000000 \n", - "mean 628.253689 7092.142455 4406.853013 47.335171 \n", - "std 266.396861 4578.438497 2844.909787 96.746711 \n", - "min 100.020528 0.000000 0.000000 0.000000 \n", - "25% 409.893816 2459.705673 1528.390247 0.000000 \n", - "50% 640.556668 7610.330866 4728.840363 0.000000 \n", - "75% 842.185470 9736.637600 6050.066114 15.000000 \n", - "max 1199.729053 19881.482315 12353.780369 360.000000 \n", - "\n", - " FlightTimeHour FlightTimeMin dayOfWeek \n", - "count 13059.000000 13059.000000 13059.000000 \n", - "mean 8.518797 511.127842 2.835975 \n", - "std 5.579233 334.753952 1.939439 \n", - "min 0.000000 0.000000 0.000000 \n", - "25% 4.205553 252.333192 1.000000 \n", - "50% 8.384086 503.045170 3.000000 \n", - "75% 12.006934 720.416036 4.000000 \n", - "max 31.715034 1902.902032 6.000000 " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_flights.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Index: 13059 entries, 0 to 13058\n", - "Data columns (total 27 columns):\n", - "AvgTicketPrice 13059 non-null float64\n", - "Cancelled 13059 non-null bool\n", - "Carrier 13059 non-null object\n", - "Dest 13059 non-null object\n", - "DestAirportID 13059 non-null object\n", - "DestCityName 13059 non-null object\n", - "DestCountry 13059 non-null object\n", - "DestLocation 13059 non-null object\n", - "DestRegion 13059 non-null object\n", - "DestWeather 13059 non-null object\n", - "DistanceKilometers 13059 non-null float64\n", - "DistanceMiles 13059 non-null float64\n", - "FlightDelay 13059 non-null bool\n", - "FlightDelayMin 13059 non-null int64\n", - "FlightDelayType 13059 non-null object\n", - "FlightNum 13059 non-null object\n", - "FlightTimeHour 13059 non-null float64\n", - "FlightTimeMin 13059 non-null float64\n", - "Origin 13059 non-null object\n", - "OriginAirportID 13059 non-null object\n", - "OriginCityName 13059 non-null object\n", - "OriginCountry 13059 non-null object\n", - "OriginLocation 13059 non-null object\n", - "OriginRegion 13059 non-null object\n", - "OriginWeather 13059 non-null object\n", - "dayOfWeek 13059 non-null int64\n", - "timestamp 13059 non-null datetime64[ns]\n", - "dtypes: bool(2), datetime64[ns](1), float64(5), int64(2), object(17)\n", - "memory usage: 2.6+ MB\n" - ] - } - ], - "source": [ - "pd_flights.info()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(13059, 27)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(13059, 27)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_flights.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(13059, 27)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "AvgTicketPrice float64\n", - "Cancelled bool\n", - "Carrier object\n", - "Dest object\n", - "DestAirportID object\n", - "DestCityName object\n", - "DestCountry object\n", - "DestLocation object\n", - "DestRegion object\n", - "DestWeather object\n", - "DistanceKilometers float64\n", - "DistanceMiles float64\n", - "FlightDelay bool\n", - "FlightDelayMin int64\n", - "FlightDelayType object\n", - "FlightNum object\n", - "FlightTimeHour float64\n", - "FlightTimeMin float64\n", - "Origin object\n", - "OriginAirportID object\n", - "OriginCityName object\n", - "OriginCountry object\n", - "OriginLocation object\n", - "OriginRegion object\n", - "OriginWeather object\n", - "dayOfWeek int64\n", - "timestamp datetime64[ns]\n", - "dtype: object" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_flights.dtypes" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['AvgTicketPrice', 'Cancelled', 'Carrier', 'Dest', 'DestAirportID',\n", - " 'DestCityName', 'DestCountry', 'DestLocation', 'DestRegion',\n", - " 'DestWeather', 'DistanceKilometers', 'DistanceMiles', 'FlightDelay',\n", - " 'FlightDelayMin', 'FlightDelayType', 'FlightNum', 'FlightTimeHour',\n", - " 'FlightTimeMin', 'Origin', 'OriginAirportID', 'OriginCityName',\n", - " 'OriginCountry', 'OriginLocation', 'OriginRegion', 'OriginWeather',\n", - " 'dayOfWeek', 'timestamp'],\n", - " dtype='object')" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "AvgTicketPrice 13059\n", - "Cancelled 13059\n", - "Carrier 13059\n", - "Dest 13059\n", - "DestAirportID 13059\n", - "DestCityName 13059\n", - "DestCountry 13059\n", - "DestLocation 13059\n", - "DestRegion 13059\n", - "DestWeather 13059\n", - "DistanceKilometers 13059\n", - "DistanceMiles 13059\n", - "FlightDelay 13059\n", - "FlightDelayMin 13059\n", - "FlightDelayType 13059\n", - "FlightNum 13059\n", - "FlightTimeHour 13059\n", - "FlightTimeMin 13059\n", - "Origin 13059\n", - "OriginAirportID 13059\n", - "OriginCityName 13059\n", - "OriginCountry 13059\n", - "OriginLocation 13059\n", - "OriginRegion 13059\n", - "OriginWeather 13059\n", - "dayOfWeek 13059\n", - "timestamp 13059\n", - "dtype: int64" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.count()" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "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": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.min()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "AvgTicketPrice 8.204365e+06\n", - "Cancelled 1.678000e+03\n", - "DistanceKilometers 9.261629e+07\n", - "DistanceMiles 5.754909e+07\n", - "FlightDelay 3.280000e+03\n", - "FlightDelayMin 6.181500e+05\n", - "FlightTimeHour 1.112470e+05\n", - "FlightTimeMin 6.674818e+06\n", - "dayOfWeek 3.703500e+04\n", - "dtype: float64" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.sum(numeric_only=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "AvgTicketPrice 8.204365e+06\n", - "Cancelled 1.678000e+03\n", - "DistanceKilometers 9.261629e+07\n", - "DistanceMiles 5.754909e+07\n", - "FlightDelay 3.280000e+03\n", - "FlightDelayMin 6.181500e+05\n", - "FlightTimeHour 1.112470e+05\n", - "FlightTimeMin 6.674818e+06\n", - "dayOfWeek 3.703500e+04\n", - "dtype: float64" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_flights.sum(numeric_only=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 Kibana Airlines\n", - "1 Logstash Airways\n", - "2 Logstash Airways\n", - "3 Kibana Airlines\n", - "4 Kibana Airlines\n", - "Name: Carrier, dtype: object" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights['Carrier'].head()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 Kibana Airlines\n", - "1 Logstash Airways\n", - "2 Logstash Airways\n", - "3 Kibana Airlines\n", - "4 Kibana Airlines\n", - " ... \n", - "13054 Logstash Airways\n", - "13055 Logstash Airways\n", - "13056 Logstash Airways\n", - "13057 JetBeats\n", - "13058 JetBeats\n", - "Name: Carrier, Length: 13059, dtype: object" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_flights.Carrier" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "ed_3_cols = ed_flights[['DistanceKilometers', 'Carrier', 'AvgTicketPrice']].head()\n", - "pd_3_cols = pd_flights[['DistanceKilometers', 'Carrier', 'AvgTicketPrice']].head()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - "
DistanceKilometersCarrierAvgTicketPrice
016492.326654Kibana Airlines841.265642
18823.400140Logstash Airways882.982662
20.000000Logstash Airways190.636904
3555.737767Kibana Airlines181.694216
413358.244200Kibana Airlines730.041778
\n", - "
\n", - "

5 rows x 3 columns

" - ], - "text/plain": [ - " DistanceKilometers Carrier AvgTicketPrice\n", - "0 16492.326654 Kibana Airlines 841.265642\n", - "1 8823.400140 Logstash Airways 882.982662\n", - "2 0.000000 Logstash Airways 190.636904\n", - "3 555.737767 Kibana Airlines 181.694216\n", - "4 13358.244200 Kibana Airlines 730.041778\n", - "\n", - "[5 rows x 3 columns]" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_3_cols" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - "
DistanceKilometersCarrierAvgTicketPrice
016492.326654Kibana Airlines841.265642
18823.400140Logstash Airways882.982662
20.000000Logstash Airways190.636904
3555.737767Kibana Airlines181.694216
413358.244200Kibana Airlines730.041778
\n", - "
" - ], - "text/plain": [ - " DistanceKilometers Carrier AvgTicketPrice\n", - "0 16492.326654 Kibana Airlines 841.265642\n", - "1 8823.400140 Logstash Airways 882.982662\n", - "2 0.000000 Logstash Airways 190.636904\n", - "3 555.737767 Kibana Airlines 181.694216\n", - "4 13358.244200 Kibana Airlines 730.041778" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_3_cols" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "index_pattern: flights\n", - "Index:\n", - "\tindex_field: _id\n", - "\tis_source_field: False\n", - "Mappings:\n", - "\tcapabilities: _source es_dtype pd_dtype searchable \\\n", - "AvgTicketPrice True float float64 True \n", - "Cancelled True boolean bool True \n", - "Carrier True keyword object True \n", - "Dest True keyword object True \n", - "DestAirportID True keyword object True \n", - "DestCityName True keyword object True \n", - "DestCountry True keyword object True \n", - "DestLocation True geo_point object True \n", - "DestRegion True keyword object True \n", - "DestWeather True keyword object True \n", - "DistanceKilometers True float float64 True \n", - "DistanceMiles True float float64 True \n", - "FlightDelay True boolean bool True \n", - "FlightDelayMin True integer int64 True \n", - "FlightDelayType True keyword object True \n", - "FlightNum True keyword object True \n", - "FlightTimeHour True float float64 True \n", - "FlightTimeMin True float float64 True \n", - "Origin True keyword object True \n", - "OriginAirportID True keyword object True \n", - "OriginCityName True keyword object True \n", - "OriginCountry True keyword object True \n", - "OriginLocation True geo_point object True \n", - "OriginRegion True keyword object True \n", - "OriginWeather True keyword object True \n", - "dayOfWeek True integer int64 True \n", - "timestamp True date datetime64[ns] True \n", - "\n", - " aggregatable \n", - "AvgTicketPrice True \n", - "Cancelled True \n", - "Carrier True \n", - "Dest True \n", - "DestAirportID True \n", - "DestCityName True \n", - "DestCountry True \n", - "DestLocation True \n", - "DestRegion True \n", - "DestWeather True \n", - "DistanceKilometers True \n", - "DistanceMiles True \n", - "FlightDelay True \n", - "FlightDelayMin True \n", - "FlightDelayType True \n", - "FlightNum True \n", - "FlightTimeHour True \n", - "FlightTimeMin True \n", - "Origin True \n", - "OriginAirportID True \n", - "OriginCityName True \n", - "OriginCountry True \n", - "OriginLocation True \n", - "OriginRegion True \n", - "OriginWeather True \n", - "dayOfWeek True \n", - "timestamp True \n", - "Operations:\n", - "\ttasks: [('columns', ['DistanceKilometers', 'Carrier', 'AvgTicketPrice']), ('head', ('_doc', 5))]\n", - "\tsize: 5\n", - "\tsort_params: _doc:asc\n", - "\tcolumns: ['DistanceKilometers', 'Carrier', 'AvgTicketPrice']\n", - "\tpost_processing: []\n", - "\n" - ] - } - ], - "source": [ - "print(ed_3_cols.info_es())" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledCarrierDestDestAirportIDDestCityNameDestCountryDestLocationDestRegionDestWeather...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseKibana AirlinesSydney Kingsford Smith International AirportSYDSydneyAU{'lat': '-33.94609833', 'lon': '151.177002'}SE-BDRain...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HESunny02018-01-01 00:00:00
3181.694216TrueKibana AirlinesTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Clear...222.749059Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseKibana AirlinesXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFDamaging Wind02018-01-01 05:13:00
7585.184310FalseKibana AirlinesOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONClear...614.942480Ciampino___G. B. Pastine International AirportRM12RomeIT{'lat': '41.7994', 'lon': '12.5949'}IT-62Thunder & Lightning02018-01-01 04:54:59
8960.869736TrueKibana AirlinesRajiv Gandhi International AirportHYDHyderabadIN{'lat': '17.23131752', 'lon': '78.42985535'}SE-BDCloudy...602.030591Milano Linate AirportMI11MilanIT{'lat': '45.445099', 'lon': '9.27674'}IT-25Heavy Fog02018-01-01 12:09:35
..................................................................
13018580.741028TrueKibana AirlinesZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHSunny...533.935541El Dorado International AirportBOGBogotaCO{'lat': '4.70159', 'lon': '-74.1469'}CO-CUNDamaging Wind62018-02-11 04:47:00
13020952.452244FalseKibana AirlinesShanghai Hongqiao International AirportSHAShanghaiCN{'lat': '31.19790077', 'lon': '121.3359985'}SE-BDRain...770.317580London Gatwick AirportLGWLondonGB{'lat': '51.14810181', 'lon': '-0.190277994'}GB-ENGClear62018-02-11 23:50:12
13024530.799356FalseKibana AirlinesMontreal / Pierre Elliott Trudeau Internationa...YULMontrealCA{'lat': '45.47060013', 'lon': '-73.74079895'}CA-QCCloudy...276.902475London Gatwick AirportLGWLondonGB{'lat': '51.14810181', 'lon': '-0.190277994'}GB-ENGRain62018-02-11 11:45:58
13027999.021256FalseKibana AirlinesKempegowda International AirportBLRBangaloreIN{'lat': '13.1979', 'lon': '77.706299'}SE-BDCloudy...480.088926Catania-Fontanarossa AirportCT03CataniaIT{'lat': '37.466801', 'lon': '15.0664'}IT-82Hail62018-02-11 13:32:15
13029795.905278FalseKibana AirlinesMalpensa International AirportMI12MilanIT{'lat': '45.6306', 'lon': '8.72811'}IT-25Sunny...534.375826Itami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDSunny62018-02-11 20:10:13
\n", - "

3234 rows × 27 columns

\n", - "
" - ], - "text/plain": [ - " AvgTicketPrice Cancelled Carrier \\\n", - "0 841.265642 False Kibana Airlines \n", - "3 181.694216 True Kibana Airlines \n", - "4 730.041778 False Kibana Airlines \n", - "7 585.184310 False Kibana Airlines \n", - "8 960.869736 True Kibana Airlines \n", - "... ... ... ... \n", - "13018 580.741028 True Kibana Airlines \n", - "13020 952.452244 False Kibana Airlines \n", - "13024 530.799356 False Kibana Airlines \n", - "13027 999.021256 False Kibana Airlines \n", - "13029 795.905278 False Kibana Airlines \n", - "\n", - " Dest DestAirportID \\\n", - "0 Sydney Kingsford Smith International Airport SYD \n", - "3 Treviso-Sant'Angelo Airport TV01 \n", - "4 Xi'an Xianyang International Airport XIY \n", - "7 Ottawa Macdonald-Cartier International Airport YOW \n", - "8 Rajiv Gandhi International Airport HYD \n", - "... ... ... \n", - "13018 Zurich Airport ZRH \n", - "13020 Shanghai Hongqiao International Airport SHA \n", - "13024 Montreal / Pierre Elliott Trudeau Internationa... YUL \n", - "13027 Kempegowda International Airport BLR \n", - "13029 Malpensa International Airport MI12 \n", - "\n", - " DestCityName DestCountry DestLocation \\\n", - "0 Sydney AU {'lat': '-33.94609833', 'lon': '151.177002'} \n", - "3 Treviso IT {'lat': '45.648399', 'lon': '12.1944'} \n", - "4 Xi'an CN {'lat': '34.447102', 'lon': '108.751999'} \n", - "7 Ottawa CA {'lat': '45.32249832', 'lon': '-75.66919708'} \n", - "8 Hyderabad IN {'lat': '17.23131752', 'lon': '78.42985535'} \n", - "... ... ... ... \n", - "13018 Zurich CH {'lat': '47.464699', 'lon': '8.54917'} \n", - "13020 Shanghai CN {'lat': '31.19790077', 'lon': '121.3359985'} \n", - "13024 Montreal CA {'lat': '45.47060013', 'lon': '-73.74079895'} \n", - "13027 Bangalore IN {'lat': '13.1979', 'lon': '77.706299'} \n", - "13029 Milan IT {'lat': '45.6306', 'lon': '8.72811'} \n", - "\n", - " DestRegion DestWeather ... FlightTimeMin \\\n", - "0 SE-BD Rain ... 1030.770416 \n", - "3 IT-34 Clear ... 222.749059 \n", - "4 SE-BD Clear ... 785.779071 \n", - "7 CA-ON Clear ... 614.942480 \n", - "8 SE-BD Cloudy ... 602.030591 \n", - "... ... ... ... ... \n", - "13018 CH-ZH Sunny ... 533.935541 \n", - "13020 SE-BD Rain ... 770.317580 \n", - "13024 CA-QC Cloudy ... 276.902475 \n", - "13027 SE-BD Cloudy ... 480.088926 \n", - "13029 IT-25 Sunny ... 534.375826 \n", - "\n", - " Origin OriginAirportID \\\n", - "0 Frankfurt am Main Airport FRA \n", - "3 Naples International Airport NA01 \n", - "4 Licenciado Benito Juarez International Airport AICM \n", - "7 Ciampino___G. B. Pastine International Airport RM12 \n", - "8 Milano Linate Airport MI11 \n", - "... ... ... \n", - "13018 El Dorado International Airport BOG \n", - "13020 London Gatwick Airport LGW \n", - "13024 London Gatwick Airport LGW \n", - "13027 Catania-Fontanarossa Airport CT03 \n", - "13029 Itami Airport ITM \n", - "\n", - " OriginCityName OriginCountry \\\n", - "0 Frankfurt am Main DE \n", - "3 Naples IT \n", - "4 Mexico City MX \n", - "7 Rome IT \n", - "8 Milan IT \n", - "... ... ... \n", - "13018 Bogota CO \n", - "13020 London GB \n", - "13024 London GB \n", - "13027 Catania IT \n", - "13029 Osaka JP \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "3 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "4 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "7 {'lat': '41.7994', 'lon': '12.5949'} IT-62 \n", - "8 {'lat': '45.445099', 'lon': '9.27674'} IT-25 \n", - "... ... ... \n", - "13018 {'lat': '4.70159', 'lon': '-74.1469'} CO-CUN \n", - "13020 {'lat': '51.14810181', 'lon': '-0.190277994'} GB-ENG \n", - "13024 {'lat': '51.14810181', 'lon': '-0.190277994'} GB-ENG \n", - "13027 {'lat': '37.466801', 'lon': '15.0664'} IT-82 \n", - "13029 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "7 Thunder & Lightning 0 2018-01-01 04:54:59 \n", - "8 Heavy Fog 0 2018-01-01 12:09:35 \n", - "... ... ... ... \n", - "13018 Damaging Wind 6 2018-02-11 04:47:00 \n", - "13020 Clear 6 2018-02-11 23:50:12 \n", - "13024 Rain 6 2018-02-11 11:45:58 \n", - "13027 Hail 6 2018-02-11 13:32:15 \n", - "13029 Sunny 6 2018-02-11 20:10:13 \n", - "\n", - "[3234 rows x 27 columns]" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_flights[pd_flights.Carrier=='Kibana Airlines']" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "pd_col0 = pd_flights.drop(['Carrier', 'DestCityName'], axis=1)\n", - "pd_col1 = pd_flights.drop(columns=['Carrier', 'DestCityName'])\n", - "\n", - "ed_col0 = ed_flights.drop(['Carrier', 'DestCityName'], axis=1)\n", - "ed_col1 = ed_flights.drop(columns=['Carrier', 'DestCityName'])" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledDestDestAirportIDDestCountryDestLocationDestRegionDestWeatherDistanceKilometersDistanceMiles...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseSydney Kingsford Smith International AirportSYDAU{'lat': '-33.94609833', 'lon': '151.177002'}SE-BDRain16492.32665410247.856676...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HESunny02018-01-01 00:00:00
1882.982662FalseVenice Marco Polo AirportVE05IT{'lat': '45.505299', 'lon': '12.3519'}IT-34Sunny8823.4001405482.606665...464.389481Cape Town International AirportCPTCape TownZA{'lat': '-33.96480179', 'lon': '18.60169983'}SE-BDClear02018-01-01 18:27:00
2190.636904FalseVenice Marco Polo AirportVE05IT{'lat': '45.505299', 'lon': '12.3519'}IT-34Cloudy0.0000000.000000...0.000000Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Rain02018-01-01 17:11:14
3181.694216TrueTreviso-Sant'Angelo AirportTV01IT{'lat': '45.648399', 'lon': '12.1944'}IT-34Clear555.737767345.319439...222.749059Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseXi'an Xianyang International AirportXIYCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear13358.2442008300.428125...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFDamaging Wind02018-01-01 05:13:00
..................................................................
130541080.446279FalseXi'an Xianyang International AirportXIYCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDRain8058.5817535007.370551...402.929088Pisa International AirportPI05PisaIT{'lat': '43.683899', 'lon': '10.3927'}IT-52Sunny62018-02-11 20:42:25
13055646.612941FalseZurich AirportZRHCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHRain7088.5983224404.650791...644.418029Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBRain62018-02-11 01:41:57
13056997.751876FalseUkrainka Air BaseXHBURU{'lat': '51.169997', 'lon': '128.445007'}RU-AMURain10920.6529726785.779157...937.540811Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFSunny62018-02-11 04:09:27
130571102.814465FalseMinistro Pistarini International AirportEZEAR{'lat': '-34.8222', 'lon': '-58.5358'}SE-BDHail18748.85964711650.001272...1697.404971Itami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDHail62018-02-11 08:28:21
13058858.144337FalseWashington Dulles International AirportIADUS{'lat': '38.94449997', 'lon': '-77.45580292'}US-DCHeavy Fog16809.14192310444.716557...1610.761827Adelaide International AirportADLAdelaideAU{'lat': '-34.945', 'lon': '138.531006'}SE-BDRain62018-02-11 14:54:34
\n", - "

13059 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " AvgTicketPrice Cancelled \\\n", - "0 841.265642 False \n", - "1 882.982662 False \n", - "2 190.636904 False \n", - "3 181.694216 True \n", - "4 730.041778 False \n", - "... ... ... \n", - "13054 1080.446279 False \n", - "13055 646.612941 False \n", - "13056 997.751876 False \n", - "13057 1102.814465 False \n", - "13058 858.144337 False \n", - "\n", - " Dest DestAirportID DestCountry \\\n", - "0 Sydney Kingsford Smith International Airport SYD AU \n", - "1 Venice Marco Polo Airport VE05 IT \n", - "2 Venice Marco Polo Airport VE05 IT \n", - "3 Treviso-Sant'Angelo Airport TV01 IT \n", - "4 Xi'an Xianyang International Airport XIY CN \n", - "... ... ... ... \n", - "13054 Xi'an Xianyang International Airport XIY CN \n", - "13055 Zurich Airport ZRH CH \n", - "13056 Ukrainka Air Base XHBU RU \n", - "13057 Ministro Pistarini International Airport EZE AR \n", - "13058 Washington Dulles International Airport IAD US \n", - "\n", - " DestLocation DestRegion DestWeather \\\n", - "0 {'lat': '-33.94609833', 'lon': '151.177002'} SE-BD Rain \n", - "1 {'lat': '45.505299', 'lon': '12.3519'} IT-34 Sunny \n", - "2 {'lat': '45.505299', 'lon': '12.3519'} IT-34 Cloudy \n", - "3 {'lat': '45.648399', 'lon': '12.1944'} IT-34 Clear \n", - "4 {'lat': '34.447102', 'lon': '108.751999'} SE-BD Clear \n", - "... ... ... ... \n", - "13054 {'lat': '34.447102', 'lon': '108.751999'} SE-BD Rain \n", - "13055 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH Rain \n", - "13056 {'lat': '51.169997', 'lon': '128.445007'} RU-AMU Rain \n", - "13057 {'lat': '-34.8222', 'lon': '-58.5358'} SE-BD Hail \n", - "13058 {'lat': '38.94449997', 'lon': '-77.45580292'} US-DC Heavy Fog \n", - "\n", - " DistanceKilometers DistanceMiles ... FlightTimeMin \\\n", - "0 16492.326654 10247.856676 ... 1030.770416 \n", - "1 8823.400140 5482.606665 ... 464.389481 \n", - "2 0.000000 0.000000 ... 0.000000 \n", - "3 555.737767 345.319439 ... 222.749059 \n", - "4 13358.244200 8300.428125 ... 785.779071 \n", - "... ... ... ... ... \n", - "13054 8058.581753 5007.370551 ... 402.929088 \n", - "13055 7088.598322 4404.650791 ... 644.418029 \n", - "13056 10920.652972 6785.779157 ... 937.540811 \n", - "13057 18748.859647 11650.001272 ... 1697.404971 \n", - "13058 16809.141923 10444.716557 ... 1610.761827 \n", - "\n", - " Origin OriginAirportID \\\n", - "0 Frankfurt am Main Airport FRA \n", - "1 Cape Town International Airport CPT \n", - "2 Venice Marco Polo Airport VE05 \n", - "3 Naples International Airport NA01 \n", - "4 Licenciado Benito Juarez International Airport AICM \n", - "... ... ... \n", - "13054 Pisa International Airport PI05 \n", - "13055 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13056 Licenciado Benito Juarez International Airport AICM \n", - "13057 Itami Airport ITM \n", - "13058 Adelaide International Airport ADL \n", - "\n", - " OriginCityName OriginCountry \\\n", - "0 Frankfurt am Main DE \n", - "1 Cape Town ZA \n", - "2 Venice IT \n", - "3 Naples IT \n", - "4 Mexico City MX \n", - "... ... ... \n", - "13054 Pisa IT \n", - "13055 Winnipeg CA \n", - "13056 Mexico City MX \n", - "13057 Osaka JP \n", - "13058 Adelaide AU \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "1 {'lat': '-33.96480179', 'lon': '18.60169983'} SE-BD \n", - "2 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "3 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "4 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "... ... ... \n", - "13054 {'lat': '43.683899', 'lon': '10.3927'} IT-52 \n", - "13055 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13056 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "13057 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "13058 {'lat': '-34.945', 'lon': '138.531006'} SE-BD \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "1 Clear 0 2018-01-01 18:27:00 \n", - "2 Rain 0 2018-01-01 17:11:14 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "... ... ... ... \n", - "13054 Sunny 6 2018-02-11 20:42:25 \n", - "13055 Rain 6 2018-02-11 01:41:57 \n", - "13056 Sunny 6 2018-02-11 04:09:27 \n", - "13057 Hail 6 2018-02-11 08:28:21 \n", - "13058 Rain 6 2018-02-11 14:54:34 \n", - "\n", - "[13059 rows x 25 columns]" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_col0" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledDestDestAirportIDDestCountryDestLocationDestRegionDestWeatherDistanceKilometersDistanceMiles...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseSydney Kingsford Smith International AirportSYDAU{'lon': '151.177002', 'lat': '-33.94609833'}SE-BDRain16492.32665410247.856676...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lon': '8.570556', 'lat': '50.033333'}DE-HESunny02018-01-01 00:00:00
1882.982662FalseVenice Marco Polo AirportVE05IT{'lon': '12.3519', 'lat': '45.505299'}IT-34Sunny8823.4001405482.606665...464.389481Cape Town International AirportCPTCape TownZA{'lon': '18.60169983', 'lat': '-33.96480179'}SE-BDClear02018-01-01 18:27:00
2190.636904FalseVenice Marco Polo AirportVE05IT{'lon': '12.3519', 'lat': '45.505299'}IT-34Cloudy0.0000000.000000...0.000000Venice Marco Polo AirportVE05VeniceIT{'lon': '12.3519', 'lat': '45.505299'}IT-34Rain02018-01-01 17:11:14
3181.694216TrueTreviso-Sant'Angelo AirportTV01IT{'lon': '12.1944', 'lat': '45.648399'}IT-34Clear555.737767345.319439...222.749059Naples International AirportNA01NaplesIT{'lon': '14.2908', 'lat': '40.886002'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseXi'an Xianyang International AirportXIYCN{'lon': '108.751999', 'lat': '34.447102'}SE-BDClear13358.2442008300.428125...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lon': '-99.072098', 'lat': '19.4363'}MX-DIFDamaging Wind02018-01-01 05:13:00
5418.152089FalseGenoa Cristoforo Colombo AirportGE01IT{'lon': '8.8375', 'lat': '44.4133'}IT-42Thunder & Lightning7871.8088134891.315227...393.590441Edmonton International AirportCYEGEdmontonCA{'lon': '-113.5800018', 'lat': '53.30970001'}CA-ABRain02018-01-01 01:43:03
6180.246816FalseZurich AirportZRHCH{'lon': '8.54917', 'lat': '47.464699'}CH-ZHHail0.0000000.000000...300.000000Zurich AirportZRHZurichCH{'lon': '8.54917', 'lat': '47.464699'}CH-ZHClear02018-01-01 13:49:53
7585.184310FalseOttawa Macdonald-Cartier International AirportYOWCA{'lon': '-75.66919708', 'lat': '45.32249832'}CA-ONClear6764.3672844203.182964...614.942480Ciampino___G. B. Pastine International AirportRM12RomeIT{'lon': '12.5949', 'lat': '41.7994'}IT-62Thunder & Lightning02018-01-01 04:54:59
8960.869736TrueRajiv Gandhi International AirportHYDIN{'lon': '78.42985535', 'lat': '17.23131752'}SE-BDCloudy7044.3670894377.166777...602.030591Milano Linate AirportMI11MilanIT{'lon': '9.27674', 'lat': '45.445099'}IT-25Heavy Fog02018-01-01 12:09:35
9296.877773FalseTreviso-Sant'Angelo AirportTV01IT{'lon': '12.1944', 'lat': '45.648399'}IT-34Rain2097.8665951303.553868...174.822216Sheremetyevo International AirportSVOMoscowRU{'lon': '37.4146', 'lat': '55.972599'}RU-MOSCloudy02018-01-01 12:09:35
10906.437948FalseHelsinki Vantaa AirportHELFI{'lon': '24.9633007', 'lat': '60.31719971'}FI-ESRain8551.7678935313.822211...503.045170Albuquerque International Sunport AirportABQAlbuquerqueUS{'lon': '-106.609001', 'lat': '35.040199'}US-NMRain02018-01-01 22:06:14
11704.463771FalseVienna International AirportVIEAT{'lon': '16.56970024', 'lat': '48.11029816'}AT-9Cloudy432.900221268.991727...36.075018Venice Marco Polo AirportVE05VeniceIT{'lon': '12.3519', 'lat': '45.505299'}IT-34Rain02018-01-01 11:52:34
12922.499077TrueShanghai Pudong International AirportPVGCN{'lon': '121.8050003', 'lat': '31.14340019'}SE-BDClear12915.5994288025.381415...679.768391Licenciado Benito Juarez International AirportAICMMexico CityMX{'lon': '-99.072098', 'lat': '19.4363'}MX-DIFHeavy Fog02018-01-01 02:13:46
13374.959276FalseOttawa Macdonald-Cartier International AirportYOWCA{'lon': '-75.66919708', 'lat': '45.32249832'}CA-ONRain6938.7839264311.560441...330.418282Naples International AirportNA01NaplesIT{'lon': '14.2908', 'lat': '40.886002'}IT-72Rain02018-01-01 14:21:13
14552.917371FalseLuis Munoz Marin International AirportSJUPR{'lon': '-66.00180054', 'lat': '18.43939972'}PR-U-AClear7735.7555824806.775669...407.145031Ciampino___G. B. Pastine International AirportRM12RomeIT{'lon': '12.5949', 'lat': '41.7994'}IT-62Cloudy02018-01-01 17:42:53
15566.487557TrueCologne Bonn AirportCGNDE{'lon': '7.142739773', 'lat': '50.86589813'}DE-NWSunny7880.5518944896.747926...656.712658Chengdu Shuangliu International AirportCTUChengduCN{'lon': '103.9469986', 'lat': '30.57850075'}SE-BDThunder & Lightning02018-01-01 19:55:32
16989.952787TrueVenice Marco Polo AirportVE05IT{'lon': '12.3519', 'lat': '45.505299'}IT-34Damaging Wind10049.3943426244.404143...773.030334Licenciado Benito Juarez International AirportAICMMexico CityMX{'lon': '-99.072098', 'lat': '19.4363'}MX-DIFThunder & Lightning02018-01-01 07:49:27
17569.613255FalseMinistro Pistarini International AirportEZEAR{'lon': '-58.5358', 'lat': '-34.8222'}SE-BDCloudy8771.3199625450.245542...704.716920Cleveland Hopkins International AirportCLEClevelandUS{'lon': '-81.84980011', 'lat': '41.4117012'}US-OHRain02018-01-01 01:30:47
18277.429707FalseShanghai Pudong International AirportPVGCN{'lon': '121.8050003', 'lat': '31.14340019'}SE-BDClear6763.2019334202.458849...355.957996Olenya Air BaseXLMOOlenegorskRU{'lon': '33.46390152', 'lat': '68.15180206'}RU-MURHail02018-01-01 07:58:17
19772.100846FalseIndira Gandhi International AirportDELIN{'lon': '77.103104', 'lat': '28.5665'}SE-BDClear12081.8348027507.304095...875.114675Casper-Natrona County International AirportCPRCasperUS{'lon': '-106.4639969', 'lat': '42.90800095'}US-WYCloudy02018-01-01 00:02:06
20167.599922FalseWichita Mid Continent AirportICTUS{'lon': '-97.43309784', 'lat': '37.64989853'}US-KSClear1553.304538965.178693...373.966883Erie International Tom Ridge FieldERIErieUS{'lon': '-80.17386675', 'lat': '42.08312701'}US-PACloudy02018-01-01 01:08:20
21253.210065FalseOttawa Macdonald-Cartier International AirportYOWCA{'lon': '-75.66919708', 'lat': '45.32249832'}CA-ONHail528.680104328.506586...130.667700Newark Liberty International AirportEWRNewarkUS{'lon': '-74.16870117', 'lat': '40.69250107'}US-NJClear02018-01-01 01:08:20
22917.247620FalseItami AirportITMJP{'lon': '135.4380035', 'lat': '34.78549957'}SE-BDDamaging Wind8617.4296535354.622538...574.495310Copenhagen Kastrup AirportCPHCopenhagenDK{'lon': '12.65600014', 'lat': '55.61790085'}DK-84Sunny02018-01-01 07:48:35
23451.591176FalseVienna International AirportVIEAT{'lon': '16.56970024', 'lat': '48.11029816'}AT-9Heavy Fog8695.9341445403.402966...579.728943Seattle Tacoma International AirportSEASeattleUS{'lon': '-122.3089981', 'lat': '47.44900131'}US-WAHeavy Fog02018-01-01 18:57:21
24307.067201FalseCharles de Gaulle International AirportCDGFR{'lon': '2.549999952', 'lat': '49.01279831'}FR-JClear852.672891529.826371...50.157229Berlin-Tegel AirportTXLBerlinDE{'lon': '13.2877', 'lat': '52.5597'}DE-BERain02018-01-01 13:18:25
25268.241596FalseNarita International AirportNRTJP{'lon': '140.3860016', 'lat': '35.76470184'}SE-BDRain9496.2135935900.673562...527.567422Manchester AirportMANManchesterGB{'lon': '-2.274950027', 'lat': '53.35369873'}GB-ENGThunder & Lightning02018-01-01 08:20:35
26975.812632TrueItami AirportITMJP{'lon': '135.4380035', 'lat': '34.78549957'}SE-BDHail7725.1952794800.213801...386.259764Helsinki Vantaa AirportHELHelsinkiFI{'lon': '24.9633007', 'lat': '60.31719971'}FI-ESRain02018-01-01 15:38:32
27134.214546FalseSan Diego International AirportSANUS{'lon': '-117.1900024', 'lat': '32.73360062'}US-CAClear489.593006304.218990...24.479650Phoenix Sky Harbor International AirportPHXPhoenixUS{'lon': '-112.012001', 'lat': '33.43429947'}US-AZClear02018-01-01 03:08:45
28988.897564FalseVerona Villafranca AirportVR10IT{'lon': '10.8885', 'lat': '45.395699'}IT-34Sunny9093.6165225650.511340...568.351033New Chitose AirportCTSChitose / TomakomaiJP{'lon': '141.6920013', 'lat': '42.77519989'}SE-BDDamaging Wind02018-01-01 01:16:59
29511.067220FalseZurich AirportZRHCH{'lon': '8.54917', 'lat': '47.464699'}CH-ZHRain8091.8946805028.070245...425.889194Tulsa International AirportTULTulsaUS{'lon': '-95.88809967', 'lat': '36.19839859'}US-OKRain02018-01-01 18:00:59
..................................................................
13029795.905278FalseMalpensa International AirportMI12IT{'lon': '8.72811', 'lat': '45.6306'}IT-25Sunny9618.7648765976.823399...534.375826Itami AirportITMOsakaJP{'lon': '135.4380035', 'lat': '34.78549957'}SE-BDSunny62018-02-11 20:10:13
13030863.388068FalseXi'an Xianyang International AirportXIYCN{'lon': '108.751999', 'lat': '34.447102'}SE-BDDamaging Wind2823.4526611754.412146...141.172633Tokyo Haneda International AirportHNDTokyoJP{'lon': '139.779999', 'lat': '35.552299'}SE-BDClear62018-02-11 18:59:53
13031575.183008FalseSavannah Hilton Head International AirportSAVUS{'lon': '-81.20210266', 'lat': '32.12760162'}US-GAThunder & Lightning13250.1929578233.288195...1113.137060OR Tambo International AirportJNBJohannesburgZA{'lon': '28.246', 'lat': '-26.1392'}SE-BDHail62018-02-11 00:57:48
13032817.368952FalseSyracuse Hancock International AirportSYRUS{'lon': '-76.10630035', 'lat': '43.11119843'}US-NYRain4259.5783682646.779289...714.964864El Dorado International AirportBOGBogotaCO{'lon': '-74.1469', 'lat': '4.70159'}CO-CUNThunder & Lightning62018-02-11 12:02:49
13033579.582455FalseTampa International AirportTPAUS{'lon': '-82.53320313', 'lat': '27.97550011'}US-FLRain4463.6518752773.584687...234.929046Jorge Chavez International AirportLIMLimaPE{'lon': '-77.114304', 'lat': '-12.0219'}SE-BDThunder & Lightning62018-02-11 02:07:40
130341004.916638FalseOlenya Air BaseXLMORU{'lon': '33.46390152', 'lat': '68.15180206'}RU-MURClear6322.7493143928.774279...526.895776Gimpo International AirportGMPSeoulKR{'lon': '126.791', 'lat': '37.5583'}SE-BDSunny62018-02-11 00:35:04
13035357.562842TrueShanghai Pudong International AirportPVGCN{'lon': '121.8050003', 'lat': '31.14340019'}SE-BDThunder & Lightning0.0000000.000000...0.000000Shanghai Pudong International AirportPVGShanghaiCN{'lon': '121.8050003', 'lat': '31.14340019'}SE-BDThunder & Lightning62018-02-11 11:19:12
13036429.580539FalseVenice Marco Polo AirportVE05IT{'lon': '12.3519', 'lat': '45.505299'}IT-34Sunny0.0000000.000000...150.000000Venice Marco Polo AirportVE05VeniceIT{'lon': '12.3519', 'lat': '45.505299'}IT-34Cloudy62018-02-11 15:07:11
13037729.788171TrueVienna International AirportVIEAT{'lon': '16.56970024', 'lat': '48.11029816'}AT-9Rain7240.2829104498.903224...691.944839Ukrainka Air BaseXHBUBelogorskRU{'lon': '128.445007', 'lat': '51.169997'}RU-AMUDamaging Wind62018-02-11 10:24:42
13038564.897695FalsePisa International AirportPI05IT{'lon': '10.3927', 'lat': '43.683899'}IT-52Heavy Fog7943.4227434935.814060...567.387339OR Tambo International AirportJNBJohannesburgZA{'lon': '28.246', 'lat': '-26.1392'}SE-BDDamaging Wind62018-02-11 00:42:06
130391014.052787FalseVienna International AirportVIEAT{'lon': '16.56970024', 'lat': '48.11029816'}AT-9Thunder & Lightning6481.1079214027.173756...690.092327Montreal / Pierre Elliott Trudeau Internationa...YULMontrealCA{'lon': '-73.74079895', 'lat': '45.47060013'}CA-QCThunder & Lightning62018-02-11 10:56:31
13040455.243843FalseLondon Luton AirportLTNGB{'lon': '-0.368333012', 'lat': '51.87469864'}GB-ENGCloudy45.42440028.225414...3.028293London Heathrow AirportLHRLondonGB{'lon': '-0.461941', 'lat': '51.4706'}GB-ENGClear62018-02-11 00:39:37
13041611.370232FalseJorge Chavez International AirportLIMPE{'lon': '-77.114304', 'lat': '-12.0219'}SE-BDSunny6777.5106174211.349853...338.875531Casper-Natrona County International AirportCPRCasperUS{'lon': '-106.4639969', 'lat': '42.90800095'}US-WYRain62018-02-11 10:24:30
13042595.961285FalseOttawa Macdonald-Cartier International AirportYOWCA{'lon': '-75.66919708', 'lat': '45.32249832'}CA-ONClear6002.0733863729.515496...375.129587Frankfurt am Main AirportFRAFrankfurt am MainDE{'lon': '8.570556', 'lat': '50.033333'}DE-HEClear62018-02-11 09:02:07
13043782.747648FalseXi'an Xianyang International AirportXIYCN{'lon': '108.751999', 'lat': '34.447102'}SE-BDClear2823.4526611754.412146...156.858481Tokyo Haneda International AirportHNDTokyoJP{'lon': '139.779999', 'lat': '35.552299'}SE-BDThunder & Lightning62018-02-11 04:45:06
13044891.117221FalseWinnipeg / James Armstrong Richardson Internat...YWGCA{'lon': '-97.23989868', 'lat': '49.90999985'}CA-MBClear7436.2355984620.662579...354.106457Vienna International AirportVIEViennaAT{'lon': '16.56970024', 'lat': '48.11029816'}AT-9Thunder & Lightning62018-02-11 00:51:14
13045587.169921FalseBrisbane International AirportBNEAU{'lon': '153.1170044', 'lat': '-27.38419914'}SE-BDRain16197.41427310064.606618...771.305442Amsterdam Airport SchipholAMSAmsterdamNL{'lon': '4.76388979', 'lat': '52.30860138'}NL-NHSunny62018-02-11 05:41:51
13046739.132165FalseXi'an Xianyang International AirportXIYCN{'lon': '108.751999', 'lat': '34.447102'}SE-BDRain10316.1558666410.162070...542.955572Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lon': '-97.23989868', 'lat': '49.90999985'}CA-MBHail62018-02-11 10:02:21
13047605.191876FalsePortland International Jetport AirportPWMUS{'lon': '-70.30930328', 'lat': '43.64619827'}US-METhunder & Lightning11291.9971457016.521729...564.599857Jeju International AirportCJUJeju CityKR{'lon': '126.4929962', 'lat': '33.51129913'}SE-BDCloudy62018-02-11 15:55:10
13048361.767659TrueDubai International AirportDXBAE{'lon': '55.36439896', 'lat': '25.25279999'}SE-BDSunny0.0000000.000000...180.000000Dubai International AirportDXBDubaiAE{'lon': '55.36439896', 'lat': '25.25279999'}SE-BDHail62018-02-11 04:11:14
13049662.306992FalseWinnipeg / James Armstrong Richardson Internat...YWGCA{'lon': '-97.23989868', 'lat': '49.90999985'}CA-MBHeavy Fog10131.2252956295.251540...835.954429Ministro Pistarini International AirportEZEBuenos AiresAR{'lon': '-58.5358', 'lat': '-34.8222'}AR-BSunny62018-02-11 10:13:32
13050630.779526FalseHelsinki Vantaa AirportHELFI{'lon': '24.9633007', 'lat': '60.31719971'}FI-ESSunny6324.5789513929.911163...451.755639Beijing Capital International AirportPEKBeijingCN{'lon': '116.5849991', 'lat': '40.08010101'}SE-BDCloudy62018-02-11 11:23:23
13051937.771279TrueLester B. Pearson International AirportYYZCA{'lon': '-79.63059998', 'lat': '43.67720032'}CA-ONSunny7104.3219984414.421030...507.451571Leonardo da Vinci___Fiumicino AirportRM11RomeIT{'lon': '12.2388889', 'lat': '41.8002778'}IT-62Hail62018-02-11 01:13:50
130521085.155339FalseMelbourne International AirportMELAU{'lon': '144.843002', 'lat': '-37.673302'}SE-BDCloudy16100.12019710004.150882...1044.451122Bologna Guglielmo Marconi AirportBO08BolognaIT{'lon': '11.2887', 'lat': '44.5354'}IT-45Cloudy62018-02-11 18:35:42
130531191.964104FalseZurich AirportZRHCH{'lon': '8.54917', 'lat': '47.464699'}CH-ZHHail5899.4544653665.751055...728.715904Portland International Jetport AirportPWMPortlandUS{'lon': '-70.30930328', 'lat': '43.64619827'}US-MEClear62018-02-11 19:02:10
130541080.446279FalseXi'an Xianyang International AirportXIYCN{'lon': '108.751999', 'lat': '34.447102'}SE-BDRain8058.5817535007.370551...402.929088Pisa International AirportPI05PisaIT{'lon': '10.3927', 'lat': '43.683899'}IT-52Sunny62018-02-11 20:42:25
13055646.612941FalseZurich AirportZRHCH{'lon': '8.54917', 'lat': '47.464699'}CH-ZHRain7088.5983224404.650791...644.418029Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lon': '-97.23989868', 'lat': '49.90999985'}CA-MBRain62018-02-11 01:41:57
13056997.751876FalseUkrainka Air BaseXHBURU{'lon': '128.445007', 'lat': '51.169997'}RU-AMURain10920.6529726785.779157...937.540811Licenciado Benito Juarez International AirportAICMMexico CityMX{'lon': '-99.072098', 'lat': '19.4363'}MX-DIFSunny62018-02-11 04:09:27
130571102.814465FalseMinistro Pistarini International AirportEZEAR{'lon': '-58.5358', 'lat': '-34.8222'}SE-BDHail18748.85964711650.001272...1697.404971Itami AirportITMOsakaJP{'lon': '135.4380035', 'lat': '34.78549957'}SE-BDHail62018-02-11 08:28:21
13058858.144337FalseWashington Dulles International AirportIADUS{'lon': '-77.45580292', 'lat': '38.94449997'}US-DCHeavy Fog16809.14192310444.716557...1610.761827Adelaide International AirportADLAdelaideAU{'lon': '138.531006', 'lat': '-34.945'}SE-BDRain62018-02-11 14:54:34
\n", - "
\n", - "

13059 rows x 25 columns

" - ], - "text/plain": [ - " AvgTicketPrice Cancelled \\\n", - "0 841.265642 False \n", - "1 882.982662 False \n", - "2 190.636904 False \n", - "3 181.694216 True \n", - "4 730.041778 False \n", - "5 418.152089 False \n", - "6 180.246816 False \n", - "7 585.184310 False \n", - "8 960.869736 True \n", - "9 296.877773 False \n", - "10 906.437948 False \n", - "11 704.463771 False \n", - "12 922.499077 True \n", - "13 374.959276 False \n", - "14 552.917371 False \n", - "15 566.487557 True \n", - "16 989.952787 True \n", - "17 569.613255 False \n", - "18 277.429707 False \n", - "19 772.100846 False \n", - "20 167.599922 False \n", - "21 253.210065 False \n", - "22 917.247620 False \n", - "23 451.591176 False \n", - "24 307.067201 False \n", - "25 268.241596 False \n", - "26 975.812632 True \n", - "27 134.214546 False \n", - "28 988.897564 False \n", - "29 511.067220 False \n", - "... ... ... \n", - "13029 795.905278 False \n", - "13030 863.388068 False \n", - "13031 575.183008 False \n", - "13032 817.368952 False \n", - "13033 579.582455 False \n", - "13034 1004.916638 False \n", - "13035 357.562842 True \n", - "13036 429.580539 False \n", - "13037 729.788171 True \n", - "13038 564.897695 False \n", - "13039 1014.052787 False \n", - "13040 455.243843 False \n", - "13041 611.370232 False \n", - "13042 595.961285 False \n", - "13043 782.747648 False \n", - "13044 891.117221 False \n", - "13045 587.169921 False \n", - "13046 739.132165 False \n", - "13047 605.191876 False \n", - "13048 361.767659 True \n", - "13049 662.306992 False \n", - "13050 630.779526 False \n", - "13051 937.771279 True \n", - "13052 1085.155339 False \n", - "13053 1191.964104 False \n", - "13054 1080.446279 False \n", - "13055 646.612941 False \n", - "13056 997.751876 False \n", - "13057 1102.814465 False \n", - "13058 858.144337 False \n", - "\n", - " Dest DestAirportID \\\n", - "0 Sydney Kingsford Smith International Airport SYD \n", - "1 Venice Marco Polo Airport VE05 \n", - "2 Venice Marco Polo Airport VE05 \n", - "3 Treviso-Sant'Angelo Airport TV01 \n", - "4 Xi'an Xianyang International Airport XIY \n", - "5 Genoa Cristoforo Colombo Airport GE01 \n", - "6 Zurich Airport ZRH \n", - "7 Ottawa Macdonald-Cartier International Airport YOW \n", - "8 Rajiv Gandhi International Airport HYD \n", - "9 Treviso-Sant'Angelo Airport TV01 \n", - "10 Helsinki Vantaa Airport HEL \n", - "11 Vienna International Airport VIE \n", - "12 Shanghai Pudong International Airport PVG \n", - "13 Ottawa Macdonald-Cartier International Airport YOW \n", - "14 Luis Munoz Marin International Airport SJU \n", - "15 Cologne Bonn Airport CGN \n", - "16 Venice Marco Polo Airport VE05 \n", - "17 Ministro Pistarini International Airport EZE \n", - "18 Shanghai Pudong International Airport PVG \n", - "19 Indira Gandhi International Airport DEL \n", - "20 Wichita Mid Continent Airport ICT \n", - "21 Ottawa Macdonald-Cartier International Airport YOW \n", - "22 Itami Airport ITM \n", - "23 Vienna International Airport VIE \n", - "24 Charles de Gaulle International Airport CDG \n", - "25 Narita International Airport NRT \n", - "26 Itami Airport ITM \n", - "27 San Diego International Airport SAN \n", - "28 Verona Villafranca Airport VR10 \n", - "29 Zurich Airport ZRH \n", - "... ... ... \n", - "13029 Malpensa International Airport MI12 \n", - "13030 Xi'an Xianyang International Airport XIY \n", - "13031 Savannah Hilton Head International Airport SAV \n", - "13032 Syracuse Hancock International Airport SYR \n", - "13033 Tampa International Airport TPA \n", - "13034 Olenya Air Base XLMO \n", - "13035 Shanghai Pudong International Airport PVG \n", - "13036 Venice Marco Polo Airport VE05 \n", - "13037 Vienna International Airport VIE \n", - "13038 Pisa International Airport PI05 \n", - "13039 Vienna International Airport VIE \n", - "13040 London Luton Airport LTN \n", - "13041 Jorge Chavez International Airport LIM \n", - "13042 Ottawa Macdonald-Cartier International Airport YOW \n", - "13043 Xi'an Xianyang International Airport XIY \n", - "13044 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13045 Brisbane International Airport BNE \n", - "13046 Xi'an Xianyang International Airport XIY \n", - "13047 Portland International Jetport Airport PWM \n", - "13048 Dubai International Airport DXB \n", - "13049 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13050 Helsinki Vantaa Airport HEL \n", - "13051 Lester B. Pearson International Airport YYZ \n", - "13052 Melbourne International Airport MEL \n", - "13053 Zurich Airport ZRH \n", - "13054 Xi'an Xianyang International Airport XIY \n", - "13055 Zurich Airport ZRH \n", - "13056 Ukrainka Air Base XHBU \n", - "13057 Ministro Pistarini International Airport EZE \n", - "13058 Washington Dulles International Airport IAD \n", - "\n", - " DestCountry DestLocation DestRegion \\\n", - "0 AU {'lon': '151.177002', 'lat': '-33.94609833'} SE-BD \n", - "1 IT {'lon': '12.3519', 'lat': '45.505299'} IT-34 \n", - "2 IT {'lon': '12.3519', 'lat': '45.505299'} IT-34 \n", - "3 IT {'lon': '12.1944', 'lat': '45.648399'} IT-34 \n", - "4 CN {'lon': '108.751999', 'lat': '34.447102'} SE-BD \n", - "5 IT {'lon': '8.8375', 'lat': '44.4133'} IT-42 \n", - "6 CH {'lon': '8.54917', 'lat': '47.464699'} CH-ZH \n", - "7 CA {'lon': '-75.66919708', 'lat': '45.32249832'} CA-ON \n", - "8 IN {'lon': '78.42985535', 'lat': '17.23131752'} SE-BD \n", - "9 IT {'lon': '12.1944', 'lat': '45.648399'} IT-34 \n", - "10 FI {'lon': '24.9633007', 'lat': '60.31719971'} FI-ES \n", - "11 AT {'lon': '16.56970024', 'lat': '48.11029816'} AT-9 \n", - "12 CN {'lon': '121.8050003', 'lat': '31.14340019'} SE-BD \n", - "13 CA {'lon': '-75.66919708', 'lat': '45.32249832'} CA-ON \n", - "14 PR {'lon': '-66.00180054', 'lat': '18.43939972'} PR-U-A \n", - "15 DE {'lon': '7.142739773', 'lat': '50.86589813'} DE-NW \n", - "16 IT {'lon': '12.3519', 'lat': '45.505299'} IT-34 \n", - "17 AR {'lon': '-58.5358', 'lat': '-34.8222'} SE-BD \n", - "18 CN {'lon': '121.8050003', 'lat': '31.14340019'} SE-BD \n", - "19 IN {'lon': '77.103104', 'lat': '28.5665'} SE-BD \n", - "20 US {'lon': '-97.43309784', 'lat': '37.64989853'} US-KS \n", - "21 CA {'lon': '-75.66919708', 'lat': '45.32249832'} CA-ON \n", - "22 JP {'lon': '135.4380035', 'lat': '34.78549957'} SE-BD \n", - "23 AT {'lon': '16.56970024', 'lat': '48.11029816'} AT-9 \n", - "24 FR {'lon': '2.549999952', 'lat': '49.01279831'} FR-J \n", - "25 JP {'lon': '140.3860016', 'lat': '35.76470184'} SE-BD \n", - "26 JP {'lon': '135.4380035', 'lat': '34.78549957'} SE-BD \n", - "27 US {'lon': '-117.1900024', 'lat': '32.73360062'} US-CA \n", - "28 IT {'lon': '10.8885', 'lat': '45.395699'} IT-34 \n", - "29 CH {'lon': '8.54917', 'lat': '47.464699'} CH-ZH \n", - "... ... ... ... \n", - "13029 IT {'lon': '8.72811', 'lat': '45.6306'} IT-25 \n", - "13030 CN {'lon': '108.751999', 'lat': '34.447102'} SE-BD \n", - "13031 US {'lon': '-81.20210266', 'lat': '32.12760162'} US-GA \n", - "13032 US {'lon': '-76.10630035', 'lat': '43.11119843'} US-NY \n", - "13033 US {'lon': '-82.53320313', 'lat': '27.97550011'} US-FL \n", - "13034 RU {'lon': '33.46390152', 'lat': '68.15180206'} RU-MUR \n", - "13035 CN {'lon': '121.8050003', 'lat': '31.14340019'} SE-BD \n", - "13036 IT {'lon': '12.3519', 'lat': '45.505299'} IT-34 \n", - "13037 AT {'lon': '16.56970024', 'lat': '48.11029816'} AT-9 \n", - "13038 IT {'lon': '10.3927', 'lat': '43.683899'} IT-52 \n", - "13039 AT {'lon': '16.56970024', 'lat': '48.11029816'} AT-9 \n", - "13040 GB {'lon': '-0.368333012', 'lat': '51.87469864'} GB-ENG \n", - "13041 PE {'lon': '-77.114304', 'lat': '-12.0219'} SE-BD \n", - "13042 CA {'lon': '-75.66919708', 'lat': '45.32249832'} CA-ON \n", - "13043 CN {'lon': '108.751999', 'lat': '34.447102'} SE-BD \n", - "13044 CA {'lon': '-97.23989868', 'lat': '49.90999985'} CA-MB \n", - "13045 AU {'lon': '153.1170044', 'lat': '-27.38419914'} SE-BD \n", - "13046 CN {'lon': '108.751999', 'lat': '34.447102'} SE-BD \n", - "13047 US {'lon': '-70.30930328', 'lat': '43.64619827'} US-ME \n", - "13048 AE {'lon': '55.36439896', 'lat': '25.25279999'} SE-BD \n", - "13049 CA {'lon': '-97.23989868', 'lat': '49.90999985'} CA-MB \n", - "13050 FI {'lon': '24.9633007', 'lat': '60.31719971'} FI-ES \n", - "13051 CA {'lon': '-79.63059998', 'lat': '43.67720032'} CA-ON \n", - "13052 AU {'lon': '144.843002', 'lat': '-37.673302'} SE-BD \n", - "13053 CH {'lon': '8.54917', 'lat': '47.464699'} CH-ZH \n", - "13054 CN {'lon': '108.751999', 'lat': '34.447102'} SE-BD \n", - "13055 CH {'lon': '8.54917', 'lat': '47.464699'} CH-ZH \n", - "13056 RU {'lon': '128.445007', 'lat': '51.169997'} RU-AMU \n", - "13057 AR {'lon': '-58.5358', 'lat': '-34.8222'} SE-BD \n", - "13058 US {'lon': '-77.45580292', 'lat': '38.94449997'} US-DC \n", - "\n", - " DestWeather DistanceKilometers DistanceMiles ... \\\n", - "0 Rain 16492.326654 10247.856676 ... \n", - "1 Sunny 8823.400140 5482.606665 ... \n", - "2 Cloudy 0.000000 0.000000 ... \n", - "3 Clear 555.737767 345.319439 ... \n", - "4 Clear 13358.244200 8300.428125 ... \n", - "5 Thunder & Lightning 7871.808813 4891.315227 ... \n", - "6 Hail 0.000000 0.000000 ... \n", - "7 Clear 6764.367284 4203.182964 ... \n", - "8 Cloudy 7044.367089 4377.166777 ... \n", - "9 Rain 2097.866595 1303.553868 ... \n", - "10 Rain 8551.767893 5313.822211 ... \n", - "11 Cloudy 432.900221 268.991727 ... \n", - "12 Clear 12915.599428 8025.381415 ... \n", - "13 Rain 6938.783926 4311.560441 ... \n", - "14 Clear 7735.755582 4806.775669 ... \n", - "15 Sunny 7880.551894 4896.747926 ... \n", - "16 Damaging Wind 10049.394342 6244.404143 ... \n", - "17 Cloudy 8771.319962 5450.245542 ... \n", - "18 Clear 6763.201933 4202.458849 ... \n", - "19 Clear 12081.834802 7507.304095 ... \n", - "20 Clear 1553.304538 965.178693 ... \n", - "21 Hail 528.680104 328.506586 ... \n", - "22 Damaging Wind 8617.429653 5354.622538 ... \n", - "23 Heavy Fog 8695.934144 5403.402966 ... \n", - "24 Clear 852.672891 529.826371 ... \n", - "25 Rain 9496.213593 5900.673562 ... \n", - "26 Hail 7725.195279 4800.213801 ... \n", - "27 Clear 489.593006 304.218990 ... \n", - "28 Sunny 9093.616522 5650.511340 ... \n", - "29 Rain 8091.894680 5028.070245 ... \n", - "... ... ... ... ... \n", - "13029 Sunny 9618.764876 5976.823399 ... \n", - "13030 Damaging Wind 2823.452661 1754.412146 ... \n", - "13031 Thunder & Lightning 13250.192957 8233.288195 ... \n", - "13032 Rain 4259.578368 2646.779289 ... \n", - "13033 Rain 4463.651875 2773.584687 ... \n", - "13034 Clear 6322.749314 3928.774279 ... \n", - "13035 Thunder & Lightning 0.000000 0.000000 ... \n", - "13036 Sunny 0.000000 0.000000 ... \n", - "13037 Rain 7240.282910 4498.903224 ... \n", - "13038 Heavy Fog 7943.422743 4935.814060 ... \n", - "13039 Thunder & Lightning 6481.107921 4027.173756 ... \n", - "13040 Cloudy 45.424400 28.225414 ... \n", - "13041 Sunny 6777.510617 4211.349853 ... \n", - "13042 Clear 6002.073386 3729.515496 ... \n", - "13043 Clear 2823.452661 1754.412146 ... \n", - "13044 Clear 7436.235598 4620.662579 ... \n", - "13045 Rain 16197.414273 10064.606618 ... \n", - "13046 Rain 10316.155866 6410.162070 ... \n", - "13047 Thunder & Lightning 11291.997145 7016.521729 ... \n", - "13048 Sunny 0.000000 0.000000 ... \n", - "13049 Heavy Fog 10131.225295 6295.251540 ... \n", - "13050 Sunny 6324.578951 3929.911163 ... \n", - "13051 Sunny 7104.321998 4414.421030 ... \n", - "13052 Cloudy 16100.120197 10004.150882 ... \n", - "13053 Hail 5899.454465 3665.751055 ... \n", - "13054 Rain 8058.581753 5007.370551 ... \n", - "13055 Rain 7088.598322 4404.650791 ... \n", - "13056 Rain 10920.652972 6785.779157 ... \n", - "13057 Hail 18748.859647 11650.001272 ... \n", - "13058 Heavy Fog 16809.141923 10444.716557 ... \n", - "\n", - " FlightTimeMin Origin \\\n", - "0 1030.770416 Frankfurt am Main Airport \n", - "1 464.389481 Cape Town International Airport \n", - "2 0.000000 Venice Marco Polo Airport \n", - "3 222.749059 Naples International Airport \n", - "4 785.779071 Licenciado Benito Juarez International Airport \n", - "5 393.590441 Edmonton International Airport \n", - "6 300.000000 Zurich Airport \n", - "7 614.942480 Ciampino___G. B. Pastine International Airport \n", - "8 602.030591 Milano Linate Airport \n", - "9 174.822216 Sheremetyevo International Airport \n", - "10 503.045170 Albuquerque International Sunport Airport \n", - "11 36.075018 Venice Marco Polo Airport \n", - "12 679.768391 Licenciado Benito Juarez International Airport \n", - "13 330.418282 Naples International Airport \n", - "14 407.145031 Ciampino___G. B. Pastine International Airport \n", - "15 656.712658 Chengdu Shuangliu International Airport \n", - "16 773.030334 Licenciado Benito Juarez International Airport \n", - "17 704.716920 Cleveland Hopkins International Airport \n", - "18 355.957996 Olenya Air Base \n", - "19 875.114675 Casper-Natrona County International Airport \n", - "20 373.966883 Erie International Tom Ridge Field \n", - "21 130.667700 Newark Liberty International Airport \n", - "22 574.495310 Copenhagen Kastrup Airport \n", - "23 579.728943 Seattle Tacoma International Airport \n", - "24 50.157229 Berlin-Tegel Airport \n", - "25 527.567422 Manchester Airport \n", - "26 386.259764 Helsinki Vantaa Airport \n", - "27 24.479650 Phoenix Sky Harbor International Airport \n", - "28 568.351033 New Chitose Airport \n", - "29 425.889194 Tulsa International Airport \n", - "... ... ... \n", - "13029 534.375826 Itami Airport \n", - "13030 141.172633 Tokyo Haneda International Airport \n", - "13031 1113.137060 OR Tambo International Airport \n", - "13032 714.964864 El Dorado International Airport \n", - "13033 234.929046 Jorge Chavez International Airport \n", - "13034 526.895776 Gimpo International Airport \n", - "13035 0.000000 Shanghai Pudong International Airport \n", - "13036 150.000000 Venice Marco Polo Airport \n", - "13037 691.944839 Ukrainka Air Base \n", - "13038 567.387339 OR Tambo International Airport \n", - "13039 690.092327 Montreal / Pierre Elliott Trudeau Internationa... \n", - "13040 3.028293 London Heathrow Airport \n", - "13041 338.875531 Casper-Natrona County International Airport \n", - "13042 375.129587 Frankfurt am Main Airport \n", - "13043 156.858481 Tokyo Haneda International Airport \n", - "13044 354.106457 Vienna International Airport \n", - "13045 771.305442 Amsterdam Airport Schiphol \n", - "13046 542.955572 Winnipeg / James Armstrong Richardson Internat... \n", - "13047 564.599857 Jeju International Airport \n", - "13048 180.000000 Dubai International Airport \n", - "13049 835.954429 Ministro Pistarini International Airport \n", - "13050 451.755639 Beijing Capital International Airport \n", - "13051 507.451571 Leonardo da Vinci___Fiumicino Airport \n", - "13052 1044.451122 Bologna Guglielmo Marconi Airport \n", - "13053 728.715904 Portland International Jetport Airport \n", - "13054 402.929088 Pisa International Airport \n", - "13055 644.418029 Winnipeg / James Armstrong Richardson Internat... \n", - "13056 937.540811 Licenciado Benito Juarez International Airport \n", - "13057 1697.404971 Itami Airport \n", - "13058 1610.761827 Adelaide International Airport \n", - "\n", - " OriginAirportID OriginCityName OriginCountry \\\n", - "0 FRA Frankfurt am Main DE \n", - "1 CPT Cape Town ZA \n", - "2 VE05 Venice IT \n", - "3 NA01 Naples IT \n", - "4 AICM Mexico City MX \n", - "5 CYEG Edmonton CA \n", - "6 ZRH Zurich CH \n", - "7 RM12 Rome IT \n", - "8 MI11 Milan IT \n", - "9 SVO Moscow RU \n", - "10 ABQ Albuquerque US \n", - "11 VE05 Venice IT \n", - "12 AICM Mexico City MX \n", - "13 NA01 Naples IT \n", - "14 RM12 Rome IT \n", - "15 CTU Chengdu CN \n", - "16 AICM Mexico City MX \n", - "17 CLE Cleveland US \n", - "18 XLMO Olenegorsk RU \n", - "19 CPR Casper US \n", - "20 ERI Erie US \n", - "21 EWR Newark US \n", - "22 CPH Copenhagen DK \n", - "23 SEA Seattle US \n", - "24 TXL Berlin DE \n", - "25 MAN Manchester GB \n", - "26 HEL Helsinki FI \n", - "27 PHX Phoenix US \n", - "28 CTS Chitose / Tomakomai JP \n", - "29 TUL Tulsa US \n", - "... ... ... ... \n", - "13029 ITM Osaka JP \n", - "13030 HND Tokyo JP \n", - "13031 JNB Johannesburg ZA \n", - "13032 BOG Bogota CO \n", - "13033 LIM Lima PE \n", - "13034 GMP Seoul KR \n", - "13035 PVG Shanghai CN \n", - "13036 VE05 Venice IT \n", - "13037 XHBU Belogorsk RU \n", - "13038 JNB Johannesburg ZA \n", - "13039 YUL Montreal CA \n", - "13040 LHR London GB \n", - "13041 CPR Casper US \n", - "13042 FRA Frankfurt am Main DE \n", - "13043 HND Tokyo JP \n", - "13044 VIE Vienna AT \n", - "13045 AMS Amsterdam NL \n", - "13046 YWG Winnipeg CA \n", - "13047 CJU Jeju City KR \n", - "13048 DXB Dubai AE \n", - "13049 EZE Buenos Aires AR \n", - "13050 PEK Beijing CN \n", - "13051 RM11 Rome IT \n", - "13052 BO08 Bologna IT \n", - "13053 PWM Portland US \n", - "13054 PI05 Pisa IT \n", - "13055 YWG Winnipeg CA \n", - "13056 AICM Mexico City MX \n", - "13057 ITM Osaka JP \n", - "13058 ADL Adelaide AU \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lon': '8.570556', 'lat': '50.033333'} DE-HE \n", - "1 {'lon': '18.60169983', 'lat': '-33.96480179'} SE-BD \n", - "2 {'lon': '12.3519', 'lat': '45.505299'} IT-34 \n", - "3 {'lon': '14.2908', 'lat': '40.886002'} IT-72 \n", - "4 {'lon': '-99.072098', 'lat': '19.4363'} MX-DIF \n", - "5 {'lon': '-113.5800018', 'lat': '53.30970001'} CA-AB \n", - "6 {'lon': '8.54917', 'lat': '47.464699'} CH-ZH \n", - "7 {'lon': '12.5949', 'lat': '41.7994'} IT-62 \n", - "8 {'lon': '9.27674', 'lat': '45.445099'} IT-25 \n", - "9 {'lon': '37.4146', 'lat': '55.972599'} RU-MOS \n", - "10 {'lon': '-106.609001', 'lat': '35.040199'} US-NM \n", - "11 {'lon': '12.3519', 'lat': '45.505299'} IT-34 \n", - "12 {'lon': '-99.072098', 'lat': '19.4363'} MX-DIF \n", - "13 {'lon': '14.2908', 'lat': '40.886002'} IT-72 \n", - "14 {'lon': '12.5949', 'lat': '41.7994'} IT-62 \n", - "15 {'lon': '103.9469986', 'lat': '30.57850075'} SE-BD \n", - "16 {'lon': '-99.072098', 'lat': '19.4363'} MX-DIF \n", - "17 {'lon': '-81.84980011', 'lat': '41.4117012'} US-OH \n", - "18 {'lon': '33.46390152', 'lat': '68.15180206'} RU-MUR \n", - "19 {'lon': '-106.4639969', 'lat': '42.90800095'} US-WY \n", - "20 {'lon': '-80.17386675', 'lat': '42.08312701'} US-PA \n", - "21 {'lon': '-74.16870117', 'lat': '40.69250107'} US-NJ \n", - "22 {'lon': '12.65600014', 'lat': '55.61790085'} DK-84 \n", - "23 {'lon': '-122.3089981', 'lat': '47.44900131'} US-WA \n", - "24 {'lon': '13.2877', 'lat': '52.5597'} DE-BE \n", - "25 {'lon': '-2.274950027', 'lat': '53.35369873'} GB-ENG \n", - "26 {'lon': '24.9633007', 'lat': '60.31719971'} FI-ES \n", - "27 {'lon': '-112.012001', 'lat': '33.43429947'} US-AZ \n", - "28 {'lon': '141.6920013', 'lat': '42.77519989'} SE-BD \n", - "29 {'lon': '-95.88809967', 'lat': '36.19839859'} US-OK \n", - "... ... ... \n", - "13029 {'lon': '135.4380035', 'lat': '34.78549957'} SE-BD \n", - "13030 {'lon': '139.779999', 'lat': '35.552299'} SE-BD \n", - "13031 {'lon': '28.246', 'lat': '-26.1392'} SE-BD \n", - "13032 {'lon': '-74.1469', 'lat': '4.70159'} CO-CUN \n", - "13033 {'lon': '-77.114304', 'lat': '-12.0219'} SE-BD \n", - "13034 {'lon': '126.791', 'lat': '37.5583'} SE-BD \n", - "13035 {'lon': '121.8050003', 'lat': '31.14340019'} SE-BD \n", - "13036 {'lon': '12.3519', 'lat': '45.505299'} IT-34 \n", - "13037 {'lon': '128.445007', 'lat': '51.169997'} RU-AMU \n", - "13038 {'lon': '28.246', 'lat': '-26.1392'} SE-BD \n", - "13039 {'lon': '-73.74079895', 'lat': '45.47060013'} CA-QC \n", - "13040 {'lon': '-0.461941', 'lat': '51.4706'} GB-ENG \n", - "13041 {'lon': '-106.4639969', 'lat': '42.90800095'} US-WY \n", - "13042 {'lon': '8.570556', 'lat': '50.033333'} DE-HE \n", - "13043 {'lon': '139.779999', 'lat': '35.552299'} SE-BD \n", - "13044 {'lon': '16.56970024', 'lat': '48.11029816'} AT-9 \n", - "13045 {'lon': '4.76388979', 'lat': '52.30860138'} NL-NH \n", - "13046 {'lon': '-97.23989868', 'lat': '49.90999985'} CA-MB \n", - "13047 {'lon': '126.4929962', 'lat': '33.51129913'} SE-BD \n", - "13048 {'lon': '55.36439896', 'lat': '25.25279999'} SE-BD \n", - "13049 {'lon': '-58.5358', 'lat': '-34.8222'} AR-B \n", - "13050 {'lon': '116.5849991', 'lat': '40.08010101'} SE-BD \n", - "13051 {'lon': '12.2388889', 'lat': '41.8002778'} IT-62 \n", - "13052 {'lon': '11.2887', 'lat': '44.5354'} IT-45 \n", - "13053 {'lon': '-70.30930328', 'lat': '43.64619827'} US-ME \n", - "13054 {'lon': '10.3927', 'lat': '43.683899'} IT-52 \n", - "13055 {'lon': '-97.23989868', 'lat': '49.90999985'} CA-MB \n", - "13056 {'lon': '-99.072098', 'lat': '19.4363'} MX-DIF \n", - "13057 {'lon': '135.4380035', 'lat': '34.78549957'} SE-BD \n", - "13058 {'lon': '138.531006', 'lat': '-34.945'} SE-BD \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "1 Clear 0 2018-01-01 18:27:00 \n", - "2 Rain 0 2018-01-01 17:11:14 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "5 Rain 0 2018-01-01 01:43:03 \n", - "6 Clear 0 2018-01-01 13:49:53 \n", - "7 Thunder & Lightning 0 2018-01-01 04:54:59 \n", - "8 Heavy Fog 0 2018-01-01 12:09:35 \n", - "9 Cloudy 0 2018-01-01 12:09:35 \n", - "10 Rain 0 2018-01-01 22:06:14 \n", - "11 Rain 0 2018-01-01 11:52:34 \n", - "12 Heavy Fog 0 2018-01-01 02:13:46 \n", - "13 Rain 0 2018-01-01 14:21:13 \n", - "14 Cloudy 0 2018-01-01 17:42:53 \n", - "15 Thunder & Lightning 0 2018-01-01 19:55:32 \n", - "16 Thunder & Lightning 0 2018-01-01 07:49:27 \n", - "17 Rain 0 2018-01-01 01:30:47 \n", - "18 Hail 0 2018-01-01 07:58:17 \n", - "19 Cloudy 0 2018-01-01 00:02:06 \n", - "20 Cloudy 0 2018-01-01 01:08:20 \n", - "21 Clear 0 2018-01-01 01:08:20 \n", - "22 Sunny 0 2018-01-01 07:48:35 \n", - "23 Heavy Fog 0 2018-01-01 18:57:21 \n", - "24 Rain 0 2018-01-01 13:18:25 \n", - "25 Thunder & Lightning 0 2018-01-01 08:20:35 \n", - "26 Rain 0 2018-01-01 15:38:32 \n", - "27 Clear 0 2018-01-01 03:08:45 \n", - "28 Damaging Wind 0 2018-01-01 01:16:59 \n", - "29 Rain 0 2018-01-01 18:00:59 \n", - "... ... ... ... \n", - "13029 Sunny 6 2018-02-11 20:10:13 \n", - "13030 Clear 6 2018-02-11 18:59:53 \n", - "13031 Hail 6 2018-02-11 00:57:48 \n", - "13032 Thunder & Lightning 6 2018-02-11 12:02:49 \n", - "13033 Thunder & Lightning 6 2018-02-11 02:07:40 \n", - "13034 Sunny 6 2018-02-11 00:35:04 \n", - "13035 Thunder & Lightning 6 2018-02-11 11:19:12 \n", - "13036 Cloudy 6 2018-02-11 15:07:11 \n", - "13037 Damaging Wind 6 2018-02-11 10:24:42 \n", - "13038 Damaging Wind 6 2018-02-11 00:42:06 \n", - "13039 Thunder & Lightning 6 2018-02-11 10:56:31 \n", - "13040 Clear 6 2018-02-11 00:39:37 \n", - "13041 Rain 6 2018-02-11 10:24:30 \n", - "13042 Clear 6 2018-02-11 09:02:07 \n", - "13043 Thunder & Lightning 6 2018-02-11 04:45:06 \n", - "13044 Thunder & Lightning 6 2018-02-11 00:51:14 \n", - "13045 Sunny 6 2018-02-11 05:41:51 \n", - "13046 Hail 6 2018-02-11 10:02:21 \n", - "13047 Cloudy 6 2018-02-11 15:55:10 \n", - "13048 Hail 6 2018-02-11 04:11:14 \n", - "13049 Sunny 6 2018-02-11 10:13:32 \n", - "13050 Cloudy 6 2018-02-11 11:23:23 \n", - "13051 Hail 6 2018-02-11 01:13:50 \n", - "13052 Cloudy 6 2018-02-11 18:35:42 \n", - "13053 Clear 6 2018-02-11 19:02:10 \n", - "13054 Sunny 6 2018-02-11 20:42:25 \n", - "13055 Rain 6 2018-02-11 01:41:57 \n", - "13056 Sunny 6 2018-02-11 04:09:27 \n", - "13057 Hail 6 2018-02-11 08:28:21 \n", - "13058 Rain 6 2018-02-11 14:54:34 \n", - "\n", - "[13059 rows x 25 columns]" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_col0" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "pd_idx0 = pd_flights.drop(['1', '2'])\n", - "ed_idx0 = ed_flights.drop(['1', '2'])" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledCarrierDestDestAirportIDDestCityNameDestCountryDestLocationDestRegionDestWeather...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseKibana AirlinesSydney Kingsford Smith International AirportSYDSydneyAU{'lat': '-33.94609833', 'lon': '151.177002'}SE-BDRain...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HESunny02018-01-01 00:00:00
3181.694216TrueKibana AirlinesTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Clear...222.749059Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseKibana AirlinesXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFDamaging Wind02018-01-01 05:13:00
5418.152089FalseJetBeatsGenoa Cristoforo Colombo AirportGE01GenovaIT{'lat': '44.4133', 'lon': '8.8375'}IT-42Thunder & Lightning...393.590441Edmonton International AirportCYEGEdmontonCA{'lat': '53.30970001', 'lon': '-113.5800018'}CA-ABRain02018-01-01 01:43:03
6180.246816FalseJetBeatsZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHHail...300.000000Zurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHClear02018-01-01 13:49:53
..................................................................
130541080.446279FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDRain...402.929088Pisa International AirportPI05PisaIT{'lat': '43.683899', 'lon': '10.3927'}IT-52Sunny62018-02-11 20:42:25
13055646.612941FalseLogstash AirwaysZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHRain...644.418029Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBRain62018-02-11 01:41:57
13056997.751876FalseLogstash AirwaysUkrainka Air BaseXHBUBelogorskRU{'lat': '51.169997', 'lon': '128.445007'}RU-AMURain...937.540811Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFSunny62018-02-11 04:09:27
130571102.814465FalseJetBeatsMinistro Pistarini International AirportEZEBuenos AiresAR{'lat': '-34.8222', 'lon': '-58.5358'}SE-BDHail...1697.404971Itami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDHail62018-02-11 08:28:21
13058858.144337FalseJetBeatsWashington Dulles International AirportIADWashingtonUS{'lat': '38.94449997', 'lon': '-77.45580292'}US-DCHeavy Fog...1610.761827Adelaide International AirportADLAdelaideAU{'lat': '-34.945', 'lon': '138.531006'}SE-BDRain62018-02-11 14:54:34
\n", - "

13057 rows × 27 columns

\n", - "
" - ], - "text/plain": [ - " AvgTicketPrice Cancelled Carrier \\\n", - "0 841.265642 False Kibana Airlines \n", - "3 181.694216 True Kibana Airlines \n", - "4 730.041778 False Kibana Airlines \n", - "5 418.152089 False JetBeats \n", - "6 180.246816 False JetBeats \n", - "... ... ... ... \n", - "13054 1080.446279 False Logstash Airways \n", - "13055 646.612941 False Logstash Airways \n", - "13056 997.751876 False Logstash Airways \n", - "13057 1102.814465 False JetBeats \n", - "13058 858.144337 False JetBeats \n", - "\n", - " Dest DestAirportID \\\n", - "0 Sydney Kingsford Smith International Airport SYD \n", - "3 Treviso-Sant'Angelo Airport TV01 \n", - "4 Xi'an Xianyang International Airport XIY \n", - "5 Genoa Cristoforo Colombo Airport GE01 \n", - "6 Zurich Airport ZRH \n", - "... ... ... \n", - "13054 Xi'an Xianyang International Airport XIY \n", - "13055 Zurich Airport ZRH \n", - "13056 Ukrainka Air Base XHBU \n", - "13057 Ministro Pistarini International Airport EZE \n", - "13058 Washington Dulles International Airport IAD \n", - "\n", - " DestCityName DestCountry \\\n", - "0 Sydney AU \n", - "3 Treviso IT \n", - "4 Xi'an CN \n", - "5 Genova IT \n", - "6 Zurich CH \n", - "... ... ... \n", - "13054 Xi'an CN \n", - "13055 Zurich CH \n", - "13056 Belogorsk RU \n", - "13057 Buenos Aires AR \n", - "13058 Washington US \n", - "\n", - " DestLocation DestRegion \\\n", - "0 {'lat': '-33.94609833', 'lon': '151.177002'} SE-BD \n", - "3 {'lat': '45.648399', 'lon': '12.1944'} IT-34 \n", - "4 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "5 {'lat': '44.4133', 'lon': '8.8375'} IT-42 \n", - "6 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "... ... ... \n", - "13054 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13055 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "13056 {'lat': '51.169997', 'lon': '128.445007'} RU-AMU \n", - "13057 {'lat': '-34.8222', 'lon': '-58.5358'} SE-BD \n", - "13058 {'lat': '38.94449997', 'lon': '-77.45580292'} US-DC \n", - "\n", - " DestWeather ... FlightTimeMin \\\n", - "0 Rain ... 1030.770416 \n", - "3 Clear ... 222.749059 \n", - "4 Clear ... 785.779071 \n", - "5 Thunder & Lightning ... 393.590441 \n", - "6 Hail ... 300.000000 \n", - "... ... ... ... \n", - "13054 Rain ... 402.929088 \n", - "13055 Rain ... 644.418029 \n", - "13056 Rain ... 937.540811 \n", - "13057 Hail ... 1697.404971 \n", - "13058 Heavy Fog ... 1610.761827 \n", - "\n", - " Origin OriginAirportID \\\n", - "0 Frankfurt am Main Airport FRA \n", - "3 Naples International Airport NA01 \n", - "4 Licenciado Benito Juarez International Airport AICM \n", - "5 Edmonton International Airport CYEG \n", - "6 Zurich Airport ZRH \n", - "... ... ... \n", - "13054 Pisa International Airport PI05 \n", - "13055 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13056 Licenciado Benito Juarez International Airport AICM \n", - "13057 Itami Airport ITM \n", - "13058 Adelaide International Airport ADL \n", - "\n", - " OriginCityName OriginCountry \\\n", - "0 Frankfurt am Main DE \n", - "3 Naples IT \n", - "4 Mexico City MX \n", - "5 Edmonton CA \n", - "6 Zurich CH \n", - "... ... ... \n", - "13054 Pisa IT \n", - "13055 Winnipeg CA \n", - "13056 Mexico City MX \n", - "13057 Osaka JP \n", - "13058 Adelaide AU \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "3 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "4 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "5 {'lat': '53.30970001', 'lon': '-113.5800018'} CA-AB \n", - "6 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "... ... ... \n", - "13054 {'lat': '43.683899', 'lon': '10.3927'} IT-52 \n", - "13055 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13056 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "13057 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "13058 {'lat': '-34.945', 'lon': '138.531006'} SE-BD \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "5 Rain 0 2018-01-01 01:43:03 \n", - "6 Clear 0 2018-01-01 13:49:53 \n", - "... ... ... ... \n", - "13054 Sunny 6 2018-02-11 20:42:25 \n", - "13055 Rain 6 2018-02-11 01:41:57 \n", - "13056 Sunny 6 2018-02-11 04:09:27 \n", - "13057 Hail 6 2018-02-11 08:28:21 \n", - "13058 Rain 6 2018-02-11 14:54:34 \n", - "\n", - "[13057 rows x 27 columns]" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd_idx0" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AvgTicketPriceCancelledCarrierDestDestAirportIDDestCityNameDestCountryDestLocationDestRegionDestWeather...FlightTimeMinOriginOriginAirportIDOriginCityNameOriginCountryOriginLocationOriginRegionOriginWeatherdayOfWeektimestamp
0841.265642FalseKibana AirlinesSydney Kingsford Smith International AirportSYDSydneyAU{'lat': '-33.94609833', 'lon': '151.177002'}SE-BDRain...1030.770416Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HESunny02018-01-01 00:00:00
3181.694216TrueKibana AirlinesTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Clear...222.749059Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Thunder & Lightning02018-01-01 10:33:28
4730.041778FalseKibana AirlinesXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...785.779071Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFDamaging Wind02018-01-01 05:13:00
5418.152089FalseJetBeatsGenoa Cristoforo Colombo AirportGE01GenovaIT{'lat': '44.4133', 'lon': '8.8375'}IT-42Thunder & Lightning...393.590441Edmonton International AirportCYEGEdmontonCA{'lat': '53.30970001', 'lon': '-113.5800018'}CA-ABRain02018-01-01 01:43:03
6180.246816FalseJetBeatsZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHHail...300.000000Zurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHClear02018-01-01 13:49:53
7585.184310FalseKibana AirlinesOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONClear...614.942480Ciampino___G. B. Pastine International AirportRM12RomeIT{'lat': '41.7994', 'lon': '12.5949'}IT-62Thunder & Lightning02018-01-01 04:54:59
8960.869736TrueKibana AirlinesRajiv Gandhi International AirportHYDHyderabadIN{'lat': '17.23131752', 'lon': '78.42985535'}SE-BDCloudy...602.030591Milano Linate AirportMI11MilanIT{'lat': '45.445099', 'lon': '9.27674'}IT-25Heavy Fog02018-01-01 12:09:35
9296.877773FalseLogstash AirwaysTreviso-Sant'Angelo AirportTV01TrevisoIT{'lat': '45.648399', 'lon': '12.1944'}IT-34Rain...174.822216Sheremetyevo International AirportSVOMoscowRU{'lat': '55.972599', 'lon': '37.4146'}RU-MOSCloudy02018-01-01 12:09:35
10906.437948FalseJetBeatsHelsinki Vantaa AirportHELHelsinkiFI{'lat': '60.31719971', 'lon': '24.9633007'}FI-ESRain...503.045170Albuquerque International Sunport AirportABQAlbuquerqueUS{'lat': '35.040199', 'lon': '-106.609001'}US-NMRain02018-01-01 22:06:14
11704.463771FalseLogstash AirwaysVienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Cloudy...36.075018Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Rain02018-01-01 11:52:34
12922.499077TrueLogstash AirwaysShanghai Pudong International AirportPVGShanghaiCN{'lat': '31.14340019', 'lon': '121.8050003'}SE-BDClear...679.768391Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFHeavy Fog02018-01-01 02:13:46
13374.959276FalseLogstash AirwaysOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONRain...330.418282Naples International AirportNA01NaplesIT{'lat': '40.886002', 'lon': '14.2908'}IT-72Rain02018-01-01 14:21:13
14552.917371FalseLogstash AirwaysLuis Munoz Marin International AirportSJUSan JuanPR{'lat': '18.43939972', 'lon': '-66.00180054'}PR-U-AClear...407.145031Ciampino___G. B. Pastine International AirportRM12RomeIT{'lat': '41.7994', 'lon': '12.5949'}IT-62Cloudy02018-01-01 17:42:53
15566.487557TrueKibana AirlinesCologne Bonn AirportCGNCologneDE{'lat': '50.86589813', 'lon': '7.142739773'}DE-NWSunny...656.712658Chengdu Shuangliu International AirportCTUChengduCN{'lat': '30.57850075', 'lon': '103.9469986'}SE-BDThunder & Lightning02018-01-01 19:55:32
16989.952787TrueLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Damaging Wind...773.030334Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFThunder & Lightning02018-01-01 07:49:27
17569.613255FalseES-AirMinistro Pistarini International AirportEZEBuenos AiresAR{'lat': '-34.8222', 'lon': '-58.5358'}SE-BDCloudy...704.716920Cleveland Hopkins International AirportCLEClevelandUS{'lat': '41.4117012', 'lon': '-81.84980011'}US-OHRain02018-01-01 01:30:47
18277.429707FalseES-AirShanghai Pudong International AirportPVGShanghaiCN{'lat': '31.14340019', 'lon': '121.8050003'}SE-BDClear...355.957996Olenya Air BaseXLMOOlenegorskRU{'lat': '68.15180206', 'lon': '33.46390152'}RU-MURHail02018-01-01 07:58:17
19772.100846FalseJetBeatsIndira Gandhi International AirportDELNew DelhiIN{'lat': '28.5665', 'lon': '77.103104'}SE-BDClear...875.114675Casper-Natrona County International AirportCPRCasperUS{'lat': '42.90800095', 'lon': '-106.4639969'}US-WYCloudy02018-01-01 00:02:06
20167.599922FalseJetBeatsWichita Mid Continent AirportICTWichitaUS{'lat': '37.64989853', 'lon': '-97.43309784'}US-KSClear...373.966883Erie International Tom Ridge FieldERIErieUS{'lat': '42.08312701', 'lon': '-80.17386675'}US-PACloudy02018-01-01 01:08:20
21253.210065FalseES-AirOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONHail...130.667700Newark Liberty International AirportEWRNewarkUS{'lat': '40.69250107', 'lon': '-74.16870117'}US-NJClear02018-01-01 01:08:20
22917.247620FalseJetBeatsItami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDDamaging Wind...574.495310Copenhagen Kastrup AirportCPHCopenhagenDK{'lat': '55.61790085', 'lon': '12.65600014'}DK-84Sunny02018-01-01 07:48:35
23451.591176FalseLogstash AirwaysVienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Heavy Fog...579.728943Seattle Tacoma International AirportSEASeattleUS{'lat': '47.44900131', 'lon': '-122.3089981'}US-WAHeavy Fog02018-01-01 18:57:21
24307.067201FalseLogstash AirwaysCharles de Gaulle International AirportCDGParisFR{'lat': '49.01279831', 'lon': '2.549999952'}FR-JClear...50.157229Berlin-Tegel AirportTXLBerlinDE{'lat': '52.5597', 'lon': '13.2877'}DE-BERain02018-01-01 13:18:25
25268.241596FalseES-AirNarita International AirportNRTTokyoJP{'lat': '35.76470184', 'lon': '140.3860016'}SE-BDRain...527.567422Manchester AirportMANManchesterGB{'lat': '53.35369873', 'lon': '-2.274950027'}GB-ENGThunder & Lightning02018-01-01 08:20:35
26975.812632TrueKibana AirlinesItami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDHail...386.259764Helsinki Vantaa AirportHELHelsinkiFI{'lat': '60.31719971', 'lon': '24.9633007'}FI-ESRain02018-01-01 15:38:32
27134.214546FalseJetBeatsSan Diego International AirportSANSan DiegoUS{'lat': '32.73360062', 'lon': '-117.1900024'}US-CAClear...24.479650Phoenix Sky Harbor International AirportPHXPhoenixUS{'lat': '33.43429947', 'lon': '-112.012001'}US-AZClear02018-01-01 03:08:45
28988.897564FalseKibana AirlinesVerona Villafranca AirportVR10VeronaIT{'lat': '45.395699', 'lon': '10.8885'}IT-34Sunny...568.351033New Chitose AirportCTSChitose / TomakomaiJP{'lat': '42.77519989', 'lon': '141.6920013'}SE-BDDamaging Wind02018-01-01 01:16:59
29511.067220FalseLogstash AirwaysZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHRain...425.889194Tulsa International AirportTULTulsaUS{'lat': '36.19839859', 'lon': '-95.88809967'}US-OKRain02018-01-01 18:00:59
30252.911966FalseKibana AirlinesChengdu Shuangliu International AirportCTUChengduCN{'lat': '30.57850075', 'lon': '103.9469986'}SE-BDSunny...490.350002Abu Dhabi International AirportAUHAbu DhabiAE{'lat': '24.43300056', 'lon': '54.65110016'}SE-BDThunder & Lightning02018-01-01 12:05:14
31572.072088FalseES-AirNarita International AirportNRTTokyoJP{'lat': '35.76470184', 'lon': '140.3860016'}SE-BDDamaging Wind...979.741044Catania-Fontanarossa AirportCT03CataniaIT{'lat': '37.466801', 'lon': '15.0664'}IT-82Damaging Wind02018-01-01 04:18:52
..................................................................
13029795.905278FalseKibana AirlinesMalpensa International AirportMI12MilanIT{'lat': '45.6306', 'lon': '8.72811'}IT-25Sunny...534.375826Itami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDSunny62018-02-11 20:10:13
13030863.388068FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDDamaging Wind...141.172633Tokyo Haneda International AirportHNDTokyoJP{'lat': '35.552299', 'lon': '139.779999'}SE-BDClear62018-02-11 18:59:53
13031575.183008FalseJetBeatsSavannah Hilton Head International AirportSAVSavannahUS{'lat': '32.12760162', 'lon': '-81.20210266'}US-GAThunder & Lightning...1113.137060OR Tambo International AirportJNBJohannesburgZA{'lat': '-26.1392', 'lon': '28.246'}SE-BDHail62018-02-11 00:57:48
13032817.368952FalseJetBeatsSyracuse Hancock International AirportSYRSyracuseUS{'lat': '43.11119843', 'lon': '-76.10630035'}US-NYRain...714.964864El Dorado International AirportBOGBogotaCO{'lat': '4.70159', 'lon': '-74.1469'}CO-CUNThunder & Lightning62018-02-11 12:02:49
13033579.582455FalseES-AirTampa International AirportTPATampaUS{'lat': '27.97550011', 'lon': '-82.53320313'}US-FLRain...234.929046Jorge Chavez International AirportLIMLimaPE{'lat': '-12.0219', 'lon': '-77.114304'}SE-BDThunder & Lightning62018-02-11 02:07:40
130341004.916638FalseJetBeatsOlenya Air BaseXLMOOlenegorskRU{'lat': '68.15180206', 'lon': '33.46390152'}RU-MURClear...526.895776Gimpo International AirportGMPSeoulKR{'lat': '37.5583', 'lon': '126.791'}SE-BDSunny62018-02-11 00:35:04
13035357.562842TrueLogstash AirwaysShanghai Pudong International AirportPVGShanghaiCN{'lat': '31.14340019', 'lon': '121.8050003'}SE-BDThunder & Lightning...0.000000Shanghai Pudong International AirportPVGShanghaiCN{'lat': '31.14340019', 'lon': '121.8050003'}SE-BDThunder & Lightning62018-02-11 11:19:12
13036429.580539FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Sunny...150.000000Venice Marco Polo AirportVE05VeniceIT{'lat': '45.505299', 'lon': '12.3519'}IT-34Cloudy62018-02-11 15:07:11
13037729.788171TrueES-AirVienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Rain...691.944839Ukrainka Air BaseXHBUBelogorskRU{'lat': '51.169997', 'lon': '128.445007'}RU-AMUDamaging Wind62018-02-11 10:24:42
13038564.897695FalseES-AirPisa International AirportPI05PisaIT{'lat': '43.683899', 'lon': '10.3927'}IT-52Heavy Fog...567.387339OR Tambo International AirportJNBJohannesburgZA{'lat': '-26.1392', 'lon': '28.246'}SE-BDDamaging Wind62018-02-11 00:42:06
130391014.052787FalseLogstash AirwaysVienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Thunder & Lightning...690.092327Montreal / Pierre Elliott Trudeau Internationa...YULMontrealCA{'lat': '45.47060013', 'lon': '-73.74079895'}CA-QCThunder & Lightning62018-02-11 10:56:31
13040455.243843FalseES-AirLondon Luton AirportLTNLondonGB{'lat': '51.87469864', 'lon': '-0.368333012'}GB-ENGCloudy...3.028293London Heathrow AirportLHRLondonGB{'lat': '51.4706', 'lon': '-0.461941'}GB-ENGClear62018-02-11 00:39:37
13041611.370232FalseLogstash AirwaysJorge Chavez International AirportLIMLimaPE{'lat': '-12.0219', 'lon': '-77.114304'}SE-BDSunny...338.875531Casper-Natrona County International AirportCPRCasperUS{'lat': '42.90800095', 'lon': '-106.4639969'}US-WYRain62018-02-11 10:24:30
13042595.961285FalseJetBeatsOttawa Macdonald-Cartier International AirportYOWOttawaCA{'lat': '45.32249832', 'lon': '-75.66919708'}CA-ONClear...375.129587Frankfurt am Main AirportFRAFrankfurt am MainDE{'lat': '50.033333', 'lon': '8.570556'}DE-HEClear62018-02-11 09:02:07
13043782.747648FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDClear...156.858481Tokyo Haneda International AirportHNDTokyoJP{'lat': '35.552299', 'lon': '139.779999'}SE-BDThunder & Lightning62018-02-11 04:45:06
13044891.117221FalseJetBeatsWinnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBClear...354.106457Vienna International AirportVIEViennaAT{'lat': '48.11029816', 'lon': '16.56970024'}AT-9Thunder & Lightning62018-02-11 00:51:14
13045587.169921FalseLogstash AirwaysBrisbane International AirportBNEBrisbaneAU{'lat': '-27.38419914', 'lon': '153.1170044'}SE-BDRain...771.305442Amsterdam Airport SchipholAMSAmsterdamNL{'lat': '52.30860138', 'lon': '4.76388979'}NL-NHSunny62018-02-11 05:41:51
13046739.132165FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDRain...542.955572Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBHail62018-02-11 10:02:21
13047605.191876FalseJetBeatsPortland International Jetport AirportPWMPortlandUS{'lat': '43.64619827', 'lon': '-70.30930328'}US-METhunder & Lightning...564.599857Jeju International AirportCJUJeju CityKR{'lat': '33.51129913', 'lon': '126.4929962'}SE-BDCloudy62018-02-11 15:55:10
13048361.767659TrueLogstash AirwaysDubai International AirportDXBDubaiAE{'lat': '25.25279999', 'lon': '55.36439896'}SE-BDSunny...180.000000Dubai International AirportDXBDubaiAE{'lat': '25.25279999', 'lon': '55.36439896'}SE-BDHail62018-02-11 04:11:14
13049662.306992FalseES-AirWinnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBHeavy Fog...835.954429Ministro Pistarini International AirportEZEBuenos AiresAR{'lat': '-34.8222', 'lon': '-58.5358'}AR-BSunny62018-02-11 10:13:32
13050630.779526FalseJetBeatsHelsinki Vantaa AirportHELHelsinkiFI{'lat': '60.31719971', 'lon': '24.9633007'}FI-ESSunny...451.755639Beijing Capital International AirportPEKBeijingCN{'lat': '40.08010101', 'lon': '116.5849991'}SE-BDCloudy62018-02-11 11:23:23
13051937.771279TrueLogstash AirwaysLester B. Pearson International AirportYYZTorontoCA{'lat': '43.67720032', 'lon': '-79.63059998'}CA-ONSunny...507.451571Leonardo da Vinci___Fiumicino AirportRM11RomeIT{'lat': '41.8002778', 'lon': '12.2388889'}IT-62Hail62018-02-11 01:13:50
130521085.155339FalseLogstash AirwaysMelbourne International AirportMELMelbourneAU{'lat': '-37.673302', 'lon': '144.843002'}SE-BDCloudy...1044.451122Bologna Guglielmo Marconi AirportBO08BolognaIT{'lat': '44.5354', 'lon': '11.2887'}IT-45Cloudy62018-02-11 18:35:42
130531191.964104FalseLogstash AirwaysZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHHail...728.715904Portland International Jetport AirportPWMPortlandUS{'lat': '43.64619827', 'lon': '-70.30930328'}US-MEClear62018-02-11 19:02:10
130541080.446279FalseLogstash AirwaysXi'an Xianyang International AirportXIYXi'anCN{'lat': '34.447102', 'lon': '108.751999'}SE-BDRain...402.929088Pisa International AirportPI05PisaIT{'lat': '43.683899', 'lon': '10.3927'}IT-52Sunny62018-02-11 20:42:25
13055646.612941FalseLogstash AirwaysZurich AirportZRHZurichCH{'lat': '47.464699', 'lon': '8.54917'}CH-ZHRain...644.418029Winnipeg / James Armstrong Richardson Internat...YWGWinnipegCA{'lat': '49.90999985', 'lon': '-97.23989868'}CA-MBRain62018-02-11 01:41:57
13056997.751876FalseLogstash AirwaysUkrainka Air BaseXHBUBelogorskRU{'lat': '51.169997', 'lon': '128.445007'}RU-AMURain...937.540811Licenciado Benito Juarez International AirportAICMMexico CityMX{'lat': '19.4363', 'lon': '-99.072098'}MX-DIFSunny62018-02-11 04:09:27
130571102.814465FalseJetBeatsMinistro Pistarini International AirportEZEBuenos AiresAR{'lat': '-34.8222', 'lon': '-58.5358'}SE-BDHail...1697.404971Itami AirportITMOsakaJP{'lat': '34.78549957', 'lon': '135.4380035'}SE-BDHail62018-02-11 08:28:21
13058858.144337FalseJetBeatsWashington Dulles International AirportIADWashingtonUS{'lat': '38.94449997', 'lon': '-77.45580292'}US-DCHeavy Fog...1610.761827Adelaide International AirportADLAdelaideAU{'lat': '-34.945', 'lon': '138.531006'}SE-BDRain62018-02-11 14:54:34
\n", - "
\n", - "

13057 rows x 27 columns

" - ], - "text/plain": [ - " AvgTicketPrice Cancelled Carrier \\\n", - "0 841.265642 False Kibana Airlines \n", - "3 181.694216 True Kibana Airlines \n", - "4 730.041778 False Kibana Airlines \n", - "5 418.152089 False JetBeats \n", - "6 180.246816 False JetBeats \n", - "7 585.184310 False Kibana Airlines \n", - "8 960.869736 True Kibana Airlines \n", - "9 296.877773 False Logstash Airways \n", - "10 906.437948 False JetBeats \n", - "11 704.463771 False Logstash Airways \n", - "12 922.499077 True Logstash Airways \n", - "13 374.959276 False Logstash Airways \n", - "14 552.917371 False Logstash Airways \n", - "15 566.487557 True Kibana Airlines \n", - "16 989.952787 True Logstash Airways \n", - "17 569.613255 False ES-Air \n", - "18 277.429707 False ES-Air \n", - "19 772.100846 False JetBeats \n", - "20 167.599922 False JetBeats \n", - "21 253.210065 False ES-Air \n", - "22 917.247620 False JetBeats \n", - "23 451.591176 False Logstash Airways \n", - "24 307.067201 False Logstash Airways \n", - "25 268.241596 False ES-Air \n", - "26 975.812632 True Kibana Airlines \n", - "27 134.214546 False JetBeats \n", - "28 988.897564 False Kibana Airlines \n", - "29 511.067220 False Logstash Airways \n", - "30 252.911966 False Kibana Airlines \n", - "31 572.072088 False ES-Air \n", - "... ... ... ... \n", - "13029 795.905278 False Kibana Airlines \n", - "13030 863.388068 False Logstash Airways \n", - "13031 575.183008 False JetBeats \n", - "13032 817.368952 False JetBeats \n", - "13033 579.582455 False ES-Air \n", - "13034 1004.916638 False JetBeats \n", - "13035 357.562842 True Logstash Airways \n", - "13036 429.580539 False Logstash Airways \n", - "13037 729.788171 True ES-Air \n", - "13038 564.897695 False ES-Air \n", - "13039 1014.052787 False Logstash Airways \n", - "13040 455.243843 False ES-Air \n", - "13041 611.370232 False Logstash Airways \n", - "13042 595.961285 False JetBeats \n", - "13043 782.747648 False Logstash Airways \n", - "13044 891.117221 False JetBeats \n", - "13045 587.169921 False Logstash Airways \n", - "13046 739.132165 False Logstash Airways \n", - "13047 605.191876 False JetBeats \n", - "13048 361.767659 True Logstash Airways \n", - "13049 662.306992 False ES-Air \n", - "13050 630.779526 False JetBeats \n", - "13051 937.771279 True Logstash Airways \n", - "13052 1085.155339 False Logstash Airways \n", - "13053 1191.964104 False Logstash Airways \n", - "13054 1080.446279 False Logstash Airways \n", - "13055 646.612941 False Logstash Airways \n", - "13056 997.751876 False Logstash Airways \n", - "13057 1102.814465 False JetBeats \n", - "13058 858.144337 False JetBeats \n", - "\n", - " Dest DestAirportID \\\n", - "0 Sydney Kingsford Smith International Airport SYD \n", - "3 Treviso-Sant'Angelo Airport TV01 \n", - "4 Xi'an Xianyang International Airport XIY \n", - "5 Genoa Cristoforo Colombo Airport GE01 \n", - "6 Zurich Airport ZRH \n", - "7 Ottawa Macdonald-Cartier International Airport YOW \n", - "8 Rajiv Gandhi International Airport HYD \n", - "9 Treviso-Sant'Angelo Airport TV01 \n", - "10 Helsinki Vantaa Airport HEL \n", - "11 Vienna International Airport VIE \n", - "12 Shanghai Pudong International Airport PVG \n", - "13 Ottawa Macdonald-Cartier International Airport YOW \n", - "14 Luis Munoz Marin International Airport SJU \n", - "15 Cologne Bonn Airport CGN \n", - "16 Venice Marco Polo Airport VE05 \n", - "17 Ministro Pistarini International Airport EZE \n", - "18 Shanghai Pudong International Airport PVG \n", - "19 Indira Gandhi International Airport DEL \n", - "20 Wichita Mid Continent Airport ICT \n", - "21 Ottawa Macdonald-Cartier International Airport YOW \n", - "22 Itami Airport ITM \n", - "23 Vienna International Airport VIE \n", - "24 Charles de Gaulle International Airport CDG \n", - "25 Narita International Airport NRT \n", - "26 Itami Airport ITM \n", - "27 San Diego International Airport SAN \n", - "28 Verona Villafranca Airport VR10 \n", - "29 Zurich Airport ZRH \n", - "30 Chengdu Shuangliu International Airport CTU \n", - "31 Narita International Airport NRT \n", - "... ... ... \n", - "13029 Malpensa International Airport MI12 \n", - "13030 Xi'an Xianyang International Airport XIY \n", - "13031 Savannah Hilton Head International Airport SAV \n", - "13032 Syracuse Hancock International Airport SYR \n", - "13033 Tampa International Airport TPA \n", - "13034 Olenya Air Base XLMO \n", - "13035 Shanghai Pudong International Airport PVG \n", - "13036 Venice Marco Polo Airport VE05 \n", - "13037 Vienna International Airport VIE \n", - "13038 Pisa International Airport PI05 \n", - "13039 Vienna International Airport VIE \n", - "13040 London Luton Airport LTN \n", - "13041 Jorge Chavez International Airport LIM \n", - "13042 Ottawa Macdonald-Cartier International Airport YOW \n", - "13043 Xi'an Xianyang International Airport XIY \n", - "13044 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13045 Brisbane International Airport BNE \n", - "13046 Xi'an Xianyang International Airport XIY \n", - "13047 Portland International Jetport Airport PWM \n", - "13048 Dubai International Airport DXB \n", - "13049 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13050 Helsinki Vantaa Airport HEL \n", - "13051 Lester B. Pearson International Airport YYZ \n", - "13052 Melbourne International Airport MEL \n", - "13053 Zurich Airport ZRH \n", - "13054 Xi'an Xianyang International Airport XIY \n", - "13055 Zurich Airport ZRH \n", - "13056 Ukrainka Air Base XHBU \n", - "13057 Ministro Pistarini International Airport EZE \n", - "13058 Washington Dulles International Airport IAD \n", - "\n", - " DestCityName DestCountry \\\n", - "0 Sydney AU \n", - "3 Treviso IT \n", - "4 Xi'an CN \n", - "5 Genova IT \n", - "6 Zurich CH \n", - "7 Ottawa CA \n", - "8 Hyderabad IN \n", - "9 Treviso IT \n", - "10 Helsinki FI \n", - "11 Vienna AT \n", - "12 Shanghai CN \n", - "13 Ottawa CA \n", - "14 San Juan PR \n", - "15 Cologne DE \n", - "16 Venice IT \n", - "17 Buenos Aires AR \n", - "18 Shanghai CN \n", - "19 New Delhi IN \n", - "20 Wichita US \n", - "21 Ottawa CA \n", - "22 Osaka JP \n", - "23 Vienna AT \n", - "24 Paris FR \n", - "25 Tokyo JP \n", - "26 Osaka JP \n", - "27 San Diego US \n", - "28 Verona IT \n", - "29 Zurich CH \n", - "30 Chengdu CN \n", - "31 Tokyo JP \n", - "... ... ... \n", - "13029 Milan IT \n", - "13030 Xi'an CN \n", - "13031 Savannah US \n", - "13032 Syracuse US \n", - "13033 Tampa US \n", - "13034 Olenegorsk RU \n", - "13035 Shanghai CN \n", - "13036 Venice IT \n", - "13037 Vienna AT \n", - "13038 Pisa IT \n", - "13039 Vienna AT \n", - "13040 London GB \n", - "13041 Lima PE \n", - "13042 Ottawa CA \n", - "13043 Xi'an CN \n", - "13044 Winnipeg CA \n", - "13045 Brisbane AU \n", - "13046 Xi'an CN \n", - "13047 Portland US \n", - "13048 Dubai AE \n", - "13049 Winnipeg CA \n", - "13050 Helsinki FI \n", - "13051 Toronto CA \n", - "13052 Melbourne AU \n", - "13053 Zurich CH \n", - "13054 Xi'an CN \n", - "13055 Zurich CH \n", - "13056 Belogorsk RU \n", - "13057 Buenos Aires AR \n", - "13058 Washington US \n", - "\n", - " DestLocation DestRegion \\\n", - "0 {'lat': '-33.94609833', 'lon': '151.177002'} SE-BD \n", - "3 {'lat': '45.648399', 'lon': '12.1944'} IT-34 \n", - "4 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "5 {'lat': '44.4133', 'lon': '8.8375'} IT-42 \n", - "6 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "7 {'lat': '45.32249832', 'lon': '-75.66919708'} CA-ON \n", - "8 {'lat': '17.23131752', 'lon': '78.42985535'} SE-BD \n", - "9 {'lat': '45.648399', 'lon': '12.1944'} IT-34 \n", - "10 {'lat': '60.31719971', 'lon': '24.9633007'} FI-ES \n", - "11 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "12 {'lat': '31.14340019', 'lon': '121.8050003'} SE-BD \n", - "13 {'lat': '45.32249832', 'lon': '-75.66919708'} CA-ON \n", - "14 {'lat': '18.43939972', 'lon': '-66.00180054'} PR-U-A \n", - "15 {'lat': '50.86589813', 'lon': '7.142739773'} DE-NW \n", - "16 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "17 {'lat': '-34.8222', 'lon': '-58.5358'} SE-BD \n", - "18 {'lat': '31.14340019', 'lon': '121.8050003'} SE-BD \n", - "19 {'lat': '28.5665', 'lon': '77.103104'} SE-BD \n", - "20 {'lat': '37.64989853', 'lon': '-97.43309784'} US-KS \n", - "21 {'lat': '45.32249832', 'lon': '-75.66919708'} CA-ON \n", - "22 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "23 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "24 {'lat': '49.01279831', 'lon': '2.549999952'} FR-J \n", - "25 {'lat': '35.76470184', 'lon': '140.3860016'} SE-BD \n", - "26 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "27 {'lat': '32.73360062', 'lon': '-117.1900024'} US-CA \n", - "28 {'lat': '45.395699', 'lon': '10.8885'} IT-34 \n", - "29 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "30 {'lat': '30.57850075', 'lon': '103.9469986'} SE-BD \n", - "31 {'lat': '35.76470184', 'lon': '140.3860016'} SE-BD \n", - "... ... ... \n", - "13029 {'lat': '45.6306', 'lon': '8.72811'} IT-25 \n", - "13030 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13031 {'lat': '32.12760162', 'lon': '-81.20210266'} US-GA \n", - "13032 {'lat': '43.11119843', 'lon': '-76.10630035'} US-NY \n", - "13033 {'lat': '27.97550011', 'lon': '-82.53320313'} US-FL \n", - "13034 {'lat': '68.15180206', 'lon': '33.46390152'} RU-MUR \n", - "13035 {'lat': '31.14340019', 'lon': '121.8050003'} SE-BD \n", - "13036 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "13037 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "13038 {'lat': '43.683899', 'lon': '10.3927'} IT-52 \n", - "13039 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "13040 {'lat': '51.87469864', 'lon': '-0.368333012'} GB-ENG \n", - "13041 {'lat': '-12.0219', 'lon': '-77.114304'} SE-BD \n", - "13042 {'lat': '45.32249832', 'lon': '-75.66919708'} CA-ON \n", - "13043 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13044 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13045 {'lat': '-27.38419914', 'lon': '153.1170044'} SE-BD \n", - "13046 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13047 {'lat': '43.64619827', 'lon': '-70.30930328'} US-ME \n", - "13048 {'lat': '25.25279999', 'lon': '55.36439896'} SE-BD \n", - "13049 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13050 {'lat': '60.31719971', 'lon': '24.9633007'} FI-ES \n", - "13051 {'lat': '43.67720032', 'lon': '-79.63059998'} CA-ON \n", - "13052 {'lat': '-37.673302', 'lon': '144.843002'} SE-BD \n", - "13053 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "13054 {'lat': '34.447102', 'lon': '108.751999'} SE-BD \n", - "13055 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "13056 {'lat': '51.169997', 'lon': '128.445007'} RU-AMU \n", - "13057 {'lat': '-34.8222', 'lon': '-58.5358'} SE-BD \n", - "13058 {'lat': '38.94449997', 'lon': '-77.45580292'} US-DC \n", - "\n", - " DestWeather ... FlightTimeMin \\\n", - "0 Rain ... 1030.770416 \n", - "3 Clear ... 222.749059 \n", - "4 Clear ... 785.779071 \n", - "5 Thunder & Lightning ... 393.590441 \n", - "6 Hail ... 300.000000 \n", - "7 Clear ... 614.942480 \n", - "8 Cloudy ... 602.030591 \n", - "9 Rain ... 174.822216 \n", - "10 Rain ... 503.045170 \n", - "11 Cloudy ... 36.075018 \n", - "12 Clear ... 679.768391 \n", - "13 Rain ... 330.418282 \n", - "14 Clear ... 407.145031 \n", - "15 Sunny ... 656.712658 \n", - "16 Damaging Wind ... 773.030334 \n", - "17 Cloudy ... 704.716920 \n", - "18 Clear ... 355.957996 \n", - "19 Clear ... 875.114675 \n", - "20 Clear ... 373.966883 \n", - "21 Hail ... 130.667700 \n", - "22 Damaging Wind ... 574.495310 \n", - "23 Heavy Fog ... 579.728943 \n", - "24 Clear ... 50.157229 \n", - "25 Rain ... 527.567422 \n", - "26 Hail ... 386.259764 \n", - "27 Clear ... 24.479650 \n", - "28 Sunny ... 568.351033 \n", - "29 Rain ... 425.889194 \n", - "30 Sunny ... 490.350002 \n", - "31 Damaging Wind ... 979.741044 \n", - "... ... ... ... \n", - "13029 Sunny ... 534.375826 \n", - "13030 Damaging Wind ... 141.172633 \n", - "13031 Thunder & Lightning ... 1113.137060 \n", - "13032 Rain ... 714.964864 \n", - "13033 Rain ... 234.929046 \n", - "13034 Clear ... 526.895776 \n", - "13035 Thunder & Lightning ... 0.000000 \n", - "13036 Sunny ... 150.000000 \n", - "13037 Rain ... 691.944839 \n", - "13038 Heavy Fog ... 567.387339 \n", - "13039 Thunder & Lightning ... 690.092327 \n", - "13040 Cloudy ... 3.028293 \n", - "13041 Sunny ... 338.875531 \n", - "13042 Clear ... 375.129587 \n", - "13043 Clear ... 156.858481 \n", - "13044 Clear ... 354.106457 \n", - "13045 Rain ... 771.305442 \n", - "13046 Rain ... 542.955572 \n", - "13047 Thunder & Lightning ... 564.599857 \n", - "13048 Sunny ... 180.000000 \n", - "13049 Heavy Fog ... 835.954429 \n", - "13050 Sunny ... 451.755639 \n", - "13051 Sunny ... 507.451571 \n", - "13052 Cloudy ... 1044.451122 \n", - "13053 Hail ... 728.715904 \n", - "13054 Rain ... 402.929088 \n", - "13055 Rain ... 644.418029 \n", - "13056 Rain ... 937.540811 \n", - "13057 Hail ... 1697.404971 \n", - "13058 Heavy Fog ... 1610.761827 \n", - "\n", - " Origin OriginAirportID \\\n", - "0 Frankfurt am Main Airport FRA \n", - "3 Naples International Airport NA01 \n", - "4 Licenciado Benito Juarez International Airport AICM \n", - "5 Edmonton International Airport CYEG \n", - "6 Zurich Airport ZRH \n", - "7 Ciampino___G. B. Pastine International Airport RM12 \n", - "8 Milano Linate Airport MI11 \n", - "9 Sheremetyevo International Airport SVO \n", - "10 Albuquerque International Sunport Airport ABQ \n", - "11 Venice Marco Polo Airport VE05 \n", - "12 Licenciado Benito Juarez International Airport AICM \n", - "13 Naples International Airport NA01 \n", - "14 Ciampino___G. B. Pastine International Airport RM12 \n", - "15 Chengdu Shuangliu International Airport CTU \n", - "16 Licenciado Benito Juarez International Airport AICM \n", - "17 Cleveland Hopkins International Airport CLE \n", - "18 Olenya Air Base XLMO \n", - "19 Casper-Natrona County International Airport CPR \n", - "20 Erie International Tom Ridge Field ERI \n", - "21 Newark Liberty International Airport EWR \n", - "22 Copenhagen Kastrup Airport CPH \n", - "23 Seattle Tacoma International Airport SEA \n", - "24 Berlin-Tegel Airport TXL \n", - "25 Manchester Airport MAN \n", - "26 Helsinki Vantaa Airport HEL \n", - "27 Phoenix Sky Harbor International Airport PHX \n", - "28 New Chitose Airport CTS \n", - "29 Tulsa International Airport TUL \n", - "30 Abu Dhabi International Airport AUH \n", - "31 Catania-Fontanarossa Airport CT03 \n", - "... ... ... \n", - "13029 Itami Airport ITM \n", - "13030 Tokyo Haneda International Airport HND \n", - "13031 OR Tambo International Airport JNB \n", - "13032 El Dorado International Airport BOG \n", - "13033 Jorge Chavez International Airport LIM \n", - "13034 Gimpo International Airport GMP \n", - "13035 Shanghai Pudong International Airport PVG \n", - "13036 Venice Marco Polo Airport VE05 \n", - "13037 Ukrainka Air Base XHBU \n", - "13038 OR Tambo International Airport JNB \n", - "13039 Montreal / Pierre Elliott Trudeau Internationa... YUL \n", - "13040 London Heathrow Airport LHR \n", - "13041 Casper-Natrona County International Airport CPR \n", - "13042 Frankfurt am Main Airport FRA \n", - "13043 Tokyo Haneda International Airport HND \n", - "13044 Vienna International Airport VIE \n", - "13045 Amsterdam Airport Schiphol AMS \n", - "13046 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13047 Jeju International Airport CJU \n", - "13048 Dubai International Airport DXB \n", - "13049 Ministro Pistarini International Airport EZE \n", - "13050 Beijing Capital International Airport PEK \n", - "13051 Leonardo da Vinci___Fiumicino Airport RM11 \n", - "13052 Bologna Guglielmo Marconi Airport BO08 \n", - "13053 Portland International Jetport Airport PWM \n", - "13054 Pisa International Airport PI05 \n", - "13055 Winnipeg / James Armstrong Richardson Internat... YWG \n", - "13056 Licenciado Benito Juarez International Airport AICM \n", - "13057 Itami Airport ITM \n", - "13058 Adelaide International Airport ADL \n", - "\n", - " OriginCityName OriginCountry \\\n", - "0 Frankfurt am Main DE \n", - "3 Naples IT \n", - "4 Mexico City MX \n", - "5 Edmonton CA \n", - "6 Zurich CH \n", - "7 Rome IT \n", - "8 Milan IT \n", - "9 Moscow RU \n", - "10 Albuquerque US \n", - "11 Venice IT \n", - "12 Mexico City MX \n", - "13 Naples IT \n", - "14 Rome IT \n", - "15 Chengdu CN \n", - "16 Mexico City MX \n", - "17 Cleveland US \n", - "18 Olenegorsk RU \n", - "19 Casper US \n", - "20 Erie US \n", - "21 Newark US \n", - "22 Copenhagen DK \n", - "23 Seattle US \n", - "24 Berlin DE \n", - "25 Manchester GB \n", - "26 Helsinki FI \n", - "27 Phoenix US \n", - "28 Chitose / Tomakomai JP \n", - "29 Tulsa US \n", - "30 Abu Dhabi AE \n", - "31 Catania IT \n", - "... ... ... \n", - "13029 Osaka JP \n", - "13030 Tokyo JP \n", - "13031 Johannesburg ZA \n", - "13032 Bogota CO \n", - "13033 Lima PE \n", - "13034 Seoul KR \n", - "13035 Shanghai CN \n", - "13036 Venice IT \n", - "13037 Belogorsk RU \n", - "13038 Johannesburg ZA \n", - "13039 Montreal CA \n", - "13040 London GB \n", - "13041 Casper US \n", - "13042 Frankfurt am Main DE \n", - "13043 Tokyo JP \n", - "13044 Vienna AT \n", - "13045 Amsterdam NL \n", - "13046 Winnipeg CA \n", - "13047 Jeju City KR \n", - "13048 Dubai AE \n", - "13049 Buenos Aires AR \n", - "13050 Beijing CN \n", - "13051 Rome IT \n", - "13052 Bologna IT \n", - "13053 Portland US \n", - "13054 Pisa IT \n", - "13055 Winnipeg CA \n", - "13056 Mexico City MX \n", - "13057 Osaka JP \n", - "13058 Adelaide AU \n", - "\n", - " OriginLocation OriginRegion \\\n", - "0 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "3 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "4 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "5 {'lat': '53.30970001', 'lon': '-113.5800018'} CA-AB \n", - "6 {'lat': '47.464699', 'lon': '8.54917'} CH-ZH \n", - "7 {'lat': '41.7994', 'lon': '12.5949'} IT-62 \n", - "8 {'lat': '45.445099', 'lon': '9.27674'} IT-25 \n", - "9 {'lat': '55.972599', 'lon': '37.4146'} RU-MOS \n", - "10 {'lat': '35.040199', 'lon': '-106.609001'} US-NM \n", - "11 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "12 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "13 {'lat': '40.886002', 'lon': '14.2908'} IT-72 \n", - "14 {'lat': '41.7994', 'lon': '12.5949'} IT-62 \n", - "15 {'lat': '30.57850075', 'lon': '103.9469986'} SE-BD \n", - "16 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "17 {'lat': '41.4117012', 'lon': '-81.84980011'} US-OH \n", - "18 {'lat': '68.15180206', 'lon': '33.46390152'} RU-MUR \n", - "19 {'lat': '42.90800095', 'lon': '-106.4639969'} US-WY \n", - "20 {'lat': '42.08312701', 'lon': '-80.17386675'} US-PA \n", - "21 {'lat': '40.69250107', 'lon': '-74.16870117'} US-NJ \n", - "22 {'lat': '55.61790085', 'lon': '12.65600014'} DK-84 \n", - "23 {'lat': '47.44900131', 'lon': '-122.3089981'} US-WA \n", - "24 {'lat': '52.5597', 'lon': '13.2877'} DE-BE \n", - "25 {'lat': '53.35369873', 'lon': '-2.274950027'} GB-ENG \n", - "26 {'lat': '60.31719971', 'lon': '24.9633007'} FI-ES \n", - "27 {'lat': '33.43429947', 'lon': '-112.012001'} US-AZ \n", - "28 {'lat': '42.77519989', 'lon': '141.6920013'} SE-BD \n", - "29 {'lat': '36.19839859', 'lon': '-95.88809967'} US-OK \n", - "30 {'lat': '24.43300056', 'lon': '54.65110016'} SE-BD \n", - "31 {'lat': '37.466801', 'lon': '15.0664'} IT-82 \n", - "... ... ... \n", - "13029 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "13030 {'lat': '35.552299', 'lon': '139.779999'} SE-BD \n", - "13031 {'lat': '-26.1392', 'lon': '28.246'} SE-BD \n", - "13032 {'lat': '4.70159', 'lon': '-74.1469'} CO-CUN \n", - "13033 {'lat': '-12.0219', 'lon': '-77.114304'} SE-BD \n", - "13034 {'lat': '37.5583', 'lon': '126.791'} SE-BD \n", - "13035 {'lat': '31.14340019', 'lon': '121.8050003'} SE-BD \n", - "13036 {'lat': '45.505299', 'lon': '12.3519'} IT-34 \n", - "13037 {'lat': '51.169997', 'lon': '128.445007'} RU-AMU \n", - "13038 {'lat': '-26.1392', 'lon': '28.246'} SE-BD \n", - "13039 {'lat': '45.47060013', 'lon': '-73.74079895'} CA-QC \n", - "13040 {'lat': '51.4706', 'lon': '-0.461941'} GB-ENG \n", - "13041 {'lat': '42.90800095', 'lon': '-106.4639969'} US-WY \n", - "13042 {'lat': '50.033333', 'lon': '8.570556'} DE-HE \n", - "13043 {'lat': '35.552299', 'lon': '139.779999'} SE-BD \n", - "13044 {'lat': '48.11029816', 'lon': '16.56970024'} AT-9 \n", - "13045 {'lat': '52.30860138', 'lon': '4.76388979'} NL-NH \n", - "13046 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13047 {'lat': '33.51129913', 'lon': '126.4929962'} SE-BD \n", - "13048 {'lat': '25.25279999', 'lon': '55.36439896'} SE-BD \n", - "13049 {'lat': '-34.8222', 'lon': '-58.5358'} AR-B \n", - "13050 {'lat': '40.08010101', 'lon': '116.5849991'} SE-BD \n", - "13051 {'lat': '41.8002778', 'lon': '12.2388889'} IT-62 \n", - "13052 {'lat': '44.5354', 'lon': '11.2887'} IT-45 \n", - "13053 {'lat': '43.64619827', 'lon': '-70.30930328'} US-ME \n", - "13054 {'lat': '43.683899', 'lon': '10.3927'} IT-52 \n", - "13055 {'lat': '49.90999985', 'lon': '-97.23989868'} CA-MB \n", - "13056 {'lat': '19.4363', 'lon': '-99.072098'} MX-DIF \n", - "13057 {'lat': '34.78549957', 'lon': '135.4380035'} SE-BD \n", - "13058 {'lat': '-34.945', 'lon': '138.531006'} SE-BD \n", - "\n", - " OriginWeather dayOfWeek timestamp \n", - "0 Sunny 0 2018-01-01 00:00:00 \n", - "3 Thunder & Lightning 0 2018-01-01 10:33:28 \n", - "4 Damaging Wind 0 2018-01-01 05:13:00 \n", - "5 Rain 0 2018-01-01 01:43:03 \n", - "6 Clear 0 2018-01-01 13:49:53 \n", - "7 Thunder & Lightning 0 2018-01-01 04:54:59 \n", - "8 Heavy Fog 0 2018-01-01 12:09:35 \n", - "9 Cloudy 0 2018-01-01 12:09:35 \n", - "10 Rain 0 2018-01-01 22:06:14 \n", - "11 Rain 0 2018-01-01 11:52:34 \n", - "12 Heavy Fog 0 2018-01-01 02:13:46 \n", - "13 Rain 0 2018-01-01 14:21:13 \n", - "14 Cloudy 0 2018-01-01 17:42:53 \n", - "15 Thunder & Lightning 0 2018-01-01 19:55:32 \n", - "16 Thunder & Lightning 0 2018-01-01 07:49:27 \n", - "17 Rain 0 2018-01-01 01:30:47 \n", - "18 Hail 0 2018-01-01 07:58:17 \n", - "19 Cloudy 0 2018-01-01 00:02:06 \n", - "20 Cloudy 0 2018-01-01 01:08:20 \n", - "21 Clear 0 2018-01-01 01:08:20 \n", - "22 Sunny 0 2018-01-01 07:48:35 \n", - "23 Heavy Fog 0 2018-01-01 18:57:21 \n", - "24 Rain 0 2018-01-01 13:18:25 \n", - "25 Thunder & Lightning 0 2018-01-01 08:20:35 \n", - "26 Rain 0 2018-01-01 15:38:32 \n", - "27 Clear 0 2018-01-01 03:08:45 \n", - "28 Damaging Wind 0 2018-01-01 01:16:59 \n", - "29 Rain 0 2018-01-01 18:00:59 \n", - "30 Thunder & Lightning 0 2018-01-01 12:05:14 \n", - "31 Damaging Wind 0 2018-01-01 04:18:52 \n", - "... ... ... ... \n", - "13029 Sunny 6 2018-02-11 20:10:13 \n", - "13030 Clear 6 2018-02-11 18:59:53 \n", - "13031 Hail 6 2018-02-11 00:57:48 \n", - "13032 Thunder & Lightning 6 2018-02-11 12:02:49 \n", - "13033 Thunder & Lightning 6 2018-02-11 02:07:40 \n", - "13034 Sunny 6 2018-02-11 00:35:04 \n", - "13035 Thunder & Lightning 6 2018-02-11 11:19:12 \n", - "13036 Cloudy 6 2018-02-11 15:07:11 \n", - "13037 Damaging Wind 6 2018-02-11 10:24:42 \n", - "13038 Damaging Wind 6 2018-02-11 00:42:06 \n", - "13039 Thunder & Lightning 6 2018-02-11 10:56:31 \n", - "13040 Clear 6 2018-02-11 00:39:37 \n", - "13041 Rain 6 2018-02-11 10:24:30 \n", - "13042 Clear 6 2018-02-11 09:02:07 \n", - "13043 Thunder & Lightning 6 2018-02-11 04:45:06 \n", - "13044 Thunder & Lightning 6 2018-02-11 00:51:14 \n", - "13045 Sunny 6 2018-02-11 05:41:51 \n", - "13046 Hail 6 2018-02-11 10:02:21 \n", - "13047 Cloudy 6 2018-02-11 15:55:10 \n", - "13048 Hail 6 2018-02-11 04:11:14 \n", - "13049 Sunny 6 2018-02-11 10:13:32 \n", - "13050 Cloudy 6 2018-02-11 11:23:23 \n", - "13051 Hail 6 2018-02-11 01:13:50 \n", - "13052 Cloudy 6 2018-02-11 18:35:42 \n", - "13053 Clear 6 2018-02-11 19:02:10 \n", - "13054 Sunny 6 2018-02-11 20:42:25 \n", - "13055 Rain 6 2018-02-11 01:41:57 \n", - "13056 Sunny 6 2018-02-11 04:09:27 \n", - "13057 Hail 6 2018-02-11 08:28:21 \n", - "13058 Rain 6 2018-02-11 14:54:34 \n", - "\n", - "[13057 rows x 27 columns]" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_idx0" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "df = pd.DataFrame(data={'A': np.random.rand(3),\n", - " 'B': 1,\n", - " 'C': 'foo',\n", - " 'D': pd.Timestamp('20190102'),\n", - " 'E': [1.0, 2.0, 3.0],\n", - " 'F': False,\n", - " 'G': [1, 2, 3]},\n", - " index=['0','1','2'])\n", - "\n", - "expected_mappings = {'mappings': {\n", - " 'properties': {'A': {'type': 'double'},\n", - " 'B': {'type': 'long'},\n", - " 'C': {'type': 'keyword'},\n", - " 'D': {'type': 'date'},\n", - " 'E': {'type': 'double'},\n", - " 'F': {'type': 'boolean'},\n", - " 'G': {'type': 'long'}}}}\n", - "\n", - "mappings = ed.Mappings._generate_es_mappings(df)\n", - "\n", - "assert expected_mappings == mappings\n", - "\n", - "# Now create index\n", - "index_name = 'eland_test_generate_es_mappings'\n", - "\n", - "ed.pandas_to_es(df, 'localhost', index_name, if_exists=\"replace\", refresh=True)\n", - "\n", - "ed_df = ed.DataFrame('localhost', index_name)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - "
ABCDEFG
00.5964361foo2019-01-021.0False1
10.0245931foo2019-01-022.0False2
20.1519491foo2019-01-023.0False3
\n", - "
\n", - "

10 rows x 7 columns

" - ], - "text/plain": [ - " A B C D E F G\n", - "0 0.596436 1 foo 2019-01-02 1.0 False 1\n", - "1 0.024593 1 foo 2019-01-02 2.0 False 2\n", - "2 0.151949 1 foo 2019-01-02 3.0 False 3\n", - "\n", - "[10 rows x 7 columns]" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_df.head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "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", - "
ABCDEFG
00.5964361foo2019-01-021.0False1
10.0245931foo2019-01-022.0False2
20.1519491foo2019-01-023.0False3
\n", - "
" - ], - "text/plain": [ - " A B C D E F G\n", - "0 0.596436 1 foo 2019-01-02 1.0 False 1\n", - "1 0.024593 1 foo 2019-01-02 2.0 False 2\n", - "2 0.151949 1 foo 2019-01-02 3.0 False 3" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "df = ed_df._to_pandas()" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "A 3\n", - "B 3\n", - "C 3\n", - "D 3\n", - "E 3\n", - "F 3\n", - "G 3\n", - "dtype: int64" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_df.count()" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['AvgTicketPrice', 'DistanceKilometers', 'DistanceMiles',\n", - " 'FlightDelayMin', 'FlightTimeHour', 'FlightTimeMin', 'dayOfWeek'],\n", - " dtype='object')" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_numeric_fields = ed_flights.select_dtypes(include=[np.number])\n", - "\n", - "ed_numeric_fields.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "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", - "
AvgTicketPriceDistanceKilometersDistanceMilesFlightDelayMinFlightTimeHourFlightTimeMindayOfWeek
min100.0205310.0000000.0000000.0000000.0000000.0000000.000000
std266.3866614578.2631932844.80085596.7430065.579019334.7411351.939365
mean628.2536897092.1424574406.85301047.3351718.518797511.1278422.835975
\n", - "
" - ], - "text/plain": [ - " AvgTicketPrice DistanceKilometers DistanceMiles FlightDelayMin \\\n", - "min 100.020531 0.000000 0.000000 0.000000 \n", - "std 266.386661 4578.263193 2844.800855 96.743006 \n", - "mean 628.253689 7092.142457 4406.853010 47.335171 \n", - "\n", - " FlightTimeHour FlightTimeMin dayOfWeek \n", - "min 0.000000 0.000000 0.000000 \n", - "std 5.579019 334.741135 1.939365 \n", - "mean 8.518797 511.127842 2.835975 " - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ed_numeric_fields.aggregate(['min', 'std', 'mean'])" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "ed_numeric_fields.hist(figsize=[10,10])\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.7.4" - }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "metadata": { - "collapsed": false - }, - "source": [] - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/eland/tests/plotting/test_dataframe_hist_pytest.ipynb b/eland/tests/plotting/test_dataframe_hist_pytest.ipynb deleted file mode 100644 index 4327d10..0000000 --- a/eland/tests/plotting/test_dataframe_hist_pytest.ipynb +++ /dev/null @@ -1,235 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "from eland.tests.common import TestData\n", - "\n", - "test_data = TestData()\n", - "\n", - "pd_flights = test_data.pd_flights()[['DistanceKilometers', 'DistanceMiles', 'FlightDelayMin', 'FlightTimeHour']]\n", - "ed_flights = test_data.ed_flights()[['DistanceKilometers', 'DistanceMiles', 'FlightDelayMin', 'FlightTimeHour']]" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": "
", - "image/png": "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\n" - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "pd_flights.hist(figsize=[10,10])\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "pycharm": { - "is_executing": false, - "name": "#%%\n" - } - }, - "outputs": [ - { - "data": { - "text/plain": "
", - "image/png": "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\n" - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "ed_flights.hist(figsize=[10,10])\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Change flight columns" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "data": { - "text/plain": "
", - "image/png": "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\n" - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "ed_flights = test_data.ed_flights()[['AvgTicketPrice','DistanceKilometers', 'DistanceMiles', 'FlightDelayMin', 'FlightTimeHour']]\n", - "\n", - "ed_flights.hist(figsize=[10,10])\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "pycharm": { - "is_executing": false, - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "text": [ - "Index(['AvgTicketPrice', 'DistanceKilometers', 'DistanceMiles',\n 'FlightDelayMin', 'FlightTimeHour'],\n dtype='object')\n" - ], - "output_type": "stream" - }, - { - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0med_flights\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0med_flights\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0med_flights\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mAvgTicketPrice\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m500\u001b[0m \u001b[0;34m&\u001b[0m \u001b[0med_flights\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDestWeather\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'Clear'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/PycharmProjects/eland/eland/ndframe.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 100\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 102\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 103\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__sizeof__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/PycharmProjects/eland/eland/ndframe.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 96\u001b[0m \"\"\"\n\u001b[1;32m 97\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 98\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 99\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mAttributeError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 100\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mAttributeError\u001b[0m: 'DataFrame' object has no attribute 'DestWeather'" - ], - "ename": "AttributeError", - "evalue": "'DataFrame' object has no attribute 'DestWeather'", - "output_type": "error" - } - ], - "source": [ - "print(ed_flights.columns)\n", - "\n", - "ed_flights[ed_flights.AvgTicketPrice > 500 & ed_flights.DestWeather == 'Clear'].hist(figsize=[10,10])\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "outputs": [ - { - "data": { - "text/plain": " AvgTicketPrice DistanceKilometers DistanceMiles FlightDelayMin \\\ncount 9911.000000 9911.000000 9911.000000 9911.000000 \nmean 741.767698 7869.026973 4889.586667 47.196045 \nstd 194.441174 4232.118944 2629.716791 96.912496 \nmin 400.041290 0.000000 0.000000 0.000000 \n25% 580.761133 5761.941846 3587.218914 0.000000 \n50% 738.507419 7997.826941 4969.496396 0.000000 \n75% 891.883046 10117.475424 6284.638106 9.095745 \nmax 1199.729004 19881.482422 12353.780273 360.000000 \n\n FlightTimeHour \ncount 9911.000000 \nmean 9.362701 \nstd 5.294526 \nmin 0.000000 \n25% 6.075868 \n50% 9.033861 \n75% 12.505971 \nmax 31.715034 ", - "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
AvgTicketPriceDistanceKilometersDistanceMilesFlightDelayMinFlightTimeHour
count9911.0000009911.0000009911.0000009911.0000009911.000000
mean741.7676987869.0269734889.58666747.1960459.362701
std194.4411744232.1189442629.71679196.9124965.294526
min400.0412900.0000000.0000000.0000000.000000
25%580.7611335761.9418463587.2189140.0000006.075868
50%738.5074197997.8269414969.4963960.0000009.033861
75%891.88304610117.4754246284.6381069.09574512.505971
max1199.72900419881.48242212353.780273360.00000031.715034
\n
" - }, - "metadata": {}, - "output_type": "execute_result", - "execution_count": 21 - } - ], - "source": [ - "ed_flights[ed_flights.AvgTicketPrice > 400].describe()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n", - "is_executing": false - } - } - }, - { - "cell_type": "code", - "execution_count": 24, - "outputs": [ - { - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNotImplementedError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0med_flights\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0med_flights\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDistanceKilometers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/anaconda3/envs/eland/lib/python3.6/site-packages/modin/pandas/base.py\u001b[0m in \u001b[0;36misna\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1401\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0motherwise\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1402\u001b[0m \"\"\"\n\u001b[0;32m-> 1403\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__constructor__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mquery_compiler\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_query_compiler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1404\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1405\u001b[0m \u001b[0misnull\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/anaconda3/envs/eland/lib/python3.6/site-packages/modin/backends/base/query_compiler.py\u001b[0m in \u001b[0;36misna\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 375\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 376\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 377\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Must be implemented in children classes\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 378\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 379\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0misnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNotImplementedError\u001b[0m: Must be implemented in children classes" - ], - "ename": "NotImplementedError", - "evalue": "Must be implemented in children classes", - "output_type": "error" - } - ], - "source": [ - "ed_flights[ed_flights.DistanceKilometers.isna()]\n", - "\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n", - "is_executing": false - } - } - } - ], - "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.8" - }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "source": [], - "metadata": { - "collapsed": false - } - } - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} \ No newline at end of file diff --git a/eland/utils.py b/eland/utils.py index de1a0ba..1b7fe8c 100644 --- a/eland/utils.py +++ b/eland/utils.py @@ -280,6 +280,7 @@ def read_csv(filepath_or_buffer, kwds = dict() kwds.update( + sep=sep, delimiter=delimiter, engine=engine, dialect=dialect, diff --git a/example/Online Retail Analysis.ipynb b/example/Online Retail Analysis.ipynb deleted file mode 100644 index 4b78125..0000000 --- a/example/Online Retail Analysis.ipynb +++ /dev/null @@ -1,1237 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import eland as ed\n", - "import numpy as np" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Exploratory Data Analysis with eland" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Getting Started\n", - "\n", - "To get started, let's explore the attributes of the `online-retail` index. First, we'll instantiate the data frame by pointing the constructor to a particular instance in our local elasticsearch cluster. \n", - "\n", - "The `online-retail` index was created by running `python load_data.py` from the `examples` directory." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "df = ed.read_es(\"http://localhost:9200\", \"online-retail\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we see that the `\"_id\"` field was used to index our data frame. " - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'_id'" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.index.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": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['country', 'customer_id', 'description', 'invoice_date', 'invoice_no',\n", - " 'quantity', 'stock_code', 'unit_price'],\n", - " dtype='object')" - ] - }, - "execution_count": 19, - "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": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "country object\n", - "customer_id object\n", - "description object\n", - "invoice_date datetime64[ns]\n", - "invoice_no object\n", - "quantity int64\n", - "stock_code object\n", - "unit_price float64\n", - "dtype: object" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.dtypes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We also offer a `.info_es()` 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": 70, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "index_pattern: online-retail\n", - "Index:\n", - "\tindex_field: _id\n", - "\tis_source_field: False\n", - "Mappings:\n", - "\tcapabilities: _source es_dtype pd_dtype searchable aggregatable\n", - "country True keyword object True True\n", - "customer_id True keyword object True True\n", - "description True keyword object True True\n", - "invoice_date True date datetime64[ns] True True\n", - "invoice_no True keyword object True True\n", - "quantity True integer int64 True True\n", - "stock_code True keyword object True True\n", - "unit_price True float float64 True True\n", - "Operations:\n", - "\ttasks: []\n", - "\tsize: None\n", - "\tsort_params: None\n", - "\tcolumns: None\n", - "\tpost_processing: []\n", - "\n" - ] - } - ], - "source": [ - "print(df.info_es())" - ] - }, - { - "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": 44, - "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", - "
countrycustomer_iddescriptioninvoice_dateinvoice_noquantitystock_codeunit_price
wXcVa24BUkfJ5hz0pRsLUnited Kingdom17850WHITE HANGING HEART T-LIGHT HOLDER2010-12-01 08:26:00536365685123A2.55
wncVa24BUkfJ5hz0pRsLUnited Kingdom17850WHITE METAL LANTERN2010-12-01 08:26:005363656710533.39
\n", - "
\n", - "

2 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id \\\n", - "wXcVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "wncVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "\n", - " description invoice_date \\\n", - "wXcVa24BUkfJ5hz0pRsL WHITE HANGING HEART T-LIGHT HOLDER 2010-12-01 08:26:00 \n", - "wncVa24BUkfJ5hz0pRsL WHITE METAL LANTERN 2010-12-01 08:26:00 \n", - "\n", - " invoice_no quantity stock_code unit_price \n", - "wXcVa24BUkfJ5hz0pRsL 536365 6 85123A 2.55 \n", - "wncVa24BUkfJ5hz0pRsL 536365 6 71053 3.39 \n", - "\n", - "[2 rows x 8 columns]" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "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", - "
countrycustomer_iddescriptioninvoice_dateinvoice_noquantitystock_codeunit_price
vXgVa24BUkfJ5hz0txvjUnited KingdomMULTICOLOUR HONEYCOMB FAN2011-01-20 18:08:005416961212091.63
vngVa24BUkfJ5hz0txvjUnited KingdomPACK OF 72 RETROSPOT CAKE CASES2011-01-20 18:08:005416961212121.25
\n", - "
\n", - "

2 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id \\\n", - "vXgVa24BUkfJ5hz0txvj United Kingdom \n", - "vngVa24BUkfJ5hz0txvj United Kingdom \n", - "\n", - " description invoice_date \\\n", - "vXgVa24BUkfJ5hz0txvj MULTICOLOUR HONEYCOMB FAN 2011-01-20 18:08:00 \n", - "vngVa24BUkfJ5hz0txvj PACK OF 72 RETROSPOT CAKE CASES 2011-01-20 18:08:00 \n", - "\n", - " invoice_no quantity stock_code unit_price \n", - "vXgVa24BUkfJ5hz0txvj 541696 1 21209 1.63 \n", - "vngVa24BUkfJ5hz0txvj 541696 1 21212 1.25 \n", - "\n", - "[2 rows x 8 columns]" - ] - }, - "execution_count": 23, - "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": 56, - "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", - "
countryinvoice_date
wXcVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
wncVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
w3cVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
xHcVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
xXcVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
\n", - "
\n", - "

5 rows x 2 columns

" - ], - "text/plain": [ - " country invoice_date\n", - "wXcVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "wncVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "w3cVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "xHcVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "xXcVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "\n", - "[5 rows x 2 columns]" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['country', 'invoice_date']].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": 111, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
countrycustomer_iddescriptioninvoice_dateinvoice_noquantitystock_codeunit_price
FncVa24BUkfJ5hz0pSBJGermany12662SET OF 6 T-LIGHTS SANTA2010-12-01 13:04:005365276228092.95
F3cVa24BUkfJ5hz0pSBJGermany12662ROTATING SILVER ANGELS T-LIGHT HLDR2010-12-01 13:04:005365276843472.55
GHcVa24BUkfJ5hz0pSBJGermany12662MULTI COLOUR SILVER T-LIGHT HOLDER2010-12-01 13:04:0053652712849450.85
GXcVa24BUkfJ5hz0pSBJGermany126625 HOOK HANGER MAGIC TOADSTOOL2010-12-01 13:04:0053652712222421.65
GncVa24BUkfJ5hz0pSBJGermany126623 HOOK HANGER MAGIC GARDEN2010-12-01 13:04:0053652712222441.95
\n", - "
\n", - "

5 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id \\\n", - "FncVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "F3cVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "GHcVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "GXcVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "GncVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "\n", - " description invoice_date \\\n", - "FncVa24BUkfJ5hz0pSBJ SET OF 6 T-LIGHTS SANTA 2010-12-01 13:04:00 \n", - "F3cVa24BUkfJ5hz0pSBJ ROTATING SILVER ANGELS T-LIGHT HLDR 2010-12-01 13:04:00 \n", - "GHcVa24BUkfJ5hz0pSBJ MULTI COLOUR SILVER T-LIGHT HOLDER 2010-12-01 13:04:00 \n", - "GXcVa24BUkfJ5hz0pSBJ 5 HOOK HANGER MAGIC TOADSTOOL 2010-12-01 13:04:00 \n", - "GncVa24BUkfJ5hz0pSBJ 3 HOOK HANGER MAGIC GARDEN 2010-12-01 13:04:00 \n", - "\n", - " invoice_no quantity stock_code unit_price \n", - "FncVa24BUkfJ5hz0pSBJ 536527 6 22809 2.95 \n", - "F3cVa24BUkfJ5hz0pSBJ 536527 6 84347 2.55 \n", - "GHcVa24BUkfJ5hz0pSBJ 536527 12 84945 0.85 \n", - "GXcVa24BUkfJ5hz0pSBJ 536527 12 22242 1.65 \n", - "GncVa24BUkfJ5hz0pSBJ 536527 12 22244 1.95 \n", - "\n", - "[5 rows x 8 columns]" - ] - }, - "execution_count": 111, - "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": 7, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
countrycustomer_iddescriptioninvoice_dateinvoice_noquantitystock_codeunit_price
wXcVa24BUkfJ5hz0pRsLUnited Kingdom17850WHITE HANGING HEART T-LIGHT HOLDER2010-12-01 08:26:00536365685123A2.55
wncVa24BUkfJ5hz0pRsLUnited Kingdom17850WHITE METAL LANTERN2010-12-01 08:26:005363656710533.39
w3cVa24BUkfJ5hz0pRsLUnited Kingdom17850CREAM CUPID HEARTS COAT HANGER2010-12-01 08:26:00536365884406B2.75
xHcVa24BUkfJ5hz0pRsLUnited Kingdom17850KNITTED UNION FLAG HOT WATER BOTTLE2010-12-01 08:26:00536365684029G3.39
xXcVa24BUkfJ5hz0pRsLUnited Kingdom17850RED WOOLLY HOTTIE WHITE HEART2010-12-01 08:26:00536365684029E3.39
\n", - "
\n", - "

5 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id \\\n", - "wXcVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "wncVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "w3cVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "xHcVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "xXcVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "\n", - " description invoice_date \\\n", - "wXcVa24BUkfJ5hz0pRsL WHITE HANGING HEART T-LIGHT HOLDER 2010-12-01 08:26:00 \n", - "wncVa24BUkfJ5hz0pRsL WHITE METAL LANTERN 2010-12-01 08:26:00 \n", - "w3cVa24BUkfJ5hz0pRsL CREAM CUPID HEARTS COAT HANGER 2010-12-01 08:26:00 \n", - "xHcVa24BUkfJ5hz0pRsL KNITTED UNION FLAG HOT WATER BOTTLE 2010-12-01 08:26:00 \n", - "xXcVa24BUkfJ5hz0pRsL RED WOOLLY HOTTIE WHITE HEART 2010-12-01 08:26:00 \n", - "\n", - " invoice_no quantity stock_code unit_price \n", - "wXcVa24BUkfJ5hz0pRsL 536365 6 85123A 2.55 \n", - "wncVa24BUkfJ5hz0pRsL 536365 6 71053 3.39 \n", - "w3cVa24BUkfJ5hz0pRsL 536365 8 84406B 2.75 \n", - "xHcVa24BUkfJ5hz0pRsL 536365 6 84029G 3.39 \n", - "xXcVa24BUkfJ5hz0pRsL 536365 6 84029E 3.39 \n", - "\n", - "[5 rows x 8 columns]" - ] - }, - "execution_count": 7, - "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": 115, - "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", - "
countrycustomer_iddescriptioninvoice_dateinvoice_noquantitystock_codeunit_price
5XcVa24BUkfJ5hz0q3MqGermany12471FUNKY DIVA PEN2010-12-10 09:35:0053817496227410.85
7XcVa24BUkfJ5hz0q3MqGermany12471LIPSTICK PEN RED2010-12-10 09:35:00538174100224190.36
FHcVa24BUkfJ5hz0s-K9Germany12500PACK OF 6 BIRDY GIFT TAGS2011-01-10 09:48:00540553144225851.06
XncVa24BUkfJ5hz0s-K9Germany12524BOX OF 24 COCKTAIL PARASOLS2011-01-10 10:35:00540562100846920.42
\n", - "
\n", - "

4 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id description \\\n", - "5XcVa24BUkfJ5hz0q3Mq Germany 12471 FUNKY DIVA PEN \n", - "7XcVa24BUkfJ5hz0q3Mq Germany 12471 LIPSTICK PEN RED \n", - "FHcVa24BUkfJ5hz0s-K9 Germany 12500 PACK OF 6 BIRDY GIFT TAGS \n", - "XncVa24BUkfJ5hz0s-K9 Germany 12524 BOX OF 24 COCKTAIL PARASOLS \n", - "\n", - " invoice_date invoice_no quantity stock_code \\\n", - "5XcVa24BUkfJ5hz0q3Mq 2010-12-10 09:35:00 538174 96 22741 \n", - "7XcVa24BUkfJ5hz0q3Mq 2010-12-10 09:35:00 538174 100 22419 \n", - "FHcVa24BUkfJ5hz0s-K9 2011-01-10 09:48:00 540553 144 22585 \n", - "XncVa24BUkfJ5hz0s-K9 2011-01-10 10:35:00 540562 100 84692 \n", - "\n", - " unit_price \n", - "5XcVa24BUkfJ5hz0q3Mq 0.85 \n", - "7XcVa24BUkfJ5hz0q3Mq 0.36 \n", - "FHcVa24BUkfJ5hz0s-K9 1.06 \n", - "XncVa24BUkfJ5hz0s-K9 0.42 \n", - "\n", - "[4 rows x 8 columns]" - ] - }, - "execution_count": 115, - "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": 74, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "index_pattern: online-retail\n", - "Index:\n", - "\tindex_field: _id\n", - "\tis_source_field: False\n", - "Mappings:\n", - "\tcapabilities: _source es_dtype pd_dtype searchable aggregatable\n", - "country True keyword object True True\n", - "customer_id True keyword object True True\n", - "description True keyword object True True\n", - "invoice_date True date datetime64[ns] True True\n", - "invoice_no True keyword object True True\n", - "quantity True integer int64 True True\n", - "stock_code True keyword object True True\n", - "unit_price True float float64 True True\n", - "Operations:\n", - "\ttasks: [('boolean_filter', {'bool': {'must': [{'term': {'country': 'Germany'}}, {'range': {'quantity': {'gt': 90}}}]}})]\n", - "\tsize: None\n", - "\tsort_params: None\n", - "\tcolumns: None\n", - "\tpost_processing: []\n", - "\n" - ] - } - ], - "source": [ - "print(df[(df['country']=='Germany') & (df['quantity']>90)].info_es())" - ] - }, - { - "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": 76, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "country 24\n", - "dtype: int64" - ] - }, - "execution_count": 76, - "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": 80, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "quantity 548076.0\n", - "dtype: float64" - ] - }, - "execution_count": 80, - "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": 93, - "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", - "
quantityunit_price
sum548076.000000383761.569666
mean8.3632315.855916
max74215.00000016888.019531
min-74215.0000000.000000
\n", - "
" - ], - "text/plain": [ - " quantity unit_price\n", - "sum 548076.000000 383761.569666\n", - "mean 8.363231 5.855916\n", - "max 74215.000000 16888.019531\n", - "min -74215.000000 0.000000" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['quantity','unit_price']].agg(['sum', 'mean', 'max', 'min'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Give me descriptive statistics for the entire data frame**" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "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", - "
quantityunit_price
count65534.00000065534.000000
mean8.3632315.855916
std413.694481145.755942
min-74215.0000000.000000
25%1.0000001.250000
50%2.0000002.510000
75%8.0000004.234706
max74215.00000016888.019531
\n", - "
" - ], - "text/plain": [ - " quantity unit_price\n", - "count 65534.000000 65534.000000\n", - "mean 8.363231 5.855916\n", - "std 413.694481 145.755942\n", - "min -74215.000000 0.000000\n", - "25% 1.000000 1.250000\n", - "50% 2.000000 2.510000\n", - "75% 8.000000 4.234706\n", - "max 74215.000000 16888.019531" - ] - }, - "execution_count": 119, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Show me a histogram of numeric columns**" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[,\n", - " ]],\n", - " dtype=object)" - ] - }, - "execution_count": 110, - "metadata": {}, - "output_type": "execute_result" - }, - { - "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['unit_price']>0) & \n", - " (df['unit_price']<100)].select_dtypes(include=[np.number]).hist(figsize=[12,4], bins=30)" - ] - } - ], - "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.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/example/README.md b/example/README.md deleted file mode 100644 index 32b5824..0000000 --- a/example/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Example Walkthrough for eland - -This example demonstrate the functionality of `eland` through a walkthrough of a simple analysis of the [Online Retail Dataset](https://archive.ics.uci.edu/ml/datasets/online+retail). - -To run this example, make sure that you have an elasticsearch cluster running on port 9200 and please install any additional dependencies in addition to `eland`: - -``` -pip install -r requirements-example.txt -``` - -Once these requirements are satisfied, load the data using the provided script: - -``` -python load.py -``` - -This will create an index called `online-retail` with a mapping defined in `load.py`. \ No newline at end of file diff --git a/example/load_data.py b/example/load_data.py deleted file mode 100644 index d780bc2..0000000 --- a/example/load_data.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright 2019 Elasticsearch BV -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import csv - -from elasticsearch import Elasticsearch, helpers -from elasticsearch.exceptions import TransportError - - -def create_index(es, index): - mapping = { - "mappings": { - "properties": { - "invoice_no": {"type": "keyword"}, - "stock_code": {"type": "keyword"}, - "description": {"type": "keyword"}, - "quantity": {"type": "integer"}, - "invoice_date": {"type": "date", "format": "MM/dd/yyyy HH:mm"}, - "unit_price": {"type": "float"}, - "customer_id": {"type": "keyword"}, - "country": {"type": "keyword"} - } - } - } - - # create an empty index - try: - es.indices.create(index=index, body=mapping) - except TransportError as e: - # ignore already existing index - if e.error == "resource_already_exists_exception": - pass - else: - raise - - -def parse_date(date): - """ - we need to convert dates to conform to the mapping in the following way: - months: one or two digit ints -> MM - days: one or two digit ints -> dd - years: two digit ints -> yyyy - times: {H}H:mm -> HH:mm - """ - - date = date.split("/") - - month = date[0] if len(date[0]) == 2 else "0{}".format(date[0]) - - day = date[1] if len(date[1]) == 2 else "0{}".format(date[1]) - - year = date[2].split(" ")[0] - year = "20{}".format(year) - - time = date[2].split(" ")[1] - time = time if len(time) == 5 else "0{}".format(time) - - date = "{}/{}/{} {}".format(month, day, year, time) - - return date - - -def parse_line(line): - """ - creates the document to be indexed - """ - obj = { - "invoice_no": line[0], - "stock_code": line[1], - "description": line[2], - "quantity": line[3], - "invoice_date": parse_date(line[4]), - "unit_price": line[5], - "customer_id": line[6], - "country": line[7].replace("\n", "") - } - - return obj - - -def load_data(es): - """ - generate one document per line of online-retail.csv - read file line by line to avoid loading all data into memory - """ - - create_index(es, "online-retail") - - header = True - with open("data/online-retail.csv", "r") as f: - reader = csv.reader(f, quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL) - for line in reader: - if header: - header = False - continue - doc = parse_line(line) - - yield doc - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument( - "-H", - "--host", - action="store", - default="localhost:9200", - help="The elasticsearch host you wish to connect to. (Default: localhost:9200)" - ) - - args = parser.parse_args() - - # create the elasticsearch client, pointing to the host parameter - es = Elasticsearch(args.host) - index = 'online-retail' - - # load data from online retail csv in data directory - stream = load_data(es) - for ok, result in helpers.streaming_bulk( - es, - actions=stream, - index=index, - chunk_size=1000 - ): - action, result = result.popitem() - doc_id = "/{}/doc/{}".format(index, result['_id']) - - if not ok: - print("Failed to {} document {} {}".format(action, doc_id, result)) - else: - print(doc_id) - - # make docs available for searches - es.indices.refresh(index=index) - - # notify user of number of documents indexed - print(es.count(index=index)["count"], "documents in index") diff --git a/example/requirements-example.txt b/example/requirements-example.txt deleted file mode 100644 index dc9beca..0000000 --- a/example/requirements-example.txt +++ /dev/null @@ -1,80 +0,0 @@ -alabaster==0.7.12 -appnope==0.1.0 -atomicwrites==1.3.0 -attrs==19.3.0 -Babel==2.7.0 -backcall==0.1.0 -bleach==3.1.0 -certifi==2019.9.11 -chardet==3.0.4 -cycler==0.10.0 -decorator==4.4.1 -defusedxml==0.6.0 -docutils==0.15.2 -eland==0.1 -elasticsearch==7.1.0 -entrypoints==0.3 -idna==2.8 -imagesize==1.1.0 -importlib-metadata==0.23 -ipykernel==5.1.3 -ipython==7.9.0 -ipython-genutils==0.2.0 -ipywidgets==7.5.1 -jedi==0.15.1 -Jinja2==2.10.3 -jsonschema==3.1.1 -jupyter==1.0.0 -jupyter-client==5.3.4 -jupyter-console==6.0.0 -jupyter-core==4.6.1 -kiwisolver==1.1.0 -MarkupSafe==1.1.1 -matplotlib==3.1.1 -mistune==0.8.4 -more-itertools==7.2.0 -nbconvert==5.6.1 -nbformat==4.4.0 -notebook==6.0.2 -numpy==1.17.4 -numpydoc==0.8.0 -packaging==19.2 -pandas==0.25.1 -pandocfilters==1.4.2 -parso==0.5.1 -pexpect==4.7.0 -pickleshare==0.7.5 -pluggy==0.13.0 -prometheus-client==0.7.1 -prompt-toolkit==2.0.10 -ptyprocess==0.6.0 -py==1.8.0 -Pygments==2.4.2 -pyparsing==2.4.5 -pyrsistent==0.15.5 -pytest==5.2.2 -python-dateutil==2.8.1 -pytz==2019.3 -pyzmq==18.1.1 -qtconsole==4.5.5 -requests==2.22.0 -Send2Trash==1.5.0 -six==1.13.0 -snowballstemmer==2.0.0 -Sphinx==2.2.1 -sphinx-rtd-theme==0.4.3 -sphinxcontrib-applehelp==1.0.1 -sphinxcontrib-devhelp==1.0.1 -sphinxcontrib-htmlhelp==1.0.2 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.2 -sphinxcontrib-serializinghtml==1.1.3 -terminado==0.8.3 -testpath==0.4.4 -tornado==6.0.3 -traitlets==4.3.3 -urllib3==1.25.7 -wcwidth==0.1.7 -webencodings==0.5.1 -widgetsnbextension==3.5.1 -zipp==0.6.0 diff --git a/make_docs.sh b/make_docs.sh index 5134e70..98338e2 100644 --- a/make_docs.sh +++ b/make_docs.sh @@ -2,6 +2,9 @@ python setup.py install +jupyter nbconvert --to notebook --inplace --execute docs/source/examples/demo_notebook.ipynb +jupyter nbconvert --to notebook --inplace --execute docs/source/examples/online_retail_analysis.ipynb + cd docs make clean diff --git a/requirements-dev.txt b/requirements-dev.txt index 1386841..4dd97d4 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,4 +2,5 @@ elasticsearch>=7.0.5 pandas==0.25.1 matplotlib pytest>=5.2.1 +nbval numpydoc==0.8