Skip to content

Commit 0a83c6c

Browse files
authored
Merge pull request #5202 from VesnaT/pivot_date
[FIX] Pivot: Output date for group by table
2 parents b8d3d67 + 406db69 commit 0a83c6c

2 files changed

Lines changed: 32 additions & 3 deletions

File tree

Orange/widgets/data/owpivot.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
QGridLayout)
1515

1616
from Orange.data import (Table, DiscreteVariable, Variable, Domain,
17-
ContinuousVariable)
17+
ContinuousVariable, TimeVariable)
1818
from Orange.data.domain import filter_visible
1919
from Orange.data.util import get_unique_names_duplicates, get_unique_names
2020
from Orange.data.filter import FilterContinuous, FilterDiscrete, Values
@@ -67,6 +67,7 @@ class Pivot:
6767
AnyVarFunctions = (Count_defined,)
6868
ContVarFunctions = (Sum, Mean, Min, Max, Mode, Median, Var)
6969
DiscVarFunctions = (Majority,)
70+
TimeVarFunctions = (Mean, Min, Max, Mode, Median)
7071

7172
class Tables:
7273
table = None # type: Table
@@ -195,7 +196,12 @@ def _create_group_tables(self, var_indep_funs, var_dep_funs):
195196
if fun in self.DiscVarFunctions:
196197
attrs.append(DiscreteVariable(name, var.values))
197198
else:
198-
attrs.append(ContinuousVariable(name))
199+
if isinstance(var, TimeVariable) and \
200+
fun in self.TimeVarFunctions:
201+
attrs.append(TimeVariable(name, have_date=var.have_date,
202+
have_time=var.have_time))
203+
else:
204+
attrs.append(ContinuousVariable(name))
199205
args = (var_indep_funs, var_dep_funs, attrs)
200206
for t, var in (("table", None), ("total_h", self._col_var),
201207
("total_v", self._row_var), ("total", self._total_var)):

Orange/widgets/data/tests/test_owpivot.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
from AnyQt.QtTest import QTest
1111

1212
from Orange.data import (Table, Domain, ContinuousVariable as Cv,
13-
StringVariable as sv, DiscreteVariable as Dv)
13+
StringVariable as sv, DiscreteVariable as Dv,
14+
TimeVariable as Tv)
1415
from Orange.widgets.data.owpivot import (OWPivot, Pivot,
1516
AggregationFunctionsEnum)
1617
from Orange.widgets.tests.base import WidgetTest
@@ -68,6 +69,16 @@ def test_output_grouped_data(self):
6869
self.send_signal(self.widget.Inputs.data, None)
6970
self.assertIsNone(self.get_output(self.widget.Outputs.grouped_data))
7071

72+
def test_output_grouped_data_time_var(self):
73+
domain = Domain([Dv("d1", ("a", "b")), Tv("t1", have_date=1)])
74+
X = np.array([[0, 1e9], [0, 1e8], [1, 2e8], [1, np.nan]])
75+
data = Table(domain, X)
76+
self.send_signal(self.widget.Inputs.data, data)
77+
self.agg_checkboxes[Pivot.Functions.Mean.value].click()
78+
grouped = self.get_output(self.widget.Outputs.grouped_data)
79+
str_grouped = "[[a, 2, 1987-06-06],\n [b, 2, 1976-05-03]]"
80+
self.assertEqual(str(grouped), str_grouped)
81+
7182
def test_output_filtered_data(self):
7283
self.agg_checkboxes[Pivot.Functions.Sum.value].click()
7384
self.send_signal(self.widget.Inputs.data, self.iris)
@@ -333,6 +344,18 @@ def test_group_table(self):
333344
[1, 2, 1, 1, 1, 1, 2, 1, 7, 7, 7, 7, 7, 7, 0]])
334345
self.assert_table_equal(group_tab, Table(Domain(domain[:2] + atts), X))
335346

347+
def test_group_table_time_var(self):
348+
domain = Domain([Dv("d1", ("a", "b")), Tv("t1", have_date=1)])
349+
X = np.array([[0, 1e9], [0, 1e8], [1, 2e8], [1, np.nan]])
350+
table = Table(domain, X)
351+
pivot = Pivot(table, Pivot.Functions, domain[0], val_var=domain[1])
352+
str_grouped = \
353+
"[[a, 2, 2, a, 2, 1.1e+09, 1987-06-06, 1973-03-03, " \
354+
"2001-09-09, 1973-03-03, 1987-06-06, 2.025e+17],\n " \
355+
"[b, 2, 2, b, 1, 2e+08, 1976-05-03, 1976-05-03, " \
356+
"1976-05-03, 1976-05-03, 1976-05-03, 0]]"
357+
self.assertEqual(str(pivot.group_table), str_grouped)
358+
336359
def test_group_table_metas(self):
337360
domain = Domain([Dv("d1", ("a", "b")), Cv("c1"),
338361
Dv("d2", ("a", "b")), Cv("c2")])

0 commit comments

Comments
 (0)