From 133b227b93528a9c1027574611866c999e591069 Mon Sep 17 00:00:00 2001 From: stevedodson Date: Tue, 10 Dec 2019 15:27:13 +0100 Subject: [PATCH] Added example notebooks + pytest for notebooks (#87) * Added example notebooks + pytest for these notebooks1 * Fixed paths * Fixing link in docs * Adding cleaner demo_notebook --- CONTRIBUTING.md | 4 +- docs/requirements-docs.txt | 1 + docs/source/conf.py | 3 +- .../source/examples/data/online-retail.csv.gz | Bin 0 -> 256738 bytes docs/source/examples/demo_notebook.ipynb | 3583 ++++++ docs/source/examples/index.rst | 11 + .../examples/online_retail_analysis.ipynb | 1462 +++ docs/source/index.rst | 5 + eland/dataframe.py | 46 +- eland/mappings.py | 3 +- eland/query_compiler.py | 3 +- eland/tests/Eland Demo Notebook.ipynb | 10637 ---------------- .../plotting/test_dataframe_hist_pytest.ipynb | 235 - eland/utils.py | 1 + example/Online Retail Analysis.ipynb | 1237 -- example/README.md | 17 - example/load_data.py | 149 - example/requirements-example.txt | 80 - make_docs.sh | 3 + requirements-dev.txt | 1 + 20 files changed, 5105 insertions(+), 12376 deletions(-) create mode 100644 docs/source/examples/data/online-retail.csv.gz create mode 100644 docs/source/examples/demo_notebook.ipynb create mode 100644 docs/source/examples/index.rst create mode 100644 docs/source/examples/online_retail_analysis.ipynb delete mode 100644 eland/tests/Eland Demo Notebook.ipynb delete mode 100644 eland/tests/plotting/test_dataframe_hist_pytest.ipynb delete mode 100644 example/Online Retail Analysis.ipynb delete mode 100644 example/README.md delete mode 100644 example/load_data.py delete mode 100644 example/requirements-example.txt diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index da431a6..c59a71e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -154,9 +154,9 @@ currently using a minimum version of PyCharm 2019.2.4. - Setup Elasticsearch instance (assumes `localhost:9200`), and run `python -m eland.tests.setup_tests` to setup test environment -*note this modifies Elasticsearch indices* -- Run `pytest --doctest-modules` to validate install +- Run `pytest --nbval --doctest-modules` to validate install ### Documentation - Install documentation requirements. Open terminal in virtual - environment and run `pip install -r requirements-dev.txt` + environment and run `pip install -r docs/requirements-docs.txt` diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt index 73b6b25..61f1395 100644 --- a/docs/requirements-docs.txt +++ b/docs/requirements-docs.txt @@ -4,3 +4,4 @@ matplotlib pytest>=5.2.1 git+https://github.com/pandas-dev/pandas-sphinx-theme.git@master numpydoc==0.8 +nbsphinx diff --git a/docs/source/conf.py b/docs/source/conf.py index 05dfbc7..5897d58 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -55,6 +55,7 @@ extensions = [ 'numpydoc', "matplotlib.sphinxext.plot_directive", "sphinx.ext.todo", + "nbsphinx", ] doctest_global_setup = ''' @@ -91,7 +92,7 @@ templates_path = ['_templates'] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [] +exclude_patterns = ['**.ipynb_checkpoints'] # -- Options for HTML output ------------------------------------------------- diff --git a/docs/source/examples/data/online-retail.csv.gz b/docs/source/examples/data/online-retail.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..369660e2c1d76876096971a0f77ec3d4923b3a05 GIT binary patch literal 256738 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 z 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≀(1VAWjITB2FEEj)-;7v;oAA>WSABd8)t_ov4C6q zq?D8|cWI>(mx9a=c#--!^48o{A>O+prlRi!TWF&IasXp-o0nFXG_fyMq)rR_fSZw^ z5-&)SSxSYM6>K=u)5nx`OI^@)2rl@#cEX4cMWRVo5 zb$SmzQ^bqlM}WGLKoII-G2~KTbe88;+feYADKqYhhJo%|EU7>OB(q1&Fo1blJnlDRACP#Q^^kt*>2PA56FSql!=SX+8+E$*JLig+?t*) zvmB&gx8}}lhhUL=c9yBn5rz>8n_$LJ##Xs1!EAeepvpQ3X5$&0sFBc2$CJ^Gru&7q zwZKpcD@D!HDBN_4KgkCqm4*$vDx6BO<$~qL9M>+%GlWYne7GcklI%^dQt?$3QxN=cxGR_Y>D*ku`CwFgSU*h7 zVS;V>9uIG38DaU_u4%qEBo(UIfC_YYYj%Az%dl1`%Kq}A29WlTzyA6C-#qE_s@mzpXVGxH|lsULctMo{k-nE z5G98wC>44xK*a&d&H2`!!FCnKlOSpffzQAwWIlHhTegV#rjj9_>JTou@L)&GWrE9; z3l8;pTqsv?xuN!#3*~Z~o#{QgP%<-Bd{lo#A4W~p^jQ=WXMAe$IHGaJ`<4as?Nzb*ImgJW%Y|DeGe`lEOFh(3*@5lJ zpb4j5*>0~}4we{AX?1^ZUpOka3?Ocjfg8Z9DRKl5Gy7o~K$VUFVun~O1Q-R>Vskhh zdesKw*!Gue(zGvBxL@i6tBlL72U;KsyD*BZ*3gA{MwMGj%JPgD*I#lXZ{5zs?7lW? z+T+zl&E%PwL%5BjfzqJ+GnYP@%rucu(^HQrGqfBlneUVpIcLJm*-=$lB`M2ogIpSX ztaxtsSG=0S#~Sp~p+T25AwL+O<@x6}T&CE!M)@o{3EqxJ^aL;9vfd9~>o0u&ddmf8 zyaSg@y6<~KJah@yhFQnGY@U9TtyOMpmg~&b4HK)5?AlsP+&OD$?ne<8C9VbSN}O!K z5!hTxg*v<;N^l46d-XyX!Ob1gV>=o9-HISmZjrEXioQYUhBZ3E(%4i*{qpXPx{CCp z6cz>Nz~C7tE7QLfIr5&Inx5$S^+av8^g1ZL94Xj-(|0E%5AG?I88pk~H=|Um8i{|| z?0WJK7{ER+ydDXEWrtXFbDx#Iwcou2t3Wr5X3(_|v0hv3dqmf#daR#MhbV{ggGdfi zv$=uKLfA6nj+x^nCk{$~th5TDXyc}7Vc^Q_3%JT$5*gz5Sbq66wUctHOgf)^N<+$0 zLpj%Uhcr04JERvVAAkhDhZ;Yvkzaga#Dm5{xKm4DOeCrUC<=z> z|0@cNAEC4hz+Skzs6QPplRL$iGylJ`+g!joeS8B9@flPW+3&@Z+q>{h6J24!nkl1T{~^_u)R-02iRlmb=V`6;<{H;fP~*CH*-T;qNZLf9}2 zTWdS>h<=@LYt#bo&8>UAerqoP!(V;)3~mO(8a5pD$_==pKLUOsiVC5~-S2j2ftU-C)rEc z{AQI!iM<7|22lhTppBd6%)!}ee>\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AvgTicketPriceDistanceKilometers...FlightTimeMindayOfWeek
0841.26564216492.326654...1030.7704160
1882.9826628823.400140...464.3894810
2190.6369040.000000...0.0000000
3181.694216555.737767...222.7490590
4730.04177813358.244200...785.7790710
..................
130541080.4462798058.581753...402.9290886
13055646.6129417088.598322...644.4180296
13056997.75187610920.652972...937.5408116
130571102.81446518748.859647...1697.4049716
13058858.14433716809.141923...1610.7618276
\n", + "

13059 rows × 7 columns

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

13059 rows × 7 columns

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

5 rows × 27 columns

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

5 rows × 27 columns

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

5 rows × 27 columns

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

5 rows × 27 columns

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

13059 rows × 2 columns

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

68 rows × 27 columns

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

68 rows × 27 columns

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

68 rows × 27 columns

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

68 rows × 27 columns

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

8 rows × 7 columns

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

8 rows × 7 columns

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

13059 rows × 21 columns

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

13059 rows × 21 columns

" + ], + "text/plain": [ + " Carrier DestLocation ... dayOfWeek \\\n", + "0 Kibana Airlines {'lon': '151.177002', 'lat': '-33.94609833'} ... 0 \n", + "1 Logstash Airways {'lon': '12.3519', 'lat': '45.505299'} ... 0 \n", + "2 Logstash Airways {'lon': '12.3519', 'lat': '45.505299'} ... 0 \n", + "3 Kibana Airlines {'lon': '12.1944', 'lat': '45.648399'} ... 0 \n", + "4 Kibana Airlines {'lon': '108.751999', 'lat': '34.447102'} ... 0 \n", + "... ... ... ... ... \n", + "13054 Logstash Airways {'lon': '108.751999', 'lat': '34.447102'} ... 6 \n", + "13055 Logstash Airways {'lon': '8.54917', 'lat': '47.464699'} ... 6 \n", + "13056 Logstash Airways {'lon': '128.445007', 'lat': '51.169997'} ... 6 \n", + "13057 JetBeats {'lon': '-58.5358', 'lat': '-34.8222'} ... 6 \n", + "13058 JetBeats {'lon': '-77.45580292', 'lat': '38.94449997'} ... 6 \n", + "\n", + " timestamp \n", + "0 2018-01-01 00:00:00 \n", + "1 2018-01-01 18:27:00 \n", + "2 2018-01-01 17:11:14 \n", + "3 2018-01-01 10:33:28 \n", + "4 2018-01-01 05:13:00 \n", + "... ... \n", + "13054 2018-02-11 20:42:25 \n", + "13055 2018-02-11 01:41:57 \n", + "13056 2018-02-11 04:09:27 \n", + "13057 2018-02-11 08:28:21 \n", + "13058 2018-02-11 14:54:34 \n", + "\n", + "[13059 rows x 21 columns]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed_flights.drop(columns=['AvgTicketPrice', \n", + " 'Cancelled', \n", + " 'Dest', \n", + " 'DestAirportID', \n", + " 'DestCityName', \n", + " 'DestCountry'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pd_flights.select_dtypes(include=np.number).hist(figsize=[10,10])\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ed_flights.select_dtypes(include=np.number).hist(figsize=[10,10])\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Elasticsearch utilities" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "ed_flights2 = ed_flights[(ed_flights.OriginAirportID == 'AMS') & (ed_flights.FlightDelayMin > 60)]\n", + "ed_flights2 = ed_flights2[['timestamp', 'OriginAirportID', 'DestAirportID', 'FlightDelayMin']]\n", + "ed_flights2 = ed_flights2.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index_pattern: flights\n", + "Index:\n", + " index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities: _source es_dtype pd_dtype searchable aggregatable\n", + "AvgTicketPrice True float float64 True True\n", + "Cancelled True boolean bool True True\n", + "Carrier True keyword object True True\n", + "Dest True keyword object True True\n", + "DestAirportID True keyword object True True\n", + "DestCityName True keyword object True True\n", + "DestCountry True keyword object True True\n", + "DestLocation True geo_point object True True\n", + "DestRegion True keyword object True True\n", + "DestWeather True keyword object True True\n", + "DistanceKilometers True float float64 True True\n", + "DistanceMiles True float float64 True True\n", + "FlightDelay True boolean bool True True\n", + "FlightDelayMin True integer int64 True True\n", + "FlightDelayType True keyword object True True\n", + "FlightNum True keyword object True True\n", + "FlightTimeHour True float float64 True True\n", + "FlightTimeMin True float float64 True True\n", + "Origin True keyword object True True\n", + "OriginAirportID True keyword object True True\n", + "OriginCityName True keyword object True True\n", + "OriginCountry True keyword object True True\n", + "OriginLocation True geo_point object True True\n", + "OriginRegion True keyword object True True\n", + "OriginWeather True keyword object True True\n", + "dayOfWeek True integer int64 True True\n", + "timestamp True date datetime64[ns] True True\n", + " date_fields_format: {}\n", + "Operations:\n", + " tasks: [('boolean_filter': ('boolean_filter': {'bool': {'must': [{'term': {'OriginAirportID': 'AMS'}}, {'range': {'FlightDelayMin': {'gt': 60}}}]}})), ('tail': ('sort_field': '_doc', 'count': 5))]\n", + " size: 5\n", + " sort_params: _doc:desc\n", + " _source: ['timestamp', 'OriginAirportID', 'DestAirportID', 'FlightDelayMin']\n", + " body: {'query': {'bool': {'must': [{'term': {'OriginAirportID': 'AMS'}}, {'range': {'FlightDelayMin': {'gt': 60}}}]}}, 'aggs': {}}\n", + " post_processing: [('sort_index')]\n", + "'field_to_display_names': {}\n", + "'display_to_field_names': {}\n", + "\n" + ] + } + ], + "source": [ + "print(ed_flights2.info_es())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.5" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [] + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/source/examples/index.rst b/docs/source/examples/index.rst new file mode 100644 index 0000000..603743c --- /dev/null +++ b/docs/source/examples/index.rst @@ -0,0 +1,11 @@ +.. _examples: + +======== +Examples +======== + +.. toctree:: + :maxdepth: 2 + + demo_notebook + online_retail_analysis diff --git a/docs/source/examples/online_retail_analysis.ipynb b/docs/source/examples/online_retail_analysis.ipynb new file mode 100644 index 0000000..568bc27 --- /dev/null +++ b/docs/source/examples/online_retail_analysis.ipynb @@ -0,0 +1,1462 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import eland as ed\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Fix console size for consistent test results\n", + "from eland.conftest import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Online Retail Analysis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting Started\n", + "\n", + "To get started, let's create an `eland.DataFrame` by reading a csv file. This creates and populates the \n", + "`online-retail` index in the local Elasticsearch cluster." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "df = ed.read_csv(\"data/online-retail.csv.gz\",\n", + " es_client='localhost', \n", + " es_dest_index='online-retail', \n", + " es_if_exists='replace', \n", + " es_dropna=True,\n", + " es_refresh=True,\n", + " compression='gzip')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we see that the `\"_id\"` field was used to index our data frame. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'_id'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index.index_field" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we can check which field from elasticsearch are available to our eland data frame. `columns` is available as a parameter when instantiating the data frame which allows one to choose only a subset of fields from your index to be included in the data frame. Since we didn't set this parameter, we have access to all fields." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Country', 'CustomerID', 'Description', 'InvoiceDate', 'InvoiceNo', 'Quantity', 'StockCode',\n", + " 'UnitPrice', 'Unnamed: 0'],\n", + " dtype='object')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, let's see the data types of our fields. Running `df.dtypes`, we can see that elasticsearch field types are mapped to pandas field types." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Country object\n", + "CustomerID float64\n", + "Description object\n", + "InvoiceDate object\n", + "InvoiceNo object\n", + "Quantity int64\n", + "StockCode object\n", + "UnitPrice float64\n", + "Unnamed: 0 int64\n", + "dtype: object" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dtypes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also offer a `.info_es()` data frame method that shows all info about the underlying index. It also contains information about operations being passed from data frame methods to elasticsearch. More on this later." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index_pattern: online-retail\n", + "Index:\n", + " index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities: _source es_dtype pd_dtype searchable aggregatable\n", + "Country True keyword object True True\n", + "CustomerID True double float64 True True\n", + "Description True keyword object True True\n", + "InvoiceDate True keyword object True True\n", + "InvoiceNo True keyword object True True\n", + "Quantity True long int64 True True\n", + "StockCode True keyword object True True\n", + "UnitPrice True double float64 True True\n", + "Unnamed: 0 True long int64 True True\n", + " date_fields_format: {}\n", + "Operations:\n", + " tasks: []\n", + " size: None\n", + " sort_params: None\n", + " _source: None\n", + " body: {'aggs': {}}\n", + " post_processing: []\n", + "'field_to_display_names': {}\n", + "'display_to_field_names': {}\n", + "\n" + ] + } + ], + "source": [ + "print(df.info_es())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting and Indexing Data\n", + "\n", + "Now that we understand how to create a data frame and get access to it's underlying attributes, let's see how we can select subsets of our data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### head and tail\n", + "\n", + "much like pandas, eland data frames offer `.head(n)` and `.tail(n)` methods that return the first and last n rows, respectively." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...UnitPriceUnnamed: 0
1000United Kingdom14729.0...1.251000
1001United Kingdom14729.0...1.251001
\n", + "
\n", + "

2 rows × 9 columns

" + ], + "text/plain": [ + " Country CustomerID ... UnitPrice Unnamed: 0\n", + "1000 United Kingdom 14729.0 ... 1.25 1000\n", + "1001 United Kingdom 14729.0 ... 1.25 1001\n", + "\n", + "[2 rows x 9 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index_pattern: online-retail\n", + "Index:\n", + " index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities: _source es_dtype pd_dtype searchable aggregatable\n", + "Country True keyword object True True\n", + "CustomerID True double float64 True True\n", + "Description True keyword object True True\n", + "InvoiceDate True keyword object True True\n", + "InvoiceNo True keyword object True True\n", + "Quantity True long int64 True True\n", + "StockCode True keyword object True True\n", + "UnitPrice True double float64 True True\n", + "Unnamed: 0 True long int64 True True\n", + " date_fields_format: {}\n", + "Operations:\n", + " tasks: [('tail': ('sort_field': '_doc', 'count': 2)), ('head': ('sort_field': '_doc', 'count': 2)), ('tail': ('sort_field': '_doc', 'count': 2))]\n", + " size: 2\n", + " sort_params: _doc:desc\n", + " _source: None\n", + " body: {'aggs': {}}\n", + " post_processing: [('sort_index'), ('head': ('count': 2)), ('tail': ('count': 2))]\n", + "'field_to_display_names': {}\n", + "'display_to_field_names': {}\n", + "\n" + ] + } + ], + "source": [ + "print(df.tail(2).head(2).tail(2).info_es())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...UnitPriceUnnamed: 0
14998United Kingdom17419.0...1.2514998
14999United Kingdom17419.0...2.1014999
\n", + "
\n", + "

2 rows × 9 columns

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

5 rows × 2 columns

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

5 rows × 9 columns

" + ], + "text/plain": [ + " Country CustomerID ... UnitPrice Unnamed: 0\n", + "1109 Germany 12662.0 ... 2.95 1109\n", + "1110 Germany 12662.0 ... 2.55 1110\n", + "1111 Germany 12662.0 ... 0.85 1111\n", + "1112 Germany 12662.0 ... 1.65 1112\n", + "1113 Germany 12662.0 ... 1.95 1113\n", + "\n", + "[5 rows x 9 columns]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# the construction of a boolean vector maps directly to an elasticsearch query\n", + "print(df['Country']=='Germany')\n", + "df[(df['Country']=='Germany')].head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we can also filter the data frame using a list of values." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'terms': {'Country': ['Germany', 'United States']}}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...UnitPriceUnnamed: 0
1000United Kingdom14729.0...1.251000
1001United Kingdom14729.0...1.251001
1002United Kingdom14729.0...1.251002
1003United Kingdom14729.0...1.251003
1004United Kingdom14729.0...0.291004
\n", + "
\n", + "

5 rows × 9 columns

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

0 rows × 9 columns

" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [Country, CustomerID, Description, InvoiceDate, InvoiceNo, Quantity, StockCode, UnitPrice, Unnamed: 0]\n", + "Index: []\n", + "\n", + "[0 rows x 9 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[(df['Country']=='Germany') & (df['Quantity']>90)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using this example, let see how eland translates this boolean filter to an elasticsearch `bool` query." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index_pattern: online-retail\n", + "Index:\n", + " index_field: _id\n", + " is_source_field: False\n", + "Mappings:\n", + " capabilities: _source es_dtype pd_dtype searchable aggregatable\n", + "Country True keyword object True True\n", + "CustomerID True double float64 True True\n", + "Description True keyword object True True\n", + "InvoiceDate True keyword object True True\n", + "InvoiceNo True keyword object True True\n", + "Quantity True long int64 True True\n", + "StockCode True keyword object True True\n", + "UnitPrice True double float64 True True\n", + "Unnamed: 0 True long int64 True True\n", + " date_fields_format: {}\n", + "Operations:\n", + " tasks: [('boolean_filter': ('boolean_filter': {'bool': {'must': [{'term': {'Country': 'Germany'}}, {'range': {'Quantity': {'gt': 90}}}]}}))]\n", + " size: None\n", + " sort_params: None\n", + " _source: None\n", + " body: {'query': {'bool': {'must': [{'term': {'Country': 'Germany'}}, {'range': {'Quantity': {'gt': 90}}}]}}, 'aggs': {}}\n", + " post_processing: []\n", + "'field_to_display_names': {}\n", + "'display_to_field_names': {}\n", + "\n" + ] + } + ], + "source": [ + "print(df[(df['Country']=='Germany') & (df['Quantity']>90)].info_es())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aggregation and Descriptive Statistics\n", + "\n", + "Let's begin to ask some questions of our data and use eland to get the answers." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**How many different countries are there?**" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "16" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Country'].nunique()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**What is the total sum of products ordered?**" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "111960.0" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Quantity'].sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Show me the sum, mean, min, and max of the qunatity and unit_price fields**" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
QuantityUnitPrice
sum111960.00061548.490000
mean7.4644.103233
max2880.000950.990000
min-9360.0000.000000
\n", + "
" + ], + "text/plain": [ + " Quantity UnitPrice\n", + "sum 111960.000 61548.490000\n", + "mean 7.464 4.103233\n", + "max 2880.000 950.990000\n", + "min -9360.000 0.000000" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['Quantity','UnitPrice']].agg(['sum', 'mean', 'max', 'min'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Give me descriptive statistics for the entire data frame**" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CustomerIDQuantityUnitPriceUnnamed: 0
count10729.00000015000.00000015000.00000015000.000000
mean15590.7766807.4640004.1032337499.500000
std1764.02516085.92438720.1048734330.127009
min12347.000000-9360.0000000.0000000.000000
25%14220.5816701.0000001.2500003756.500000
50%15666.5459352.0000002.5100007498.861278
75%17213.9783766.6140544.21551611249.500000
max18239.0000002880.000000950.99000014999.000000
\n", + "
" + ], + "text/plain": [ + " CustomerID Quantity UnitPrice Unnamed: 0\n", + "count 10729.000000 15000.000000 15000.000000 15000.000000\n", + "mean 15590.776680 7.464000 4.103233 7499.500000\n", + "std 1764.025160 85.924387 20.104873 4330.127009\n", + "min 12347.000000 -9360.000000 0.000000 0.000000\n", + "25% 14220.581670 1.000000 1.250000 3756.500000\n", + "50% 15666.545935 2.000000 2.510000 7498.861278\n", + "75% 17213.978376 6.614054 4.215516 11249.500000\n", + "max 18239.000000 2880.000000 950.990000 14999.000000" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# NBVAL_IGNORE_OUTPUT\n", + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Show me a histogram of numeric columns**" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df[(df['Quantity']>-50) & \n", + " (df['Quantity']<50) & \n", + " (df['UnitPrice']>0) & \n", + " (df['UnitPrice']<100)][['Quantity', 'UnitPrice']].hist(figsize=[12,4], bins=30)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df[(df['Quantity']>-50) & \n", + " (df['Quantity']<50) & \n", + " (df['UnitPrice']>0) & \n", + " (df['UnitPrice']<100)][['Quantity', 'UnitPrice']].hist(figsize=[12,4], bins=30, log=True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryCustomerID...UnitPriceUnnamed: 0
1228United Kingdom15485.0...2.551228
1237Norway12433.0...1.061237
1286Norway12433.0...1.251286
1293Norway12433.0...0.851293
1333United Kingdom18144.0...1.691333
..................
14784United Kingdom15061.0...10.9514784
14785United Kingdom15061.0...1.4514785
14788United Kingdom15061.0...0.0714788
14974United Kingdom14739.0...0.7214974
14980United Kingdom14739.0...1.0614980
\n", + "
\n", + "

258 rows × 9 columns

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

5 rows x 27 columns

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

5 rows × 27 columns

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

5 rows x 45 columns

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

13059 rows x 27 columns

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

13059 rows × 27 columns

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

5 rows x 3 columns

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

3234 rows × 27 columns

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

13059 rows × 25 columns

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

13059 rows x 25 columns

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

13057 rows × 27 columns

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

13057 rows x 27 columns

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

10 rows x 7 columns

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

2 rows x 8 columns

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

2 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id \\\n", - "vXgVa24BUkfJ5hz0txvj United Kingdom \n", - "vngVa24BUkfJ5hz0txvj United Kingdom \n", - "\n", - " description invoice_date \\\n", - "vXgVa24BUkfJ5hz0txvj MULTICOLOUR HONEYCOMB FAN 2011-01-20 18:08:00 \n", - "vngVa24BUkfJ5hz0txvj PACK OF 72 RETROSPOT CAKE CASES 2011-01-20 18:08:00 \n", - "\n", - " invoice_no quantity stock_code unit_price \n", - "vXgVa24BUkfJ5hz0txvj 541696 1 21209 1.63 \n", - "vngVa24BUkfJ5hz0txvj 541696 1 21212 1.25 \n", - "\n", - "[2 rows x 8 columns]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.tail(2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### selecting columns\n", - "\n", - "you can also pass a list of columns to select columns from the data frame in a specified order." - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
countryinvoice_date
wXcVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
wncVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
w3cVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
xHcVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
xXcVa24BUkfJ5hz0pRsLUnited Kingdom2010-12-01 08:26:00
\n", - "
\n", - "

5 rows x 2 columns

" - ], - "text/plain": [ - " country invoice_date\n", - "wXcVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "wncVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "w3cVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "xHcVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "xXcVa24BUkfJ5hz0pRsL United Kingdom 2010-12-01 08:26:00\n", - "\n", - "[5 rows x 2 columns]" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['country', 'invoice_date']].head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Boolean Indexing\n", - "\n", - "we also allow you to filter the data frame using boolean indexing. Under the hood, a boolean index maps to a `terms` query that is then passed to elasticsearch to filter the index." - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'term': {'country': 'Germany'}}\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
countrycustomer_iddescriptioninvoice_dateinvoice_noquantitystock_codeunit_price
FncVa24BUkfJ5hz0pSBJGermany12662SET OF 6 T-LIGHTS SANTA2010-12-01 13:04:005365276228092.95
F3cVa24BUkfJ5hz0pSBJGermany12662ROTATING SILVER ANGELS T-LIGHT HLDR2010-12-01 13:04:005365276843472.55
GHcVa24BUkfJ5hz0pSBJGermany12662MULTI COLOUR SILVER T-LIGHT HOLDER2010-12-01 13:04:0053652712849450.85
GXcVa24BUkfJ5hz0pSBJGermany126625 HOOK HANGER MAGIC TOADSTOOL2010-12-01 13:04:0053652712222421.65
GncVa24BUkfJ5hz0pSBJGermany126623 HOOK HANGER MAGIC GARDEN2010-12-01 13:04:0053652712222441.95
\n", - "
\n", - "

5 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id \\\n", - "FncVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "F3cVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "GHcVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "GXcVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "GncVa24BUkfJ5hz0pSBJ Germany 12662 \n", - "\n", - " description invoice_date \\\n", - "FncVa24BUkfJ5hz0pSBJ SET OF 6 T-LIGHTS SANTA 2010-12-01 13:04:00 \n", - "F3cVa24BUkfJ5hz0pSBJ ROTATING SILVER ANGELS T-LIGHT HLDR 2010-12-01 13:04:00 \n", - "GHcVa24BUkfJ5hz0pSBJ MULTI COLOUR SILVER T-LIGHT HOLDER 2010-12-01 13:04:00 \n", - "GXcVa24BUkfJ5hz0pSBJ 5 HOOK HANGER MAGIC TOADSTOOL 2010-12-01 13:04:00 \n", - "GncVa24BUkfJ5hz0pSBJ 3 HOOK HANGER MAGIC GARDEN 2010-12-01 13:04:00 \n", - "\n", - " invoice_no quantity stock_code unit_price \n", - "FncVa24BUkfJ5hz0pSBJ 536527 6 22809 2.95 \n", - "F3cVa24BUkfJ5hz0pSBJ 536527 6 84347 2.55 \n", - "GHcVa24BUkfJ5hz0pSBJ 536527 12 84945 0.85 \n", - "GXcVa24BUkfJ5hz0pSBJ 536527 12 22242 1.65 \n", - "GncVa24BUkfJ5hz0pSBJ 536527 12 22244 1.95 \n", - "\n", - "[5 rows x 8 columns]" - ] - }, - "execution_count": 111, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# the construction of a boolean vector maps directly to an elasticsearch query\n", - "print(df['country']=='Germany')\n", - "df[(df['country']=='Germany')].head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "we can also filter the data frame using a list of values." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'terms': {'country': ['Germany', 'United States']}}\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
countrycustomer_iddescriptioninvoice_dateinvoice_noquantitystock_codeunit_price
wXcVa24BUkfJ5hz0pRsLUnited Kingdom17850WHITE HANGING HEART T-LIGHT HOLDER2010-12-01 08:26:00536365685123A2.55
wncVa24BUkfJ5hz0pRsLUnited Kingdom17850WHITE METAL LANTERN2010-12-01 08:26:005363656710533.39
w3cVa24BUkfJ5hz0pRsLUnited Kingdom17850CREAM CUPID HEARTS COAT HANGER2010-12-01 08:26:00536365884406B2.75
xHcVa24BUkfJ5hz0pRsLUnited Kingdom17850KNITTED UNION FLAG HOT WATER BOTTLE2010-12-01 08:26:00536365684029G3.39
xXcVa24BUkfJ5hz0pRsLUnited Kingdom17850RED WOOLLY HOTTIE WHITE HEART2010-12-01 08:26:00536365684029E3.39
\n", - "
\n", - "

5 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id \\\n", - "wXcVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "wncVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "w3cVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "xHcVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "xXcVa24BUkfJ5hz0pRsL United Kingdom 17850 \n", - "\n", - " description invoice_date \\\n", - "wXcVa24BUkfJ5hz0pRsL WHITE HANGING HEART T-LIGHT HOLDER 2010-12-01 08:26:00 \n", - "wncVa24BUkfJ5hz0pRsL WHITE METAL LANTERN 2010-12-01 08:26:00 \n", - "w3cVa24BUkfJ5hz0pRsL CREAM CUPID HEARTS COAT HANGER 2010-12-01 08:26:00 \n", - "xHcVa24BUkfJ5hz0pRsL KNITTED UNION FLAG HOT WATER BOTTLE 2010-12-01 08:26:00 \n", - "xXcVa24BUkfJ5hz0pRsL RED WOOLLY HOTTIE WHITE HEART 2010-12-01 08:26:00 \n", - "\n", - " invoice_no quantity stock_code unit_price \n", - "wXcVa24BUkfJ5hz0pRsL 536365 6 85123A 2.55 \n", - "wncVa24BUkfJ5hz0pRsL 536365 6 71053 3.39 \n", - "w3cVa24BUkfJ5hz0pRsL 536365 8 84406B 2.75 \n", - "xHcVa24BUkfJ5hz0pRsL 536365 6 84029G 3.39 \n", - "xXcVa24BUkfJ5hz0pRsL 536365 6 84029E 3.39 \n", - "\n", - "[5 rows x 8 columns]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print(df['country'].isin(['Germany', 'United States']))\n", - "df[df['country'].isin(['Germany', 'United Kingdom'])].head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also combine boolean vectors to further filter the data frame." - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
countrycustomer_iddescriptioninvoice_dateinvoice_noquantitystock_codeunit_price
5XcVa24BUkfJ5hz0q3MqGermany12471FUNKY DIVA PEN2010-12-10 09:35:0053817496227410.85
7XcVa24BUkfJ5hz0q3MqGermany12471LIPSTICK PEN RED2010-12-10 09:35:00538174100224190.36
FHcVa24BUkfJ5hz0s-K9Germany12500PACK OF 6 BIRDY GIFT TAGS2011-01-10 09:48:00540553144225851.06
XncVa24BUkfJ5hz0s-K9Germany12524BOX OF 24 COCKTAIL PARASOLS2011-01-10 10:35:00540562100846920.42
\n", - "
\n", - "

4 rows x 8 columns

" - ], - "text/plain": [ - " country customer_id description \\\n", - "5XcVa24BUkfJ5hz0q3Mq Germany 12471 FUNKY DIVA PEN \n", - "7XcVa24BUkfJ5hz0q3Mq Germany 12471 LIPSTICK PEN RED \n", - "FHcVa24BUkfJ5hz0s-K9 Germany 12500 PACK OF 6 BIRDY GIFT TAGS \n", - "XncVa24BUkfJ5hz0s-K9 Germany 12524 BOX OF 24 COCKTAIL PARASOLS \n", - "\n", - " invoice_date invoice_no quantity stock_code \\\n", - "5XcVa24BUkfJ5hz0q3Mq 2010-12-10 09:35:00 538174 96 22741 \n", - "7XcVa24BUkfJ5hz0q3Mq 2010-12-10 09:35:00 538174 100 22419 \n", - "FHcVa24BUkfJ5hz0s-K9 2011-01-10 09:48:00 540553 144 22585 \n", - "XncVa24BUkfJ5hz0s-K9 2011-01-10 10:35:00 540562 100 84692 \n", - "\n", - " unit_price \n", - "5XcVa24BUkfJ5hz0q3Mq 0.85 \n", - "7XcVa24BUkfJ5hz0q3Mq 0.36 \n", - "FHcVa24BUkfJ5hz0s-K9 1.06 \n", - "XncVa24BUkfJ5hz0s-K9 0.42 \n", - "\n", - "[4 rows x 8 columns]" - ] - }, - "execution_count": 115, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[(df['country']=='Germany') & (df['quantity']>90)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using this example, let see how eland translates this boolean filter to an elasticsearch `bool` query." - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "index_pattern: online-retail\n", - "Index:\n", - "\tindex_field: _id\n", - "\tis_source_field: False\n", - "Mappings:\n", - "\tcapabilities: _source es_dtype pd_dtype searchable aggregatable\n", - "country True keyword object True True\n", - "customer_id True keyword object True True\n", - "description True keyword object True True\n", - "invoice_date True date datetime64[ns] True True\n", - "invoice_no True keyword object True True\n", - "quantity True integer int64 True True\n", - "stock_code True keyword object True True\n", - "unit_price True float float64 True True\n", - "Operations:\n", - "\ttasks: [('boolean_filter', {'bool': {'must': [{'term': {'country': 'Germany'}}, {'range': {'quantity': {'gt': 90}}}]}})]\n", - "\tsize: None\n", - "\tsort_params: None\n", - "\tcolumns: None\n", - "\tpost_processing: []\n", - "\n" - ] - } - ], - "source": [ - "print(df[(df['country']=='Germany') & (df['quantity']>90)].info_es())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Aggregation and Descriptive Statistics\n", - "\n", - "Let's begin to ask some questions of our data and use eland to get the answers." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**How many different countries are there?**" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "country 24\n", - "dtype: int64" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['country'].nunique()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**What is the total sum of products ordered?**" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "quantity 548076.0\n", - "dtype: float64" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['quantity'].sum()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Show me the sum, mean, min, and max of the qunatity and unit_price fields**" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
quantityunit_price
sum548076.000000383761.569666
mean8.3632315.855916
max74215.00000016888.019531
min-74215.0000000.000000
\n", - "
" - ], - "text/plain": [ - " quantity unit_price\n", - "sum 548076.000000 383761.569666\n", - "mean 8.363231 5.855916\n", - "max 74215.000000 16888.019531\n", - "min -74215.000000 0.000000" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['quantity','unit_price']].agg(['sum', 'mean', 'max', 'min'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Give me descriptive statistics for the entire data frame**" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
quantityunit_price
count65534.00000065534.000000
mean8.3632315.855916
std413.694481145.755942
min-74215.0000000.000000
25%1.0000001.250000
50%2.0000002.510000
75%8.0000004.234706
max74215.00000016888.019531
\n", - "
" - ], - "text/plain": [ - " quantity unit_price\n", - "count 65534.000000 65534.000000\n", - "mean 8.363231 5.855916\n", - "std 413.694481 145.755942\n", - "min -74215.000000 0.000000\n", - "25% 1.000000 1.250000\n", - "50% 2.000000 2.510000\n", - "75% 8.000000 4.234706\n", - "max 74215.000000 16888.019531" - ] - }, - "execution_count": 119, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Show me a histogram of numeric columns**" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[,\n", - " ]],\n", - " dtype=object)" - ] - }, - "execution_count": 110, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtsAAAEICAYAAACOMji0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3df7RfdX3n++dLfijVKqD2DCXMhDtk2iKMqLlAl733nsEKAb0N07GKpRKtmrbC0t7LnRFsb1WULlxz0QqjdFJJCR1q5FJtshRKU+XcjmsVhCg/BHSIGEsyASrhh5EpNvi+f3w/B76Gk+ScnLPPj53nY63vOt/ve3/2/n7e2ef7Pe/s/dmfnapCkiRJ0sx73lx3QJIkSeori21JkiSpIxbbkiRJUkcstiVJkqSOWGxLkiRJHbHYliRJkjpisS1NQpIbkqyY635I0v4qyR8n+b9n6b3uTjI6G++l/ovzbEs/KcmHgGOq6jd2s/ztwLuq6pdms1+SpIFWCP+Xqlo0132R9sYj25IkSUCSA+e6D+ofi23Na0leleTrSX6Q5HNJ1ib5aJK3J/nqLm0ryTHt+RuSfCPJE0keaEerx9stbm1XJPn7JN9P8ntt2TLgA8BbkuxIckeLjyV5V5JfAP4Y+MW2/LEk/3OSh5IcMPQevzq+riRpYPh7ur2+KslH2/PRJFuSnJ/k4STbkrxj17ZJXgjcAPxs+x7ekeRn9/CeH0pyXfsb8oP2N+WVQ8s3J3l/kjuBHyY5sMV+uS0/IMkHknynrb8xyVFt2c8n2ZBke5JvJ3nzjP+jacGz2Na8leRg4C+BPwMOB/5f4N9NcvUfAucAhwJvAH4nyZm7tPkl4OeA1wF/kOQXquqvgD8EPldVL6qqVw6vUFX3Ar8N/F1bfmhV3Qo8Apw61PRtwNWTz1aSBPwz4CXAkcA7gU8lOWy4QVX9EDgd+O/te/hFVfXf97Ld5Qz+hhwO/Dnwl0kOGlr+VgZ/Kw6tqp27rPt/tuVnAC8GfhN4shX9G9r2fgY4C/h0kmOnmLN6zmJb89nJwEHAH1XVP1XVdcCtk1mxqsaq6q6q+nFV3Ql8Fvjfdmn24ar6H1V1B3AH8MrnbGjy1gC/AZDkcOA0Bl/AkqTJ+yfgovadfz2wg8FBkenaWFXXVdU/AR8HXsDgb8y4y6rqgar6HxOs+y7g96vq2zVwR1U9ArwR2FxVf1pVO6vqG8BfAL82A/1Vjzg2SfPZzwJb6yev4v3eZFZMchJwCXAccDDwfAZHNYY9OPT8SeBF+95V/gtwbzvS8Wbgv1bVtmlsT5L2R4/scmR5ut/N4x4Yf1JVP06yhcHfmOcsn8BRwHcmiP8L4KQkjw3FDmRwNlZ6hke2NZ9tA45MkqHYP28/fwj81HgwyT/bZd0/B9YDR1XVSxiMsw6Ts7cpep6zvKq2An8H/CqDISR+2UrScz3J0Hc3g2Ej+2KqU6kdNf4kyfOARcDw0JM9be8B4F/uJv7/teGE448XVdXvTLFv6jmLbc1nfwfsBN6b5KAkvwqc2JbdAbwiyQlJXgB8aJd1fxrYXlX/mORE4Nen8L4PAYvbF/Luli9qY8qHXQ38B+B44PNTeD9J2l/cDvx6u+hwGc8d3jdZDwEvTfKSSbZ/Tbtw/UDgd4GngJsnue5ngI8kWZKBf53kpcAXgX+V5G3tb9RB7YL5X5hyNuo1i23NW1X1IwZHit8ObAfeQitiq+q/ARcBfwPcB3x1l9XfA1yU5AfAHwDXTuGtx4ebPJLk6xMs/wpwN/Bgku8Pxb/A4LTiF6rqySm8nyTtL94H/O/AY8DZDC6Cn7Kq+haDa3Hub7NC7XY2kmYdg78hjzI4+/irbfz2ZHycwd+QvwaeAK4EDqmqHzC4MP4sBkfJHwQ+xmDYovQMb2qjBSXJVcCWqvr9ue7LRJJ8B/itqvqbue6LJGnvNyqTuuaRbWmGJPl3DMb9fWWu+yJJkuYHZyORZkCSMeBY4G1V9eM57o4k7VeS3AD8LxMs+sPZ7ou0K4eRSJIkSR1xGIkkSZLUkQU7jORlL3tZLV68eK678Ywf/vCHvPCFL5zrbnSir7n1NS/ob27zMa+NGzd+v6pePtf9mAlJDgBuY3AzqTcmORpYC7wU2MhgmNSPkjyfwVSXrwEeAd5SVZvbNi5kcJvtp4H3VtWNLb4M+CRwAPCZqrpkb/3Zl+/5+fg7MpPMb+Hqc27Q7/ym+z2/YIvtxYsXc9ttt811N54xNjbG6OjoXHejE33Nra95QX9zm495JZnUXU0XiPcB9wIvbq8/BnyiqtYm+WMGRfQV7eejVXVMkrNau7ckOZbBNGivYHB3vr9J8q/atj4FvB7YAtyaZH1V3bOnzuzL9/x8/B2ZSea3cPU5N+h3ftP9nncYiSSJJIuANzC4gQftzq2nANe1JmuAM9vz5e01bfnrWvvlwNqqeqqqvgtsYnAjqhOBTVV1f5s/f21rK0m9Z7EtSQL4IwZ3QB2fTeelwGNVtbO93gIc2Z4fyeBW1bTlj7f2z8R3WWd3cUnqvQU7jESSNDOSvBF4uKo2Jhmd476sBFYCjIyMMDY2NqX1d+zYMeV1FhLzW7j6nBv0P7/psNiWJL0W+JUkZwAvYDBm+5PAoUkObEevFwFbW/utwFHAliQHAi9hcKHkeHzc8Dq7i/+EqloFrAJYunRpTXUMaJ/HjYL5LWR9zg36n990OIxEkvZzVXVhVS2qqsUMLnD8SlWdDdwEvKk1WwGsa8/Xt9e05V+pwU0b1gNnJXl+m8lkCfA14FZgSZKjkxzc3mP9LKQmSXPOI9uSpN15P7A2yUeBbwBXtviVwJ8l2QRsZ1A8U1V3J7kWuAfYCZxbVU8DJDkPuJHB1H+rq+ruWc1EkuaIxbYk6RlVNQaMtef3M5hJZNc2/wj82m7Wvxi4eIL49cD1M9hVSVoQHEYiSZIkdcRiW5IkSeqIw0i037pr6+O8/YIv7bHN5kveMEu9kTQT/FxLmm88si1JkiR1xGJbkiRJ6ojFtiRJktQRi21JkiSpI3sttpO8IMnXktyR5O4kH27xq5J8N8nt7XFCiyfJZUk2JbkzyauHtrUiyX3tsWIo/pokd7V1LkuSLpKVJEmSZtNkZiN5CjilqnYkOQj4apIb2rJ/X1XX7dL+dAa36F0CnARcAZyU5HDgg8BSoICNSdZX1aOtzbuBWxjc9GAZcAOSJEnSArbXI9s1sKO9PKg9ag+rLAeubuvdDBya5AjgNGBDVW1vBfYGYFlb9uKqurmqCrgaOHMaOUmSJEnzwqTm2U5yALAROAb4VFXdkuR3gIuT/AHwZeCCqnoKOBJ4YGj1LS22p/iWCeIT9WMlsBJgZGSEsbGxyXR/VuzYsWNe9Wcm9TW3kUPg/ON37rHNQs27r/usr3lJkvprUsV2VT0NnJDkUOALSY4DLgQeBA4GVgHvBy7qqqOtH6vae7F06dIaHR3t8u2mZGxsjPnUn5nU19wuv2Ydl96154/A5rNHZ6czM6yv+6yveUmS+mtKs5FU1WPATcCyqtrWhoo8BfwpcGJrthU4ami1RS22p/iiCeKSJEnSgjaZ2Uhe3o5ok+QQ4PXAt9pYa9rMIWcC32yrrAfOabOSnAw8XlXbgBuBU5McluQw4FTgxrbsiSQnt22dA6yb2TQlSZKk2TeZYSRHAGvauO3nAddW1ReTfCXJy4EAtwO/3dpfD5wBbAKeBN4BUFXbk3wEuLW1u6iqtrfn7wGuAg5hMAuJM5FIkiRpwdtrsV1VdwKvmiB+ym7aF3DubpatBlZPEL8NOG5vfZEkSZIWEu8gKUmSJHXEYluSJEnqiMW2JIkkL0jytSR3JLk7yYdb/Kok301ye3uc0OJJclmSTUnuTPLqoW2tSHJfe6wYir8myV1tncvaRfGS1GuTmmdbktR7TwGnVNWOJAcBX00yfrH6v6+q63ZpfzqwpD1OAq4ATkpyOPBBYCmDuw1vTLK+3Tn4CuDdwC0MLqZfhhfES+o5j2xLkmj3TdjRXh7UHrWHVZYDV7f1bgYObVPCngZsqKrtrcDeACxry15cVTe3C+mvZjBtrCT1mke2JUkAtCleNwLHAJ+qqluS/A5wcZI/AL4MXNBuZnYk8MDQ6ltabE/xLRPEd+3DSmAlwMjICGNjY1PKYeQQOP/4nXtsM9Vtzic7duxY0P3fmz7n1+fcoP/5TYfFtiQJgKp6Gjih3cjsC0mOAy4EHgQOBlYB7wcu6rAPq9r7sHTp0hodHZ3S+pdfs45L79rzn7bNZ09tm/PJ2NgYU/03WUj6nF+fc4P+5zcdDiORJP2EqnoMuAlYVlXb2lCRp4A/BU5szbYCRw2ttqjF9hRfNEFcknrNYluSRJKXtyPaJDkEeD3wrTbWmjZzyJnAN9sq64Fz2qwkJwOPV9U24Ebg1CSHJTkMOBW4sS17IsnJbVvnAOtmM0dJmgsOI5EkARwBrGnjtp8HXFtVX0zylSQvBwLcDvx2a389cAawCXgSeAdAVW1P8hHg1tbuoqra3p6/B7gKOITBLCTORCKp9yy2JUlU1Z3AqyaIn7Kb9gWcu5tlq4HVE8RvA46bXk8laWFxGIkkSZLUEYttSZIkqSMW25IkSVJHLLYlSZKkjlhsS5IkSR2x2JYkSZI6YrEtSZIkdcRiW5IkSeqIxbYkSZLUkb0W20lekORrSe5IcneSD7f40UluSbIpyeeSHNziz2+vN7Xli4e2dWGLfzvJaUPxZS22KckFM5+mJEmSNPsmc2T7KeCUqnolcAKwLMnJwMeAT1TVMcCjwDtb+3cCj7b4J1o7khwLnAW8AlgGfDrJAUkOAD4FnA4cC7y1tZUkSZIWtL0W2zWwo708qD0KOAW4rsXXAGe258vba9ry1yVJi6+tqqeq6rvAJuDE9thUVfdX1Y+Ata2tJEmStKAdOJlG7ejzRuAYBkehvwM8VlU7W5MtwJHt+ZHAAwBVtTPJ48BLW/zmoc0Or/PALvGTdtOPlcBKgJGREcbGxibT/VmxY8eOedWfmdTX3EYOgfOP37nHNgs1777us77mJUnqr0kV21X1NHBCkkOBLwA/32mvdt+PVcAqgKVLl9bo6OhcdGNCY2NjzKf+zKS+5nb5Neu49K49fwQ2nz06O52ZYX3dZ33NS5LUX1OajaSqHgNuAn4RODTJeKWyCNjanm8FjgJoy18CPDIc32Wd3cUlSZKkBW0ys5G8vB3RJskhwOuBexkU3W9qzVYA69rz9e01bflXqqpa/Kw2W8nRwBLga8CtwJI2u8nBDC6iXD8TyUmSJElzaTLDSI4A1rRx288Drq2qLya5B1ib5KPAN4ArW/srgT9LsgnYzqB4pqruTnItcA+wEzi3DU8hyXnAjcABwOqqunvGMpQkSZLmyF6L7aq6E3jVBPH7Gcwksmv8H4Ff2822LgYuniB+PXD9JPorSZIkLRjeQVKS5A3MJKkjFtuSJPAGZpLUCYttSZI3MJOkjkxqnm1JUv/NhxuYTffmZX2+WRX0/8ZOfc6vz7lB//ObDottSRIwP25gNt2bl/X5ZlXQ/xs79Tm/PucG/c9vOhxGIkn6Cd7ATJJmjsW2JMkbmElSRxxGIkkCb2AmSZ2w2JYkeQMzSeqIw0gkSZKkjlhsS5IkSR2x2JYkSZI6YrEtSZIkdcRiW5IkSeqIxbYkSZLUEYttSZIkqSMW25IkSVJHLLYlSZKkjlhsS5IkSR3Za7Gd5KgkNyW5J8ndSd7X4h9KsjXJ7e1xxtA6FybZlOTbSU4bii9rsU1JLhiKH53klhb/XJKDZzpRSZIkabZN5sj2TuD8qjoWOBk4N8mxbdknquqE9rgeoC07C3gFsAz4dJIDkhwAfAo4HTgWeOvQdj7WtnUM8CjwzhnKT5IkSZozey22q2pbVX29Pf8BcC9w5B5WWQ6sraqnquq7wCbgxPbYVFX3V9WPgLXA8iQBTgGua+uvAc7c14QkSZKk+eLAqTROshh4FXAL8FrgvCTnALcxOPr9KINC/Oah1bbwbHH+wC7xk4CXAo9V1c4J2u/6/iuBlQAjIyOMjY1Npfud2rFjx7zqz0zqa24jh8D5x+/cY5uFmndf91lf85Ik9deki+0kLwL+AvjdqnoiyRXAR4BqPy8FfrOTXjZVtQpYBbB06dIaHR3t8u2mZGxsjPnUn5nU19wuv2Ydl96154/A5rNHZ6czM6yv+6yveUmS+mtSxXaSgxgU2tdU1ecBquqhoeV/AnyxvdwKHDW0+qIWYzfxR4BDkxzYjm4Pt5ckSZIWrMnMRhLgSuDeqvr4UPyIoWb/Fvhme74eOCvJ85McDSwBvgbcCixpM48czOAiyvVVVcBNwJva+iuAddNLS5IkSZp7kzmy/VrgbcBdSW5vsQ8wmE3kBAbDSDYDvwVQVXcnuRa4h8FMJudW1dMASc4DbgQOAFZX1d1te+8H1ib5KPANBsW9JEmStKDttdiuqq8CmWDR9XtY52Lg4gni10+0XlXdz2C2EknSLEtyFHA1MMLgAMqqqvpkkg8B7wb+oTX9wNA0rxcymKb1aeC9VXVjiy8DPsngoMpnquqSFj+awSxULwU2Am9rM1NJUq95B0lJkvdTkKSOWGxL0n7O+ylIUnemNM+2JKnfFvr9FPo8fz70f675PufX59yg//lNh8W2JAnox/0U+jx/PvR/rvk+59fn3KD/+U2HxbYkyfspSFJHHLMtSfs576cgSd3xyLYkyfspSFJHLLYlaT/n/RQkqTsOI5EkSZI6YrEtSZIkdcRiW5IkSeqIxbYkSZLUEYttSZIkqSMW25IkSVJHLLYlSZKkjlhsS5IkSR2x2JYkSZI6YrEtSZIkdcRiW5IkSerIXovtJEcluSnJPUnuTvK+Fj88yYYk97Wfh7V4klyWZFOSO5O8emhbK1r7+5KsGIq/JsldbZ3LkqSLZCVJkqTZNJkj2zuB86vqWOBk4NwkxwIXAF+uqiXAl9trgNOBJe2xErgCBsU58EHgJOBE4IPjBXpr8+6h9ZZNPzVJkiRpbu212K6qbVX19fb8B8C9wJHAcmBNa7YGOLM9Xw5cXQM3A4cmOQI4DdhQVdur6lFgA7CsLXtxVd1cVQVcPbQtSZIkacE6cCqNkywGXgXcAoxU1ba26EFgpD0/EnhgaLUtLban+JYJ4hO9/0oGR8sZGRlhbGxsKt3v1I4dO+ZVf2ZSX3MbOQTOP37nHtss1Lz7us/6mpckqb8mXWwneRHwF8DvVtUTw8Oqq6qSVAf9+wlVtQpYBbB06dIaHR3t+i0nbWxsjPnUn5nU19wuv2Ydl96154/A5rNHZ6czM6yv+6yveUmS+mtSs5EkOYhBoX1NVX2+hR9qQ0BoPx9u8a3AUUOrL2qxPcUXTRCXJEmSFrTJzEYS4Erg3qr6+NCi9cD4jCIrgHVD8XParCQnA4+34SY3AqcmOaxdGHkqcGNb9kSSk9t7nTO0LUmSJGnBmsyR7dcCbwNOSXJ7e5wBXAK8Psl9wC+31wDXA/cDm4A/Ad4DUFXbgY8At7bHRS1Ga/OZts53gBtmIDdJ0iQ5zaskdWOvY7ar6qvA7r4QXzdB+wLO3c22VgOrJ4jfBhy3t75IkjozPs3r15P8NLAxyQbg7Qymeb0kyQUMpnl9Pz85zetJDKZwPWlomtelQLXtrG+zUI1P83oLgwMzy/DgiqSe8w6SkiSneZWkjkxp6j9JUv/N5TSv053itc9TekL/p7/sc359zg36n990WGxLkp4x19O8TneK1z5P6Qn9n/6yz/n1OTfof37T4TASSRLgNK+S1AWLbUmS07xKUkccRiJJgmeneb0rye0t9gEG07pem+SdwPeAN7dl1wNnMJiy9UngHTCY5jXJ+DSv8NxpXq8CDmEwC4kzkUjqPYttSZLTvEpSRxxGIkmSJHXEYluSJEnqiMW2JEmS1BGLbUmSJKkjFtuSJElSRyy2JUmSpI5YbEuSJEkdsdiWJEmSOmKxLUmSJHXEYluSJEnqiMW2JEmS1BGLbUmSJKkjFtuSJElSR/ZabCdZneThJN8cin0oydYkt7fHGUPLLkyyKcm3k5w2FF/WYpuSXDAUPzrJLS3+uSQHz2SCkiRJ0lyZzJHtq4BlE8Q/UVUntMf1AEmOBc4CXtHW+XSSA5IcAHwKOB04FnhrawvwsbatY4BHgXdOJyFJkiRpvjhwbw2q6m+TLJ7k9pYDa6vqKeC7STYBJ7Zlm6rqfoAka4HlSe4FTgF+vbVZA3wIuGKyCUiSNBWLL/jSXttsvuQNs9ATSfuDvRbbe3BeknOA24Dzq+pR4Ejg5qE2W1oM4IFd4icBLwUeq6qdE7R/jiQrgZUAIyMjjI2NTaP7M2vHjh3zqj8zqa+5jRwC5x+/c49tFmrefd1nfc1LktRf+1psXwF8BKj281LgN2eqU7tTVauAVQBLly6t0dHRrt9y0sbGxphP/ZlJfc3t8mvWcelde/4IbD57dHY6M8P6us/6mtd8kGQ18Ebg4ao6rsU+BLwb+IfW7ANDwwYvZDDs72ngvVV1Y4svAz4JHAB8pqouafGjgbUMDrJsBN5WVT+anewkae7s02wkVfVQVT1dVT8G/oRnh4psBY4aarqoxXYXfwQ4NMmBu8QlSbPrKrw+R5Jm3D4V20mOGHr5b4HxmUrWA2cleX47irEE+BpwK7CkzTxyMIMv6fVVVcBNwJva+iuAdfvSJ0nSvquqvwW2T7L5M9fnVNV3gfHrc06kXZ/TjlqPX58TBtfnXNfWXwOcOaMJSNI8tddhJEk+C4wCL0uyBfggMJrkBAbDSDYDvwVQVXcnuRa4B9gJnFtVT7ftnAfcyODU4uqquru9xfuBtUk+CnwDuHLGspMkTdesXp8z3WtzJnMtxmTM12sD+n7dQp/z63Nu0P/8pmMys5G8dYLwbgviqroYuHiC+PXA9RPE7+fZYSiSpPlj1q/Pme61OZO5FmMy5uv1Gn2/bqHP+fU5N+h/ftMx/W8kSVIvVdVD48+T/AnwxfZyd9fhsJv4M9fntKPbXp8jab/h7dolSRPy+hxJmj6PbEuSvD5HkjpisS1J8vocSeqIw0gkSZKkjlhsS5IkSR2x2JYkSZI6YrEtSZIkdcRiW5IkSeqIxbYkSZLUEYttSZIkqSMW25IkSVJHLLYlSZKkjlhsS5IkSR2x2JYkSZI6YrEtSZIkdcRiW5IkSeqIxbYkSZLUEYttSZIkqSN7LbaTrE7ycJJvDsUOT7IhyX3t52EtniSXJdmU5M4krx5aZ0Vrf1+SFUPx1yS5q61zWZLMdJKSJEnSXDhwEm2uAv4TcPVQ7ALgy1V1SZIL2uv3A6cDS9rjJOAK4KQkhwMfBJYCBWxMsr6qHm1t3g3cAlwPLANumH5q0vQtvuBLe22z+ZI3zEJPJEnSQrTXI9tV9bfA9l3Cy4E17fka4Myh+NU1cDNwaJIjgNOADVW1vRXYG4BlbdmLq+rmqioGBf2ZSJIkST0wmSPbExmpqm3t+YPASHt+JPDAULstLban+JYJ4hNKshJYCTAyMsLY2Ng+dn/m7dixY171Zyb1NbeRQ+D843dOezvz8d+mr/usr3nNB0lWA28EHq6q41rscOBzwGJgM/Dmqnq0Dff7JHAG8CTw9qr6eltnBfD7bbMfrao1Lf4aBmdKD2FwFvN97SCLJPXavhbbz6iqSjIrX5hVtQpYBbB06dIaHR2djbedlLGxMeZTf2ZSX3O7/Jp1XHrXtD8CbD57dPqdmWF93Wd9zWueuAqHDErSjNvX2UgeakNAaD8fbvGtwFFD7Ra12J7iiyaIS5JmkUMGJakb+3pYbz2wArik/Vw3FD8vyVoGRzser6ptSW4E/nB81hLgVODCqtqe5IkkJzM42nEOcPk+9kmSNLNmfcjgdIcL9nl4GPR/KFWf8+tzbtD//KZjr8V2ks8Co8DLkmxhcIrwEuDaJO8Evge8uTW/nsEYvk0MxvG9A6AV1R8Bbm3tLqqq8SMo7+HZcXw34GlFSZp3ZmvI4HSHC/Z5eBj0fyhVn/Prc27Q//ymY6/fSFX11t0set0EbQs4dzfbWQ2sniB+G3Dc3vohSZp1DyU5op2hnOyQwdFd4mM4ZFDSfsw7SEqSdmd8yCA8d8jgOe1GZifThgwCNwKnJjmsDRs8FbixLXsiycltJpNzhrYlSb02/XNtkqQFzyGDktQNi21JkkMGJakjDiORJEmSOmKxLUmSJHXEYluSJEnqiMW2JEmS1BGLbUmSJKkjFtuSJElSR5z6T5oFiy/40l7bbL7kDbPQE0mSNJs8si1JkiR1xGJbkiRJ6ojFtiRJktQRi21JkiSpIxbbkiRJUkcstiVJkqSOWGxLkiRJHbHYliRJkjpisS1JkiR1ZFrFdpLNSe5KcnuS21rs8CQbktzXfh7W4klyWZJNSe5M8uqh7axo7e9LsmJ6KUmSJEnzw0wc2f43VXVCVS1try8AvlxVS4Avt9cApwNL2mMlcAUMinPgg8BJwInAB8cLdEmSJGkh62IYyXJgTXu+BjhzKH51DdwMHJrkCOA0YENVba+qR4ENwLIO+iVJ2geexZSkfXfgNNcv4K+TFPCfq2oVMFJV29ryB4GR9vxI4IGhdbe02O7iz5FkJYOj4oyMjDA2NjbN7s+cHTt2zKv+zKS+5jZyCJx//M5pb2cy/zaTeZ+Z/Dfu6z7ra14LxL+pqu8PvR4/i3lJkgva6/fzk2cxT2JwFvOkobOYSxn87diYZH07yCJJvTXdYvuXqmprkp8BNiT51vDCqqpWiM+IVsyvAli6dGmNjo7O1KanbWxsjPnUn5nU19wuv2Ydl9413Y8AbD57dK9t3n7Bl2ZkO5PV133W17wWqOXAaHu+BhhjUGw/cxYTuDnJ+FnMUdpZTIAk42cxPzu73Zak2TWtSqOqtrafDyf5AoMx1w8lOaKqtrUv2Idb863AUUOrL2qxrTz7hT0eH5tOvyRJM2rWzmJO9wzmTJ2xuvyadXttc/yRL5n2+0xV38/u9Dm/PucG/c9vOva52E7yQuB5VfWD9vxU4CJgPbACuKT9HP/GWg+cl2Qtg1OLj7eC/EbgD4cuijwVuHBf+yVJmnGzdhZzumcwZ+qM1WTM5Nmoyer72Y4b2PEAAAftSURBVJ0+59fn3KD/+U3HdL6RRoAvJBnfzp9X1V8luRW4Nsk7ge8Bb27trwfOADYBTwLvAKiq7Uk+Atza2l00fppRkjT3PIspSftun4vtqrofeOUE8UeA100QL+Dc3WxrNbB6X/siSeqGZzElaXpm51ybJGmh8iymJE2DxbYkabc8iylJ09PFTW0kSZIkYbEtSZIkdcZiW5IkSeqIxbYkSZLUES+QlPYziydz6/hL3jALPZEkqf88si1JkiR1xGJbkiRJ6ojDSKRpmsywDEmStH/yyLYkSZLUEYttSZIkqSMW25IkSVJHLLYlSZKkjniBpCRJ+8A56yVNhke2JUmSpI54ZFuSpI549FuSR7YlSZKkjlhsS5IkSR1xGIl6aTKnbs8/fhY6MgV767OnmqfH0/mar/zsS/02b4rtJMuATwIHAJ+pqkvmuEvSgjP+R/v843fy9gVwG3kL4P2P3/WS9jfzothOcgDwKeD1wBbg1iTrq+qeue2ZNH9MpjCdTR6N01T5XS9pfzQvim3gRGBTVd0PkGQtsBzwC7hnZupI5nwrPPtmPv37Dvdld0fsLewXDL/r98FMfQY8kyTNjVTVXPeBJG8CllXVu9rrtwEnVdV5u7RbCaxsL38O+PasdnTPXgZ8f6470ZG+5tbXvKC/uc3HvP5FVb18rjuxEEzmu34Gvufn4+/ITDK/havPuUG/8/u5qvrpfV15vhzZnpSqWgWsmut+TCTJbVW1dK770YW+5tbXvKC/ufU1Lz1rut/zff8dMb+Fq8+5Qb/zS3LbdNafL1P/bQWOGnq9qMUkSf3hd72k/c58KbZvBZYkOTrJwcBZwPo57pMkaWb5XS9pvzMvhpFU1c4k5wE3MpgOanVV3T3H3ZqqeTm8ZYb0Nbe+5gX9za2vee0XZum7vu+/I+a3cPU5N+h3ftPKbV5cIClJkiT10XwZRiJJkiT1jsW2JEmS1BGL7RmS5PwkleRl7XWSXJZkU5I7k7x6rvs4FUn+Y5Jvtb5/IcmhQ8subHl9O8lpc9nPfZVkWev/piQXzHV/9lWSo5LclOSeJHcneV+LH55kQ5L72s/D5rqv+yrJAUm+keSL7fXRSW5p++5z7UI7qTefa9g/PtvQ7893kkOTXNf+lt6b5Bf7sv+S/B/t9/KbST6b5AULed8lWZ3k4STfHIpNuK/2pb6z2J4BSY4CTgX+fih8OrCkPVYCV8xB16ZjA3BcVf1r4L8BFwIkOZbBDAKvAJYBn87gFswLRp69ZfTpwLHAW1teC9FO4PyqOhY4GTi35XIB8OWqWgJ8ub1eqN4H3Dv0+mPAJ6rqGOBR4J1z0ivNKz37XMP+8dmGfn++Pwn8VVX9PPBKBnku+P2X5EjgvcDSqjqOwcXOZ7Gw991VDGqaYbvbV1Ou7yy2Z8YngP8ADF9tuhy4ugZuBg5NcsSc9G4fVNVfV9XO9vJmBvPhwiCvtVX1VFV9F9jE4BbMC8kzt4yuqh8B47eMXnCqaltVfb09/wGDL/MjGeSzpjVbA5w5Nz2cniSLgDcAn2mvA5wCXNeaLNjcNON687mG/n+2od+f7yQvAf5X4EqAqvpRVT1Gf/bfgcAhSQ4EfgrYxgLed1X1t8D2XcK721dTru8stqcpyXJga1XdscuiI4EHhl5vabGF6DeBG9rzPuTVhxyeI8li4FXALcBIVW1rix4ERuaoW9P1Rwz+I/vj9vqlwGND/xHsxb7TjOjl5xp6+9mGfn++jwb+AfjTNkzmM0leSA/2X1VtBf4fBmfztwGPAxvpz74bt7t9NeXvGovtSUjyN21c0q6P5cAHgD+Y6z7ui73kNd7m9xiczrxm7nqqvUnyIuAvgN+tqieGl9Vgfs8FN8dnkjcCD1fVxrnuizRX+vjZhv3i830g8Grgiqp6FfBDdhkyslD3Xxu7vJzBfyh+Fnghzx2C0SvT3Vfz4qY2811V/fJE8STHM/hlu2Nw9otFwNeTnMgCuC3x7vIal+TtwBuB19WzE7LP+7wmoQ85PCPJQQz+GF9TVZ9v4YeSHFFV29rprYfnrof77LXAryQ5A3gB8GIGYyAPTXJgO4KyoPedZlSvPtfQ68829P/zvQXYUlW3tNfXMSi2+7D/fhn4blX9A0CSzzPYn33Zd+N2t6+m/F3jke1pqKq7qupnqmpxVS1m8OF6dVU9yOAWxOe0q1ZPBh4fOh0x7yVZxuD03q9U1ZNDi9YDZyV5fpKjGVwg8LW56OM09OaW0W2M45XAvVX18aFF64EV7fkKYN1s9226qurCqlrUPltnAV+pqrOBm4A3tWYLMjd1ojefa+j3Zxv6//ludcADSX6uhV4H3EM/9t/fAycn+an2ezqeWy/23ZDd7asp13feQXIGJdnM4Orc77dfwP/E4NTKk8A7quq2uezfVCTZBDwfeKSFbq6q327Lfo/BOO6dDE5t3jDxVuavdjTlj3j2ltEXz3GX9kmSXwL+K3AXz457/ACDsZ3XAv8c+B7w5qra9eKPBSPJKPB/VdUbk/xPDC5+Oxz4BvAbVfXUXPZP80NfPtew/3y2ob+f7yQnMLj482DgfuAdDA5yLvj9l+TDwFsY1AHfAN7FYNzygtx3ST4LjAIvAx4CPgj8JRPsq32p7yy2JUmSpI44jESSJEnqiMW2JEmS1BGLbUmSJKkjFtuSJElSRyy2JUmSpI5YbEuSJEkdsdiWJEmSOvL/A8g5NWsg5r5GAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "df[(df['quantity']>-50) & \n", - " (df['quantity']<50) & \n", - " (df['unit_price']>0) & \n", - " (df['unit_price']<100)].select_dtypes(include=[np.number]).hist(figsize=[12,4], bins=30)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/example/README.md b/example/README.md deleted file mode 100644 index 32b5824..0000000 --- a/example/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Example Walkthrough for eland - -This example demonstrate the functionality of `eland` through a walkthrough of a simple analysis of the [Online Retail Dataset](https://archive.ics.uci.edu/ml/datasets/online+retail). - -To run this example, make sure that you have an elasticsearch cluster running on port 9200 and please install any additional dependencies in addition to `eland`: - -``` -pip install -r requirements-example.txt -``` - -Once these requirements are satisfied, load the data using the provided script: - -``` -python load.py -``` - -This will create an index called `online-retail` with a mapping defined in `load.py`. \ No newline at end of file diff --git a/example/load_data.py b/example/load_data.py deleted file mode 100644 index d780bc2..0000000 --- a/example/load_data.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright 2019 Elasticsearch BV -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import csv - -from elasticsearch import Elasticsearch, helpers -from elasticsearch.exceptions import TransportError - - -def create_index(es, index): - mapping = { - "mappings": { - "properties": { - "invoice_no": {"type": "keyword"}, - "stock_code": {"type": "keyword"}, - "description": {"type": "keyword"}, - "quantity": {"type": "integer"}, - "invoice_date": {"type": "date", "format": "MM/dd/yyyy HH:mm"}, - "unit_price": {"type": "float"}, - "customer_id": {"type": "keyword"}, - "country": {"type": "keyword"} - } - } - } - - # create an empty index - try: - es.indices.create(index=index, body=mapping) - except TransportError as e: - # ignore already existing index - if e.error == "resource_already_exists_exception": - pass - else: - raise - - -def parse_date(date): - """ - we need to convert dates to conform to the mapping in the following way: - months: one or two digit ints -> MM - days: one or two digit ints -> dd - years: two digit ints -> yyyy - times: {H}H:mm -> HH:mm - """ - - date = date.split("/") - - month = date[0] if len(date[0]) == 2 else "0{}".format(date[0]) - - day = date[1] if len(date[1]) == 2 else "0{}".format(date[1]) - - year = date[2].split(" ")[0] - year = "20{}".format(year) - - time = date[2].split(" ")[1] - time = time if len(time) == 5 else "0{}".format(time) - - date = "{}/{}/{} {}".format(month, day, year, time) - - return date - - -def parse_line(line): - """ - creates the document to be indexed - """ - obj = { - "invoice_no": line[0], - "stock_code": line[1], - "description": line[2], - "quantity": line[3], - "invoice_date": parse_date(line[4]), - "unit_price": line[5], - "customer_id": line[6], - "country": line[7].replace("\n", "") - } - - return obj - - -def load_data(es): - """ - generate one document per line of online-retail.csv - read file line by line to avoid loading all data into memory - """ - - create_index(es, "online-retail") - - header = True - with open("data/online-retail.csv", "r") as f: - reader = csv.reader(f, quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL) - for line in reader: - if header: - header = False - continue - doc = parse_line(line) - - yield doc - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument( - "-H", - "--host", - action="store", - default="localhost:9200", - help="The elasticsearch host you wish to connect to. (Default: localhost:9200)" - ) - - args = parser.parse_args() - - # create the elasticsearch client, pointing to the host parameter - es = Elasticsearch(args.host) - index = 'online-retail' - - # load data from online retail csv in data directory - stream = load_data(es) - for ok, result in helpers.streaming_bulk( - es, - actions=stream, - index=index, - chunk_size=1000 - ): - action, result = result.popitem() - doc_id = "/{}/doc/{}".format(index, result['_id']) - - if not ok: - print("Failed to {} document {} {}".format(action, doc_id, result)) - else: - print(doc_id) - - # make docs available for searches - es.indices.refresh(index=index) - - # notify user of number of documents indexed - print(es.count(index=index)["count"], "documents in index") diff --git a/example/requirements-example.txt b/example/requirements-example.txt deleted file mode 100644 index dc9beca..0000000 --- a/example/requirements-example.txt +++ /dev/null @@ -1,80 +0,0 @@ -alabaster==0.7.12 -appnope==0.1.0 -atomicwrites==1.3.0 -attrs==19.3.0 -Babel==2.7.0 -backcall==0.1.0 -bleach==3.1.0 -certifi==2019.9.11 -chardet==3.0.4 -cycler==0.10.0 -decorator==4.4.1 -defusedxml==0.6.0 -docutils==0.15.2 -eland==0.1 -elasticsearch==7.1.0 -entrypoints==0.3 -idna==2.8 -imagesize==1.1.0 -importlib-metadata==0.23 -ipykernel==5.1.3 -ipython==7.9.0 -ipython-genutils==0.2.0 -ipywidgets==7.5.1 -jedi==0.15.1 -Jinja2==2.10.3 -jsonschema==3.1.1 -jupyter==1.0.0 -jupyter-client==5.3.4 -jupyter-console==6.0.0 -jupyter-core==4.6.1 -kiwisolver==1.1.0 -MarkupSafe==1.1.1 -matplotlib==3.1.1 -mistune==0.8.4 -more-itertools==7.2.0 -nbconvert==5.6.1 -nbformat==4.4.0 -notebook==6.0.2 -numpy==1.17.4 -numpydoc==0.8.0 -packaging==19.2 -pandas==0.25.1 -pandocfilters==1.4.2 -parso==0.5.1 -pexpect==4.7.0 -pickleshare==0.7.5 -pluggy==0.13.0 -prometheus-client==0.7.1 -prompt-toolkit==2.0.10 -ptyprocess==0.6.0 -py==1.8.0 -Pygments==2.4.2 -pyparsing==2.4.5 -pyrsistent==0.15.5 -pytest==5.2.2 -python-dateutil==2.8.1 -pytz==2019.3 -pyzmq==18.1.1 -qtconsole==4.5.5 -requests==2.22.0 -Send2Trash==1.5.0 -six==1.13.0 -snowballstemmer==2.0.0 -Sphinx==2.2.1 -sphinx-rtd-theme==0.4.3 -sphinxcontrib-applehelp==1.0.1 -sphinxcontrib-devhelp==1.0.1 -sphinxcontrib-htmlhelp==1.0.2 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.2 -sphinxcontrib-serializinghtml==1.1.3 -terminado==0.8.3 -testpath==0.4.4 -tornado==6.0.3 -traitlets==4.3.3 -urllib3==1.25.7 -wcwidth==0.1.7 -webencodings==0.5.1 -widgetsnbextension==3.5.1 -zipp==0.6.0 diff --git a/make_docs.sh b/make_docs.sh index 5134e70..98338e2 100644 --- a/make_docs.sh +++ b/make_docs.sh @@ -2,6 +2,9 @@ python setup.py install +jupyter nbconvert --to notebook --inplace --execute docs/source/examples/demo_notebook.ipynb +jupyter nbconvert --to notebook --inplace --execute docs/source/examples/online_retail_analysis.ipynb + cd docs make clean diff --git a/requirements-dev.txt b/requirements-dev.txt index 1386841..4dd97d4 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,4 +2,5 @@ elasticsearch>=7.0.5 pandas==0.25.1 matplotlib pytest>=5.2.1 +nbval numpydoc==0.8