本文整理汇总了Python中Orange.widgets.utils.itemmodels.DomainModel.set_domain方法的典型用法代码示例。如果您正苦于以下问题:Python DomainModel.set_domain方法的具体用法?Python DomainModel.set_domain怎么用?Python DomainModel.set_domain使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Orange.widgets.utils.itemmodels.DomainModel
的用法示例。
在下文中一共展示了DomainModel.set_domain方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_read_only
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
def test_read_only(self):
model = DomainModel()
domain = Domain([ContinuousVariable(x) for x in "abc"])
model.set_domain(domain)
index = model.index(0, 0)
self.assertRaises(TypeError, model.append, 42)
self.assertRaises(TypeError, model.extend, [42])
self.assertRaises(TypeError, model.insert, 0, 42)
self.assertRaises(TypeError, model.remove, 0)
self.assertRaises(TypeError, model.pop)
self.assertRaises(TypeError, model.clear)
self.assertRaises(TypeError, model.reverse)
self.assertRaises(TypeError, model.sort)
with self.assertRaises(TypeError):
model[0] = 1
with self.assertRaises(TypeError):
del model[0]
self.assertRaises(TypeError, model.setData, index, domain[0])
self.assertTrue(model.setData(index, "foo", Qt.ToolTipRole))
self.assertRaises(TypeError, model.setItemData, index,
{Qt.EditRole: domain[0], Qt.ToolTipRole: "foo"})
self.assertTrue(model.setItemData(index, {Qt.ToolTipRole: "foo"}))
self.assertRaises(TypeError, model.insertRows, 0, 0)
self.assertRaises(TypeError, model.removeRows, 0, 0)
示例2: test_separators
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
def test_separators(self):
attrs = [ContinuousVariable(n) for n in "abg"]
classes = [ContinuousVariable(n) for n in "deh"]
metas = [ContinuousVariable(n) for n in "ijf"]
model = DomainModel()
sep = [model.Separator]
model.set_domain(Domain(attrs, classes, metas))
self.assertEqual(list(model), classes + sep + metas + sep + attrs)
model = DomainModel()
model.set_domain(Domain(attrs, [], metas))
self.assertEqual(list(model), metas + sep + attrs)
model = DomainModel()
model.set_domain(Domain([], [], metas))
self.assertEqual(list(model), metas)
model = DomainModel(placeholder="foo")
model.set_domain(Domain([], [], metas))
self.assertEqual(list(model), [None] + sep + metas)
model = DomainModel(placeholder="foo")
model.set_domain(Domain(attrs, [], metas))
self.assertEqual(list(model), [None] + sep + metas + sep + attrs)
示例3: test_no_separators
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
def test_no_separators(self):
"""
GH-2697
"""
attrs = [ContinuousVariable(n) for n in "abg"]
classes = [ContinuousVariable(n) for n in "deh"]
metas = [ContinuousVariable(n) for n in "ijf"]
model = DomainModel(order=DomainModel.SEPARATED, separators=False)
model.set_domain(Domain(attrs, classes, metas))
self.assertEqual(list(model), classes + metas + attrs)
model = DomainModel(order=DomainModel.SEPARATED, separators=True)
model.set_domain(Domain(attrs, classes, metas))
self.assertEqual(
list(model),
classes + [PyListModel.Separator] + metas + [PyListModel.Separator] + attrs)
示例4: test_subparts
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
def test_subparts(self):
attrs = [ContinuousVariable(n) for n in "abg"]
classes = [ContinuousVariable(n) for n in "deh"]
metas = [ContinuousVariable(n) for n in "ijf"]
m = DomainModel
sep = m.Separator
model = DomainModel(
order=(m.ATTRIBUTES | m.METAS, sep, m.CLASSES))
model.set_domain(Domain(attrs, classes, metas))
self.assertEqual(list(model), attrs + metas + [sep] + classes)
m = DomainModel
sep = m.Separator
model = DomainModel(
order=(m.ATTRIBUTES | m.METAS, sep, m.CLASSES),
alphabetical=True)
model.set_domain(Domain(attrs, classes, metas))
self.assertEqual(list(model),
sorted(attrs + metas, key=lambda x: x.name) +
[sep] +
sorted(classes, key=lambda x: x.name))
示例5: test_filtering
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
def test_filtering(self):
cont = [ContinuousVariable(n) for n in "abc"]
disc = [DiscreteVariable(n) for n in "def"]
attrs = cont + disc
model = DomainModel(valid_types=(ContinuousVariable, ))
model.set_domain(Domain(attrs))
self.assertEqual(list(model), cont)
model = DomainModel(valid_types=(DiscreteVariable, ))
model.set_domain(Domain(attrs))
self.assertEqual(list(model), disc)
disc[0].attributes["hidden"] = True
model.set_domain(Domain(attrs))
self.assertEqual(list(model), disc[1:])
model = DomainModel(valid_types=(DiscreteVariable, ),
skip_hidden_vars=False)
model.set_domain(Domain(attrs))
self.assertEqual(list(model), disc)
示例6: OWScatterPlot
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
#.........这里部分代码省略.........
if self.attribute_selection_list and self.graph.domain is not None and \
all(attr in self.graph.domain
for attr in self.attribute_selection_list):
self.attr_x = self.attribute_selection_list[0]
self.attr_y = self.attribute_selection_list[1]
self.attribute_selection_list = None
self.update_graph()
self.cb_class_density.setEnabled(self.graph.can_draw_density())
self.cb_reg_line.setEnabled(self.graph.can_draw_regresssion_line())
if self.data is not None and self.__pending_selection_restore is not None:
self.apply_selection(self.__pending_selection_restore)
self.__pending_selection_restore = None
self.unconditional_commit()
def apply_selection(self, selection):
"""Apply `selection` to the current plot."""
if self.data is not None:
self.graph.selection = np.zeros(len(self.data), dtype=np.uint8)
self.selection_group = [x for x in selection if x[0] < len(self.data)]
selection_array = np.array(self.selection_group).T
self.graph.selection[selection_array[0]] = selection_array[1]
self.graph.update_colors(keep_colors=True)
@Inputs.features
def set_shown_attributes(self, attributes):
if attributes and len(attributes) >= 2:
self.attribute_selection_list = attributes[:2]
else:
self.attribute_selection_list = None
def init_attr_values(self):
data = self.data
domain = data.domain if data and len(data) else None
self.xy_model.set_domain(domain)
self.attr_x = self.xy_model[0] if self.xy_model else None
self.attr_y = self.xy_model[1] if len(self.xy_model) >= 2 \
else self.attr_x
self.graph.set_domain(data)
def set_attr(self, attr_x, attr_y):
self.attr_x, self.attr_y = attr_x, attr_y
self.update_attr()
def update_attr(self):
self.update_graph()
self.cb_class_density.setEnabled(self.graph.can_draw_density())
self.cb_reg_line.setEnabled(self.graph.can_draw_regresssion_line())
self.send_features()
def update_colors(self):
self._vizrank_color_change()
self.cb_class_density.setEnabled(self.graph.can_draw_density())
def update_density(self):
self.update_graph(reset_view=False)
def update_regression_line(self):
self.update_graph(reset_view=False)
def update_graph(self, reset_view=True, **_):
self.graph.zoomStack = []
if self.graph.data is None:
return
self.graph.update_data(self.attr_x, self.attr_y, reset_view)
def selection_changed(self):
示例7: NormalizeEditor
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
#.........这里部分代码省略.........
"upper": self.upper, "int_method": self.int_method,
"attr": self.chosen_attr}
def setMethod(self, method):
if self.__method != method:
self.__method = method
b = self._group.button(method)
b.setChecked(True)
for widget in [self.attrcb, self.int_method_cb, self.lspin, self.uspin]:
widget.setEnabled(False)
if method is Normalize.Attribute:
self.attrcb.setEnabled(True)
elif method is Normalize.Area:
self.int_method_cb.setEnabled(True)
self.lspin.setEnabled(True)
self.uspin.setEnabled(True)
self.activateOptions()
self.changed.emit()
def setL(self, lower, user=True):
if user:
self.user_changed = True
if self.lower != lower:
self.lower = lower
with blocked(self.lspin):
self.lspin.setValue(lower)
self.lline.setValue(lower)
self.changed.emit()
def setU(self, upper, user=True):
if user:
self.user_changed = True
if self.upper != upper:
self.upper = upper
with blocked(self.uspin):
self.uspin.setValue(upper)
self.uline.setValue(upper)
self.changed.emit()
def reorderLimits(self):
if (IntegrateEditor.Integrators_classes[self.int_method]
is Integrate.PeakAt):
self.upper = self.lower + 10
limits = [self.lower, self.upper]
self.lower, self.upper = min(limits), max(limits)
self.lspin.setValue(self.lower)
self.uspin.setValue(self.upper)
self.lline.setValue(self.lower)
self.uline.setValue(self.upper)
self.edited.emit()
def setinttype(self):
if self.int_method != self.int_method_cb.currentIndex():
self.int_method = self.int_method_cb.currentIndex()
self.reorderLimits()
self.activateOptions()
self.changed.emit()
def __on_buttonClicked(self):
method = self._group.checkedId()
if method != self.__method:
self.setMethod(self._group.checkedId())
self.edited.emit()
@staticmethod
def createinstance(params):
method = params.get("method", Normalize.Vector)
lower = params.get("lower", 0)
upper = params.get("upper", 4000)
int_method_index = params.get("int_method", 0)
int_method = IntegrateEditor.Integrators_classes[int_method_index]
attr = params.get("attr", None)
if method != NORMALIZE_BY_REFERENCE:
return Normalize(method=method, lower=lower, upper=upper,
int_method=int_method, attr=attr)
else:
# avoids circular imports
from orangecontrib.spectroscopy.widgets.owpreprocess import REFERENCE_DATA_PARAM
reference = params.get(REFERENCE_DATA_PARAM, None)
return NormalizeReference(reference=reference)
def set_preview_data(self, data):
edited = False
if not self.user_changed:
x = getx(data)
if len(x):
self.setL(min(x))
self.setU(max(x))
edited = True
if data is not None and data.domain != self.last_domain:
self.last_domain = data.domain
self.attrs.set_domain(data.domain)
try: # try to load the feature
self.chosen_attr = self.saved_attr
except ValueError: # could not load the chosen attr
self.chosen_attr = self.attrs[0] if self.attrs else None
self.saved_attr = self.chosen_attr
edited = True
if edited:
self.edited.emit()
示例8: OWFeatureStatistics
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
#.........这里部分代码省略.........
self.table_view = FeatureStatisticsTableView(self.model, parent=self)
self.table_view.selectionModel().selectionChanged.connect(self.on_select)
self.table_view.horizontalHeader().sectionClicked.connect(self.on_header_click)
self.mainArea.layout().addWidget(self.table_view)
def sizeHint(self):
return QSize(1050, 500)
def _filter_table_variables(self):
regex = QRegExp(self.filter_string)
# If the user explicitly types different cases, we assume they know
# what they are searching for and account for letter case in filter
different_case = (
any(c.islower() for c in self.filter_string) and
any(c.isupper() for c in self.filter_string)
)
if not different_case:
regex.setCaseSensitivity(Qt.CaseInsensitive)
@Inputs.data
def set_data(self, data):
# Clear outputs and reset widget state
self.closeContext()
self.selected_rows = []
self.model.resetSorting()
self.Outputs.reduced_data.send(None)
self.Outputs.statistics.send(None)
# Setup widget state for new data and restore settings
self.data = data
if data is not None:
self.color_var_model.set_domain(data.domain)
if self.data.domain.class_vars:
self.color_var = self.data.domain.class_vars[0]
else:
self.color_var_model.set_domain(None)
self.color_var = None
self.model.set_data(data)
self.openContext(self.data)
self.__restore_selection()
self.__restore_sorting()
# self._filter_table_variables()
self.__color_var_changed()
self.set_info()
self.commit()
def __restore_selection(self):
"""Restore the selection on the table view from saved settings."""
selection_model = self.table_view.selectionModel()
selection = QItemSelection()
if len(self.selected_rows):
for row in self.model.mapFromSourceRows(self.selected_rows):
selection.append(QItemSelectionRange(
self.model.index(row, 0),
self.model.index(row, self.model.columnCount() - 1)
))
selection_model.select(selection, QItemSelectionModel.ClearAndSelect)
def __restore_sorting(self):
"""Restore the sort column and order from saved settings."""
sort_column, sort_order = self.sorting
if sort_column < self.model.columnCount():
示例9: OWSieveDiagram
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
class OWSieveDiagram(OWWidget):
name = "Sieve Diagram"
description = "Visualize the observed and expected frequencies " \
"for a combination of values."
icon = "icons/SieveDiagram.svg"
priority = 200
class Inputs:
data = Input("Data", Table, default=True)
features = Input("Features", AttributeList)
class Outputs:
selected_data = Output("Selected Data", Table, default=True)
annotated_data = Output(ANNOTATED_DATA_SIGNAL_NAME, Table)
graph_name = "canvas"
want_control_area = False
settings_version = 1
settingsHandler = DomainContextHandler()
attr_x = ContextSetting(None)
attr_y = ContextSetting(None)
selection = ContextSetting(set())
def __init__(self):
# pylint: disable=missing-docstring
super().__init__()
self.data = self.discrete_data = None
self.attrs = []
self.input_features = None
self.areas = []
self.selection = set()
self.attr_box = gui.hBox(self.mainArea)
self.domain_model = DomainModel(valid_types=DomainModel.PRIMITIVE)
combo_args = dict(
widget=self.attr_box, master=self, contentsLength=12,
callback=self.update_attr, sendSelectedValue=True, valueType=str,
model=self.domain_model)
fixed_size = (QSizePolicy.Fixed, QSizePolicy.Fixed)
gui.comboBox(value="attr_x", **combo_args)
gui.widgetLabel(self.attr_box, "\u2715", sizePolicy=fixed_size)
gui.comboBox(value="attr_y", **combo_args)
self.vizrank, self.vizrank_button = SieveRank.add_vizrank(
self.attr_box, self, "Score Combinations", self.set_attr)
self.vizrank_button.setSizePolicy(*fixed_size)
self.canvas = QGraphicsScene()
self.canvasView = ViewWithPress(
self.canvas, self.mainArea, handler=self.reset_selection)
self.mainArea.layout().addWidget(self.canvasView)
self.canvasView.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.canvasView.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
def sizeHint(self):
return QSize(450, 550)
def resizeEvent(self, event):
super().resizeEvent(event)
self.update_graph()
def showEvent(self, event):
super().showEvent(event)
self.update_graph()
@classmethod
def migrate_context(cls, context, version):
if not version:
settings.rename_setting(context, "attrX", "attr_x")
settings.rename_setting(context, "attrY", "attr_y")
settings.migrate_str_to_variable(context)
@Inputs.data
def set_data(self, data):
"""
Discretize continuous attributes, and put all attributes and discrete
metas into self.attrs.
Select the first two attributes unless context overrides this.
Method `resolve_shown_attributes` is called to use the attributes from
the input, if it exists and matches the attributes in the data.
Remove selection; again let the context override this.
Initialize the vizrank dialog, but don't show it.
Args:
data (Table): input data
"""
if isinstance(data, SqlTable) and data.approx_len() > LARGE_TABLE:
data = data.sample_time(DEFAULT_SAMPLE_TIME)
self.closeContext()
self.data = data
self.areas = []
self.selection = set()
if self.data is None:
self.attrs[:] = []
self.domain_model.set_domain(None)
#.........这里部分代码省略.........
示例10: OWScatterPlot
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
#.........这里部分代码省略.........
if self.valid_data is not None and not np.all(self.valid_data):
msg = self.Information if np.any(self.valid_data) else self.Warning
msg.missing_coords(self.attr_x.name, self.attr_y.name)
return np.vstack((x_data, y_data)).T
# Tooltip
def _point_tooltip(self, point_id, skip_attrs=()):
point_data = self.data[point_id]
xy_attrs = (self.attr_x, self.attr_y)
text = "<br/>".join(
escape('{} = {}'.format(var.name, point_data[var]))
for var in xy_attrs)
if self.tooltip_shows_all:
others = super()._point_tooltip(point_id, skip_attrs=xy_attrs)
if others:
text = "<b>{}</b><br/><br/>{}".format(text, others)
return text
def add_data(self, time=0.4):
if self.data and len(self.data) > 2000:
self.__timer.stop()
return
data_sample = self.sql_data.sample_time(time, no_cache=True)
if data_sample:
data_sample.download_data(2000, partial=True)
data = Table(data_sample)
self.data = Table.concatenate((self.data, data), axis=0)
self.handleNewSignals()
def init_attr_values(self):
super().init_attr_values()
data = self.data
domain = data.domain if data and len(data) else None
self.xy_model.set_domain(domain)
self.attr_x = self.xy_model[0] if self.xy_model else None
self.attr_y = self.xy_model[1] if len(self.xy_model) >= 2 \
else self.attr_x
def switch_sampling(self):
self.__timer.stop()
if self.auto_sample and self.sql_data:
self.add_data()
self.__timer.start()
def set_subset_data(self, subset_data):
self.warning()
if isinstance(subset_data, SqlTable):
if subset_data.approx_len() < AUTO_DL_LIMIT:
subset_data = Table(subset_data)
else:
self.warning("Data subset does not support large Sql tables")
subset_data = None
super().set_subset_data(subset_data)
# called when all signals are received, so the graph is updated only once
def handleNewSignals(self):
if self.attribute_selection_list and self.data is not None and \
self.data.domain is not None and \
all(attr in self.data.domain for attr
in self.attribute_selection_list):
self.attr_x, self.attr_y = self.attribute_selection_list[:2]
self.attribute_selection_list = None
super().handleNewSignals()
self._vizrank_color_change()
@Inputs.features
示例11: OWHyper
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
#.........这里部分代码省略.........
self.resize(900, 700)
self._update_integration_type()
# prepare interface according to the new context
self.contextAboutToBeOpened.connect(lambda x: self.init_interface_data(x[0]))
def init_interface_data(self, data):
same_domain = (self.data and data and
data.domain == self.data.domain)
if not same_domain:
self.init_attr_values(data)
def output_image_selection(self):
if not self.data:
self.Outputs.selected_data.send(None)
self.Outputs.annotated_data.send(None)
self.curveplot.set_data(None)
return
indices = np.flatnonzero(self.imageplot.selection_group)
annotated_data = groups_or_annotated_table(self.data, self.imageplot.selection_group)
self.Outputs.annotated_data.send(annotated_data)
selected = self.data[indices]
self.Outputs.selected_data.send(selected if selected else None)
if selected:
self.curveplot.set_data(selected)
else:
self.curveplot.set_data(self.data)
def init_attr_values(self, data):
domain = data.domain if data is not None else None
self.feature_value_model.set_domain(domain)
self.attr_value = self.feature_value_model[0] if self.feature_value_model else None
def redraw_data(self):
self.imageplot.update_view()
def update_feature_value(self):
self.redraw_data()
def _update_integration_type(self):
self.line1.hide()
self.line2.hide()
self.line3.hide()
if self.value_type == 0:
self.box_values_spectra.setDisabled(False)
self.box_values_feature.setDisabled(True)
if self.integration_methods[self.integration_method] != Integrate.PeakAt:
self.line1.show()
self.line2.show()
else:
self.line3.show()
elif self.value_type == 1:
self.box_values_spectra.setDisabled(True)
self.box_values_feature.setDisabled(False)
QTest.qWait(1) # first update the interface
def _change_integration(self):
# change what to show on the image
self._update_integration_type()
self.redraw_data()
def changed_integral_range(self):
if self.disable_integral_range:
示例12: ImagePlot
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
#.........这里部分代码省略.........
def init_interface_data(self, data):
same_domain = (self.data and data and
data.domain == self.data.domain)
if not same_domain:
self.init_attr_values(data)
def help_event(self, ev):
pos = self.plot.vb.mapSceneToView(ev.scenePos())
sel = self._points_at_pos(pos)
prepared = []
if sel is not None:
data, vals, points = self.data[sel], self.data_values[sel], self.data_points[sel]
for d, v, p in zip(data, vals, points):
basic = "({}, {}): {}".format(p[0], p[1], v)
variables = [v for v in self.data.domain.metas + self.data.domain.class_vars
if v not in [self.attr_x, self.attr_y]]
features = ['{} = {}'.format(attr.name, d[attr]) for attr in variables]
prepared.append("\n".join([basic] + features))
text = "\n\n".join(prepared)
if text:
text = ('<span style="white-space:pre">{}</span>'
.format(escape(text)))
QToolTip.showText(ev.screenPos(), text, widget=self.plotview)
return True
else:
return False
def update_attr(self):
self.update_view()
def init_attr_values(self, data):
domain = data.domain if data is not None else None
self.xy_model.set_domain(domain)
self.attr_x = self.xy_model[0] if self.xy_model else None
self.attr_y = self.xy_model[1] if len(self.xy_model) >= 2 \
else self.attr_x
def save_graph(self):
saveplot.save_plot(self.plotview, self.parent.graph_writers)
def set_data(self, data):
if data:
self.data = data
self.data_ids = {e: i for i, e in enumerate(data.ids)}
self.restore_selection_settings()
else:
self.data = None
self.data_ids = {}
def refresh_markings(self, di):
refresh_integral_markings([{"draw": di}], self.markings_integral, self.parent.curveplot)
def update_view(self):
self.img.clear()
self.img.setSelection(None)
self.lsx = None
self.lsy = None
self.data_points = None
self.data_values = None
self.data_imagepixels = None
if self.data and self.attr_x and self.attr_y:
xat = self.data.domain[self.attr_x]
yat = self.data.domain[self.attr_y]
ndom = Orange.data.Domain([xat, yat])
示例13: OWCorrelations
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
#.........这里部分代码省略.........
selection = QItemSelection()
# This flag is needed because data in the model could be
# filtered by a feature and therefore selection could not be found
selection_in_model = False
if self.selection:
sel_names = sorted(name for name, _ in self.selection)
for i in range(model.rowCount()):
# pylint: disable=protected-access
names = sorted(x.name for x in model.data(
model.index(i, 0), CorrelationRank._AttrRole))
if names == sel_names:
selection.select(model.index(i, 0),
model.index(i, model.columnCount() - 1))
selection_in_model = True
break
if not selection_in_model:
selection.select(model.index(0, 0),
model.index(0, model.columnCount() - 1))
self.vizrank.rank_table.selectionModel().select(
selection, QItemSelectionModel.ClearAndSelect)
@Inputs.data
def set_data(self, data):
self.closeContext()
self.clear_messages()
self.data = data
self.cont_data = None
self.selection = ()
if data is not None:
if len(data) < 2:
self.Warning.not_enough_inst()
else:
domain = data.domain
cont_attrs = [a for a in domain.attributes if a.is_continuous]
cont_dom = Domain(cont_attrs, domain.class_vars, domain.metas)
cont_data = Table.from_table(cont_dom, data)
remover = Remove(Remove.RemoveConstant)
cont_data = remover(cont_data)
if remover.attr_results["removed"]:
self.Information.removed_cons_feat()
if len(cont_data.domain.attributes) < 2:
self.Warning.not_enough_vars()
else:
self.cont_data = SklImpute()(cont_data)
self.set_feature_model()
self.openContext(self.cont_data)
self.apply()
self.vizrank.button.setEnabled(self.cont_data is not None)
def set_feature_model(self):
self.feature_model.set_domain(self.cont_data and self.cont_data.domain)
self.feature = None
def apply(self):
self.vizrank.initialize()
if self.cont_data is not None:
# this triggers self.commit() by changing vizrank selection
self.vizrank.toggle()
else:
self.commit()
def commit(self):
if self.data is None or self.cont_data is None:
self.Outputs.data.send(self.data)
self.Outputs.features.send(None)
self.Outputs.correlations.send(None)
return
attrs = [ContinuousVariable("Correlation"), ContinuousVariable("FDR")]
metas = [StringVariable("Feature 1"), StringVariable("Feature 2")]
domain = Domain(attrs, metas=metas)
model = self.vizrank.rank_model
x = np.array([[float(model.data(model.index(row, 0), role))
for role in (Qt.DisplayRole, CorrelationRank.PValRole)]
for row in range(model.rowCount())])
x[:, 1] = FDR(list(x[:, 1]))
# pylint: disable=protected-access
m = np.array([[a.name for a in model.data(model.index(row, 0),
CorrelationRank._AttrRole)]
for row in range(model.rowCount())], dtype=object)
corr_table = Table(domain, x, metas=m)
corr_table.name = "Correlations"
self.Outputs.data.send(self.data)
# data has been imputed; send original attributes
self.Outputs.features.send(AttributeList(
[self.data.domain[name] for name, _ in self.selection]))
self.Outputs.correlations.send(corr_table)
def send_report(self):
self.report_table(CorrelationType.items()[self.correlation_type],
self.vizrank.rank_table)
@classmethod
def migrate_context(cls, context, version):
if version < 2:
sel = context.values["selection"]
context.values["selection"] = ([(var.name, vartype(var))
for var in sel[0]], sel[1])
示例14: OWStackAlign
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
class OWStackAlign(OWWidget):
# Widget's name as displayed in the canvas
name = "Align Stack"
# Short widget description
description = (
"Aligns and crops a stack of images using various methods.")
icon = "icons/stackalign.svg"
# Define inputs and outputs
class Inputs:
data = Input("Stack of images", Table, default=True)
class Outputs:
newstack = Output("Aligned image stack", Table, default=True)
class Error(OWWidget.Error):
nan_in_image = Msg("Unknown values within images: {} unknowns")
invalid_axis = Msg("Invalid axis: {}")
autocommit = settings.Setting(True)
want_main_area = True
want_control_area = True
resizing_enabled = False
settingsHandler = DomainContextHandler()
sobel_filter = settings.Setting(False)
attr_x = ContextSetting(None)
attr_y = ContextSetting(None)
ref_frame_num = settings.Setting(0)
def __init__(self):
super().__init__()
# TODO: add input box for selecting which should be the reference frame
box = gui.widgetBox(self.controlArea, "Axes")
common_options = dict(
labelWidth=50, orientation=Qt.Horizontal, sendSelectedValue=True,
valueType=str)
self.xy_model = DomainModel(DomainModel.METAS | DomainModel.CLASSES,
valid_types=ContinuousVariable)
self.cb_attr_x = gui.comboBox(
box, self, "attr_x", label="Axis x:", callback=self._update_attr,
model=self.xy_model, **common_options)
self.cb_attr_y = gui.comboBox(
box, self, "attr_y", label="Axis y:", callback=self._update_attr,
model=self.xy_model, **common_options)
self.contextAboutToBeOpened.connect(self._init_interface_data)
box = gui.widgetBox(self.controlArea, "Parameters")
gui.checkBox(box, self, "sobel_filter",
label="Use sobel filter",
callback=self._sobel_changed)
gui.separator(box)
hbox = gui.hBox(box)
self.le1 = lineEditIntRange(box, self, "ref_frame_num", bottom=1, default=1,
callback=self._ref_frame_changed)
hbox.layout().addWidget(QLabel("Reference frame:", self))
hbox.layout().addWidget(self.le1)
gui.rubber(self.controlArea)
plot_box = gui.widgetBox(self.mainArea, "Shift curves")
self.plotview = pg.PlotWidget(background="w")
plot_box.layout().addWidget(self.plotview)
# TODO: resize widget to make it a bit smaller
self.data = None
gui.auto_commit(self.controlArea, self, "autocommit", "Send Data")
def _sanitize_ref_frame(self):
if self.ref_frame_num > self.data.X.shape[1]:
self.ref_frame_num = self.data.X.shape[1]
def _ref_frame_changed(self):
self._sanitize_ref_frame()
self.commit()
def _sobel_changed(self):
self.commit()
def _init_attr_values(self, data):
domain = data.domain if data is not None else None
self.xy_model.set_domain(domain)
self.attr_x = self.xy_model[0] if self.xy_model else None
self.attr_y = self.xy_model[1] if len(self.xy_model) >= 2 \
else self.attr_x
def _init_interface_data(self, args):
data = args[0]
same_domain = (self.data and data and
data.domain == self.data.domain)
#.........这里部分代码省略.........
示例15: OWAverage
# 需要导入模块: from Orange.widgets.utils.itemmodels import DomainModel [as 别名]
# 或者: from Orange.widgets.utils.itemmodels.DomainModel import set_domain [as 别名]
class OWAverage(OWWidget):
# Widget's name as displayed in the canvas
name = "Average Spectra"
# Short widget description
description = (
"Calculates averages.")
icon = "icons/average.svg"
# Define inputs and outputs
class Inputs:
data = Input("Data", Orange.data.Table, default=True)
class Outputs:
averages = Output("Averages", Orange.data.Table, default=True)
settingsHandler = settings.DomainContextHandler()
group_var = settings.ContextSetting(None)
autocommit = settings.Setting(True)
want_main_area = False
resizing_enabled = False
class Warning(OWWidget.Warning):
nodata = Msg("No useful data on input!")
def __init__(self):
super().__init__()
self.data = None
self.set_data(self.data) # show warning
self.group_vars = DomainModel(
placeholder="None", separators=False,
valid_types=Orange.data.DiscreteVariable)
self.group_view = gui.listView(
self.controlArea, self, "group_var", box="Group by",
model=self.group_vars, callback=self.grouping_changed)
gui.auto_commit(self.controlArea, self, "autocommit", "Apply")
@Inputs.data
def set_data(self, dataset):
self.Warning.nodata.clear()
self.closeContext()
self.data = dataset
self.group_var = None
if dataset is None:
self.Warning.nodata()
else:
self.group_vars.set_domain(dataset.domain)
self.openContext(dataset.domain)
self.commit()
@staticmethod
def average_table(table):
"""
Return a features-averaged table.
For metas and class_vars,
- return average value of ContinuousVariable
- return value of DiscreteVariable, StringVariable and TimeVariable
if all are the same.
- return unknown otherwise.
"""
if len(table) == 0:
return table
mean = np.nanmean(table.X, axis=0, keepdims=True)
avg_table = Orange.data.Table.from_numpy(table.domain,
X=mean,
Y=np.atleast_2d(table.Y[0].copy()),
metas=np.atleast_2d(table.metas[0].copy()))
cont_vars = [var for var in table.domain.class_vars + table.domain.metas
if isinstance(var, Orange.data.ContinuousVariable)]
for var in cont_vars:
index = table.domain.index(var)
col, _ = table.get_column_view(index)
try:
avg_table[0, index] = np.nanmean(col)
except AttributeError:
# numpy.lib.nanfunctions._replace_nan just guesses and returns
# a boolean array mask for object arrays because object arrays
# do not support `isnan` (numpy-gh-9009)
# Since we know that ContinuousVariable values must be np.float64
# do an explicit cast here
avg_table[0, index] = np.nanmean(col, dtype=np.float64)
other_vars = [var for var in table.domain.class_vars + table.domain.metas
if not isinstance(var, Orange.data.ContinuousVariable)]
for var in other_vars:
index = table.domain.index(var)
col, _ = table.get_column_view(index)
val = var.to_val(avg_table[0, var])
if not np.all(col == val):
avg_table[0, var] = Orange.data.Unknown
#.........这里部分代码省略.........