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