Plotly Express Box Plot создает белый экран при построении графиков с использованием большого кадра данных - PullRequest
1 голос
/ 21 октября 2019

У меня есть следующий фрейм данных с 40M строками:

occ_status_pre = ["retired","unemployed","house person","financially independent","employed","student"]

test_df = pd.DataFrame(np.random.randint(0,100,size=(40000000, 4)), columns=["id","occupation_status","age","height"])

occ_status = []
for num in range(0,40000000):
        occ_status.append(random.choice(occ_status_pre))

test_df["occupation_status"] = occ_status
test_df.head()
   id occupation_status  age  height
0  32        unemployed   41      78
1  83           retired   35      99
2  77           retired   61      19
3   8      house person   28      64
4   6        unemployed   46      22

В Seaborn я могу без проблем создать блок-диаграмму для всего фрейма данных:

fig,ax = plt.subplots(figsize=(10,8))
ax = sns.boxplot(x="occupation_status",y="age",data=test_df)
plt.tight_layout()

enter image description here

Однако, если я попытаюсь воссоздать этот же сюжет Box в Plotly 4.2, это приведет к сбою моего веб-браузера.

Дальнейшее расследование привело меня к атрибуту pio.renderers. Если я установлю pio.renderers равным «браузер», то он выведет визуализацию графика Box на новую вкладку браузера:

fig = px.box(test_df,x="occupation_status",y="age")
fig.show(renderer="browser")

Однако, если количество строк в моем кадре данных превышает 28M строк, это будетотображать только пустой белый экран - визуализация никогда не появляется на новой вкладке.

Из дальнейших исследований не имеет значения, было ли у меня больше столбцов в моем фрейме данных, если я пытаюсь построить график Box. для кадра данных, который имеет более 28M строк, я не могу построить его.

Я знаю, что есть render_mode="webgl" для работы с большими данными, но я могу только установить это для типов графиков Scatter и Line.

Итак, мой вопрос, есть ли способ создания интерактивных диаграмм Box в Plotly для больших фреймов данных? (Тот же вопрос остается в силе и для сюжетов для скрипки.)

Если нет, то каково ограничение, препятствующее отображению графика, когда число строк превышает 28 миллионов строк?

Если это невозможно в Plotly, то кто-нибудь знает какие-либо альтернативные инструменты, которые я мог бы создавать с помощью Python? Например, возможно ли это с помощью ggplot2, или в этом тоже будет существовать то же ограничение?

Моя конечная цель - создавать красивые интерактивные графики с использованием Plotly, а затем создавать панели инструментов Dash, использующие эти графики.

Большое спасибо

23/10/19: дополнительное тестирование:

Я понизил Plotly до 3.10.0 и получил тот же результат - ни одна фигура не отображается, и яЯ только что получил белый экран. Теперь я снова обновился до версии 4.2.

Дополнительно я установил запонки. Я следовал описанному здесь процессу, чтобы запонки работали с Plotly 4: https://github.com/santosjorge/cufflinks/pull/203

Поведение запонок почти идентично поведению Plotly Express - если я позволю графику визуализироваться в блокноте, то ничего не произойдет (без сбоев / ошибок, никаких выходных данных, но ячейка помечается как запущенная). Если я выведу его в html-файл в соответствии с принятым ответом. Редактировать в Запонки для сюжета: настройка параметров конфигурации cufflinks запускает , тогда он создает очень большой (приблизительно 1,5 ГБ) html-файл, который снова отображается какбелый экран при открытии.

Поскольку эта проблема, по-видимому, вызвана работой на большом фрейме данных, я подумал, что, возможно, проблема в том, что ноутбук Jupyter не может обрабатывать такой большой объем данных. Поэтому я попытался отрегулировать iopub.data_rate согласно https://community.plot.ly/t/tips-for-using-plotly-with-jupyter-notebook-5-0-the-latest-version/4156, но это не имело значения.

Поскольку я испытываю очень похожее поведение как в Plotly Express, так и в запонках, это наводит меня на мысль, чтопроблема должна быть связана с самой Plotly?

У кого-нибудь был какой-либо успех в создании участков Box или Violin для больших наборов данных?

...