Python не является моим ведущим языком, однако я думаю, что ответ на ваш вопрос довольно прост и не требует больших исследований.
Здесь используется StringIO для поддержки текстового потока ввода / вывода.Ваша функция показывает дерево, но для этого нужен способ, какой-то транспорт для передачи данных.
Здесь f = io.StringIO()
вы инициализируете свой поток данных.После этого вы можете использовать его по своему усмотрению, в данном конкретном случае:
export_graphviz(tree, out_file=f, feature_names=features)
Здесь: out_file=f
вы экспортируете данные в свой поток, используяинициализируется до f = io.StringIO();
.Поскольку StringIO - это текстовый файл в памяти, вы в основном откладываете свои данные в потоковом объекте для дальнейшего использования.Благодаря этому вам не нужно записывать свои данные в файл .dot , вместо этого вы временно удерживаете их (и временно означает, что ваш поток используется)
Подробнее об этом конкретном случае
pydotplus.graph_from_dot_data(f.getvalue()).write_png(path)
Здесь: f.getvalue()
вы генерируете свой график из .dot данных.При наиболее простом использовании вы должны указать путь к файлу .dot , в котором будут храниться ранее сгенерированные данные, но ВЫ НЕ ДОЛЖНЫ!Это хитрость, ваши данные все еще находятся в потоковом объекте, который вы создали и заполнили заранее!Так что теперь все, что вам нужно сделать, это направить его прямо к этой функции, которая сгенерирует ваше графическое изображение с этими данными и сохранит его как .png файл.
Связь между системными файлами и вашей программойможет быть установлен разными способами, но обычно вы используете потоки.Вы инициализируете поток в самом начале, используете его и затем закрываете.Каждый std::cout
или std:err
(мой основной язык, извините за этот пример не на Python) - это поток.Stream позволяет вам поддерживать обмен данными между вашей программой и назначенным тэгретом (например, консолью, или в данном случае файлом), однако вы можете использовать его также в качестве временного хранилища, что в данном конкретном случае ускорит процесс генерации изображения, поскольку вы этого не делаете.действительно нужно записывать и загружать данные в файл.Все, что вам нужно сделать, это записать данные в поток в порядке, который будет принимать другая функция, а затем использовать тот же поток для чтения этих данных в целях генерации изображения.
Подробнее о StringIO