Что такое re.sub в graphviz.Source () - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь использовать эту функцию с именем draw_tree.

def draw_tree(t, df, size=10, ratio=0.6, precision=0):
    """ Draws a representation of a random forest in IPython.
    Parameters:
    -----------
    t: The tree you wish to draw
    df: The data used to train the tree. This is used to get the names of the features.
    """
    s=export_graphviz(t, out_file=None, feature_names=df.columns, filled=True,
                      special_characters=True, rotate=True, precision=precision)
    IPython.display.display(graphviz.Source(re.sub('Tree {',
            f'Tree {{ size={size}; ratio={ratio}', s)))

Однако, когда я использую ее в своей программе, я получаю сообщение об ошибке:

NameError: name 're' не определено

Вот вызов функции

draw_tree(m.estimators_[0],df,precision=3)

Я не уверен, что подразумевается под этим объектом re. Я знаю, что библиотека graphviz несколько изменилась между версиями, поэтому, возможно, я не использую правильную версию или, возможно, мне не хватает необходимого модуля?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020
re.sub('Tree {',f'Tree {{ size={size}; ratio={ratio}', s)

Это заменяет регулярное выражение (улучшено str.replace()). Таким образом, вам нужно добавить re модуль для выполнения этой функции.

import re
0 голосов
/ 25 февраля 2020

Добавление import re должно решить проблему.

Это модуль, к которому можно применять регулярные выражения, см .: https://docs.python.org/3/library/re.html

re .sub изменит строковый аргумент graphviz.Source в соответствии с s в вашем случае.

Вы вызываете graphviz.Source через IPython.display.display метод в качестве аргумента. Так что re действительно модуль верхнего уровня, который вы должны сначала импортировать, чтобы это заработало. Это не имеет ничего общего с библиотекой graphviz, потому что вы сначала делаете некоторые замены в строке, которые будут аргументом для библиотеки graphviz. И подстановка будет оценена в первую очередь, перед вызовом любых graphviz источников или Ipython источников.

Решение состоит в том, чтобы добавить import re перед вызовом graphviz.Source с помощью re.sub(…) метод внутри. (Импорт re в той же функции или в модуле не имеет значения.)

Следует также отметить, что фрагмент кода, в котором определена замена, кажется, не работает. После решения вашей проблемы с библиотекой re вы должны исправить свое регулярное выражение. Я уже связал метод re.sub для вас.

...