diff --git a/datos/interseccion_github_reddit.csv b/datos/interseccion_github_reddit.csv index 0258caf..e59cdb8 100644 --- a/datos/interseccion_github_reddit.csv +++ b/datos/interseccion_github_reddit.csv @@ -1,6 +1,6 @@ tecnologia,tipo,ranking_github,ranking_reddit,diferencia -Python,Lenguaje,1,8,7 -TypeScript,Lenguaje,2,7,5 +Python,Lenguaje,1,7,6 +TypeScript,Lenguaje,2,8,6 Sin especificar,Lenguaje,3,No encontrado,- JavaScript,Lenguaje,4,10,6 Go,Lenguaje,5,No encontrado,- diff --git a/datos/reddit_sentimiento_frameworks.csv b/datos/reddit_sentimiento_frameworks.csv index 255ce75..d6055ec 100644 --- a/datos/reddit_sentimiento_frameworks.csv +++ b/datos/reddit_sentimiento_frameworks.csv @@ -1,6 +1,6 @@ framework,total_menciones,positivos,neutros,negativos,% positivo,% neutro,% negativo Django,2,2,0,0,100.0,0.0,0.0 -FastAPI,1,1,0,0,100.0,0.0,0.0 -Express,14,10,0,4,71.43,0.0,28.57 -Laravel,17,12,0,5,70.59,0.0,29.41 -Spring,2,1,0,1,50.0,0.0,50.0 +FastAPI,4,4,0,0,100.0,0.0,0.0 +Express,19,14,0,5,73.68,0.0,26.32 +Laravel,15,11,0,4,73.33,0.0,26.67 +Spring,3,2,0,1,66.67,0.0,33.33 diff --git a/datos/reddit_temas_emergentes.csv b/datos/reddit_temas_emergentes.csv index 0e91097..be7bf65 100644 --- a/datos/reddit_temas_emergentes.csv +++ b/datos/reddit_temas_emergentes.csv @@ -1,11 +1,11 @@ tema,menciones -IA/Machine Learning,142 -Performance,50 -Seguridad,41 -DevOps,33 -Cloud,31 -Testing,21 -TypeScript,18 -Python,11 -Microservicios,5 -Web3/Blockchain,5 +IA/Machine Learning,138 +Performance,58 +Seguridad,46 +Cloud,41 +DevOps,39 +Testing,30 +TypeScript,21 +Python,21 +Microservicios,7 +Web3/Blockchain,6 diff --git a/frontend/assets/data/interseccion_github_reddit.csv b/frontend/assets/data/interseccion_github_reddit.csv index 0258caf..e59cdb8 100644 --- a/frontend/assets/data/interseccion_github_reddit.csv +++ b/frontend/assets/data/interseccion_github_reddit.csv @@ -1,6 +1,6 @@ tecnologia,tipo,ranking_github,ranking_reddit,diferencia -Python,Lenguaje,1,8,7 -TypeScript,Lenguaje,2,7,5 +Python,Lenguaje,1,7,6 +TypeScript,Lenguaje,2,8,6 Sin especificar,Lenguaje,3,No encontrado,- JavaScript,Lenguaje,4,10,6 Go,Lenguaje,5,No encontrado,- diff --git a/frontend/assets/data/reddit_interseccion_history.json b/frontend/assets/data/reddit_interseccion_history.json index 132669d..61285c6 100644 --- a/frontend/assets/data/reddit_interseccion_history.json +++ b/frontend/assets/data/reddit_interseccion_history.json @@ -1,10 +1,10 @@ { - "generated_at_utc": "2026-04-06T03:37:32Z", + "generated_at_utc": "2026-04-13T05:19:09Z", "dataset": "interseccion_github_reddit", "source_mode": "history", - "snapshot_count": 2, - "latest_snapshot_date": "2026-04-06", - "previous_snapshot_date": "2026-03-30", + "snapshot_count": 3, + "latest_snapshot_date": "2026-04-13", + "previous_snapshot_date": "2026-04-06", "coverage_pct": 30.0, "comparable_count": 3, "item_count": 10, @@ -13,25 +13,25 @@ "tecnologia": "Python", "tipo": "Lenguaje", "ranking_github": 1, - "ranking_reddit": 8, - "brecha_abs": 7, - "promedio_rank": 4.5, + "ranking_reddit": 7, + "brecha_abs": 6, + "promedio_rank": 4.0, "direccion": "github_favorece", "rank_github_prev": 1, - "rank_reddit_prev": 7, - "delta_gap": 1, - "trend_direction": "aumentando" + "rank_reddit_prev": 8, + "delta_gap": -1, + "trend_direction": "disminuyendo" }, { "tecnologia": "TypeScript", "tipo": "Lenguaje", "ranking_github": 2, - "ranking_reddit": 7, - "brecha_abs": 5, - "promedio_rank": 4.5, + "ranking_reddit": 8, + "brecha_abs": 6, + "promedio_rank": 5.0, "direccion": "github_favorece", "rank_github_prev": 2, - "rank_reddit_prev": 6, + "rank_reddit_prev": 7, "delta_gap": 1, "trend_direction": "aumentando" }, @@ -146,29 +146,29 @@ "comparable_count": 3, "coverage_pct": 30.0, "closest_alignment": { - "tecnologia": "TypeScript", + "tecnologia": "Python", "tipo": "Lenguaje", - "ranking_github": 2, + "ranking_github": 1, "ranking_reddit": 7, - "brecha_abs": 5, - "promedio_rank": 4.5, + "brecha_abs": 6, + "promedio_rank": 4.0, "direccion": "github_favorece", - "delta_gap": 1, - "trend_direction": "aumentando" + "delta_gap": -1, + "trend_direction": "disminuyendo" }, "largest_gap_item": { - "tecnologia": "Python", + "tecnologia": "TypeScript", "tipo": "Lenguaje", - "ranking_github": 1, + "ranking_github": 2, "ranking_reddit": 8, - "brecha_abs": 7, - "promedio_rank": 4.5, + "brecha_abs": 6, + "promedio_rank": 5.0, "direccion": "github_favorece", "delta_gap": 1, "trend_direction": "aumentando" }, - "max_brecha_tecnologia": "Python", - "max_brecha_abs": 7 + "max_brecha_tecnologia": "TypeScript", + "max_brecha_abs": 6 }, "snapshots": [ { @@ -370,6 +370,106 @@ "direccion": "incompleto" } ] + }, + { + "date": "2026-04-13", + "path": "datos/history/interseccion/year=2026/month=04/day=13/interseccion_github_reddit.csv", + "source_type": "history", + "row_count": 10, + "comparable_count": 3, + "coverage_pct": 30.0, + "items": [ + { + "tecnologia": "Python", + "tipo": "Lenguaje", + "ranking_github": 1, + "ranking_reddit": 7, + "brecha_abs": 6, + "promedio_rank": 4.0, + "direccion": "github_favorece" + }, + { + "tecnologia": "TypeScript", + "tipo": "Lenguaje", + "ranking_github": 2, + "ranking_reddit": 8, + "brecha_abs": 6, + "promedio_rank": 5.0, + "direccion": "github_favorece" + }, + { + "tecnologia": "JavaScript", + "tipo": "Lenguaje", + "ranking_github": 4, + "ranking_reddit": 10, + "brecha_abs": 6, + "promedio_rank": 7.0, + "direccion": "github_favorece" + }, + { + "tecnologia": "Angular", + "tipo": "Framework Frontend", + "ranking_github": 2, + "ranking_reddit": null, + "brecha_abs": null, + "promedio_rank": null, + "direccion": "incompleto" + }, + { + "tecnologia": "Go", + "tipo": "Lenguaje", + "ranking_github": 5, + "ranking_reddit": null, + "brecha_abs": null, + "promedio_rank": null, + "direccion": "incompleto" + }, + { + "tecnologia": "Next.js", + "tipo": "Framework Frontend", + "ranking_github": 1, + "ranking_reddit": null, + "brecha_abs": null, + "promedio_rank": null, + "direccion": "incompleto" + }, + { + "tecnologia": "React", + "tipo": "Framework Frontend", + "ranking_github": 3, + "ranking_reddit": null, + "brecha_abs": null, + "promedio_rank": null, + "direccion": "incompleto" + }, + { + "tecnologia": "Sin especificar", + "tipo": "Lenguaje", + "ranking_github": 3, + "ranking_reddit": null, + "brecha_abs": null, + "promedio_rank": null, + "direccion": "incompleto" + }, + { + "tecnologia": "Svelte", + "tipo": "Framework Frontend", + "ranking_github": 4, + "ranking_reddit": null, + "brecha_abs": null, + "promedio_rank": null, + "direccion": "incompleto" + }, + { + "tecnologia": "Vue 3", + "tipo": "Framework Frontend", + "ranking_github": 5, + "ranking_reddit": null, + "brecha_abs": null, + "promedio_rank": null, + "direccion": "incompleto" + } + ] } ] } \ No newline at end of file diff --git a/frontend/assets/data/reddit_sentimiento_frameworks.csv b/frontend/assets/data/reddit_sentimiento_frameworks.csv index 255ce75..d6055ec 100644 --- a/frontend/assets/data/reddit_sentimiento_frameworks.csv +++ b/frontend/assets/data/reddit_sentimiento_frameworks.csv @@ -1,6 +1,6 @@ framework,total_menciones,positivos,neutros,negativos,% positivo,% neutro,% negativo Django,2,2,0,0,100.0,0.0,0.0 -FastAPI,1,1,0,0,100.0,0.0,0.0 -Express,14,10,0,4,71.43,0.0,28.57 -Laravel,17,12,0,5,70.59,0.0,29.41 -Spring,2,1,0,1,50.0,0.0,50.0 +FastAPI,4,4,0,0,100.0,0.0,0.0 +Express,19,14,0,5,73.68,0.0,26.32 +Laravel,15,11,0,4,73.33,0.0,26.67 +Spring,3,2,0,1,66.67,0.0,33.33 diff --git a/frontend/assets/data/reddit_sentimiento_public.json b/frontend/assets/data/reddit_sentimiento_public.json index 6892cf5..c563b76 100644 --- a/frontend/assets/data/reddit_sentimiento_public.json +++ b/frontend/assets/data/reddit_sentimiento_public.json @@ -1,15 +1,15 @@ { - "generated_at_utc": "2026-04-06T09:18:10Z", + "generated_at_utc": "2026-04-13T05:19:09Z", "dataset": "reddit_sentimiento_frameworks", "source_mode": "latest", "source_path": "datos/latest/reddit_sentimiento_frameworks.csv", - "source_updated_at_utc": "2026-04-06T09:18:07Z", + "source_updated_at_utc": "2026-04-13T05:19:01Z", "framework_count": 5, "frameworks": [ { - "framework": "Django", - "total_menciones": 2, - "positivos": 2, + "framework": "FastAPI", + "total_menciones": 4, + "positivos": 4, "neutros": 0, "negativos": 0, "porcentaje_positivo": 100.0, @@ -17,9 +17,9 @@ "porcentaje_negativo": 0.0 }, { - "framework": "FastAPI", - "total_menciones": 1, - "positivos": 1, + "framework": "Django", + "total_menciones": 2, + "positivos": 2, "neutros": 0, "negativos": 0, "porcentaje_positivo": 100.0, @@ -28,40 +28,40 @@ }, { "framework": "Express", - "total_menciones": 14, - "positivos": 10, + "total_menciones": 19, + "positivos": 14, "neutros": 0, - "negativos": 4, - "porcentaje_positivo": 71.43, + "negativos": 5, + "porcentaje_positivo": 73.68, "porcentaje_neutro": 0.0, - "porcentaje_negativo": 28.57 + "porcentaje_negativo": 26.32 }, { "framework": "Laravel", - "total_menciones": 17, - "positivos": 12, + "total_menciones": 15, + "positivos": 11, "neutros": 0, - "negativos": 5, - "porcentaje_positivo": 70.59, + "negativos": 4, + "porcentaje_positivo": 73.33, "porcentaje_neutro": 0.0, - "porcentaje_negativo": 29.41 + "porcentaje_negativo": 26.67 }, { "framework": "Spring", - "total_menciones": 2, - "positivos": 1, + "total_menciones": 3, + "positivos": 2, "neutros": 0, "negativos": 1, - "porcentaje_positivo": 50.0, + "porcentaje_positivo": 66.67, "porcentaje_neutro": 0.0, - "porcentaje_negativo": 50.0 + "porcentaje_negativo": 33.33 } ], "summary": { "positive_leader": { - "framework": "Django", - "total_menciones": 2, - "positivos": 2, + "framework": "FastAPI", + "total_menciones": 4, + "positivos": 4, "neutros": 0, "negativos": 0, "porcentaje_positivo": 100.0, @@ -69,26 +69,26 @@ "porcentaje_negativo": 0.0 }, "largest_sample": { - "framework": "Laravel", - "total_menciones": 17, - "positivos": 12, + "framework": "Express", + "total_menciones": 19, + "positivos": 14, "neutros": 0, "negativos": 5, - "porcentaje_positivo": 70.59, + "porcentaje_positivo": 73.68, "porcentaje_neutro": 0.0, - "porcentaje_negativo": 29.41 + "porcentaje_negativo": 26.32 }, "negative_leader": { "framework": "Spring", - "total_menciones": 2, - "positivos": 1, + "total_menciones": 3, + "positivos": 2, "neutros": 0, "negativos": 1, - "porcentaje_positivo": 50.0, + "porcentaje_positivo": 66.67, "porcentaje_neutro": 0.0, - "porcentaje_negativo": 50.0 + "porcentaje_negativo": 33.33 }, "framework_count": 5, - "total_menciones": 36 + "total_menciones": 43 } } \ No newline at end of file diff --git a/frontend/assets/data/reddit_temas_emergentes.csv b/frontend/assets/data/reddit_temas_emergentes.csv index 0e91097..be7bf65 100644 --- a/frontend/assets/data/reddit_temas_emergentes.csv +++ b/frontend/assets/data/reddit_temas_emergentes.csv @@ -1,11 +1,11 @@ tema,menciones -IA/Machine Learning,142 -Performance,50 -Seguridad,41 -DevOps,33 -Cloud,31 -Testing,21 -TypeScript,18 -Python,11 -Microservicios,5 -Web3/Blockchain,5 +IA/Machine Learning,138 +Performance,58 +Seguridad,46 +Cloud,41 +DevOps,39 +Testing,30 +TypeScript,21 +Python,21 +Microservicios,7 +Web3/Blockchain,6 diff --git a/frontend/assets/data/reddit_temas_history.json b/frontend/assets/data/reddit_temas_history.json index 6e19766..cb2f6f7 100644 --- a/frontend/assets/data/reddit_temas_history.json +++ b/frontend/assets/data/reddit_temas_history.json @@ -1,118 +1,118 @@ { - "generated_at_utc": "2026-04-06T03:37:32Z", + "generated_at_utc": "2026-04-13T05:43:52Z", "dataset": "reddit_temas_emergentes", "source_mode": "history", - "snapshot_count": 2, - "latest_snapshot_date": "2026-04-06", - "previous_snapshot_date": "2026-03-30", + "snapshot_count": 3, + "latest_snapshot_date": "2026-04-13", + "previous_snapshot_date": "2026-04-06", "topic_count": 10, "summary": { "leader_topic": { "tema": "IA/Machine Learning", - "menciones": 142, - "menciones_previas": 155, - "delta_menciones": -13, - "growth_pct": -8.39, + "menciones": 138, + "menciones_previas": 142, + "delta_menciones": -4, + "growth_pct": -2.82, "trend_direction": "cayendo" }, "highest_growth_topic": { - "tema": "Performance", - "menciones": 50, - "menciones_previas": 43, - "delta_menciones": 7, - "growth_pct": 16.28, + "tema": "Cloud", + "menciones": 41, + "menciones_previas": 31, + "delta_menciones": 10, + "growth_pct": 32.26, "trend_direction": "creciendo" }, "largest_drop_topic": { "tema": "IA/Machine Learning", - "menciones": 142, - "menciones_previas": 155, - "delta_menciones": -13, - "growth_pct": -8.39, + "menciones": 138, + "menciones_previas": 142, + "delta_menciones": -4, + "growth_pct": -2.82, "trend_direction": "cayendo" }, - "total_menciones": 357, + "total_menciones": 407, "topic_count": 10 }, "latest_topics": [ { "tema": "IA/Machine Learning", - "menciones": 142, - "menciones_previas": 155, - "delta_menciones": -13, - "growth_pct": -8.39, + "menciones": 138, + "menciones_previas": 142, + "delta_menciones": -4, + "growth_pct": -2.82, "trend_direction": "cayendo" }, { "tema": "Performance", - "menciones": 50, - "menciones_previas": 43, - "delta_menciones": 7, - "growth_pct": 16.28, + "menciones": 58, + "menciones_previas": 50, + "delta_menciones": 8, + "growth_pct": 16.0, "trend_direction": "creciendo" }, { "tema": "Seguridad", - "menciones": 41, + "menciones": 46, "menciones_previas": 41, - "delta_menciones": 0, - "growth_pct": 0.0, - "trend_direction": "estable" + "delta_menciones": 5, + "growth_pct": 12.2, + "trend_direction": "creciendo" }, { - "tema": "DevOps", - "menciones": 33, - "menciones_previas": 36, - "delta_menciones": -3, - "growth_pct": -8.33, - "trend_direction": "cayendo" + "tema": "Cloud", + "menciones": 41, + "menciones_previas": 31, + "delta_menciones": 10, + "growth_pct": 32.26, + "trend_direction": "creciendo" }, { - "tema": "Cloud", - "menciones": 31, - "menciones_previas": 27, - "delta_menciones": 4, - "growth_pct": 14.81, + "tema": "DevOps", + "menciones": 39, + "menciones_previas": 33, + "delta_menciones": 6, + "growth_pct": 18.18, "trend_direction": "creciendo" }, { "tema": "Testing", - "menciones": 21, - "menciones_previas": 16, - "delta_menciones": 5, - "growth_pct": 31.25, + "menciones": 30, + "menciones_previas": 21, + "delta_menciones": 9, + "growth_pct": 42.86, "trend_direction": "creciendo" }, { - "tema": "TypeScript", - "menciones": 18, - "menciones_previas": 24, - "delta_menciones": -6, - "growth_pct": -25.0, - "trend_direction": "cayendo" + "tema": "Python", + "menciones": 21, + "menciones_previas": 11, + "delta_menciones": 10, + "growth_pct": 90.91, + "trend_direction": "creciendo" }, { - "tema": "Python", - "menciones": 11, - "menciones_previas": 23, - "delta_menciones": -12, - "growth_pct": -52.17, - "trend_direction": "cayendo" + "tema": "TypeScript", + "menciones": 21, + "menciones_previas": 18, + "delta_menciones": 3, + "growth_pct": 16.67, + "trend_direction": "creciendo" }, { "tema": "Microservicios", - "menciones": 5, - "menciones_previas": 6, - "delta_menciones": -1, - "growth_pct": -16.67, - "trend_direction": "cayendo" + "menciones": 7, + "menciones_previas": 5, + "delta_menciones": 2, + "growth_pct": 40.0, + "trend_direction": "creciendo" }, { "tema": "Web3/Blockchain", - "menciones": 5, - "menciones_previas": 3, - "delta_menciones": 2, - "growth_pct": 66.67, + "menciones": 6, + "menciones_previas": 5, + "delta_menciones": 1, + "growth_pct": 20.0, "trend_direction": "creciendo" } ], @@ -234,6 +234,65 @@ "participacion_pct": 1.4 } ] + }, + { + "date": "2026-04-13", + "path": "datos/history/reddit_temas/year=2026/month=04/day=13/reddit_temas_emergentes.csv", + "source_type": "history", + "row_count": 10, + "total_menciones": 407, + "top_topics": [ + { + "tema": "IA/Machine Learning", + "menciones": 138, + "participacion_pct": 33.91 + }, + { + "tema": "Performance", + "menciones": 58, + "participacion_pct": 14.25 + }, + { + "tema": "Seguridad", + "menciones": 46, + "participacion_pct": 11.3 + }, + { + "tema": "Cloud", + "menciones": 41, + "participacion_pct": 10.07 + }, + { + "tema": "DevOps", + "menciones": 39, + "participacion_pct": 9.58 + }, + { + "tema": "Testing", + "menciones": 30, + "participacion_pct": 7.37 + }, + { + "tema": "Python", + "menciones": 21, + "participacion_pct": 5.16 + }, + { + "tema": "TypeScript", + "menciones": 21, + "participacion_pct": 5.16 + }, + { + "tema": "Microservicios", + "menciones": 7, + "participacion_pct": 1.72 + }, + { + "tema": "Web3/Blockchain", + "menciones": 6, + "participacion_pct": 1.47 + } + ] } ], "series": [ @@ -249,6 +308,11 @@ "date": "2026-04-06", "menciones": 142, "participacion_pct": 39.78 + }, + { + "date": "2026-04-13", + "menciones": 138, + "participacion_pct": 33.91 } ] }, @@ -264,6 +328,11 @@ "date": "2026-04-06", "menciones": 50, "participacion_pct": 14.01 + }, + { + "date": "2026-04-13", + "menciones": 58, + "participacion_pct": 14.25 } ] }, @@ -279,36 +348,51 @@ "date": "2026-04-06", "menciones": 41, "participacion_pct": 11.48 + }, + { + "date": "2026-04-13", + "menciones": 46, + "participacion_pct": 11.3 } ] }, { - "tema": "DevOps", + "tema": "Cloud", "points": [ { "date": "2026-03-30", - "menciones": 36, - "participacion_pct": 9.63 + "menciones": 27, + "participacion_pct": 7.22 }, { "date": "2026-04-06", - "menciones": 33, - "participacion_pct": 9.24 + "menciones": 31, + "participacion_pct": 8.68 + }, + { + "date": "2026-04-13", + "menciones": 41, + "participacion_pct": 10.07 } ] }, { - "tema": "Cloud", + "tema": "DevOps", "points": [ { "date": "2026-03-30", - "menciones": 27, - "participacion_pct": 7.22 + "menciones": 36, + "participacion_pct": 9.63 }, { "date": "2026-04-06", - "menciones": 31, - "participacion_pct": 8.68 + "menciones": 33, + "participacion_pct": 9.24 + }, + { + "date": "2026-04-13", + "menciones": 39, + "participacion_pct": 9.58 } ] }, @@ -324,36 +408,51 @@ "date": "2026-04-06", "menciones": 21, "participacion_pct": 5.88 + }, + { + "date": "2026-04-13", + "menciones": 30, + "participacion_pct": 7.37 } ] }, { - "tema": "TypeScript", + "tema": "Python", "points": [ { "date": "2026-03-30", - "menciones": 24, - "participacion_pct": 6.42 + "menciones": 23, + "participacion_pct": 6.15 }, { "date": "2026-04-06", - "menciones": 18, - "participacion_pct": 5.04 + "menciones": 11, + "participacion_pct": 3.08 + }, + { + "date": "2026-04-13", + "menciones": 21, + "participacion_pct": 5.16 } ] }, { - "tema": "Python", + "tema": "TypeScript", "points": [ { "date": "2026-03-30", - "menciones": 23, - "participacion_pct": 6.15 + "menciones": 24, + "participacion_pct": 6.42 }, { "date": "2026-04-06", - "menciones": 11, - "participacion_pct": 3.08 + "menciones": 18, + "participacion_pct": 5.04 + }, + { + "date": "2026-04-13", + "menciones": 21, + "participacion_pct": 5.16 } ] }, @@ -369,6 +468,11 @@ "date": "2026-04-06", "menciones": 5, "participacion_pct": 1.4 + }, + { + "date": "2026-04-13", + "menciones": 7, + "participacion_pct": 1.72 } ] }, @@ -384,6 +488,11 @@ "date": "2026-04-06", "menciones": 5, "participacion_pct": 1.4 + }, + { + "date": "2026-04-13", + "menciones": 6, + "participacion_pct": 1.47 } ] }