Python - 使用 dash_bootstrap_components 构建描述性统计 table
Python - Building a descriptive statistics table using dash_bootstrap_components
我正在使用 Dash 和 dash_bootstrap_components 开发仪表板。
我已经有一个包含 3 行图形的布局,这些图形将在下拉选择(来自数据框)后发生变化。
我想做但找不到答案的一件事是选择一个变量并获得一个直方图(我知道该怎么做)并且还获得一个 table 和一些统计值(类似于df.sescribe())。我在应用所有更改之前附加模拟布局。
具体做法是什么? dbc.Table?
想从这里获得一些关于如何继续的想法。
谢谢!
我在 Dash 中制作了两种 table,一种是使用 dash_table
进行交互,另一种是使用 dbc.Table
进行视觉上更吸引人的。下面是我创建的函数,它们允许我传递 pandas 数据框和一些用于格式化 table 的附加参数。我在回调中使用这些函数来创建 return table 我想要一个 html.Div
组件
互动:
dash_table
import dash_table
def make_interactive_dash_table(df, cell_width='150px', page_size=10, sort_cols=None, ascending=True):
if sort_cols:
data = df.sort_values(sort_cols, ascending=ascending).to_dict('records')
else:
data = df.to_dict('records')
# tweak these if you need to
# this helps format column widths when you enable sort_action
long_column_names = [{"if": {"column_id": column}, "min-width": "300px"} for column in df.columns if len(column) >= 30]
med_column_names = [{"if": {"column_id": column}, "min-width": "250px"} for column in df.columns if (len(column) > 15 and len(column)) < 30]
small_column_names = [{"if": {"column_id": column}, "min-width": "150px"} for column in df.columns if len(column) <= 15]
adjusted_columns = long_column_names + med_column_names + small_column_names
table = dash_table.DataTable(
columns=[{'name': i, 'id': i} for i in df.columns],
data=data,
filter_action='native',
sort_action='native',
style_table={'overflowX': 'auto'},
style_cell_conditional=adjusted_columns,
page_size=page_size
)
return table
格式化table:
dbc.Table
import dash_html_components as html
import dash_bootstrap_components as dbc
def make_formatted_dash_table(df, header=True, sort_cols=None, ascending=True, size='md'):
if sort_cols:
df.sort_values(sort_cols, ascending=ascending, inplace=True)
rows, cols = df.shape
if header:
table_header = html.Thead(
html.Tr([html.Td(i) for i in df.columns])
)
else:
table_header = None
table_body = html.Tbody(
[
html.Tr(
[
html.Td(df.iloc[row, col]) for col in range(cols)
]
) for row in range(rows)
]
)
table = dbc.Table(
[table_header, table_body],
bordered=True,
hover=True,
striped=True,
size=size
)
return table
我正在使用 Dash 和 dash_bootstrap_components 开发仪表板。 我已经有一个包含 3 行图形的布局,这些图形将在下拉选择(来自数据框)后发生变化。 我想做但找不到答案的一件事是选择一个变量并获得一个直方图(我知道该怎么做)并且还获得一个 table 和一些统计值(类似于df.sescribe())。我在应用所有更改之前附加模拟布局。
具体做法是什么? dbc.Table?
想从这里获得一些关于如何继续的想法。
谢谢!
我在 Dash 中制作了两种 table,一种是使用 dash_table
进行交互,另一种是使用 dbc.Table
进行视觉上更吸引人的。下面是我创建的函数,它们允许我传递 pandas 数据框和一些用于格式化 table 的附加参数。我在回调中使用这些函数来创建 return table 我想要一个 html.Div
组件
互动: dash_table
import dash_table
def make_interactive_dash_table(df, cell_width='150px', page_size=10, sort_cols=None, ascending=True):
if sort_cols:
data = df.sort_values(sort_cols, ascending=ascending).to_dict('records')
else:
data = df.to_dict('records')
# tweak these if you need to
# this helps format column widths when you enable sort_action
long_column_names = [{"if": {"column_id": column}, "min-width": "300px"} for column in df.columns if len(column) >= 30]
med_column_names = [{"if": {"column_id": column}, "min-width": "250px"} for column in df.columns if (len(column) > 15 and len(column)) < 30]
small_column_names = [{"if": {"column_id": column}, "min-width": "150px"} for column in df.columns if len(column) <= 15]
adjusted_columns = long_column_names + med_column_names + small_column_names
table = dash_table.DataTable(
columns=[{'name': i, 'id': i} for i in df.columns],
data=data,
filter_action='native',
sort_action='native',
style_table={'overflowX': 'auto'},
style_cell_conditional=adjusted_columns,
page_size=page_size
)
return table
格式化table: dbc.Table
import dash_html_components as html
import dash_bootstrap_components as dbc
def make_formatted_dash_table(df, header=True, sort_cols=None, ascending=True, size='md'):
if sort_cols:
df.sort_values(sort_cols, ascending=ascending, inplace=True)
rows, cols = df.shape
if header:
table_header = html.Thead(
html.Tr([html.Td(i) for i in df.columns])
)
else:
table_header = None
table_body = html.Tbody(
[
html.Tr(
[
html.Td(df.iloc[row, col]) for col in range(cols)
]
) for row in range(rows)
]
)
table = dbc.Table(
[table_header, table_body],
bordered=True,
hover=True,
striped=True,
size=size
)
return table