def test_limits(self): self.assertEqual( {b.nbins for b in time_binnings(self.dates, min_bins=9, max_bins=17)}, {9, 17}) self.assertEqual( {b.nbins for b in time_binnings(self.dates, min_bins=9, max_bins=16)}, {9}) self.assertEqual( {b.nbins for b in time_binnings(self.dates, min_bins=10, max_bins=17)}, {17})
def recompute_binnings(self): if self.is_valid and self.var.is_continuous: # binning is computed on valid var data, ignoring any cvar nans column = self.data.get_column_view(self.var)[0].astype(float) if np.any(np.isfinite(column)): if self.var.is_time: self.binnings = time_binnings(column, min_unique=5) else: self.binnings = decimal_binnings( column, min_width=self.min_var_resolution(self.var), add_unique=10, min_unique=5) fm = QFontMetrics(self.font()) width = max( fm.size(Qt.TextSingleLine, self._short_text(binning.width_label)).width() for binning in self.binnings) self.bin_width_label.setFixedWidth(width) max_bins = len(self.binnings) - 1 else: self.binnings = [] max_bins = 0 self.controls.number_of_bins.setMaximum(max_bins) self.number_of_bins = min( max_bins, self._user_var_bins.get(self.var, self.number_of_bins)) self._set_bin_width_slider_label()
def test_before_epoch(self): hour = 24 * 60 * 60 dates = [ -hour, 0, hour, ] bins = time_binnings(dates) self.assertEqual(list(bins[0].thresholds), [-hour, 0, hour, 2 * hour])
def recompute_binnings(self): if self.is_mode(): return if self.is_time(): self.binnings = time_binnings(self.agg_data, min_unique=3, min_bins=3, max_bins=15) else: self.binnings = decimal_binnings(self.agg_data, min_unique=3, min_bins=3, max_bins=15) max_bins = len(self.binnings) - 1 self.controls.binning_index.setMaximum(max_bins) self.binning_index = min(max_bins, self.binning_index)
def recompute_binnings(self): if self.is_valid and self.var.is_continuous: # binning is computed on valid var data, ignoring any cvar nans column = self.data.get_column_view(self.var)[0].astype(float) if np.any(np.isfinite(column)): if self.var.is_time: self.binnings = time_binnings(column, min_unique=5) self.bin_width_label.setFixedWidth(45) else: self.binnings = decimal_binnings( column, min_width=self.min_var_resolution(self.var), add_unique=10, min_unique=5) self.bin_width_label.setFixedWidth(35) max_bins = len(self.binnings) - 1 else: self.binnings = [] max_bins = 0 self.controls.number_of_bins.setMaximum(max_bins) self.number_of_bins = min( max_bins, self._user_var_bins.get(self.var, self.number_of_bins)) self._set_bin_width_slider_label()
def test_multiple_identical(self): dates = np.array([42] * 5) bins = time_binnings(dates) self.assertEqual(len(bins), 1) np.testing.assert_equal(bins[0].thresholds, [42, 43])
def test_single_value(self): dates = np.array([42]) bins = time_binnings(dates) self.assertEqual(len(bins), 1) np.testing.assert_equal(bins[0].thresholds, [42, 43])
def test_add_unique(self): bins = time_binnings(self.dates, add_unique=7) self.assertNotEqual(len(bins), 1) np.testing.assert_equal(bins[0].thresholds[:-1], self.dates)