#python #plotly #data-visualization #plotly-python
#python #plotly #визуализация данных #plotly-python
Вопрос:
Как вы создаете график CDF с данными распределения частот в фрейме данных Pandas, используя Plotly? Предположим, что следующие игрушечные данные
value freq
1 3
2 2
3 1
Все примеры показывают, как это сделать с необработанными данными, которые выглядят как:
value
1
1
1
2
2
3
Я могу сделать это с Pandas .plot
подобным образом (но я бы предпочел сделать то же самое с Plotly):
stats_df = df
stats_df['pdf'] = stats_df['count'] / sum(stats_df['count'])
# calculate CDF
stats_df['cdf'] = stats_df['pdf'].cumsum()
stats_df = stats_df.reset_index()
# plot
stats_df.plot(x = 'n_calls',
y = ['pdf', 'cdf'],
logx = True,
kind = 'line',
grid = True)
Если вы хотите продемонстрировать с помощью игрушечного набора данных, вот один из них: https://raw.githubusercontent.com/plotly/datasets/master/2010_alcohol_consumption_by_country.csv
Список литературы:
Ответ №1:
Невозможно построить CDF в Plotly.
На Plotly можно построить только PDF-файл и гистограмму (образец алкоголя см. Ниже).
Код для приведенного выше графика выглядит следующим образом:
import plotly.figure_factory as ff
import pandas as pd
data = pd.read_csv(
'https://raw.githubusercontent.com/plotly/datasets/master/2010_alcohol_consumption_by_country.csv')
x = data['alcohol'].values.tolist()
group_labels = ['']
fig = ff.create_distplot([x], group_labels,
bin_size=.25, show_rug=False)
fig.show()
Если вам нужен именно CDF, то используйте сторонние библиотеки для подготовки данных.
В приведенном ниже примере я использую Numpy.
Код для приведенного выше графика выглядит следующим образом:
import plotly.graph_objs as go
import numpy as np
import pandas as pd
data = pd.read_csv(
'https://raw.githubusercontent.com/plotly/datasets/master/2010_alcohol_consumption_by_country.csv')
x = data['alcohol'].values.tolist()
hist, bin_edges = np.histogram(x, bins=100, density=True)
cdf = np.cumsum(hist * np.diff(bin_edges))
fig = go.Figure(data=[
go.Bar(x=bin_edges, y=hist, name='Histogram'),
go.Scatter(x=bin_edges, y=cdf, name='CDF')
])
fig.show()
Обратите внимание, что CDF представляет собой прерывистую линию. Это связано с тем, что это не приближенная функция для неизвестного распределения.
Чтобы получить плавную функцию, вам нужно знать закон распределения.