У меня есть следующий фрейм данных с 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()
Однако, если я попытаюсь воссоздать этот же сюжет 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 для больших наборов данных?