C2MV commited on
Commit
62b76f3
verified
1 Parent(s): 4159598

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -64
app.py CHANGED
@@ -5,7 +5,7 @@ import plotly.graph_objects as go
5
  import gradio as gr
6
  from gradio.components import Plot
7
 
8
- #DATOS
9
 
10
  cities_data = {
11
  'Abancay': {
@@ -1151,7 +1151,7 @@ cities_data = {
1151
  }
1152
 
1153
 
1154
- #DATOS
1155
 
1156
  COLORES = {
1157
  'Total': '#2C3E50',
@@ -1195,10 +1195,13 @@ def crear_grafico_lineas(df, titulo, eje_y, formato=None):
1195
  y=df[columna],
1196
  name=columna,
1197
  mode='lines+markers',
1198
- line=dict(color=COLORES.get(columna, '#000000'),
 
 
 
1199
  marker=dict(size=8),
1200
  hovertemplate=f'<b>{columna}</b>: %{{y:{formato or ".2f"}}}<extra></extra>'
1201
- )))
1202
 
1203
  fig.update_layout(
1204
  title=dict(text=titulo, x=0.5, font=dict(size=20)),
@@ -1251,17 +1254,8 @@ def crear_radar_plot(dfs):
1251
 
1252
  fig.update_layout(
1253
  polar=dict(
1254
- radialaxis=dict(
1255
- visible=True,
1256
- range=[0, 100],
1257
- tickfont=dict(size=12)
1258
- ),
1259
- angularaxis=dict(
1260
- rotation=90,
1261
- direction='clockwise',
1262
- tickfont=dict(size=14)
1263
- )
1264
- ),
1265
  title=dict(text='Radar de Indicadores Laborales', x=0.5, font=dict(size=20)),
1266
  showlegend=False,
1267
  height=500
@@ -1305,11 +1299,9 @@ def analisis_comparativo_desempleo():
1305
 
1306
  def generar_analisis_global():
1307
  figs = []
1308
-
1309
- # Gr谩fico comparativo de desempleo
1310
  figs.append(analisis_comparativo_desempleo())
1311
 
1312
- # Gr谩fico de tendencia de ingresos
1313
  datos_ingresos = []
1314
  for ciudad, data in cities_data.items():
1315
  nombre = normalizar_nombres_ciudades(ciudad)
@@ -1321,18 +1313,14 @@ def generar_analisis_global():
1321
 
1322
  if datos_ingresos:
1323
  df_ingresos = pd.concat(datos_ingresos)
1324
- fig_ingresos = px.line(df_ingresos,
1325
- x='Periodo',
1326
- y='Total',
1327
- color='Ciudad',
1328
- title='Evoluci贸n de Ingresos por Ciudad',
1329
- markers=True)
1330
  fig_ingresos.update_layout(height=600)
1331
  figs.append(fig_ingresos)
1332
  else:
1333
  figs.append(go.Figure())
1334
 
1335
- # Gr谩fico de brecha salarial
1336
  datos_brecha = []
1337
  for ciudad, data in cities_data.items():
1338
  nombre = normalizar_nombres_ciudades(ciudad)
@@ -1345,12 +1333,8 @@ def generar_analisis_global():
1345
 
1346
  if datos_brecha:
1347
  df_brecha = pd.concat(datos_brecha)
1348
- fig_brecha = px.bar(df_brecha,
1349
- x='Periodo',
1350
- y='Brecha',
1351
- color='Ciudad',
1352
- barmode='group',
1353
- title='Evoluci贸n de Brecha Salarial por Ciudad',
1354
  text_auto='.1f%')
1355
  fig_brecha.update_layout(height=600)
1356
  figs.append(fig_brecha)
@@ -1359,9 +1343,7 @@ def generar_analisis_global():
1359
 
1360
  return figs
1361
 
1362
- with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue"),
1363
- css=".gradio-container {background-color: white}") as app:
1364
-
1365
  gr.Markdown("# 馃搳 Dashboard Anal铆tico del Mercado Laboral")
1366
 
1367
  with gr.Row():
@@ -1389,37 +1371,40 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue"),
1389
  with gr.Row():
1390
  global_ingresos = Plot(label="Comparativa de Ingresos")
1391
  global_brecha = Plot(label="Evoluci贸n Brecha Salarial")
 
 
 
 
 
 
 
 
1392
 
1393
- @app.change(inputs=ciudad, outputs=[desempleo_plot, ingresos_plot,
1394
- informalidad_plot, actividad_plot,
1395
- radar_plot, brecha_plot])
1396
- def actualizar_graficos(ciudad):
1397
- data = cities_data[ciudad]
1398
-
1399
- dfs = {
1400
- 'desempleo': procesar_dataframe(data['desempleo_trimestral'],
1401
- ["Trimestre", "Total", "Hombres", "Mujeres"]),
1402
- 'ingresos': procesar_dataframe(data['ingresos_periodo'],
1403
- ["Periodo", "Total", "Hombres", "Mujeres"]),
1404
- 'informal': procesar_dataframe(data['informal_periodo'],
1405
- ["Periodo", "Total", "Hombres", "Mujeres"]),
1406
- 'actividad': procesar_dataframe(data['actividad_trimestral'],
1407
- ["Trimestre", "Total", "Hombres", "Mujeres"])
1408
- }
1409
-
1410
- return [
1411
- crear_grafico_lineas(dfs['desempleo'], "Tasa de Desempleo", "%", ".1f"),
1412
- crear_grafico_lineas(dfs['ingresos'], "Ingresos Promedio", "Soles", ".0f"),
1413
- crear_grafico_lineas(dfs['informal'], "Tasa de Informalidad", "%", ".1f"),
1414
- crear_grafico_lineas(dfs['actividad'], "Tasa de Actividad", "%", ".1f"),
1415
- crear_radar_plot(dfs),
1416
- crear_grafico_lineas(dfs['ingresos'].assign(
1417
- Brecha=lambda x: (x['Hombres'] - x['Mujeres']) / x['Hombres'].replace(0, np.nan) * 100
1418
- ), "Brecha Salarial", "%", ".1f")
1419
- ]
1420
 
1421
- @app.click(inputs=None, outputs=[global_desempleo, global_ingresos, global_brecha])
1422
- def actualizar_analisis_global():
1423
- return generar_analisis_global()
 
 
 
 
 
 
 
1424
 
1425
  app.launch(debug=True)
 
5
  import gradio as gr
6
  from gradio.components import Plot
7
 
8
+ #DATA
9
 
10
  cities_data = {
11
  'Abancay': {
 
1151
  }
1152
 
1153
 
1154
+ #DATA
1155
 
1156
  COLORES = {
1157
  'Total': '#2C3E50',
 
1195
  y=df[columna],
1196
  name=columna,
1197
  mode='lines+markers',
1198
+ line=dict(
1199
+ color=COLORES.get(columna, '#000000'),
1200
+ width=3
1201
+ ),
1202
  marker=dict(size=8),
1203
  hovertemplate=f'<b>{columna}</b>: %{{y:{formato or ".2f"}}}<extra></extra>'
1204
+ ))
1205
 
1206
  fig.update_layout(
1207
  title=dict(text=titulo, x=0.5, font=dict(size=20)),
 
1254
 
1255
  fig.update_layout(
1256
  polar=dict(
1257
+ radialaxis=dict(visible=True, range=[0, 100], tickfont=dict(size=12)),
1258
+ angularaxis=dict(rotation=90, direction='clockwise', tickfont=dict(size=14)),
 
 
 
 
 
 
 
 
 
1259
  title=dict(text='Radar de Indicadores Laborales', x=0.5, font=dict(size=20)),
1260
  showlegend=False,
1261
  height=500
 
1299
 
1300
  def generar_analisis_global():
1301
  figs = []
 
 
1302
  figs.append(analisis_comparativo_desempleo())
1303
 
1304
+ # Gr谩fico de ingresos
1305
  datos_ingresos = []
1306
  for ciudad, data in cities_data.items():
1307
  nombre = normalizar_nombres_ciudades(ciudad)
 
1313
 
1314
  if datos_ingresos:
1315
  df_ingresos = pd.concat(datos_ingresos)
1316
+ fig_ingresos = px.line(df_ingresos, x='Periodo', y='Total', color='Ciudad',
1317
+ title='Evoluci贸n de Ingresos por Ciudad', markers=True)
 
 
 
 
1318
  fig_ingresos.update_layout(height=600)
1319
  figs.append(fig_ingresos)
1320
  else:
1321
  figs.append(go.Figure())
1322
 
1323
+ # Gr谩fico de brecha
1324
  datos_brecha = []
1325
  for ciudad, data in cities_data.items():
1326
  nombre = normalizar_nombres_ciudades(ciudad)
 
1333
 
1334
  if datos_brecha:
1335
  df_brecha = pd.concat(datos_brecha)
1336
+ fig_brecha = px.bar(df_brecha, x='Periodo', y='Brecha', color='Ciudad',
1337
+ barmode='group', title='Evoluci贸n de Brecha Salarial por Ciudad',
 
 
 
 
1338
  text_auto='.1f%')
1339
  fig_brecha.update_layout(height=600)
1340
  figs.append(fig_brecha)
 
1343
 
1344
  return figs
1345
 
1346
+ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue"), css=".gradio-container {background-color: white}") as app:
 
 
1347
  gr.Markdown("# 馃搳 Dashboard Anal铆tico del Mercado Laboral")
1348
 
1349
  with gr.Row():
 
1371
  with gr.Row():
1372
  global_ingresos = Plot(label="Comparativa de Ingresos")
1373
  global_brecha = Plot(label="Evoluci贸n Brecha Salarial")
1374
+ global_btn = gr.Button("Actualizar An谩lisis Global", variant="primary")
1375
+
1376
+ # Eventos
1377
+ ciudad.change(
1378
+ fn=actualizar_graficos,
1379
+ inputs=ciudad,
1380
+ outputs=[desempleo_plot, ingresos_plot, informalidad_plot, actividad_plot, radar_plot, brecha_plot]
1381
+ )
1382
 
1383
+ global_btn.click(
1384
+ fn=generar_analisis_global,
1385
+ inputs=[],
1386
+ outputs=[global_desempleo, global_ingresos, global_brecha]
1387
+ )
1388
+
1389
+ def actualizar_graficos(ciudad):
1390
+ data = cities_data[ciudad]
1391
+
1392
+ dfs = {
1393
+ 'desempleo': procesar_dataframe(data['desempleo_trimestral'], ["Trimestre", "Total", "Hombres", "Mujeres"]),
1394
+ 'ingresos': procesar_dataframe(data['ingresos_periodo'], ["Periodo", "Total", "Hombres", "Mujeres"]),
1395
+ 'informal': procesar_dataframe(data['informal_periodo'], ["Periodo", "Total", "Hombres", "Mujeres"]),
1396
+ 'actividad': procesar_dataframe(data['actividad_trimestral'], ["Trimestre", "Total", "Hombres", "Mujeres"])
1397
+ }
 
 
 
 
 
 
 
 
 
 
 
 
1398
 
1399
+ return [
1400
+ crear_grafico_lineas(dfs['desempleo'], "Tasa de Desempleo", "%", ".1f"),
1401
+ crear_grafico_lineas(dfs['ingresos'], "Ingresos Promedio", "Soles", ".0f"),
1402
+ crear_grafico_lineas(dfs['informal'], "Tasa de Informalidad", "%", ".1f"),
1403
+ crear_grafico_lineas(dfs['actividad'], "Tasa de Actividad", "%", ".1f"),
1404
+ crear_radar_plot(dfs),
1405
+ crear_grafico_lineas(dfs['ingresos'].assign(
1406
+ Brecha=lambda x: (x['Hombres'] - x['Mujeres']) / x['Hombres'].replace(0, np.nan) * 100
1407
+ ), "Brecha Salarial", "%", ".1f")
1408
+ ]
1409
 
1410
  app.launch(debug=True)