viewx 0.2.2__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {viewx-0.2.2 → viewx-0.2.4}/PKG-INFO +40 -69
- {viewx-0.2.2 → viewx-0.2.4}/README.md +39 -67
- {viewx-0.2.2 → viewx-0.2.4}/setup.py +2 -3
- {viewx-0.2.2 → viewx-0.2.4}/tests/test1.py +14 -16
- viewx-0.2.4/tests/test8_slides_auto.py +15 -0
- viewx-0.2.4/tests/test9_report_auto.py +22 -0
- viewx-0.2.4/viewx/DataMatrix/__init__.py +30 -0
- viewx-0.2.4/viewx/DataMatrix/analyzers.py +325 -0
- viewx-0.2.4/viewx/DataMatrix/bibliometrics.py +143 -0
- viewx-0.2.4/viewx/DataMatrix/datamatrix_engine.py +1348 -0
- viewx-0.2.4/viewx/DataMatrix/explorer.py +87 -0
- viewx-0.2.4/viewx/DataMatrix/visualizer.py +511 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/HTML/html_engine.py +408 -167
- viewx-0.2.4/viewx/Report/auto_builder.py +187 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/Report/report_engine.py +30 -1
- {viewx-0.2.2 → viewx-0.2.4}/viewx/Slides/__init__.py +1 -0
- viewx-0.2.4/viewx/Slides/auto_builder.py +171 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/Slides/slides_engine.py +125 -49
- {viewx-0.2.2 → viewx-0.2.4}/viewx/__init__.py +5 -5
- {viewx-0.2.2 → viewx-0.2.4}/viewx/datasets/__init__.py +20 -14
- viewx-0.2.4/viewx/shared/__init__.py +20 -0
- viewx-0.2.4/viewx/shared/a11y.py +24 -0
- viewx-0.2.4/viewx/shared/explorer_runtime.py +523 -0
- viewx-0.2.4/viewx/shared/insights.py +121 -0
- viewx-0.2.4/viewx/shared/plotly_bundle.py +28 -0
- viewx-0.2.4/viewx/shared/runtime.py +237 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx.egg-info/PKG-INFO +40 -69
- {viewx-0.2.2 → viewx-0.2.4}/viewx.egg-info/SOURCES.txt +13 -2
- {viewx-0.2.2 → viewx-0.2.4}/viewx.egg-info/requires.txt +0 -1
- viewx-0.2.2/tests/test2.py +0 -39
- viewx-0.2.2/viewx/DataMatrix/__init__.py +0 -3
- viewx-0.2.2/viewx/DataMatrix/bibliometrics.py +0 -52
- viewx-0.2.2/viewx/DataMatrix/datamatrix_engine.py +0 -184
- viewx-0.2.2/viewx/DataMatrix/visualizer.py +0 -75
- {viewx-0.2.2 → viewx-0.2.4}/setup.cfg +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/tests/test3.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/tests/test4.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/tests/test5.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/tests/test6.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/tests/test7.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/HTML/__init__.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/Report/__init__.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/Slides/charts.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/Slides/components.py +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/datasets/course_completion.csv +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/datasets/iris.csv +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/datasets/penguins.csv +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/datasets/sp500_companies.csv +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx/datasets/titanic.csv +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx.egg-info/dependency_links.txt +0 -0
- {viewx-0.2.2 → viewx-0.2.4}/viewx.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: viewx
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Librería de visualización adaptable para HTML, Dashboards y PDFs en Python
|
|
5
5
|
Home-page: https://github.com/GhostAnalyst30/ViewX
|
|
6
6
|
Author: Emmanuel Ascendra Perez
|
|
@@ -25,7 +25,6 @@ Requires-Dist: matplotlib>=3.8.0
|
|
|
25
25
|
Requires-Dist: pylatex>=1.4.2
|
|
26
26
|
Requires-Dist: seaborn>=0.12.2
|
|
27
27
|
Requires-Dist: plotly>=6.0.0
|
|
28
|
-
Requires-Dist: streamlit>=1.32.0
|
|
29
28
|
Provides-Extra: streamlit
|
|
30
29
|
Requires-Dist: streamlit>=1.32.0; extra == "streamlit"
|
|
31
30
|
Provides-Extra: dash
|
|
@@ -52,7 +51,7 @@ Dynamic: requires-dist
|
|
|
52
51
|
Dynamic: requires-python
|
|
53
52
|
Dynamic: summary
|
|
54
53
|
|
|
55
|
-
# ViewX — v2.
|
|
54
|
+
# ViewX — v2.4
|
|
56
55
|
|
|
57
56
|
**ViewX** es un paquete moderno de Python diseñado para generar **páginas HTML interactivas**, **dashboards dinámicos** y **visualizaciones inteligentes** que se adaptan automáticamente a los objetos agregados por el usuario.
|
|
58
57
|
|
|
@@ -78,81 +77,53 @@ pip install viewx
|
|
|
78
77
|
|
|
79
78
|
## Ejemplo rápido
|
|
80
79
|
|
|
81
|
-
### Crear
|
|
80
|
+
### Crear un DashBoard HTML
|
|
82
81
|
```python
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
df_ventas = pd.DataFrame({
|
|
88
|
-
'Mes': ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
|
|
89
|
-
'Ventas': [120, 135, 148, 170, 195, 210, 245, 268, 290, 310, 335, 400],
|
|
90
|
-
'Beneficio': [30, 35, 42, 51, 58, 63, 73, 80, 87, 93, 100, 120],
|
|
91
|
-
'Clientes': [45, 48, 52, 58, 65, 72, 80, 88, 95, 102, 110, 125]
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
# Datos para gráfico de barras
|
|
95
|
-
df_productos = pd.DataFrame({
|
|
96
|
-
'Producto': ['Producto A', 'Producto B', 'Producto C', 'Producto D', 'Producto E'],
|
|
97
|
-
'Ventas': [450, 320, 280, 190, 150]
|
|
82
|
+
df = pd.DataFrame({
|
|
83
|
+
"date": dates, "region": regions, "product": products,
|
|
84
|
+
"revenue": revenue_str, "costs": costs.round(2),
|
|
85
|
+
"units": units, "rating": rating, "returned": returned,
|
|
98
86
|
})
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
df_clientes = pd.DataFrame({
|
|
102
|
-
'Edad': [25, 32, 28, 45, 38, 29, 51, 42, 35, 30],
|
|
103
|
-
'Gasto': [120, 200, 150, 300, 250, 180, 400, 320, 220, 160],
|
|
104
|
-
'Segmento': ['Joven', 'Adulto', 'Joven', 'Senior', 'Adulto', 'Joven', 'Senior', 'Adulto', 'Adulto', 'Joven']
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
# 2. Configurar el dashboard
|
|
108
|
-
dashboard = HTML(
|
|
109
|
-
title="📊 Dashboard Ejecutivo - Demo",
|
|
110
|
-
theme="corporate_blue", # Temas: corporate_blue, dark_enterprise, modern_green, void_indigo, glass_ocean, cyberpunk_neon
|
|
111
|
-
cols=12, # Grid de 12 columnas
|
|
112
|
-
rows=12, # 12 filas de altura
|
|
113
|
-
gap=16,
|
|
114
|
-
padding=20,
|
|
115
|
-
navbar={
|
|
116
|
-
"title": "📈 ViewX PRO",
|
|
117
|
-
"items": [
|
|
118
|
-
{"label": "Inicio", "link": "#"},
|
|
119
|
-
{"label": "Ventas", "link": "#"},
|
|
120
|
-
{"label": "Clientes", "link": "#"},
|
|
121
|
-
{"label": "Reportes", "link": "#"}
|
|
122
|
-
]
|
|
123
|
-
}
|
|
87
|
+
df["revenue"] = pd.to_numeric(
|
|
88
|
+
df["revenue"].str.replace(r"[$,]", "", regex=True), errors="coerce"
|
|
124
89
|
)
|
|
125
90
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
dashboard.add_valuebox("Clientes Activos", "1,247", "👥", "#FF6B35", row=1, col=7, height=2, width=3)
|
|
131
|
-
dashboard.add_valuebox("Tasa Conversión", "24.5%", "🎯", "#9B59B6", row=1, col=10, height=2, width=3)
|
|
132
|
-
|
|
133
|
-
# Fila 2-5: Gráfico de líneas (ventas mensuales) - Método sencillo con datos
|
|
134
|
-
dashboard.add_chart(
|
|
135
|
-
data=df_ventas,
|
|
136
|
-
chart_type="line",
|
|
137
|
-
x="Mes",
|
|
138
|
-
y="Ventas",
|
|
139
|
-
title="📈 Evolución de Ventas 2024",
|
|
140
|
-
row=3, col=1, height=10, width=6
|
|
91
|
+
fig_bar = px.bar(
|
|
92
|
+
df.groupby("region")["revenue"].sum().reset_index().sort_values("revenue"),
|
|
93
|
+
x="revenue", y="region", orientation="h", color="region",
|
|
94
|
+
color_discrete_sequence=["#059669", "#10B981", "#34D399", "#6EE7B7"],
|
|
141
95
|
)
|
|
96
|
+
fig_bar.update_layout(showlegend=False)
|
|
142
97
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
chart_type="bar",
|
|
147
|
-
x="Producto",
|
|
148
|
-
y="Ventas",
|
|
149
|
-
title="🏷️ Ventas por Producto",
|
|
150
|
-
row=3, col=7, height=10, width=6
|
|
98
|
+
fig_line = px.line(
|
|
99
|
+
df.groupby("date")["revenue"].sum().reset_index(),
|
|
100
|
+
x="date", y="revenue", color_discrete_sequence=["#059669"],
|
|
151
101
|
)
|
|
152
102
|
|
|
153
|
-
|
|
154
|
-
|
|
103
|
+
dash = HTML(
|
|
104
|
+
title="Manual Dashboard", theme="modern_green",
|
|
105
|
+
cols=12, rows=9, gap=14, padding=20,
|
|
106
|
+
navbar={"title": "Manual Dashboard",
|
|
107
|
+
"items": [{"label": "Home", "link": "#"}, {"label": "Analytics", "link": "#"}]},
|
|
108
|
+
authors=[{"name": "Data Team", "email": "data@acme.com"}],
|
|
109
|
+
data_button=True, df=df,
|
|
110
|
+
)
|
|
155
111
|
|
|
112
|
+
dash.add_valuebox("Total Revenue", "$2.4M", icon_key="dollar", row=1, col=1, height=2, width=3)
|
|
113
|
+
dash.add_valuebox("Total Units", "18.4K", icon_key="box", row=1, col=4, height=2, width=3)
|
|
114
|
+
dash.add_valuebox("Avg Rating", "4.12", icon_key="award", row=1, col=7, height=2, width=3)
|
|
115
|
+
dash.add_valuebox("Return Rate", "12%", icon_key="percent", row=1, col=10, height=2, width=3)
|
|
116
|
+
|
|
117
|
+
dash.add_infobox(df=df, variable="revenue",
|
|
118
|
+
info=["mean", "median", "std", "min", "max", "kurtosis", "skewness", "nulls"],
|
|
119
|
+
title="Revenue Stats", row=3, col=1, height=4, width=3)
|
|
120
|
+
dash.add_chart(fig=fig_bar, title="Revenue by Region",
|
|
121
|
+
row=3, col=4, height=4, width=9, show_info_btn=True,
|
|
122
|
+
_info_stats={"Regions": "4", "Total": "$2.4M"})
|
|
123
|
+
dash.add_chart(fig=fig_line, title="Daily Revenue Trend",
|
|
124
|
+
row=7, col=1, height=3, width=12, show_info_btn=True)
|
|
125
|
+
|
|
126
|
+
dash.generate("demo6_manual.html")
|
|
156
127
|
```
|
|
157
128
|
|
|
158
129
|

