Загрузите CSV-файл со сложными числами и прочитайте его в веб-приложении Bokeh - PullRequest
2 голосов
/ 12 июня 2019

Я хочу загрузить csv-файл со сложными числами в веб-приложение bokeh.Решение DuCorey отлично работает для целых чисел и чисел с плавающей точкой, см .: Загрузить файл CSV и прочитать его в веб-приложении Bokeh Но когда я изменяю тип values_type с Int на Complex в models.py и вставляю комплексное число вCSV-файл, он больше не работает.Я не хочу рисовать импортированный массив, как это делал Дукори (и он не будет работать в его примере).Просто импортируйте значения и напечатайте их.

Я изменил следующие три файла:

models.py

from bokeh.core.properties import List, String, Dict, Int, Complex, Float
from bokeh.models import LayoutDOM

class FileInput(LayoutDOM):
    __implementation__ = 'static/js/extensions_file_input.coffee'
    __javascript__ = './input_widget/static/js/papaparse.js'

    value = String(help="""
    Selected input file.
    """)

    file_name = String(help="""
    Name of the input file.
    """)

    accept = String(help="""
    Character string of accepted file types for the input. This should be
    written like normal html.
    """)

    data = List(Dict(keys_type=String, values_type=Complex))

csv-файл

x,y
1,2
3,3
3,5+1j
10,25

и main.py

from bokeh.core.properties import List, String, Dict, Int
from bokeh.models import LayoutDOM

from bokeh.layouts import column
from bokeh.models import Button, ColumnDataSource
from bokeh.io import curdoc
from bokeh.plotting import Figure

import pandas as pd

from models import FileInput

button_input = FileInput(id="fileSelect",
                         accept=".csv")

def change_plot_data(attr, old, new):
    new_df = pd.DataFrame(new)
    print(new_df)

button_input.on_change('data', change_plot_data)

layout = column(button_input)
curdoc().add_root(layout)

Я получаю следующее сообщение об ошибке: DeserializationError ('Сложный ожидаемый комплекс, получил 5 + 1j').

Спасибо за все советы!

1 Ответ

0 голосов
/ 12 июня 2019

Подход, использованный в другом примере, использует библиотеку JavaScript для выполнения анализа файла и отправки его обратно. AFAIK это не будет работать в этом случае по двум причинам:

  • библиотека papaparse JS сама по себе ничего не знает о разборе комплексных чисел
  • На самом деле я не уверен, что отправка комплексных значений из JS обратно в Python работоспособна. AFAIK, ты первый человек, который хочет попробовать это с 2013 года

Я думаю, чтобы сделать эту работу лучшим вариантом, просто отправьте все содержимое необработанного файла обратно на сервер Bokeh (как один большой String), а затем используйте Pandas для анализа файла из строки.

...