diff --git a/eland/dataframe.py b/eland/dataframe.py index 48888bc..524467a 100644 --- a/eland/dataframe.py +++ b/eland/dataframe.py @@ -1,9 +1,9 @@ import sys import warnings +from distutils.version import LooseVersion import numpy as np import pandas as pd -from distutils.version import LooseVersion from pandas.compat import StringIO from pandas.core.common import apply_if_callable, is_bool_indexer from pandas.io.common import _expand_user, _stringify_path @@ -11,10 +11,10 @@ from pandas.io.formats import console from pandas.io.formats import format as fmt from pandas.io.formats.printing import pprint_thing +import eland.plotting as gfx from eland import NDFrame from eland import Series -import eland.plotting as gfx class DataFrame(NDFrame): # This is effectively 2 constructors @@ -138,6 +138,9 @@ class DataFrame(NDFrame): return buf.getvalue() def _index_summary(self): + # Print index summary e.g. + # Index: 103 entries, 0 to 102 + # Do this by getting head and tail of dataframe head = self.head(1)._to_pandas().index[0] tail = self.tail(1)._to_pandas().index[0] index_summary = ', %s to %s' % (pprint_thing(head), @@ -286,11 +289,11 @@ class DataFrame(NDFrame): _buf = StringIO() df.to_html(buf=_buf, columns=columns, col_space=col_space, header=header, - index=index, na_rep=na_rep, formatters=formatters, float_format=float_format, - sparsify=sparsify, index_names=index_names, justify=justify, max_rows=max_rows, - max_cols=max_cols, show_dimensions=False, decimal=decimal, - bold_rows=bold_rows, classes=classes, escape=escape, notebook=notebook, - border=border, table_id=table_id, render_links=render_links) + index=index, na_rep=na_rep, formatters=formatters, float_format=float_format, + sparsify=sparsify, index_names=index_names, justify=justify, max_rows=max_rows, + max_cols=max_cols, show_dimensions=False, decimal=decimal, + bold_rows=bold_rows, classes=classes, escape=escape, notebook=notebook, + border=border, table_id=table_id, render_links=render_links) # Our fake dataframe has incorrect number of rows (max_rows*2+1) - write out # the correct number of rows @@ -439,6 +442,14 @@ class DataFrame(NDFrame): query_compiler=self._query_compiler.squeeze(axis) ) + def select_dtypes(self, include=None, exclude=None): + # get empty df + empty_df = self._empty_pd_df() + + empty_df = empty_df.select_dtypes(include=include, exclude=exclude) + + return self._getitem_array(empty_df.columns) + @property def shape(self): """ diff --git a/eland/query_compiler.py b/eland/query_compiler.py index 9f85081..2b973bc 100644 --- a/eland/query_compiler.py +++ b/eland/query_compiler.py @@ -315,7 +315,7 @@ class ElandQueryCompiler(BaseQueryCompiler): if numeric: raise NotImplementedError("Not implemented yet...") - result._operations.set_columns(key) + result._operations.set_columns(list(key)) return result diff --git a/eland/tests/dataframe/test_aggs_pytest.py b/eland/tests/dataframe/test_aggs_pytest.py new file mode 100644 index 0000000..b03847c --- /dev/null +++ b/eland/tests/dataframe/test_aggs_pytest.py @@ -0,0 +1,23 @@ +# File called _pytest for PyCharm compatability + +import numpy as np +import pandas as pd + +from eland.tests.common import TestData + + +class TestDataFrameAggs(TestData): + + def test_to_aggs1(self): + pd_flights = self.pd_flights() + ed_flights = self.ed_flights() + + pd_sum_min = pd_flights.select_dtypes(include=[np.number]).agg(['sum', 'min']) + print(type(pd_sum_min)) + with pd.option_context('display.max_rows', None, 'display.max_columns', None): + print(pd_sum_min) + + ed_sum_min = ed_flights.select_dtypes(include=[np.number]).agg(['sum', 'min']) + print(type(ed_sum_min)) + with pd.option_context('display.max_rows', None, 'display.max_columns', None): + print(ed_sum_min) diff --git a/eland/tests/dataframe/test_describe_pytest.py b/eland/tests/dataframe/test_describe_pytest.py index b425755..1a05455 100644 --- a/eland/tests/dataframe/test_describe_pytest.py +++ b/eland/tests/dataframe/test_describe_pytest.py @@ -36,6 +36,7 @@ class TestDataFrameDescribe(TestData): ed_flights = self.ed_flights().head() pd_describe = pd_flights.describe() + # This fails as we can not run 'describe' on a truncate ed dataframe ed_describe = ed_flights.describe() print(pd_describe) diff --git a/eland/tests/dataframe/test_hist_pytest.py b/eland/tests/dataframe/test_hist_pytest.py index 796961a..2139b84 100644 --- a/eland/tests/dataframe/test_hist_pytest.py +++ b/eland/tests/dataframe/test_hist_pytest.py @@ -1,5 +1,6 @@ # File called _pytest for PyCharm compatability +import matplotlib.pyplot as plt import numpy as np import pandas as pd from pandas.util.testing import assert_almost_equal @@ -9,7 +10,7 @@ from eland.tests.common import TestData class TestDataFrameHist(TestData): - def test_to_hist1(self): + def test_hist1(self): pd_flights = self.pd_flights() ed_flights = self.ed_flights() diff --git a/eland/tests/dataframe/test_info_pytest.py b/eland/tests/dataframe/test_info_pytest.py index 00102b4..f6fdc15 100644 --- a/eland/tests/dataframe/test_info_pytest.py +++ b/eland/tests/dataframe/test_info_pytest.py @@ -22,4 +22,6 @@ class TestDataFrameInfo(TestData): assert pd_buf_lines[1:] == ed_buf_lines[1:] + # NOTE: info does not work on truncated data frames (e.g. head/tail) TODO + print(self.ed_ecommerce().info()) diff --git a/eland/tests/dataframe/test_select_dtypes_pytest.py b/eland/tests/dataframe/test_select_dtypes_pytest.py new file mode 100644 index 0000000..b228c23 --- /dev/null +++ b/eland/tests/dataframe/test_select_dtypes_pytest.py @@ -0,0 +1,31 @@ +# File called _pytest for PyCharm compatability +import pandas as pd +import numpy as np + +from eland.tests.common import TestData +from eland.tests.common import ( + assert_pandas_eland_frame_equal +) + + + +class TestDataFrameSelectDTypes(TestData): + + def test_select_dtypes1(self): + ed_flights = self.ed_flights() + pd_flights = self.pd_flights() + + ed_flights_numeric = ed_flights.select_dtypes(include=[np.number]) + pd_flights_numeric = pd_flights.select_dtypes(include=[np.number]) + + assert_pandas_eland_frame_equal(pd_flights_numeric.head(103), ed_flights_numeric.head(103)) + + def test_select_dtypes2(self): + ed_flights = self.ed_flights() + pd_flights = self.pd_flights() + + ed_flights_non_numeric = ed_flights.select_dtypes(exclude=[np.number]) + pd_flights_non_numeric = pd_flights.select_dtypes(exclude=[np.number]) + + assert_pandas_eland_frame_equal(pd_flights_non_numeric.head(103), ed_flights_non_numeric.head(103)) + diff --git a/eland/tests/plotting/test_dataframe_hist_pytest.ipynb b/eland/tests/plotting/test_dataframe_hist_pytest.ipynb index 31dab35..1609477 100644 --- a/eland/tests/plotting/test_dataframe_hist_pytest.ipynb +++ b/eland/tests/plotting/test_dataframe_hist_pytest.ipynb @@ -80,8 +80,61 @@ } ], "source": [ - "ed_flights.hist(figsize=[10,10])\n" + "ed_flights.hist(figsize=[10,10])" ] + }, + { + "cell_type": "code", + "execution_count": 38, + "outputs": [ + { + "name": "stderr", + "text": [ + "RuntimeWarning: Converting input from bool to for compatibility.\n" + ], + "output_type": "stream" + }, + { + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/anaconda3/envs/eland/lib/python3.6/site-packages/numpy/lib/histograms.py\u001b[0m in \u001b[0;36m_unsigned_subtract\u001b[0;34m(a, b)\u001b[0m\n\u001b[1;32m 341\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--> 342\u001b[0;31m \u001b[0mdt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msigned_to_unsigned\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype\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 343\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: ", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mTypeError\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 1\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtest_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpd_flights\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\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 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/anaconda3/envs/eland/lib/python3.6/site-packages/pandas/plotting/_core.py\u001b[0m in \u001b[0;36mhist_frame\u001b[0;34m(data, column, by, grid, xlabelsize, xrot, ylabelsize, yrot, ax, sharex, sharey, figsize, layout, bins, **kwds)\u001b[0m\n\u001b[1;32m 2408\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcol\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtry_sort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\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[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2409\u001b[0m \u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_axes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2410\u001b[0;31m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcol\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdropna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbins\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbins\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\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 2411\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2412\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m)\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/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1587\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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[1;32m 1588\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1589\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msanitize_sequence\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 1590\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1591\u001b[0m \u001b[0mbound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_sig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\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/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mhist\u001b[0;34m(self, x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, normed, **kwargs)\u001b[0m\n\u001b[1;32m 6751\u001b[0m \u001b[0;31m# this will automatically overwrite bins,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6752\u001b[0m \u001b[0;31m# so that each histogram uses the same bins\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6753\u001b[0;31m \u001b[0mm\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbins\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistogram\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbins\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mw\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mhist_kwargs\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 6754\u001b[0m \u001b[0mm\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfloat\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# causes problems later if it's an int\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6755\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmlast\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\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/numpy/lib/histograms.py\u001b[0m in \u001b[0;36mhistogram\u001b[0;34m(a, bins, range, normed, weights, density)\u001b[0m\n\u001b[1;32m 808\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 809\u001b[0m \u001b[0;31m# Pre-compute histogram scaling factor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 810\u001b[0;31m \u001b[0mnorm\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mn_equal_bins\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0m_unsigned_subtract\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlast_edge\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfirst_edge\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 811\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 812\u001b[0m \u001b[0;31m# We iterate over blocks here for two reasons: the first is that for\u001b[0m\u001b[0;34m\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/numpy/lib/histograms.py\u001b[0m in \u001b[0;36m_unsigned_subtract\u001b[0;34m(a, b)\u001b[0m\n\u001b[1;32m 342\u001b[0m \u001b[0mdt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msigned_to_unsigned\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 344\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubtract\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdt\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 345\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[0;31m# we know the inputs are integers, and we are deliberately casting\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: numpy boolean subtract, the `-` operator, is deprecated, use the bitwise_xor, the `^` operator, or the logical_xor function instead." + ], + "ename": "TypeError", + "evalue": "numpy boolean subtract, the `-` operator, is deprecated, use the bitwise_xor, the `^` operator, or the logical_xor function instead.", + "output_type": "error" + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "test_data.pd_flights().hist()\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n", + "is_executing": false + } + } } ], "metadata": { diff --git a/eland/tests/plotting/test_dataframe_hist_pytest.py b/eland/tests/plotting/test_dataframe_hist_pytest.py index a9918d5..ee9fbb2 100644 --- a/eland/tests/plotting/test_dataframe_hist_pytest.py +++ b/eland/tests/plotting/test_dataframe_hist_pytest.py @@ -2,67 +2,18 @@ from eland.tests.common import TestData -from pandas.util.testing import assert_series_equal +from matplotlib.testing.decorators import check_figures_equal -import numpy as np -import pandas as pd - -class TestDataFrameHist(TestData): - - def test_dataframe_hist1(self): - test_data = TestData() - - pd_flights = test_data.pd_flights()[['DistanceKilometers', 'DistanceMiles', 'FlightDelayMin', 'FlightTimeHour']] - ed_flights = test_data.ed_flights()[['DistanceKilometers', 'DistanceMiles', 'FlightDelayMin', 'FlightTimeHour']] - - """ - pd_flights.hist(figsize=[10, 10]) - #ed_flights.hist(figsize=[10, 10]) - - pd_min = pd_flights['DistanceKilometers'].min() - pd_max = pd_flights['DistanceKilometers'].max() - - #ed_min = ed_flights['DistanceKilometers'].min() - #ed_max = ed_flights['DistanceKilometers'].max() - - #num_bins = 10.0 - - #bins = np.linspace(ed_min, ed_max, num=num_bins+1) - - #print(bins) - - #print(np.diff(bins).mean()) - - #hist = ed_flights['DistanceKilometers'].hist(np.diff(bins).mean()) - - - x = [2956., 768., 719., 2662., 2934., 1320., 641., 529., 426., 104.] - bins = [0., 1988.14823146, 3976.29646292, 5964.44469437, 7952.59292583, 9940.74115729, 11928.88938875, 13917.03762021, 15905.18585166,17893.33408312,19881.48231458] - - print(len(x)) - print(len(bins)) - - a = bins[0:10] - - print(np.histogram(a, weights=x, bins=bins)) - #counts, bins = np.histogram(data) - #plt.hist(bins[:-1], bins, weights=counts) - """ - - h1 = np.histogram(pd_flights['DistanceKilometers'], 10) - h2 = np.histogram(pd_flights['FlightDelayMin'], 10) - l1 = list(h1[0]) - l2 = list(h2[0]) - l1.append(0) - l2.append(0) - - d = {'DistanceKilometers': h1[1], - 'FlightDelayMin': h2[1]} - - df = pd.DataFrame(data=d) - - df.hist(weights=[l1, l2]) +@check_figures_equal(extensions=['png']) +def test_plot(fig_test, fig_ref): + test_data = TestData() + pd_flights = test_data.pd_flights()[['DistanceKilometers', 'DistanceMiles', 'FlightDelayMin', 'FlightTimeHour']] + ed_flights = test_data.ed_flights()[['DistanceKilometers', 'DistanceMiles', 'FlightDelayMin', 'FlightTimeHour']] + pd_ax = fig_ref.subplots() + pd_flights.hist(ax=pd_ax) + ed_ax = fig_test.subplots() + ed_flights.hist(ax=ed_ax) diff --git a/eland/tests/query/test_count_pytest.py b/eland/tests/query/test_count_pytest.py index 5b1e93d..7012f05 100644 --- a/eland/tests/query/test_count_pytest.py +++ b/eland/tests/query/test_count_pytest.py @@ -13,15 +13,15 @@ class TestQueryCopy(TestData): q.exists('field_a') q.exists('field_b', must=False) - print(q.to_query()) + print(q.to_search_body()) q1 = Query(q) q.exists('field_c', must=False) q1.exists('field_c1', must=False) - print(q.to_query()) - print(q1.to_query()) + print(q.to_search_body()) + print(q1.to_search_body())