|
|
39
|
-
|
|
40
|
-
# Datos para gráfico de barras
|
|
41
|
-
df_productos = pd.DataFrame({
|
|
42
|
-
'Producto': ['Producto A', 'Producto B', 'Producto C', 'Producto D', 'Producto E'],
|
|
43
|
-
'Ventas': [450, 320, 280, 190, 150]
|
|
29
|
+
df = pd.DataFrame({
|
|
30
|
+
"date": dates, "region": regions, "product": products,
|
|
31
|
+
"revenue": revenue_str, "costs": costs.round(2),
|
|
32
|
+
"units": units, "rating": rating, "returned": returned,
|
|
44
33
|
})
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
df_clientes = pd.DataFrame({
|
|
48
|
-
'Edad': [25, 32, 28, 45, 38, 29, 51, 42, 35, 30],
|
|
49
|
-
'Gasto': [120, 200, 150, 300, 250, 180, 400, 320, 220, 160],
|
|
50
|
-
'Segmento': ['Joven', 'Adulto', 'Joven', 'Senior', 'Adulto', 'Joven', 'Senior', 'Adulto', 'Adulto', 'Joven']
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
# 2. Configurar el dashboard
|
|
54
|
-
dashboard = HTML(
|
|
55
|
-
title="📊 Dashboard Ejecutivo - Demo",
|
|
56
|
-
theme="corporate_blue", # Temas: corporate_blue, dark_enterprise, modern_green, void_indigo, glass_ocean, cyberpunk_neon
|
|
57
|
-
cols=12, # Grid de 12 columnas
|
|
58
|
-
rows=12, # 12 filas de altura
|
|
59
|
-
gap=16,
|
|
60
|
-
padding=20,
|
|
61
|
-
navbar={
|
|
62
|
-
"title": "📈 ViewX PRO",
|
|
63
|
-
"items": [
|
|
64
|
-
{"label": "Inicio", "link": "#"},
|
|
65
|
-
{"label": "Ventas", "link": "#"},
|
|
66
|
-
{"label": "Clientes", "link": "#"},
|
|
67
|
-
{"label": "Reportes", "link": "#"}
|
|
68
|
-
]
|
|
69
|
-
}
|
|
34
|
+
df["revenue"] = pd.to_numeric(
|
|
35
|
+
df["revenue"].str.replace(r"[$,]", "", regex=True), errors="coerce"
|
|
70
36
|
)
|
|
71
37
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
dashboard.add_valuebox("Clientes Activos", "1,247", "👥", "#FF6B35", row=1, col=7, height=2, width=3)
|
|
77
|
-
dashboard.add_valuebox("Tasa Conversión", "24.5%", "🎯", "#9B59B6", row=1, col=10, height=2, width=3)
|
|
78
|
-
|
|
79
|
-
# Fila 2-5: Gráfico de líneas (ventas mensuales) - Método sencillo con datos
|
|
80
|
-
dashboard.add_chart(
|
|
81
|
-
data=df_ventas,
|
|
82
|
-
chart_type="line",
|
|
83
|
-
x="Mes",
|
|
84
|
-
y="Ventas",
|
|
85
|
-
title="📈 Evolución de Ventas 2024",
|
|
86
|
-
row=3, col=1, height=10, width=6
|
|
38
|
+
fig_bar = px.bar(
|
|
39
|
+
df.groupby("region")["revenue"].sum().reset_index().sort_values("revenue"),
|
|
40
|
+
x="revenue", y="region", orientation="h", color="region",
|
|
41
|
+
color_discrete_sequence=["#059669", "#10B981", "#34D399", "#6EE7B7"],
|
|
87
42
|
)
|
|
43
|
+
fig_bar.update_layout(showlegend=False)
|
|
88
44
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
chart_type="bar",
|
|
93
|
-
x="Producto",
|
|
94
|
-
y="Ventas",
|
|
95
|
-
title="🏷️ Ventas por Producto",
|
|
96
|
-
row=3, col=7, height=10, width=6
|
|
45
|
+
fig_line = px.line(
|
|
46
|
+
df.groupby("date")["revenue"].sum().reset_index(),
|
|
47
|
+
x="date", y="revenue", color_discrete_sequence=["#059669"],
|
|
97
48
|
)
|
|
98
49
|
|
|
99
|
-
|
|
100
|
-
|
|
50
|
+
dash = HTML(
|
|
51
|
+
title="Manual Dashboard", theme="modern_green",
|
|
52
|
+
cols=12, rows=9, gap=14, padding=20,
|
|
53
|
+
navbar={"title": "Manual Dashboard",
|
|
54
|
+
"items": [{"label": "Home", "link": "#"}, {"label": "Analytics", "link": "#"}]},
|
|
55
|
+
authors=[{"name": "Data Team", "email": "data@acme.com"}],
|
|
56
|
+
data_button=True, df=df,
|
|
57
|
+
)
|
|
101
58
|
|
|
59
|
+
dash.add_valuebox("Total Revenue", "$2.4M", icon_key="dollar", row=1, col=1, height=2, width=3)
|
|
60
|
+
dash.add_valuebox("Total Units", "18.4K", icon_key="box", row=1, col=4, height=2, width=3)
|
|
61
|
+
dash.add_valuebox("Avg Rating", "4.12", icon_key="award", row=1, col=7, height=2, width=3)
|
|
62
|
+
dash.add_valuebox("Return Rate", "12%", icon_key="percent", row=1, col=10, height=2, width=3)
|
|
63
|
+
|
|
64
|
+
dash.add_infobox(df=df, variable="revenue",
|
|
65
|
+
info=["mean", "median", "std", "min", "max", "kurtosis", "skewness", "nulls"],
|
|
66
|
+
title="Revenue Stats", row=3, col=1, height=4, width=3)
|
|
67
|
+
dash.add_chart(fig=fig_bar, title="Revenue by Region",
|
|
68
|
+
row=3, col=4, height=4, width=9, show_info_btn=True,
|
|
69
|
+
_info_stats={"Regions": "4", "Total": "$2.4M"})
|
|
70
|
+
dash.add_chart(fig=fig_line, title="Daily Revenue Trend",
|
|
71
|
+
row=7, col=1, height=3, width=12, show_info_btn=True)
|
|
72
|
+
|
|
73
|
+
dash.generate("demo6_manual.html")
|
|
102
74
|
```
|
|
103
75
|
|
|
104
76
|

|
|
39
40
|
|
|
40
41
|
# ════════════════════════════════════════════════════════════════════════════
|
|
@@ -49,7 +50,8 @@ HTML.auto_generate(
|
|
|
49
50
|
authors = [
|
|
50
51
|
{"name": "Ana García", "email": "ana@empresa.com"},
|
|
51
52
|
{"name": "Luis Torres", "email": "luis@empresa.com"},
|
|
52
|
-
]
|
|
53
|
+
],
|
|
54
|
+
show = False,
|
|
53
55
|
)
|
|
54
56
|
|
|
55
57
|
# ════════════════════════════════════════════════════════════════════════════
|
|
@@ -63,6 +65,7 @@ HTML.auto_generate(
|
|
|
63
65
|
filename = "demo3_kpi_focus.html",
|
|
64
66
|
layout = "kpi_focus",
|
|
65
67
|
authors = "Carlos Méndez",
|
|
68
|
+
show = False,
|
|
66
69
|
)
|
|
67
70
|
|
|
68
71
|
# ════════════════════════════════════════════════════════════════════════════
|
|
@@ -75,6 +78,7 @@ HTML.auto_generate(
|
|
|
75
78
|
title = "Demo 4 · Chart Focus",
|
|
76
79
|
filename = "demo4_chart_focus.html",
|
|
77
80
|
layout = "chart_focus",
|
|
81
|
+
show = False,
|
|
78
82
|
)
|
|
79
83
|
|
|
80
84
|
# ════════════════════════════════════════════════════════════════════════════
|
|
@@ -87,14 +91,11 @@ HTML.auto_generate(
|
|
|
87
91
|
title = "Demo 5 · Table First",
|
|
88
92
|
filename = "demo5_table_first.html",
|
|
89
93
|
layout = "table_first",
|
|
94
|
+
show = False,
|
|
90
95
|
)
|
|
91
96
|
|
|
92
97
|
# ════════════════════════════════════════════════════════════════════════════
|
|
93
98
|
# DEMO 6 — Layout 100% personalizado
|
|
94
|
-
# Diseño:
|
|
95
|
-
# [KPI ventas] [KPI utilidad] [KPI unidades] | [Chart barras región]
|
|
96
|
-
# [Chart línea temporal (ventas) ] | [Chart scatter ]
|
|
97
|
-
# [Tabla completa ]
|
|
98
99
|
# ════════════════════════════════════════════════════════════════════════════
|
|
99
100
|
HTML.auto_generate(
|
|
100
101
|
df,
|
|
@@ -104,19 +105,15 @@ HTML.auto_generate(
|
|
|
104
105
|
filename = "demo6_custom.html",
|
|
105
106
|
authors = [{"name": "Equipo BI", "email": "bi@empresa.com"}],
|
|
106
107
|
layout = [
|
|
107
|
-
# Fila 1: 3 KPIs a la izquierda + 1 chart a la derecha
|
|
108
108
|
{"type": "kpi", "index": 0, "row": 1, "col": 1, "height": 2, "width": 3},
|
|
109
109
|
{"type": "kpi", "index": 1, "row": 1, "col": 4, "height": 2, "width": 3},
|
|
110
110
|
{"type": "kpi", "index": 2, "row": 1, "col": 7, "height": 2, "width": 3},
|
|
111
|
-
{"type": "chart", "index": 1, "row": 1, "col": 10, "height": 7, "width": 3},
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
{"type": "chart", "index": 0, "row": 3, "col": 1, "height": 5, "width": 6}, # línea tiempo
|
|
115
|
-
{"type": "chart", "index": 2, "row": 3, "col": 7, "height": 5, "width": 3}, # scatter
|
|
116
|
-
|
|
117
|
-
# Fila 3: tabla completa
|
|
111
|
+
{"type": "chart", "index": 1, "row": 1, "col": 10, "height": 7, "width": 3},
|
|
112
|
+
{"type": "chart", "index": 0, "row": 3, "col": 1, "height": 5, "width": 6},
|
|
113
|
+
{"type": "chart", "index": 2, "row": 3, "col": 7, "height": 5, "width": 3},
|
|
118
114
|
{"type": "table", "row": 8, "col": 1, "height": 4, "width": 12},
|
|
119
|
-
]
|
|
115
|
+
],
|
|
116
|
+
show = False,
|
|
120
117
|
)
|
|
121
118
|
|
|
122
119
|
# ════════════════════════════════════════════════════════════════════════════
|
|
@@ -135,9 +132,10 @@ HTML.auto_generate(
|
|
|
135
132
|
template = "corporate_blue",
|
|
136
133
|
title = "Demo 7 · Parseo Automático de Strings",
|
|
137
134
|
filename = "demo7_parseo.html",
|
|
135
|
+
show = False,
|
|
138
136
|
)
|
|
139
137
|
|
|
140
|
-
print("\
|
|
138
|
+
print("\nTodos los dashboards generados:")
|
|
141
139
|
for i, name in enumerate([
|
|
142
140
|
"demo1_auto.html",
|
|
143
141
|
"demo2_cols.html",
|
|
@@ -147,4 +145,4 @@ for i, name in enumerate([
|
|
|
147
145
|
"demo6_custom.html",
|
|
148
146
|
"demo7_parseo.html",
|
|
149
147
|
], 1):
|
|
150
|
-
print(f" {i}. {name}")
|
|
148
|
+
print(f" {i}. {name}")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""Auto-generated slides from a DataFrame."""
|
|
2
|
+
|
|
3
|
+
from viewx.datasets import load_iris
|
|
4
|
+
from viewx.Slides import Presentation
|
|
5
|
+
|
|
6
|
+
df = load_iris()
|
|
7
|
+
|
|
8
|
+
path = Presentation.auto_generate(
|
|
9
|
+
df,
|
|
10
|
+
title="Iris Dataset Overview",
|
|
11
|
+
theme="ocean",
|
|
12
|
+
filename="output/test8_auto_slides.html",
|
|
13
|
+
show=False,
|
|
14
|
+
)
|
|
15
|
+
print(f"Presentation.auto_generate -> {path}")
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Auto-generated PDF quality report from a DataFrame."""
|
|
2
|
+
|
|
3
|
+
import shutil
|
|
4
|
+
|
|
5
|
+
from viewx.datasets import load_iris
|
|
6
|
+
from viewx import Report
|
|
7
|
+
|
|
8
|
+
if not shutil.which("pdflatex"):
|
|
9
|
+
print("SKIP: pdflatex not found — install a LaTeX distribution to run this test.")
|
|
10
|
+
raise SystemExit(0)
|
|
11
|
+
|
|
12
|
+
df = load_iris()
|
|
13
|
+
|
|
14
|
+
path = Report.auto_generate(
|
|
15
|
+
df,
|
|
16
|
+
title="Iris Dataset Quality Report",
|
|
17
|
+
author="ViewX Test",
|
|
18
|
+
filename="test9_auto_report",
|
|
19
|
+
outdir="output",
|
|
20
|
+
include_plots=True,
|
|
21
|
+
)
|
|
22
|
+
print(f"Report.auto_generate -> {path}")
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from .analyzers import (
|
|
2
|
+
AnalyzerEngine,
|
|
3
|
+
BooleanStrategy,
|
|
4
|
+
CategoricalStrategy,
|
|
5
|
+
ColumnProfile,
|
|
6
|
+
ColumnTypeStrategy,
|
|
7
|
+
DatasetReport,
|
|
8
|
+
DateTimeStrategy,
|
|
9
|
+
NumericStrategy,
|
|
10
|
+
)
|
|
11
|
+
from .bibliometrics import BibliometricsAnalyzer
|
|
12
|
+
from .datamatrix_engine import DataMatrix, ReportTheme
|
|
13
|
+
from .explorer import build_explorer_payload
|
|
14
|
+
from .visualizer import Visualizer
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"DataMatrix",
|
|
18
|
+
"ReportTheme",
|
|
19
|
+
"AnalyzerEngine",
|
|
20
|
+
"Visualizer",
|
|
21
|
+
"BibliometricsAnalyzer",
|
|
22
|
+
"DatasetReport",
|
|
23
|
+
"ColumnProfile",
|
|
24
|
+
"ColumnTypeStrategy",
|
|
25
|
+
"NumericStrategy",
|
|
26
|
+
"CategoricalStrategy",
|
|
27
|
+
"DateTimeStrategy",
|
|
28
|
+
"BooleanStrategy",
|
|
29
|
+
"build_explorer_payload",
|
|
30
|
+
]
|