Skip to content

Commit d4e259f

Browse files
authored
Merge pull request #5423 from VesnaT/dbscan_fix_ids
DBSCAN: Retain data ids
2 parents f68f293 + 1f43169 commit d4e259f

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

Orange/widgets/unsupervised/owdbscan.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from Orange.widgets import widget, gui
1111
from Orange.widgets.utils.slidergraph import SliderGraph
1212
from Orange.widgets.settings import Setting
13-
from Orange.data import Table, Domain, DiscreteVariable
13+
from Orange.data import Table, DiscreteVariable
1414
from Orange.data.util import get_unique_names
1515
from Orange.clustering import DBSCAN
1616
from Orange.widgets.utils.annotated_data import ANNOTATED_DATA_SIGNAL_NAME
@@ -197,11 +197,10 @@ def send_data(self):
197197

198198
clusters = [c if c >= 0 else np.nan for c in model.labels]
199199
k = len(set(clusters) - {np.nan})
200-
clusters = np.array(clusters).reshape(len(self.data), 1)
200+
clusters = np.array(clusters)
201201
core_samples = set(model.projector.core_sample_indices_)
202202
in_core = np.array([1 if (i in core_samples) else 0
203203
for i in range(len(self.data))])
204-
in_core = in_core.reshape(len(self.data), 1)
205204

206205
domain = self.data.domain
207206
attributes, classes = domain.attributes, domain.class_vars
@@ -215,15 +214,8 @@ def send_data(self):
215214
u_in_core = get_unique_names(names + [u_clust_var], "DBSCAN Core")
216215
in_core_var = DiscreteVariable(u_in_core, values=("0", "1"))
217216

218-
x, y, metas = self.data.X, self.data.Y, self.data.metas
219-
220-
meta_attrs += (clust_var, )
221-
metas = np.hstack((metas, clusters))
222-
meta_attrs += (in_core_var, )
223-
metas = np.hstack((metas, in_core))
224-
225-
domain = Domain(attributes, classes, meta_attrs)
226-
new_table = Table(domain, x, y, metas, self.data.W)
217+
new_table = self.data.add_column(clust_var, clusters, to_metas=True)
218+
new_table = new_table.add_column(in_core_var, in_core, to_metas=True)
227219

228220
self._set_output_summary(new_table)
229221
self.Outputs.annotated_data.send(new_table)

Orange/widgets/unsupervised/tests/test_owdbscan.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,11 @@ def test_titanic(self):
218218
data = Table("titanic")
219219
self.send_signal(w.Inputs.data, data)
220220

221+
def test_data_retain_ids(self):
222+
self.send_signal(self.widget.Inputs.data, self.iris)
223+
output = self.get_output(self.widget.Outputs.annotated_data)
224+
np.testing.assert_array_equal(self.iris.ids, output.ids)
225+
221226
def test_missing_data(self):
222227
w = self.widget
223228
self.iris[1:5, 1] = np.nan

0 commit comments

Comments
 (0)