{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Eland Demo Notebook"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:28.813370Z",
"iopub.status.busy": "2021-12-15T20:24:28.802670Z",
"iopub.status.idle": "2021-12-15T20:24:30.192643Z",
"shell.execute_reply": "2021-12-15T20:24:30.192931Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:30.195931Z",
"iopub.status.busy": "2021-12-15T20:24:30.195563Z",
"iopub.status.idle": "2021-12-15T20:24:30.668077Z",
"shell.execute_reply": "2021-12-15T20:24:30.667531Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [],
"source": [
"ed_flights = ed.DataFrame('http://localhost:9200', 'flights')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:30.673583Z",
"iopub.status.busy": "2021-12-15T20:24:30.673088Z",
"iopub.status.idle": "2021-12-15T20:24:30.677254Z",
"shell.execute_reply": "2021-12-15T20:24:30.677676Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:30.682438Z",
"iopub.status.busy": "2021-12-15T20:24:30.681925Z",
"iopub.status.idle": "2021-12-15T20:24:35.046707Z",
"shell.execute_reply": "2021-12-15T20:24:35.046060Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [],
"source": [
"pd_flights = ed.eland_to_pandas(ed_flights)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:35.050698Z",
"iopub.status.busy": "2021-12-15T20:24:35.050158Z",
"iopub.status.idle": "2021-12-15T20:24:35.053100Z",
"shell.execute_reply": "2021-12-15T20:24:35.052560Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:35.057245Z",
"iopub.status.busy": "2021-12-15T20:24:35.056812Z",
"iopub.status.idle": "2021-12-15T20:24:35.059852Z",
"shell.execute_reply": "2021-12-15T20:24:35.059182Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:35.063057Z",
"iopub.status.busy": "2021-12-15T20:24:35.062660Z",
"iopub.status.idle": "2021-12-15T20:24:35.065130Z",
"shell.execute_reply": "2021-12-15T20:24:35.064757Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:35.076896Z",
"iopub.status.busy": "2021-12-15T20:24:35.076493Z",
"iopub.status.idle": "2021-12-15T20:24:35.079007Z",
"shell.execute_reply": "2021-12-15T20:24:35.078592Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:35.083103Z",
"iopub.status.busy": "2021-12-15T20:24:35.082693Z",
"iopub.status.idle": "2021-12-15T20:24:35.085336Z",
"shell.execute_reply": "2021-12-15T20:24:35.084836Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:35.090387Z",
"iopub.status.busy": "2021-12-15T20:24:35.089910Z",
"iopub.status.idle": "2021-12-15T20:24:35.113517Z",
"shell.execute_reply": "2021-12-15T20:24:35.113801Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" DistanceKilometers | \n",
" ... | \n",
" FlightTimeMin | \n",
" dayOfWeek | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 841.265642 | \n",
" 16492.326654 | \n",
" ... | \n",
" 1030.770416 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 882.982662 | \n",
" 8823.400140 | \n",
" ... | \n",
" 464.389481 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 190.636904 | \n",
" 0.000000 | \n",
" ... | \n",
" 0.000000 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" 181.694216 | \n",
" 555.737767 | \n",
" ... | \n",
" 222.749059 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 730.041778 | \n",
" 13358.244200 | \n",
" ... | \n",
" 785.779071 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 13054 | \n",
" 1080.446279 | \n",
" 8058.581753 | \n",
" ... | \n",
" 402.929088 | \n",
" 6 | \n",
"
\n",
" \n",
" 13055 | \n",
" 646.612941 | \n",
" 7088.598322 | \n",
" ... | \n",
" 644.418029 | \n",
" 6 | \n",
"
\n",
" \n",
" 13056 | \n",
" 997.751876 | \n",
" 10920.652972 | \n",
" ... | \n",
" 937.540811 | \n",
" 6 | \n",
"
\n",
" \n",
" 13057 | \n",
" 1102.814465 | \n",
" 18748.859647 | \n",
" ... | \n",
" 1697.404971 | \n",
" 6 | \n",
"
\n",
" \n",
" 13058 | \n",
" 858.144337 | \n",
" 16809.141923 | \n",
" ... | \n",
" 1610.761827 | \n",
" 6 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:35.131083Z",
"iopub.status.busy": "2021-12-15T20:24:35.130699Z",
"iopub.status.idle": "2021-12-15T20:24:38.362018Z",
"shell.execute_reply": "2021-12-15T20:24:38.360520Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" DistanceKilometers | \n",
" ... | \n",
" FlightTimeMin | \n",
" dayOfWeek | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 841.265642 | \n",
" 16492.326654 | \n",
" ... | \n",
" 1030.770416 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 882.982662 | \n",
" 8823.400140 | \n",
" ... | \n",
" 464.389481 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 190.636904 | \n",
" 0.000000 | \n",
" ... | \n",
" 0.000000 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" 181.694216 | \n",
" 555.737767 | \n",
" ... | \n",
" 222.749059 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 730.041778 | \n",
" 13358.244200 | \n",
" ... | \n",
" 785.779071 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 13054 | \n",
" 1080.446279 | \n",
" 8058.581753 | \n",
" ... | \n",
" 402.929088 | \n",
" 6 | \n",
"
\n",
" \n",
" 13055 | \n",
" 646.612941 | \n",
" 7088.598322 | \n",
" ... | \n",
" 644.418029 | \n",
" 6 | \n",
"
\n",
" \n",
" 13056 | \n",
" 997.751876 | \n",
" 10920.652972 | \n",
" ... | \n",
" 937.540811 | \n",
" 6 | \n",
"
\n",
" \n",
" 13057 | \n",
" 1102.814465 | \n",
" 18748.859647 | \n",
" ... | \n",
" 1697.404971 | \n",
" 6 | \n",
"
\n",
" \n",
" 13058 | \n",
" 858.144337 | \n",
" 16809.141923 | \n",
" ... | \n",
" 1610.761827 | \n",
" 6 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.376647Z",
"iopub.status.busy": "2021-12-15T20:24:38.374422Z",
"iopub.status.idle": "2021-12-15T20:24:38.382068Z",
"shell.execute_reply": "2021-12-15T20:24:38.383242Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.391560Z",
"iopub.status.busy": "2021-12-15T20:24:38.390590Z",
"iopub.status.idle": "2021-12-15T20:24:38.463948Z",
"shell.execute_reply": "2021-12-15T20:24:38.463507Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.467067Z",
"iopub.status.busy": "2021-12-15T20:24:38.466671Z",
"iopub.status.idle": "2021-12-15T20:24:38.469107Z",
"shell.execute_reply": "2021-12-15T20:24:38.468710Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.471904Z",
"iopub.status.busy": "2021-12-15T20:24:38.471491Z",
"iopub.status.idle": "2021-12-15T20:24:38.558583Z",
"shell.execute_reply": "2021-12-15T20:24:38.557300Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.569600Z",
"iopub.status.busy": "2021-12-15T20:24:38.568315Z",
"iopub.status.idle": "2021-12-15T20:24:38.575273Z",
"shell.execute_reply": "2021-12-15T20:24:38.574007Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.583800Z",
"iopub.status.busy": "2021-12-15T20:24:38.582630Z",
"iopub.status.idle": "2021-12-15T20:24:38.588504Z",
"shell.execute_reply": "2021-12-15T20:24:38.589469Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.598654Z",
"iopub.status.busy": "2021-12-15T20:24:38.597416Z",
"iopub.status.idle": "2021-12-15T20:24:38.604549Z",
"shell.execute_reply": "2021-12-15T20:24:38.603361Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.634011Z",
"iopub.status.busy": "2021-12-15T20:24:38.629434Z",
"iopub.status.idle": "2021-12-15T20:24:38.681698Z",
"shell.execute_reply": "2021-12-15T20:24:38.681982Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.685031Z",
"iopub.status.busy": "2021-12-15T20:24:38.684450Z",
"iopub.status.idle": "2021-12-15T20:24:38.687106Z",
"shell.execute_reply": "2021-12-15T20:24:38.686771Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.694742Z",
"iopub.status.busy": "2021-12-15T20:24:38.694371Z",
"iopub.status.idle": "2021-12-15T20:24:38.696502Z",
"shell.execute_reply": "2021-12-15T20:24:38.696207Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 841.265642 | \n",
" False | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 00:00:00 | \n",
"
\n",
" \n",
" 1 | \n",
" 882.982662 | \n",
" False | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 18:27:00 | \n",
"
\n",
" \n",
" 2 | \n",
" 190.636904 | \n",
" False | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 17:11:14 | \n",
"
\n",
" \n",
" 3 | \n",
" 181.694216 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 10:33:28 | \n",
"
\n",
" \n",
" 4 | \n",
" 730.041778 | \n",
" False | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 05:13:00 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:38.699691Z",
"iopub.status.busy": "2021-12-15T20:24:38.699271Z",
"iopub.status.idle": "2021-12-15T20:24:40.675206Z",
"shell.execute_reply": "2021-12-15T20:24:40.676183Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 841.265642 | \n",
" False | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 00:00:00 | \n",
"
\n",
" \n",
" 1 | \n",
" 882.982662 | \n",
" False | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 18:27:00 | \n",
"
\n",
" \n",
" 2 | \n",
" 190.636904 | \n",
" False | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 17:11:14 | \n",
"
\n",
" \n",
" 3 | \n",
" 181.694216 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 10:33:28 | \n",
"
\n",
" \n",
" 4 | \n",
" 730.041778 | \n",
" False | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 05:13:00 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:40.695639Z",
"iopub.status.busy": "2021-12-15T20:24:40.694910Z",
"iopub.status.idle": "2021-12-15T20:24:40.698148Z",
"shell.execute_reply": "2021-12-15T20:24:40.698704Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 13054 | \n",
" 1080.446279 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 20:42:25 | \n",
"
\n",
" \n",
" 13055 | \n",
" 646.612941 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 01:41:57 | \n",
"
\n",
" \n",
" 13056 | \n",
" 997.751876 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 04:09:27 | \n",
"
\n",
" \n",
" 13057 | \n",
" 1102.814465 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 08:28:21 | \n",
"
\n",
" \n",
" 13058 | \n",
" 858.144337 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 14:54:34 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:40.703670Z",
"iopub.status.busy": "2021-12-15T20:24:40.702923Z",
"iopub.status.idle": "2021-12-15T20:24:42.789898Z",
"shell.execute_reply": "2021-12-15T20:24:42.789460Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 13054 | \n",
" 1080.446279 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 20:42:25 | \n",
"
\n",
" \n",
" 13055 | \n",
" 646.612941 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 01:41:57 | \n",
"
\n",
" \n",
" 13056 | \n",
" 997.751876 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 04:09:27 | \n",
"
\n",
" \n",
" 13057 | \n",
" 1102.814465 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 08:28:21 | \n",
"
\n",
" \n",
" 13058 | \n",
" 858.144337 | \n",
" False | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 14:54:34 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:42.793363Z",
"iopub.status.busy": "2021-12-15T20:24:42.791765Z",
"iopub.status.idle": "2021-12-15T20:24:42.796116Z",
"shell.execute_reply": "2021-12-15T20:24:42.795742Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:42.799972Z",
"iopub.status.busy": "2021-12-15T20:24:42.799336Z",
"iopub.status.idle": "2021-12-15T20:24:42.802144Z",
"shell.execute_reply": "2021-12-15T20:24:42.801772Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:42.807664Z",
"iopub.status.busy": "2021-12-15T20:24:42.807137Z",
"iopub.status.idle": "2021-12-15T20:24:42.809592Z",
"shell.execute_reply": "2021-12-15T20:24:42.809225Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:42.813306Z",
"iopub.status.busy": "2021-12-15T20:24:42.812951Z",
"iopub.status.idle": "2021-12-15T20:24:44.238665Z",
"shell.execute_reply": "2021-12-15T20:24:44.239468Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:44.252784Z",
"iopub.status.busy": "2021-12-15T20:24:44.244955Z",
"iopub.status.idle": "2021-12-15T20:24:44.257030Z",
"shell.execute_reply": "2021-12-15T20:24:44.258040Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Carrier | \n",
" Origin | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Kibana Airlines | \n",
" Frankfurt am Main Airport | \n",
"
\n",
" \n",
" 1 | \n",
" Logstash Airways | \n",
" Cape Town International Airport | \n",
"
\n",
" \n",
" 2 | \n",
" Logstash Airways | \n",
" Venice Marco Polo Airport | \n",
"
\n",
" \n",
" 3 | \n",
" Kibana Airlines | \n",
" Naples International Airport | \n",
"
\n",
" \n",
" 4 | \n",
" Kibana Airlines | \n",
" Licenciado Benito Juarez International Airport | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 13054 | \n",
" Logstash Airways | \n",
" Pisa International Airport | \n",
"
\n",
" \n",
" 13055 | \n",
" Logstash Airways | \n",
" Winnipeg / James Armstrong Richardson Internat... | \n",
"
\n",
" \n",
" 13056 | \n",
" Logstash Airways | \n",
" Licenciado Benito Juarez International Airport | \n",
"
\n",
" \n",
" 13057 | \n",
" JetBeats | \n",
" Itami Airport | \n",
"
\n",
" \n",
" 13058 | \n",
" JetBeats | \n",
" Adelaide International Airport | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:44.263674Z",
"iopub.status.busy": "2021-12-15T20:24:44.261671Z",
"iopub.status.idle": "2021-12-15T20:24:44.266564Z",
"shell.execute_reply": "2021-12-15T20:24:44.267454Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:44.291893Z",
"iopub.status.busy": "2021-12-15T20:24:44.279615Z",
"iopub.status.idle": "2021-12-15T20:24:44.294715Z",
"shell.execute_reply": "2021-12-15T20:24:44.294192Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 8 | \n",
" 960.869736 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 12:09:35 | \n",
"
\n",
" \n",
" 26 | \n",
" 975.812632 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 15:38:32 | \n",
"
\n",
" \n",
" 311 | \n",
" 946.358410 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 11:51:12 | \n",
"
\n",
" \n",
" 651 | \n",
" 975.383864 | \n",
" True | \n",
" ... | \n",
" 2 | \n",
" 2018-01-03 21:13:17 | \n",
"
\n",
" \n",
" 950 | \n",
" 907.836523 | \n",
" True | \n",
" ... | \n",
" 2 | \n",
" 2018-01-03 05:14:51 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 12820 | \n",
" 909.973606 | \n",
" True | \n",
" ... | \n",
" 5 | \n",
" 2018-02-10 05:11:35 | \n",
"
\n",
" \n",
" 12906 | \n",
" 983.429244 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 06:19:58 | \n",
"
\n",
" \n",
" 12918 | \n",
" 1136.678150 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 16:03:10 | \n",
"
\n",
" \n",
" 12919 | \n",
" 1105.211803 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 05:36:05 | \n",
"
\n",
" \n",
" 13013 | \n",
" 1055.350213 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 13:20:16 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:44.317223Z",
"iopub.status.busy": "2021-12-15T20:24:44.316680Z",
"iopub.status.idle": "2021-12-15T20:24:46.365286Z",
"shell.execute_reply": "2021-12-15T20:24:46.366706Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 8 | \n",
" 960.869736 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 12:09:35 | \n",
"
\n",
" \n",
" 26 | \n",
" 975.812632 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 15:38:32 | \n",
"
\n",
" \n",
" 311 | \n",
" 946.358410 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 11:51:12 | \n",
"
\n",
" \n",
" 651 | \n",
" 975.383864 | \n",
" True | \n",
" ... | \n",
" 2 | \n",
" 2018-01-03 21:13:17 | \n",
"
\n",
" \n",
" 950 | \n",
" 907.836523 | \n",
" True | \n",
" ... | \n",
" 2 | \n",
" 2018-01-03 05:14:51 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 12820 | \n",
" 909.973606 | \n",
" True | \n",
" ... | \n",
" 5 | \n",
" 2018-02-10 05:11:35 | \n",
"
\n",
" \n",
" 12906 | \n",
" 983.429244 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 06:19:58 | \n",
"
\n",
" \n",
" 12918 | \n",
" 1136.678150 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 16:03:10 | \n",
"
\n",
" \n",
" 12919 | \n",
" 1105.211803 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 05:36:05 | \n",
"
\n",
" \n",
" 13013 | \n",
" 1055.350213 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 13:20:16 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:46.417274Z",
"iopub.status.busy": "2021-12-15T20:24:46.416156Z",
"iopub.status.idle": "2021-12-15T20:24:46.421120Z",
"shell.execute_reply": "2021-12-15T20:24:46.421781Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 8 | \n",
" 960.869736 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 12:09:35 | \n",
"
\n",
" \n",
" 26 | \n",
" 975.812632 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 15:38:32 | \n",
"
\n",
" \n",
" 311 | \n",
" 946.358410 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 11:51:12 | \n",
"
\n",
" \n",
" 651 | \n",
" 975.383864 | \n",
" True | \n",
" ... | \n",
" 2 | \n",
" 2018-01-03 21:13:17 | \n",
"
\n",
" \n",
" 950 | \n",
" 907.836523 | \n",
" True | \n",
" ... | \n",
" 2 | \n",
" 2018-01-03 05:14:51 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 12820 | \n",
" 909.973606 | \n",
" True | \n",
" ... | \n",
" 5 | \n",
" 2018-02-10 05:11:35 | \n",
"
\n",
" \n",
" 12906 | \n",
" 983.429244 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 06:19:58 | \n",
"
\n",
" \n",
" 12918 | \n",
" 1136.678150 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 16:03:10 | \n",
"
\n",
" \n",
" 12919 | \n",
" 1105.211803 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 05:36:05 | \n",
"
\n",
" \n",
" 13013 | \n",
" 1055.350213 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 13:20:16 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:46.431697Z",
"iopub.status.busy": "2021-12-15T20:24:46.431114Z",
"iopub.status.idle": "2021-12-15T20:24:48.414684Z",
"shell.execute_reply": "2021-12-15T20:24:48.415148Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 8 | \n",
" 960.869736 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 12:09:35 | \n",
"
\n",
" \n",
" 26 | \n",
" 975.812632 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 15:38:32 | \n",
"
\n",
" \n",
" 311 | \n",
" 946.358410 | \n",
" True | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 11:51:12 | \n",
"
\n",
" \n",
" 651 | \n",
" 975.383864 | \n",
" True | \n",
" ... | \n",
" 2 | \n",
" 2018-01-03 21:13:17 | \n",
"
\n",
" \n",
" 950 | \n",
" 907.836523 | \n",
" True | \n",
" ... | \n",
" 2 | \n",
" 2018-01-03 05:14:51 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 12820 | \n",
" 909.973606 | \n",
" True | \n",
" ... | \n",
" 5 | \n",
" 2018-02-10 05:11:35 | \n",
"
\n",
" \n",
" 12906 | \n",
" 983.429244 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 06:19:58 | \n",
"
\n",
" \n",
" 12918 | \n",
" 1136.678150 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 16:03:10 | \n",
"
\n",
" \n",
" 12919 | \n",
" 1105.211803 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 05:36:05 | \n",
"
\n",
" \n",
" 13013 | \n",
" 1055.350213 | \n",
" True | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 13:20:16 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:48.421015Z",
"iopub.status.busy": "2021-12-15T20:24:48.420431Z",
"iopub.status.idle": "2021-12-15T20:24:48.428382Z",
"shell.execute_reply": "2021-12-15T20:24:48.428690Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" DistanceKilometers | \n",
" AvgTicketPrice | \n",
"
\n",
" \n",
" \n",
" \n",
" sum | \n",
" 9.261629e+07 | \n",
" 8.204365e+06 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000e+00 | \n",
" 1.000205e+02 | \n",
"
\n",
" \n",
" std | \n",
" 4.578438e+03 | \n",
" 2.663969e+02 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:48.433082Z",
"iopub.status.busy": "2021-12-15T20:24:48.432716Z",
"iopub.status.idle": "2021-12-15T20:24:48.541272Z",
"shell.execute_reply": "2021-12-15T20:24:48.542346Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" DistanceKilometers | \n",
" AvgTicketPrice | \n",
"
\n",
" \n",
" \n",
" \n",
" sum | \n",
" 9.261629e+07 | \n",
" 8.204365e+06 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000e+00 | \n",
" 1.000205e+02 | \n",
"
\n",
" \n",
" std | \n",
" 4.578614e+03 | \n",
" 2.664071e+02 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:48.574692Z",
"iopub.status.busy": "2021-12-15T20:24:48.574008Z",
"iopub.status.idle": "2021-12-15T20:24:48.580240Z",
"shell.execute_reply": "2021-12-15T20:24:48.579845Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:48.583948Z",
"iopub.status.busy": "2021-12-15T20:24:48.583565Z",
"iopub.status.idle": "2021-12-15T20:24:50.642201Z",
"shell.execute_reply": "2021-12-15T20:24:50.643158Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:50.655939Z",
"iopub.status.busy": "2021-12-15T20:24:50.654654Z",
"iopub.status.idle": "2021-12-15T20:24:50.702251Z",
"shell.execute_reply": "2021-12-15T20:24:50.701757Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" DistanceKilometers | \n",
" ... | \n",
" FlightTimeMin | \n",
" dayOfWeek | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 13059.000000 | \n",
" 13059.000000 | \n",
" ... | \n",
" 13059.000000 | \n",
" 13059.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 628.253689 | \n",
" 7092.142455 | \n",
" ... | \n",
" 511.127842 | \n",
" 2.835975 | \n",
"
\n",
" \n",
" std | \n",
" 266.396861 | \n",
" 4578.438497 | \n",
" ... | \n",
" 334.753952 | \n",
" 1.939439 | \n",
"
\n",
" \n",
" min | \n",
" 100.020528 | \n",
" 0.000000 | \n",
" ... | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 25% | \n",
" 409.893816 | \n",
" 2459.705673 | \n",
" ... | \n",
" 252.333192 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 50% | \n",
" 640.556668 | \n",
" 7610.330866 | \n",
" ... | \n",
" 503.045170 | \n",
" 3.000000 | \n",
"
\n",
" \n",
" 75% | \n",
" 842.185470 | \n",
" 9736.637600 | \n",
" ... | \n",
" 720.416036 | \n",
" 4.000000 | \n",
"
\n",
" \n",
" max | \n",
" 1199.729053 | \n",
" 19881.482315 | \n",
" ... | \n",
" 1902.902032 | \n",
" 6.000000 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:50.710321Z",
"iopub.status.busy": "2021-12-15T20:24:50.709905Z",
"iopub.status.idle": "2021-12-15T20:24:50.912876Z",
"shell.execute_reply": "2021-12-15T20:24:50.913469Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" AvgTicketPrice | \n",
" Cancelled | \n",
" ... | \n",
" FlightTimeMin | \n",
" dayOfWeek | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 13059.000000 | \n",
" 13059.000000 | \n",
" ... | \n",
" 13059.000000 | \n",
" 13059.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 628.253689 | \n",
" 0.128494 | \n",
" ... | \n",
" 511.127842 | \n",
" 2.835975 | \n",
"
\n",
" \n",
" std | \n",
" 266.407061 | \n",
" 0.334664 | \n",
" ... | \n",
" 334.766770 | \n",
" 1.939513 | \n",
"
\n",
" \n",
" min | \n",
" 100.020531 | \n",
" 0.000000 | \n",
" ... | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 25% | \n",
" 410.008918 | \n",
" 0.000000 | \n",
" ... | \n",
" 251.938710 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 50% | \n",
" 640.387285 | \n",
" 0.000000 | \n",
" ... | \n",
" 503.148975 | \n",
" 3.000000 | \n",
"
\n",
" \n",
" 75% | \n",
" 842.213490 | \n",
" 0.000000 | \n",
" ... | \n",
" 720.505705 | \n",
" 4.000000 | \n",
"
\n",
" \n",
" max | \n",
" 1199.729004 | \n",
" 1.000000 | \n",
" ... | \n",
" 1902.901978 | \n",
" 6.000000 | \n",
"
\n",
" \n",
"
\n",
"
8 rows × 9 columns
\n",
"
"
],
"text/plain": [
" AvgTicketPrice Cancelled ... FlightTimeMin dayOfWeek\n",
"count 13059.000000 13059.000000 ... 13059.000000 13059.000000\n",
"mean 628.253689 0.128494 ... 511.127842 2.835975\n",
"std 266.407061 0.334664 ... 334.766770 1.939513\n",
"min 100.020531 0.000000 ... 0.000000 0.000000\n",
"25% 410.008918 0.000000 ... 251.938710 1.000000\n",
"50% 640.387285 0.000000 ... 503.148975 3.000000\n",
"75% 842.213490 0.000000 ... 720.505705 4.000000\n",
"max 1199.729004 1.000000 ... 1902.901978 6.000000\n",
"\n",
"[8 rows x 9 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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:50.944997Z",
"iopub.status.busy": "2021-12-15T20:24:50.918277Z",
"iopub.status.idle": "2021-12-15T20:24:50.958394Z",
"shell.execute_reply": "2021-12-15T20:24:50.958030Z"
},
"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.1+ MB\n"
]
}
],
"source": [
"pd_flights.info()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:50.961762Z",
"iopub.status.busy": "2021-12-15T20:24:50.961398Z",
"iopub.status.idle": "2021-12-15T20:24:55.507758Z",
"shell.execute_reply": "2021-12-15T20:24:55.507382Z"
},
"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: 64.000 bytes\n",
"Elasticsearch storage usage: 5.786 MB\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:55.511067Z",
"iopub.status.busy": "2021-12-15T20:24:55.510706Z",
"iopub.status.idle": "2021-12-15T20:24:55.515166Z",
"shell.execute_reply": "2021-12-15T20:24:55.514795Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"AvgTicketPrice 1199.729053\n",
"Cancelled True\n",
"DistanceKilometers 19881.482315\n",
"DistanceMiles 12353.780369\n",
"FlightDelay True\n",
"FlightDelayMin 360\n",
"FlightTimeHour 31.715034\n",
"FlightTimeMin 1902.902032\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:55.521502Z",
"iopub.status.busy": "2021-12-15T20:24:55.521124Z",
"iopub.status.idle": "2021-12-15T20:24:55.615898Z",
"shell.execute_reply": "2021-12-15T20:24:55.614418Z"
},
"pycharm": {
"is_executing": false
}
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:55.629444Z",
"iopub.status.busy": "2021-12-15T20:24:55.627340Z",
"iopub.status.idle": "2021-12-15T20:24:55.638818Z",
"shell.execute_reply": "2021-12-15T20:24:55.637856Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"AvgTicketPrice 100.020528\n",
"Cancelled False\n",
"DistanceKilometers 0.0\n",
"DistanceMiles 0.0\n",
"FlightDelay False\n",
"FlightDelayMin 0\n",
"FlightTimeHour 0.0\n",
"FlightTimeMin 0.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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:55.649953Z",
"iopub.status.busy": "2021-12-15T20:24:55.644304Z",
"iopub.status.idle": "2021-12-15T20:24:55.731911Z",
"shell.execute_reply": "2021-12-15T20:24:55.731393Z"
},
"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": 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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:55.735976Z",
"iopub.status.busy": "2021-12-15T20:24:55.735398Z",
"iopub.status.idle": "2021-12-15T20:24:55.740446Z",
"shell.execute_reply": "2021-12-15T20:24:55.740037Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:55.746976Z",
"iopub.status.busy": "2021-12-15T20:24:55.746605Z",
"iopub.status.idle": "2021-12-15T20:24:55.852359Z",
"shell.execute_reply": "2021-12-15T20:24:55.850558Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:55.867747Z",
"iopub.status.busy": "2021-12-15T20:24:55.865996Z",
"iopub.status.idle": "2021-12-15T20:24:55.882127Z",
"shell.execute_reply": "2021-12-15T20:24:55.883534Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:55.906057Z",
"iopub.status.busy": "2021-12-15T20:24:55.904964Z",
"iopub.status.idle": "2021-12-15T20:24:55.997011Z",
"shell.execute_reply": "2021-12-15T20:24:55.997419Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:56.003863Z",
"iopub.status.busy": "2021-12-15T20:24:56.003311Z",
"iopub.status.idle": "2021-12-15T20:24:56.012352Z",
"shell.execute_reply": "2021-12-15T20:24:56.012798Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:56.018633Z",
"iopub.status.busy": "2021-12-15T20:24:56.018038Z",
"iopub.status.idle": "2021-12-15T20:24:56.109194Z",
"shell.execute_reply": "2021-12-15T20:24:56.108015Z"
},
"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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:56.124377Z",
"iopub.status.busy": "2021-12-15T20:24:56.123206Z",
"iopub.status.idle": "2021-12-15T20:24:56.145226Z",
"shell.execute_reply": "2021-12-15T20:24:56.145628Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Carrier | \n",
" DestRegion | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Kibana Airlines | \n",
" SE-BD | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 00:00:00 | \n",
"
\n",
" \n",
" 1 | \n",
" Logstash Airways | \n",
" IT-34 | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 18:27:00 | \n",
"
\n",
" \n",
" 2 | \n",
" Logstash Airways | \n",
" IT-34 | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 17:11:14 | \n",
"
\n",
" \n",
" 3 | \n",
" Kibana Airlines | \n",
" IT-34 | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 10:33:28 | \n",
"
\n",
" \n",
" 4 | \n",
" Kibana Airlines | \n",
" SE-BD | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 05:13:00 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 13054 | \n",
" Logstash Airways | \n",
" SE-BD | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 20:42:25 | \n",
"
\n",
" \n",
" 13055 | \n",
" Logstash Airways | \n",
" CH-ZH | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 01:41:57 | \n",
"
\n",
" \n",
" 13056 | \n",
" Logstash Airways | \n",
" RU-AMU | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 04:09:27 | \n",
"
\n",
" \n",
" 13057 | \n",
" JetBeats | \n",
" SE-BD | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 08:28:21 | \n",
"
\n",
" \n",
" 13058 | \n",
" JetBeats | \n",
" US-DC | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 14:54:34 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:24:56.151182Z",
"iopub.status.busy": "2021-12-15T20:24:56.150754Z",
"iopub.status.idle": "2021-12-15T20:25:00.584497Z",
"shell.execute_reply": "2021-12-15T20:25:00.583176Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Carrier | \n",
" DestRegion | \n",
" ... | \n",
" dayOfWeek | \n",
" timestamp | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Kibana Airlines | \n",
" SE-BD | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 00:00:00 | \n",
"
\n",
" \n",
" 1 | \n",
" Logstash Airways | \n",
" IT-34 | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 18:27:00 | \n",
"
\n",
" \n",
" 2 | \n",
" Logstash Airways | \n",
" IT-34 | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 17:11:14 | \n",
"
\n",
" \n",
" 3 | \n",
" Kibana Airlines | \n",
" IT-34 | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 10:33:28 | \n",
"
\n",
" \n",
" 4 | \n",
" Kibana Airlines | \n",
" SE-BD | \n",
" ... | \n",
" 0 | \n",
" 2018-01-01 05:13:00 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 13054 | \n",
" Logstash Airways | \n",
" SE-BD | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 20:42:25 | \n",
"
\n",
" \n",
" 13055 | \n",
" Logstash Airways | \n",
" CH-ZH | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 01:41:57 | \n",
"
\n",
" \n",
" 13056 | \n",
" Logstash Airways | \n",
" RU-AMU | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 04:09:27 | \n",
"
\n",
" \n",
" 13057 | \n",
" JetBeats | \n",
" SE-BD | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 08:28:21 | \n",
"
\n",
" \n",
" 13058 | \n",
" JetBeats | \n",
" US-DC | \n",
" ... | \n",
" 6 | \n",
" 2018-02-11 14:54:34 | \n",
"
\n",
" \n",
"
\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": {
"execution": {
"iopub.execute_input": "2021-12-15T20:25:00.608502Z",
"iopub.status.busy": "2021-12-15T20:25:00.607311Z",
"iopub.status.idle": "2021-12-15T20:25:01.255494Z",
"shell.execute_reply": "2021-12-15T20:25:01.255790Z"
},
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"