Как запустить Orange.canvas из скрипта python и преобразовать в него таблицу? - PullRequest
0 голосов
/ 07 января 2020

Я новичок в Python & Orange и хочу использовать Spyder & Orange для некоторого интеллектуального анализа данных. Я работаю с Rstudio & Rattle следующим образом:

...

# make a dataframe so called "mydata", then transform it to rattle
library(rattle)
rattle(dataset="mydata")

...

Перед вызовом довольно удобно выполнить некоторую сложную подготовку данных Погремушка, а затем получить последний сценарий от Погремушки. Поэтому мне интересно, могу ли я работать таким образом с Python или нет. Я нахожу скрипт запуска виджета внутри скрипта pyhton, например:

import Orange
from Orange.widgets.visualize.owruleviewer import OWRuleViewer
from AnyQt.QtWidgets import QApplication
from Orange.classification import CN2Learner

data = Orange.data.Table("titanic")
learner = Orange.classification.CN2Learner()
model = learner(data)
model.instances = data

a = QApplication([])
ow = OWRuleViewer()
ow.set_classifier(model)

ow.show()
a.exec()

Итак, как это сделать с главным окном Orange.canvas? Любая идея приветствуется, спасибо заранее.

1 Ответ

0 голосов
/ 08 января 2020

Теперь, когда я могу запустить Orange в сценарии python:

...

# transform a pandas dataframe to an orange table
from Orange.data.pandas_compat import table_from_frame
ot1 = table_from_frame(data)

...

import sys
from Orange.canvas import __main__ as om
sys.exit(om.main(["-l 1","--no-splash","--no-welcome"]))

Вопрос теперь как преобразовать оранжевую таблицу ot1 в оранжевую, поместить ее в виджет и поместить на холст.

И я изменяю исходный код orangecanvas / main.py, чтобы обойти проблему stdout & stderr, эта ошибка исправлено в Python3 .7.5:

...

def fix_win_pythonw_std_stream():
    """
    On windows when running without a console (using pythonw.exe without I/O
    redirection) the std[err|out] file descriptors are invalid
    (`http://bugs.python.org/issue706263`_). We `fix` this by setting the
    stdout/stderr to `os.devnull`.
    """
    if sys.platform == "win32" and \
            os.path.basename(sys.executable) == "pythonw.exe":
        # if sys.stdout is None or sys.stdout.fileno() < 0:
        #     sys.stdout = open(os.devnull, "w")
        # if sys.stderr is None or sys.stderr.fileno() < 0:
        #     sys.stderr = open(os.devnull, "w")

        # This bug is fixed in Python3.7.5
        print("win32 pythonw.exe")

...

...