Как извлечь данные из Bokeh Point Draw Tool - сгенерированной HTML-таблицы для использования в Python - PullRequest
0 голосов
/ 01 сентября 2018

После долгих хлопот я наконец-то смог заставить инструмент рисования точек Боке работать только для того, чтобы столкнуться с другой проблемой: работой с данными, сгенерированными этим инструментом. Код ниже генерирует интерактивный график, а размещение / перемещение точек обновляет таблицу в режиме реального времени. Однако я не могу понять, как извлечь данные из этой таблицы, например, в CSV-файл. Я пробовал несколько стратегий, таких как Excel >> Data >> From Web >> table и использование библиотеки bs4, но не повезло. Я ничего не знаю о html, но при открытии html-файла, сгенерированного после использования инструмента рисования точек, данные для начальных точек и точки, расположенные позже с помощью инструмента, оказываются в разных местах. Это может быть причиной проблемы. По сути, мне просто нужно получить данные из таблицы html в формате, который я могу легко использовать в python. Спасибо за любую помощь, которую вы можете предоставить.

ИСТОЧНИК КОД (python3.6.2)

from datetime import date
import time
from random import randint

from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource, PointDrawTool
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn
from bokeh.plotting import figure

output_file("pointDrawResults.html")

data = { "x": [5, 2, 8], "y": [5, 7, 8]}

src = ColumnDataSource(data)

columns = [
        TableColumn(field = "x", title = "xs"),
        TableColumn(field = "y", title = "ys"),
        ]
data_table = DataTable(source = src, columns = columns, width = 400, height = 280)

plot = figure(x_range = (0, 10), y_range = (0, 10), width = 400, height = 400, title = "Point Draw Tool")

renderer = plot.circle("x", "y", size = 15, fill_color = "blue", fill_alpha = 0.8, source = src)

draw_tool = PointDrawTool(renderers = [renderer], empty_value = 1)
plot.add_tools(draw_tool)
plot.toolbar.active_drag = draw_tool

show(widgetbox(data_table))
show(plot)

1 Ответ

0 голосов
/ 04 сентября 2018

Я закончил тем, что написал следующую функцию, чтобы извлечь новые вершины, сгенерированные из инструмента рисования точек, из самого HTML-файла. Совет кому-либо еще в этом затруднительном положении, убедитесь, что вы увеличиваете размер отображаемой таблицы, чтобы все вершины отображались одновременно (без вертикальной полосы прокрутки). В противном случае вершины исключаются из файла HTML и не могут быть найдены / извлечены функцией.

import re

def extractHtmlVerts(self):
        indexList = []

        with open(self.vertexFileE.get(), 'r') as htmlFile:
            htmlCont = htmlFile.read()

        tokens = re.finditer("(\d+\.\d+)</span>", htmlCont)

        type = "x"
        for match in tokens:
            if type == "x":
                indexList.append(round(float(match.group(1))))
                type = "y"
            else:
                type = "x"

        return indexList 
...