import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
# Matriz de Información Competitiva (Vigencia 2026)
data_2026 = [
# LCI Bogotá
('LCI Bogotá', 'Moda e Indumentaria', 'Tecnológico', 'Cuatrimestral', 11973000 * 3),
('LCI Bogotá', 'Gestión de Industrias Creativas', 'Tecnológico', 'Cuatrimestral', 11973000 * 3),
('LCI Bogotá', 'Producción Gastronómica', 'Tecnológico', 'Cuatrimestral', 11737000 * 3),
('LCI Bogotá', 'Gestión de la Moda', 'Tecnológico', 'Cuatrimestral', 11442000 * 3),
('LCI Bogotá', 'Interiorismo Sostenible', 'Tecnológico', 'Cuatrimestral', 11442000 * 3),
('LCI Bogotá', 'Producción Fotográfica', 'Tecnológico', 'Cuatrimestral', 11083000 * 3),
('LCI Bogotá', 'Producción Escénica y Visual', 'Tecnológico', 'Cuatrimestral', 10633000 * 3),
('LCI Bogotá', 'Diseño de Experiencias Interactivas', 'Tecnológico', 'Cuatrimestral', 9950000 * 3),
('LCI Bogotá', 'Producción de Efectos Visuales (VFX)', 'Tecnológico', 'Cuatrimestral', 9240000 * 3),
('LCI Bogotá', 'Pastelería y Panadería', 'Técnico Profesional', 'Cuatrimestral', 8350000 * 3),
('LCI Bogotá', 'Maquillaje Artístico', 'Técnico Profesional', 'Cuatrimestral', 6283000 * 3),
# Competidores
('Universidad de los Andes', 'Diseño', 'Profesional Universitario', 'Semestral', 26860000 * 2),
('Universidad de los Andes', 'Arquitectura', 'Profesional Universitario', 'Semestral', 26860000 * 2),
('Pontificia Univ. Javeriana', 'Diseño Industrial', 'Profesional Universitario', 'Semestral', 20220000 * 2),
('Pontificia Univ. Javeriana', 'Arquitectura', 'Profesional Universitario', 'Semestral', 20220000 * 2),
('Pontificia Univ. Javeriana', 'Artes Visuales', 'Profesional Universitario', 'Semestral', 17871000 * 2),
('Univ. Jorge Tadeo Lozano', 'Diseño Gráfico', 'Profesional Universitario', 'Semestral', 11497000 * 2),
('Univ. Jorge Tadeo Lozano', 'Arquitectura', 'Profesional Universitario', 'Semestral', 10572000 * 2),
('Univ. Jorge Tadeo Lozano', 'Diseño y Gestión de la Moda', 'Profesional Universitario', 'Semestral', 10395000 * 2),
('Universidad El Bosque', 'Diseño Industrial', 'Profesional Universitario', 'Semestral', 10947000 * 2),
('Universidad El Bosque', 'Formación Musical', 'Profesional Universitario', 'Semestral', 10187000 * 2),
('Universidad El Bosque', 'Arquitectura', 'Profesional Universitario', 'Semestral', 10386000 * 2),
('Universidad de La Salle', 'Diseño Visual', 'Profesional Universitario', 'Semestral', 9365000 * 2),
('Universidad de La Salle', 'Diseño Industrial', 'Profesional Universitario', 'Semestral', 9365000 * 2),
('Universidad de La Salle', 'Arquitectura', 'Profesional Universitario', 'Semestral', 8695000 * 2),
('Escuela Gato Dumas', 'Cocina / Gastronomía', 'Técnico Laboral', 'Semestral', 11230000 * 2),
('Fund. Univ. Área Andina', 'Tecnología en Gestión Gastronómica', 'Tecnólogo', 'Semestral', 7690000 * 2),
('Fund. Univ. Área Andina', 'Diseño de Modas', 'Profesional Universitario', 'Semestral', 6550000 * 2),
('Taller 5', 'Diseño de Alta Costura', 'Profesional Universitario', 'Semestral', 7052000 * 2),
('Taller 5', 'Diseño Gráfico', 'Profesional Universitario', 'Semestral', 7052000 * 2),
('Taller 5', 'Diseño de Interiores', 'Profesional Universitario', 'Semestral', 7052000 * 2),
('Universidad ECCI', 'Diseño de Modas', 'Profesional Universitario', 'Semestral', 5210900 * 2),
('CUN', 'Diseño de Modas', 'Profesional (Ciclos propedéuticos)', 'Semestral', ((2947000 + 3519000)/2) * 2),
('CUN', 'Diseño Gráfico', 'Profesional (Ciclos propedéuticos)', 'Semestral', ((2947000 + 3519000)/2) * 2),
# Nuevos Competidores
('Universidad de la Sabana', 'Diseño y Gestión de la Moda', 'Profesional Universitario', 'Semestral', 18184000 * 2),
('Universidad de la Sabana', 'Gastronomía', 'Profesional Universitario', 'Semestral', 19079000 * 2),
('Universidad de la Sabana', 'Comunicación Audiovisual y Multimedios', 'Profesional Universitario', 'Semestral', 18184000 * 2),
('Universidad del Rosario', 'Pregrado en Diseño', 'Profesional Universitario', 'Semestral', 17917708 * 2),
('Universidad del Rosario', 'Pregrado en Creación', 'Profesional Universitario', 'Semestral', 16594613 * 2),
('Universidad de los Andes', 'Narrativas Digitales', 'Profesional Universitario', 'Semestral', 26860000 * 2),
('Universidad Sergio Arboleda', 'Diseño Digital', 'Profesional Universitario', 'Semestral', 8109400 * 2),
('Universidad Externado de Colombia', 'Administración de Empresas Turísticas y Hoteleras', 'Profesional Universitario', 'Semestral', 10940000 * 2),
('Mariano Moreno', 'Cocina y Pastelería', 'Técnico Laboral', 'Semestral', 11000000 * 2),
('Pontificia Univ. Javeriana', 'Diseño de Comunicación Visual', 'Profesional Universitario', 'Semestral', 12844000 * 2)
]
df_2026 = pd.DataFrame(data_2026, columns=['Institución', 'Programa', 'Nivel_Formación', 'Periodicidad', 'Costo_Anualizado_COP'])
# Mapeo tripartito del Nivel de Formación
def map_nivel(row):
inst = row['Institución']
nivel = row['Nivel_Formación']
nl = nivel.lower()
if inst == 'LCI Bogotá':
return 'LCI Bogotá (Tecnologías y Técnicos)'
elif 'profesional universitario' in nl or 'profesional (ciclos' in nl:
return 'Profesional Universitario (Competidores)'
elif 'tecnológico' in nl or 'tecnólogo' in nl or 'técnico' in nl or 'tecnico' in nl:
return 'Técnico/Tecnológico (Competidores sin LCI)'
return 'Otros'
df_2026['Segmento_Nivel'] = df_2026.apply(map_nivel, axis=1)
print(f"Dataset cargado y mapeado: {len(df_2026)} registros.")