Riesgo sísmico en Los Rosales — cuaderno integrado
Amenaza, exposición, daño, pérdida y escenarios de intensidad en un solo flujo reproducible
Resumen¶
Este cuaderno reúne en un solo recorrido el flujo 3.1 de SIDRo. Asigna a cada edificación de Los Rosales (de la calle 72 a la 82–85, sectores catastrales Los Rosales y Bellavista) y su entorno la aceleración de la microzonificación sísmica de Bogotá Alcaldía Mayor de Bogotá, 2010, infiere su tipología a partir del año y la altura, estima el daño con curvas de fragilidad y lo agrega por manzana. Al final construye una curva de excedencia con cuatro escenarios de intensidad y calcula el impacto anual esperado (EAI), con la lógica de CCDR-tools Amadio, 2024.
Resultados clave (ejecución del 2026-10-27 con datos reales):
16.725 edificaciones en el área con búfer, con un valor de reposición de unos 24,9 billones de pesos. El 38 % son de mampostería no reforzada (MNR) y otro 10 % son pórticos anteriores a 1984.
En el escenario de diseño (Tr 475 años) la pérdida esperada es de unos 4,0 billones de pesos, el 15,9 % del valor expuesto. Dentro del barrio (57 manzanas) es de unos 0,71 billones: 0,37 en Bellavista y 0,34 en el sector Los Rosales. Unos 2.300 de sus 13.700 residentes estimados quedarían en edificaciones con daño extenso o completo.
El impacto anual esperado del área con búfer está entre 35.000 y 115.000 millones de pesos por año, con un valor medio cercano a 75.000 millones.
Las páginas de detalle a. Descripción, b. Amenaza, c. Riesgo y d. Escenarios desarrollan cada paso con más explicación.
1. Marco¶
1.1 La amenaza y el barrio¶
Bogotá está en una zona de amenaza sísmica intermedia. El daño, sin embargo, depende menos de la distancia a las fallas que de cómo responde el suelo. Los depósitos lacustres blandos amplifican las ondas, mientras que el piedemonte y los Cerros Orientales son más rígidos. Los Rosales está en el borde de los cerros, así que la zona de respuesta de cada edificación se toma de la capa oficial y no se supone.
El efecto depende también de qué se construyó y cuándo. Las edificaciones anteriores a la primera norma sismorresistente (1984) y las de mampostería sin refuerzo son las más frágiles. Las posteriores a la NSR-10 cumplen requisitos mucho más exigentes Asociación Colombiana de Ingeniería Sísmica, 2010.
1.2 Cadena de análisis¶
Amenaza. Cada edificación recibe la zona de respuesta que contiene su punto representativo y el de la tabla del decreto.
Exposición. Pisos, año, uso y área construida salen del catastro. La tipología se infiere de la época de la norma (MNR, PCR_PRE84, CCCSR-84, NSR-98, NSR-10) y la altura.
Vulnerabilidad. Las curvas de fragilidad lognormales de forma Hazus, ecuación (1), dan la probabilidad de cada estado de daño FEMA, 2022.
Riesgo. La razón de daño media por el valor de reposición da la pérdida. La probabilidad de daño extenso o completo por los ocupantes estimados da las personas afectadas.
Escenarios. Cuatro niveles de intensidad permiten construir la curva de excedencia y el EAI, ecuación (2).
2. Configuración del entorno¶
Todas las funciones vienen del paquete sidro y los parámetros de config/*.yaml. Nada del barrio está
escrito en el código.
import pandas as pd
from sidro import viz
from sidro.aoi import aoi_bufer, construir_aoi
from sidro.analisis import sismo
from sidro.config import parametros
from sidro.fetch import obtener_capa
zonas = intentar(obtener_capa, "zonas_respuesta_sismica",
mensaje="La capa de zonas de respuesta sísmica no está disponible; se usará la aceleración en roca")3. Amenaza: zonas de respuesta sísmica¶
if zonas is not None:
campo = parametros()["sismo"]["campo_zona"]
campo = campo if campo in zonas.columns else zonas.columns[0]
m = viz.mapa_base()
viz.capa(m, zonas, campo, nombre="Zona de respuesta sísmica", categorica=True, cmap="Set2")
viz.cerrar(m)
else:
m = None
mif zonas is not None:
resumen = sismo.resumen_zonas(zonas, aoi_bufer())
resumen.round(2)tabla = pd.DataFrame(parametros()["sismo"]["zonas_decreto_523"]).T
tabla.index.name = "zona"
tablaLectura. Toda el área se resuelve con la capa oficial de IDIGER, así que no se necesita el respaldo nacional
(PGA en roca de unos 1 km, que no distingue el efecto del suelo). Los valores de de las siete zonas del
área coinciden con los atributos AO_475 de esa capa. Las celdas marcadas con asterisco en
config/parametros.yaml corresponden a otras zonas y siguen sin verificarse contra el decreto.
4. Exposición: edificaciones¶
import pandas as pd
from sidro import exposicion, process, viz
from sidro.analisis import indices, sismo
from sidro.config import parametros, rutas
from sidro.fetch import obtener_capa
edif = intentar(exposicion.edificaciones,
mensaje="No se pudo construir la exposición de edificaciones (catastro u OpenStreetMap)")if edif is not None:
print(f"{len(edif)} edificaciones; valor de reposición total: {edif.valor_cop.sum() / 1e9:,.1f} mil millones COP")
display(exposicion.completitud(edif).round(1))
display(edif.tipologia.value_counts().rename("edificaciones").to_frame())16725 edificaciones; valor de reposición total: 24,928.7 mil millones COP
if edif is not None and edif["anio"].notna().any():
viz.grafica_anios(edif)
Lectura. El catastro aporta año y uso para las 1.839 edificaciones del barrio y para prácticamente todas las del área con búfer, gracias a la unión con la tabla abierta «Predio» de la UAECD. El año es por lote, no por edificación. Más de un tercio del parque construido es mampostería no reforzada, la tipología más frágil y la más numerosa.
5. Daño y pérdida en el escenario de diseño¶
zonas = intentar(obtener_capa, "zonas_respuesta_sismica",
mensaje="Sin zonas de respuesta: se usa la aceleración en roca")
if edif is not None:
dano = sismo.danos(sismo.pga_por_zona(edif, zonas))
print(dano.pga_origen.value_counts().to_string())
from sidro.aoi import construir_aoi
en_barrio = dano.geometry.representative_point().within(construir_aoi().geometry.iloc[0])
def resumen(d):
return {"edificaciones": len(d),
"pérdida esperada (millones COP)": d.perdida_cop.sum() / 1e6,
"razón de pérdida (%)": 100 * d.perdida_cop.sum() / d.valor_cop.sum(),
"residentes estimados": d.ocupantes_est.sum(),
"residentes en edificaciones con daño extenso o completo": d.ocupantes_dano_extenso_o_mas.sum()}
display(pd.DataFrame({"área con búfer": resumen(dano), "dentro del barrio": resumen(dano[en_barrio])}).round(1))pga_origen
Decreto 523/2010 A0 16725
if edif is not None:
m = viz.mapa_base()
viz.capa(m, dano, "mdr", nombre="Razón de daño media (MDR)", cmap="YlOrRd",
tooltip=["tipologia", "pisos", "anio", "pga_g", "mdr", "perdida_cop"])
viz.cerrar(m)
else:
m = None
mLectura. Con el sismo de diseño (Tr 475 años) se perdería cerca del 16 % del valor de reposición, tanto en el búfer como en el barrio. Unos 2.300 de los 13.700 residentes estimados del barrio (9.500 en todo el búfer) viven en edificaciones con daño extenso o completo. Los residentes salen del área de uso habitacional con 110 m² brutos por residente, calibrados con las viviendas de la UAECD y las personas por hogar del DANE: son un orden de magnitud, no un conteo de víctimas, y no incluyen la población flotante de oficinas, comercio o colegios.
6. Agregación por manzana y vulnerabilidad social¶
unidades = process.unidades_analisis() if edif is not None else None
if edif is not None:
agg = process.agregar(dano, unidades, {
"n_edificaciones": ("id_edif", "count"),
"valor_cop": ("valor_cop", "sum"),
"perdida_cop": ("perdida_cop", "sum"),
"personas_dano_severo": ("ocupantes_dano_extenso_o_mas", "sum"),
})
agg["razon_perdida_pct"] = 100 * agg.perdida_cop / agg.valor_cop
agg["vulnerabilidad_social"] = indices.vulnerabilidad_social(agg)
print(f"Unidades: {len(agg)} (origen: {unidades.attrs.get('origen')})")
display(agg.drop(columns="geometry").sort_values("perdida_cop", ascending=False).head(10).round(2))WARNING sidro.fetch: manzanas_censo: falló nivel nacional/usuario -> Archivo de usuario no encontrado: /Users/mauricio/Documents/Data-science-local/SIDRo/data/user/dane_mgn_manzanas_cnpv2018.gpkg
WARNING sidro.process: Unidades: manzanas_censo no disponible (No se pudo obtener 'manzanas_censo'. Intentos: [{'nivel': 'nacional', 'tipo': 'usuario', 'error': 'Archivo de usuario no encontrado: /Users/mauricio/Documents/Data-science-local/SIDRo/data/user/dane_mgn_manzanas_cnpv2018.gpkg'}])
Unidades: 57 (origen: estratificacion)
if edif is not None:
biv = indices.bivariado(agg["perdida_cop"].fillna(0), agg["vulnerabilidad_social"])
agg = agg.join(biv)
m = viz.mapa_base()
viz.capa_bivariada(m, agg)
viz.cerrar(m)
else:
m = None
mLeyenda: pérdida esperada en el eje vertical, vulnerabilidad social en el horizontal.
Lectura. Las 57 unidades son las manzanas de la capa de estratificación dentro del barrio: 26 del sector Los Rosales (códigos 008304…) y 31 de Bellavista (008305…), todas de estrato 6. Sin el censo DANE por manzana, la vulnerabilidad social casi no varía y el mapa bivariado ordena sobre todo por pérdida. Los terciles son relativos al barrio.
if edif is not None:
from sidro import export
process.guardar(agg.assign(riesgo=agg["perdida_cop"])[["id_unidad", "geometry", "riesgo", "perdida_cop", "razon_perdida_pct",
"personas_dano_severo", "vulnerabilidad_social"]], "riesgo_sismo")
ruta = export.exposicion_climada(dano)
print("Exposición para CLIMADA:", ruta.relative_to(rutas().raiz))Exposición para CLIMADA: data/export/climada_exposicion.parquet
7. Curvas de daño por tipología¶
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6, 3.5))
for tip in parametros()["sismo"]["tipologias"]:
c = sismo.curva_mdr(tip)
ax.plot(c.pga_g, c.mdr, label=tip)
ax.set_xlabel("PGA (g)"), ax.set_ylabel("Razón de daño media")
ax.legend(), ax.grid(alpha=0.3)
fig

Las curvas más a la izquierda son las tipologías más frágiles. El orden relativo es razonable, pero los valores absolutos no están calibrados para Bogotá.
8. Escenarios de intensidad¶
La amenaza sísmica no cambia con los escenarios climáticos, por lo que aquí no se usan proyecciones CMIP6. Los
escenarios son cuatro niveles de aceleración sobre la misma exposición. Los factores de Tr 31 y 225 años salen
de la capa de IDIGER (AO_31/AO_475 y AO_225/AO_475). El de Tr 2475 años es una extrapolación ilustrativa.
import pandas as pd
from sidro import exposicion, viz
from sidro.analisis import sismo
from sidro.config import parametros
from sidro.fetch import obtener_capa
edif = intentar(exposicion.edificaciones,
mensaje="No se pudo construir la exposición de edificaciones (catastro u OpenStreetMap)")
zonas = intentar(obtener_capa, "zonas_respuesta_sismica",
mensaje="Sin zonas de respuesta: se usa la aceleración en roca")if edif is not None:
esc = sismo.escenarios(edif, zonas)
display(esc.assign(perdida_total_millones_cop=esc.perdida_total_cop / 1e6).drop(columns="perdida_total_cop").round(2))if edif is not None:
curva = sismo.curva_excedencia(esc)
r = sismo.eai(esc)
display(pd.Series({k: v / 1e6 for k, v in r.items()}).round(1).to_frame("EAI (millones COP/año)"))import matplotlib.pyplot as plt
if edif is not None:
fig, ax = plt.subplots(figsize=(6, 3.5))
ax.step(curva.p_anual, curva.impacto / 1e6, where="post", color="#8c2d04")
ax.plot(curva.p_anual, curva.impacto / 1e6, "o", color="#8c2d04")
ax.set_xscale("log"), ax.invert_xaxis()
ax.set_xlabel("Probabilidad anual de excedencia"), ax.set_ylabel("Pérdida (millones COP)")
ax.grid(alpha=0.3)
fig
if edif is not None:
fig, ax = plt.subplots(figsize=(6, 3))
ax.barh(esc.escenario, esc.personas_en_dano_extenso_o_mas, color="#6c83b5")
ax.set_xlabel("Personas en edificaciones con daño extenso o completo (estimadas)")
fig
Lectura. La pérdida crece de forma muy marcada entre el sismo muy frecuente (2,5 % del valor) y el frecuente (12,8 %). Esto refleja el umbral de las curvas de fragilidad de la mampostería no reforzada. El EAI depende de cómo se extrapola fuera de los cuatro puntos: se supone pérdida nula para sismos más frecuentes que Tr 31 años, lo que lo subestima. Úselo para comparar alternativas, no como prima de seguro.
if edif is not None:
from sidro import export
export.guardar_resumen("sismo_escenarios", {"escenarios": esc.to_dict("records"), "eai_cop": r})9. Tabla resumen para el informe ejecutivo¶
| Indicador | Valor (ejecución 2026-10-25) |
|---|---|
| Edificaciones analizadas (área con búfer / dentro del barrio) | 16.725 / 1.839 |
| Valor de reposición expuesto (área con búfer) | ≈ 24,9 billones COP |
| Pérdida, sismo muy frecuente (Tr 31) | ≈ 0,6 billones COP (2,5 %) |
| Pérdida, sismo de diseño (Tr 475) | ≈ 4,0 billones COP (15,9 %); en el barrio ≈ 0,71 billones |
| Residentes en edificaciones con daño extenso o completo, Tr 475 (barrio / búfer) | ≈ 2.300 de 13.700 / ≈ 9.500 de 52.900 |
| Pérdida, sismo raro (Tr 2475, extrapolado) | ≈ 8,3 billones COP (33,4 %) |
| Impacto anual esperado (cota inferior – superior) | 35.000 – 115.300 millones COP/año |
| Unidades de análisis | 57 manzanas (26 Los Rosales + 31 Bellavista) |
10. Conclusiones¶
El riesgo sísmico del barrio lo dominan las edificaciones anteriores a 1984. La mampostería no reforzada es más de un tercio del parque construido y concentra la pérdida.
El salto de pérdida entre Tr 31 y Tr 225 años indica que aun sismos moderados producirían daño apreciable.
Las manzanas con mayor pérdida son candidatas a priorizar en estudios de vulnerabilidad estructural y reforzamiento.
10.1 Limitaciones¶
Las curvas de fragilidad y el costo de reposición son ilustrativos: las pérdidas comparan manzanas y escenarios, no son cifras absolutas.
La tipología se infiere de la época y la altura, porque el catastro no registra el sistema estructural.
El año es el del lote. Los residentes se estiman desde el área habitacional (110 m² brutos por residente), sin censo por manzana; no se cuenta la población flotante.
Cuando una edificación no tiene año en el catastro se supone 1985; hoy ocurre en una fracción mínima.
No se modelan licuación, efectos topográficos, daño no estructural ni pérdidas indirectas.
El resultado es indicativo y no reemplaza los conceptos técnicos de IDIGER.
10.2 Próximos pasos¶
Reemplazar la calibración de residentes por el censo DANE por manzana.
Reemplazar el factor de Tr 2475 años por el valor del modelo probabilista del SGC o GEM.
Verificar las celdas de la tabla del Decreto 523 marcadas con asterisco.
- Alcaldía Mayor de Bogotá. (2010). Decreto 523 de 2010, por el cual se adopta la Microzonificación Sísmica de Bogotá D.C. https://www.cancilleria.gov.co/sites/default/files/Normograma/docs/pdf/d_alcabog_0523_2010.pdf
- Amadio, M. (2024). CCDR tools data and methodology. Global Facility for Disaster Reduction and Recovery (GFDRR), World Bank. https://gfdrr.github.io/CCDR-tools
- Asociación Colombiana de Ingeniería Sísmica. (2010). Reglamento Colombiano de Construcción Sismo Resistente NSR-10.
- FEMA. (2022). Hazus Earthquake Model Technical Manual, Hazus 5.1. Federal Emergency Management Agency.