Programer123 commited on
Commit
f66a6b2
·
verified ·
1 Parent(s): 39791c9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -65
app.py CHANGED
@@ -1,15 +1,37 @@
1
- from dash import Dash, html, dcc, Input, Output, dash_table
2
  import dash_bootstrap_components as dbc
3
  import pandas as pd
4
  import plotly.express as px
 
5
 
6
  # -----------------------------
7
- # Dados de exemplo
8
  # -----------------------------
9
- df = pd.DataFrame({
10
- "Categoria": ["A", "B", "C", "D", "E"],
11
- "Vendas": [120, 200, 150, 80, 220],
12
- "Lucro": [30, 70, 40, 20, 90]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  })
14
 
15
  # -----------------------------
@@ -24,35 +46,20 @@ server = app.server
24
  app.layout = dbc.Container([
25
  dbc.Row([
26
  dbc.Col([
27
- html.H1("Dashboard em Dash", className="text-center my-4"),
28
  html.P(
29
- "Exemplo simples de dashboard com Dash + Bootstrap + Plotly.",
30
  className="text-center text-muted"
31
  )
32
  ])
33
  ]),
34
 
35
- dbc.Row([
36
- dbc.Col([
37
- html.Label("Escolhe a métrica:", className="fw-bold"),
38
- dcc.Dropdown(
39
- id="coluna-dropdown",
40
- options=[
41
- {"label": "Vendas", "value": "Vendas"},
42
- {"label": "Lucro", "value": "Lucro"}
43
- ],
44
- value="Vendas",
45
- clearable=False
46
- )
47
- ], md=4)
48
- ], className="mb-4"),
49
-
50
  dbc.Row([
51
  dbc.Col(
52
  dbc.Card(
53
  dbc.CardBody([
54
- html.H5("Total", className="card-title"),
55
- html.H2(id="total-card", className="text-primary")
56
  ])
57
  ),
58
  md=4
@@ -60,8 +67,8 @@ app.layout = dbc.Container([
60
  dbc.Col(
61
  dbc.Card(
62
  dbc.CardBody([
63
- html.H5("Média", className="card-title"),
64
- html.H2(id="media-card", className="text-success")
65
  ])
66
  ),
67
  md=4
@@ -69,8 +76,8 @@ app.layout = dbc.Container([
69
  dbc.Col(
70
  dbc.Card(
71
  dbc.CardBody([
72
- html.H5("Máximo", className="card-title"),
73
- html.H2(id="max-card", className="text-danger")
74
  ])
75
  ),
76
  md=4
@@ -79,54 +86,52 @@ app.layout = dbc.Container([
79
 
80
  dbc.Row([
81
  dbc.Col([
82
- dcc.Graph(id="grafico-barras")
83
- ], md=8),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
 
 
85
  dbc.Col([
 
86
  dash_table.DataTable(
87
- id="tabela",
88
- columns=[{"name": i, "id": i} for i in df.columns],
89
- data=df.to_dict("records"),
90
  style_table={"overflowX": "auto"},
91
  style_cell={
92
- "textAlign": "center",
93
- "padding": "10px"
 
 
94
  },
95
  style_header={
96
- "backgroundColor": "#f8f9fa",
97
- "fontWeight": "bold"
98
  },
99
- page_size=5
100
  )
101
- ], md=4)
102
  ])
103
  ], fluid=True)
104
 
105
- # -----------------------------
106
- # Callback
107
- # -----------------------------
108
- @app.callback(
109
- Output("grafico-barras", "figure"),
110
- Output("total-card", "children"),
111
- Output("media-card", "children"),
112
- Output("max-card", "children"),
113
- Input("coluna-dropdown", "value")
114
- )
115
- def atualizar_dashboard(coluna_escolhida):
116
- fig = px.bar(
117
- df,
118
- x="Categoria",
119
- y=coluna_escolhida,
120
- color="Categoria",
121
- title=f"{coluna_escolhida} por Categoria"
122
- )
123
-
124
- total = df[coluna_escolhida].sum()
125
- media = round(df[coluna_escolhida].mean(), 2)
126
- maximo = df[coluna_escolhida].max()
127
-
128
- return fig, total, media, maximo
129
-
130
  # -----------------------------
131
  # Run app
132
  # -----------------------------
 
1
+ from dash import Dash, html, dcc, dash_table
2
  import dash_bootstrap_components as dbc
3
  import pandas as pd
4
  import plotly.express as px
5
+ from datasets import load_dataset
6
 
7
  # -----------------------------
8
+ # Carregar dataset do Hugging Face
9
  # -----------------------------
10
+ ds = load_dataset("nvidia/Nemotron-Image-Training-v3", "aokvqa_1")
11
+ df = ds["train"].to_pandas()
12
+
13
+ # Limitar para evitar dashboard pesado
14
+ df_preview = df.head(20).copy()
15
+
16
+ # Criar dataframe de resumo
17
+ resumo_df = pd.DataFrame({
18
+ "Métrica": [
19
+ "Total de linhas",
20
+ "Total de colunas"
21
+ ],
22
+ "Valor": [
23
+ len(df),
24
+ len(df.columns)
25
+ ]
26
+ })
27
+
28
+ colunas_df = pd.DataFrame({
29
+ "Colunas": list(df.columns)
30
+ })
31
+
32
+ grafico_df = pd.DataFrame({
33
+ "Tipo": ["Registos"],
34
+ "Quantidade": [len(df)]
35
  })
36
 
37
  # -----------------------------
 
46
  app.layout = dbc.Container([
47
  dbc.Row([
48
  dbc.Col([
49
+ html.H1("Dashboard do Dataset Nemotron", className="text-center my-4"),
50
  html.P(
51
+ "Dataset carregado com Hugging Face datasets: nvidia/Nemotron-Image-Training-v3 / aokvqa_1",
52
  className="text-center text-muted"
53
  )
54
  ])
55
  ]),
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  dbc.Row([
58
  dbc.Col(
59
  dbc.Card(
60
  dbc.CardBody([
61
+ html.H5("Total de registos", className="card-title"),
62
+ html.H2(f"{len(df)}", className="text-primary")
63
  ])
64
  ),
65
  md=4
 
67
  dbc.Col(
68
  dbc.Card(
69
  dbc.CardBody([
70
+ html.H5("Total de colunas", className="card-title"),
71
+ html.H2(f"{len(df.columns)}", className="text-success")
72
  ])
73
  ),
74
  md=4
 
76
  dbc.Col(
77
  dbc.Card(
78
  dbc.CardBody([
79
+ html.H5("Subset", className="card-title"),
80
+ html.H2("aokvqa_1", className="text-danger")
81
  ])
82
  ),
83
  md=4
 
86
 
87
  dbc.Row([
88
  dbc.Col([
89
+ dcc.Graph(
90
+ figure=px.bar(
91
+ grafico_df,
92
+ x="Tipo",
93
+ y="Quantidade",
94
+ title="Quantidade de registos no dataset"
95
+ )
96
+ )
97
+ ], md=6),
98
+
99
+ dbc.Col([
100
+ html.H4("Colunas disponíveis"),
101
+ dash_table.DataTable(
102
+ columns=[{"name": i, "id": i} for i in colunas_df.columns],
103
+ data=colunas_df.to_dict("records"),
104
+ style_table={"overflowX": "auto", "height": "350px", "overflowY": "auto"},
105
+ style_cell={"textAlign": "left", "padding": "8px"},
106
+ style_header={"fontWeight": "bold", "backgroundColor": "#f8f9fa"},
107
+ page_size=10
108
+ )
109
+ ], md=6)
110
+ ], className="mb-4"),
111
 
112
+ dbc.Row([
113
  dbc.Col([
114
+ html.H4("Primeiras 20 linhas"),
115
  dash_table.DataTable(
116
+ columns=[{"name": i, "id": i} for i in df_preview.columns],
117
+ data=df_preview.astype(str).to_dict("records"),
 
118
  style_table={"overflowX": "auto"},
119
  style_cell={
120
+ "textAlign": "left",
121
+ "padding": "8px",
122
+ "maxWidth": "250px",
123
+ "whiteSpace": "normal"
124
  },
125
  style_header={
126
+ "fontWeight": "bold",
127
+ "backgroundColor": "#f8f9fa"
128
  },
129
+ page_size=20
130
  )
131
+ ])
132
  ])
133
  ], fluid=True)
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  # -----------------------------
136
  # Run app
137
  # -----------------------------