{ "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "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", "
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": { "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", "
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": { "pycharm": { "is_executing": false } }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd_flights.empty" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "outputs": [ { "data": { "text/plain": [ "'_id'" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ed_flights.index.es_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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "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": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd_flights.get('Carrier')" ] }, { "cell_type": "code", "execution_count": 28, "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": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ed_flights.get('Carrier')" ] }, { "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", " \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": { "pycharm": { "is_executing": false } }, "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": { "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", "
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": { "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", "
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": { "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", "
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": { "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", "
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": { "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", "
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": { "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", "
DistanceKilometersAvgTicketPrice
sum9.261629e+078.204365e+06
min0.000000e+001.000205e+02
std4.578614e+032.664071e+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.578614e+03 2.664071e+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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "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", "
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": { "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", "
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%410.0089182470.545974...252.0641621.000000
50%640.3872857612.072403...503.1489753.000000
75%842.2275939735.860651...720.5119684.068548
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% 410.008918 2470.545974 ... 252.064162 1.000000\n", "50% 640.387285 7612.072403 ... 503.148975 3.000000\n", "75% 842.227593 9735.860651 ... 720.511968 4.068548\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": { "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", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 AvgTicketPrice 13059 non-null float64 \n", " 1 Cancelled 13059 non-null bool \n", " 2 Carrier 13059 non-null object \n", " 3 Dest 13059 non-null object \n", " 4 DestAirportID 13059 non-null object \n", " 5 DestCityName 13059 non-null object \n", " 6 DestCountry 13059 non-null object \n", " 7 DestLocation 13059 non-null object \n", " 8 DestRegion 13059 non-null object \n", " 9 DestWeather 13059 non-null object \n", " 10 DistanceKilometers 13059 non-null float64 \n", " 11 DistanceMiles 13059 non-null float64 \n", " 12 FlightDelay 13059 non-null bool \n", " 13 FlightDelayMin 13059 non-null int64 \n", " 14 FlightDelayType 13059 non-null object \n", " 15 FlightNum 13059 non-null object \n", " 16 FlightTimeHour 13059 non-null float64 \n", " 17 FlightTimeMin 13059 non-null float64 \n", " 18 Origin 13059 non-null object \n", " 19 OriginAirportID 13059 non-null object \n", " 20 OriginCityName 13059 non-null object \n", " 21 OriginCountry 13059 non-null object \n", " 22 OriginLocation 13059 non-null object \n", " 23 OriginRegion 13059 non-null object \n", " 24 OriginWeather 13059 non-null object \n", " 25 dayOfWeek 13059 non-null int64 \n", " 26 timestamp 13059 non-null datetime64[ns]\n", "dtypes: bool(2), datetime64[ns](1), float64(5), int64(2), object(17)\n", "memory usage: 3.2+ MB\n" ] } ], "source": [ "pd_flights.info()" ] }, { "cell_type": "code", "execution_count": 42, "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", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 AvgTicketPrice 13059 non-null float64 \n", " 1 Cancelled 13059 non-null bool \n", " 2 Carrier 13059 non-null object \n", " 3 Dest 13059 non-null object \n", " 4 DestAirportID 13059 non-null object \n", " 5 DestCityName 13059 non-null object \n", " 6 DestCountry 13059 non-null object \n", " 7 DestLocation 13059 non-null object \n", " 8 DestRegion 13059 non-null object \n", " 9 DestWeather 13059 non-null object \n", " 10 DistanceKilometers 13059 non-null float64 \n", " 11 DistanceMiles 13059 non-null float64 \n", " 12 FlightDelay 13059 non-null bool \n", " 13 FlightDelayMin 13059 non-null int64 \n", " 14 FlightDelayType 13059 non-null object \n", " 15 FlightNum 13059 non-null object \n", " 16 FlightTimeHour 13059 non-null float64 \n", " 17 FlightTimeMin 13059 non-null float64 \n", " 18 Origin 13059 non-null object \n", " 19 OriginAirportID 13059 non-null object \n", " 20 OriginCityName 13059 non-null object \n", " 21 OriginCountry 13059 non-null object \n", " 22 OriginLocation 13059 non-null object \n", " 23 OriginRegion 13059 non-null object \n", " 24 OriginWeather 13059 non-null object \n", " 25 dayOfWeek 13059 non-null int64 \n", " 26 timestamp 13059 non-null datetime64[ns]\n", "dtypes: bool(2), datetime64[ns](1), float64(5), int64(2), object(17)\n", "memory usage: 80.0 bytes\n" ] } ], "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": { "pycharm": { "is_executing": false } }, "outputs": [ { "data": { "text/plain": [ "AvgTicketPrice 1199.73\n", "Cancelled True\n", "DistanceKilometers 19881.5\n", "DistanceMiles 12353.8\n", "FlightDelay True\n", "FlightDelayMin 360\n", "FlightTimeHour 31.715\n", "FlightTimeMin 1902.9\n", "dayOfWeek 6\n", "dtype: object" ] }, "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": { "pycharm": { "is_executing": false } }, "outputs": [ { "data": { "text/plain": [ "AvgTicketPrice 1199.73\n", "Cancelled True\n", "DistanceKilometers 19881.5\n", "DistanceMiles 12353.8\n", "FlightDelay True\n", "FlightDelayMin 360\n", "FlightTimeHour 31.715\n", "FlightTimeMin 1902.9\n", "dayOfWeek 6\n", "dtype: object" ] }, "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": { "pycharm": { "is_executing": false } }, "outputs": [ { "data": { "text/plain": [ "AvgTicketPrice 100.021\n", "Cancelled False\n", "DistanceKilometers 0\n", "DistanceMiles 0\n", "FlightDelay False\n", "FlightDelayMin 0\n", "FlightTimeHour 0\n", "FlightTimeMin 0\n", "dayOfWeek 0\n", "dtype: object" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd_flights.min(numeric_only=True)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "pycharm": { "is_executing": false } }, "outputs": [ { "data": { "text/plain": [ "AvgTicketPrice 100.021\n", "Cancelled False\n", "DistanceKilometers 0\n", "DistanceMiles 0\n", "FlightDelay False\n", "FlightDelayMin 0\n", "FlightTimeHour 0\n", "FlightTimeMin 0\n", "dayOfWeek 0\n", "dtype: object" ] }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "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": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd_flights.sum(numeric_only=True)" ] }, { "cell_type": "code", "execution_count": 50, "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": 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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "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", "
CarrierDestRegion...dayOfWeektimestamp
0Kibana AirlinesSE-BD...02018-01-01 00:00:00
1Logstash AirwaysIT-34...02018-01-01 18:27:00
2Logstash AirwaysIT-34...02018-01-01 17:11:14
3Kibana AirlinesIT-34...02018-01-01 10:33:28
4Kibana AirlinesSE-BD...02018-01-01 05:13:00
..................
13054Logstash AirwaysSE-BD...62018-02-11 20:42:25
13055Logstash AirwaysCH-ZH...62018-02-11 01:41:57
13056Logstash AirwaysRU-AMU...62018-02-11 04:09:27
13057JetBeatsSE-BD...62018-02-11 08:28:21
13058JetBeatsUS-DC...62018-02-11 14:54:34
\n", "

13059 rows × 20 columns

\n", "
" ], "text/plain": [ " Carrier DestRegion ... dayOfWeek timestamp\n", "0 Kibana Airlines SE-BD ... 0 2018-01-01 00:00:00\n", "1 Logstash Airways IT-34 ... 0 2018-01-01 18:27:00\n", "2 Logstash Airways IT-34 ... 0 2018-01-01 17:11:14\n", "3 Kibana Airlines IT-34 ... 0 2018-01-01 10:33:28\n", "4 Kibana Airlines SE-BD ... 0 2018-01-01 05:13:00\n", "... ... ... ... ... ...\n", "13054 Logstash Airways SE-BD ... 6 2018-02-11 20:42:25\n", "13055 Logstash Airways CH-ZH ... 6 2018-02-11 01:41:57\n", "13056 Logstash Airways RU-AMU ... 6 2018-02-11 04:09:27\n", "13057 JetBeats SE-BD ... 6 2018-02-11 08:28:21\n", "13058 JetBeats US-DC ... 6 2018-02-11 14:54:34\n", "\n", "[13059 rows x 20 columns]" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd_flights.drop(columns=['AvgTicketPrice', \n", " 'Cancelled', \n", " 'DestLocation',\n", " 'Dest', \n", " 'DestAirportID', \n", " 'DestCityName', \n", " 'DestCountry'])" ] }, { "cell_type": "code", "execution_count": 54, "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", "
CarrierDestRegion...dayOfWeektimestamp
0Kibana AirlinesSE-BD...02018-01-01 00:00:00
1Logstash AirwaysIT-34...02018-01-01 18:27:00
2Logstash AirwaysIT-34...02018-01-01 17:11:14
3Kibana AirlinesIT-34...02018-01-01 10:33:28
4Kibana AirlinesSE-BD...02018-01-01 05:13:00
..................
13054Logstash AirwaysSE-BD...62018-02-11 20:42:25
13055Logstash AirwaysCH-ZH...62018-02-11 01:41:57
13056Logstash AirwaysRU-AMU...62018-02-11 04:09:27
13057JetBeatsSE-BD...62018-02-11 08:28:21
13058JetBeatsUS-DC...62018-02-11 14:54:34
\n", "
\n", "

13059 rows × 20 columns

" ], "text/plain": [ " Carrier DestRegion ... dayOfWeek timestamp\n", "0 Kibana Airlines SE-BD ... 0 2018-01-01 00:00:00\n", "1 Logstash Airways IT-34 ... 0 2018-01-01 18:27:00\n", "2 Logstash Airways IT-34 ... 0 2018-01-01 17:11:14\n", "3 Kibana Airlines IT-34 ... 0 2018-01-01 10:33:28\n", "4 Kibana Airlines SE-BD ... 0 2018-01-01 05:13:00\n", "... ... ... ... ... ...\n", "13054 Logstash Airways SE-BD ... 6 2018-02-11 20:42:25\n", "13055 Logstash Airways CH-ZH ... 6 2018-02-11 01:41:57\n", "13056 Logstash Airways RU-AMU ... 6 2018-02-11 04:09:27\n", "13057 JetBeats SE-BD ... 6 2018-02-11 08:28:21\n", "13058 JetBeats US-DC ... 6 2018-02-11 14:54:34\n", "\n", "[13059 rows x 20 columns]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ed_flights.drop(columns=['AvgTicketPrice', \n", " 'Cancelled', \n", " 'DestLocation',\n", " 'Dest', \n", " 'DestAirportID', \n", " 'DestCityName', \n", " 'DestCountry'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "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": { "pycharm": { "is_executing": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "es_index_pattern: flights\n", "Index:\n", " es_index_field: _id\n", " is_source_field: False\n", "Mappings:\n", " capabilities:\n", " es_field_name is_source es_dtype es_date_format pd_dtype is_searchable is_aggregatable is_scripted aggregatable_es_field_name\n", "timestamp timestamp True date strict_date_hour_minute_second datetime64[ns] True True False timestamp\n", "OriginAirportID OriginAirportID True keyword None object True True False OriginAirportID\n", "DestAirportID DestAirportID True keyword None object True True False DestAirportID\n", "FlightDelayMin FlightDelayMin True integer None int64 True True False FlightDelayMin\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}}}]}}}\n", " post_processing: [('sort_index')]\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.6.9" }, "pycharm": { "stem_cell": { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [] } } }, "nbformat": 4, "nbformat_minor": 2 }