Referencias Esenciales Adyacentes

Guía práctica de referencias adyacentes en conjuntos ordenados: SPL/esProc, SQL y Python para cálculos entre filas, medias móviles y secuencias. Soluciones de IA, ciberseguridad y cloud.

22 ago 2025 • 6 min de lectura • Equip Q2BSTUDIO

Inteligencia-Artificial-

Essential Adjacent References análisis y guía práctica sobre referencias adyacentes en conjuntos ordenados para cálculos entre filas

El análisis de datos suele requerir cálculos entre filas consecutivas, como Link Relative Ratio LRR, Year over Year YoY y medias móviles. Implementar cálculos entre filas en conjuntos ordenados implica poder referenciar miembros adyacentes dentro del conjunto.

Problema típico: un comercio dispone de las ventas de 12 meses ordenadas por mes y quiere calcular el mayor crecimiento mensual. En SQL esto se resuelve con funciones ventana y subconsultas, por ejemplo

Ejemplo SQL: with sales as ( select column_value as amount, rownum as month from table(sys.odcinumberlist(123,345,321,345,546,542,874,234,543,983,434,897)) ), lagged_sales as ( select amount, month, lag(amount) over (order by month) as prev from sales ) select max(amount - prev) as max from lagged_sales;

Las funciones ventana permiten referenciar la fila anterior, pero requieren subconsultas y cláusulas order by en cada ventana, lo que hace el código verboso. SQL se basa en conjuntos no ordenados y no puede aprovechar de forma natural el orden original sin especificarlo explícitamente.

esProc SPL ofrece una sintaxis para referenciar miembros adyacentes dentro de un conjunto ordenado de forma directa. Por ejemplo

Ejemplo SPL: sales = [123,345,321,345,546,542,874,234,543,983,434,897] sales.(if(#>1,~-~[-1],0)).max()

En SPL el símbolo ~ representa el miembro actual, # su índice y ~[i] el miembro con distancia i respecto al actual. Así ~[-1] es la fila anterior. La expresión if(#>1,~-~[-1],0) es una función lambda compacta y sales.() ejecuta un bucle aplicado a cada miembro.

Python con pandas también soporta referencias adyacentes pero con sintaxis distinta. Una forma es construir una ventana deslizante

Ejemplo Python con rolling: result = sales.rolling(window=2).apply(lambda x: x[1] - x[0], raw=True).max()

Otra forma más concisa en pandas es usar shift o diff

Usando shift: sales=pd.Series([123,345,321,345,546,542,874,234,543,983,434,897]) result = (sales-sales.shift(1)).max()

Usando diff: sales=pd.Series([123,345,321,345,546,542,874,234,543,983,434,897]) result = sales.diff().max()

Shift y diff crean secuencias auxiliares o aplican operaciones predefinidas, mientras que SPL permite referenciar directamente miembros y distancias arbitrarias sin pasos intermedios.

Además de miembros individuales, con frecuencia se necesita referenciar conjuntos adyacentes, por ejemplo calcular la media móvil de tres meses o comprobar si tres meses son estrictamente crecientes. En SQL las ventanas adyacentes existen pero solo pueden agregarse inmediatamente con funciones agregadas, por lo que para condiciones complejas se usan múltiples lag y cláusulas order by

Ejemplo SQL moving average: with sales as ( select column_value as amount, rownum as month from table(sys.odcinumberlist(123,345,321,345,546,542,874,234,543,983,434,897)) ) select month,amount, avg(amount) over (order by month rows between 2 preceding and current row) as moving_average from sales;

Para comprobar si tres meses forman una secuencia creciente en SQL hay que escribir varias funciones lag y repetir order by, lo que complica el código

SPL extiende la referencia adyacente a conjuntos con ~[a,b] que representa el subintervalo desde a hasta b relativo al miembro actual. Por ejemplo

Ejemplos SPL conjuntos adyacentes: sales.(~[-2,0].avg()) sales.(~[-2,0].pselect(~<=~[-1])==null)

La primera línea calcula la media móvil de 3 meses. La segunda comprueba si en el conjunto de tres meses no existe un elemento menor o igual al anterior, lo que indica que la secuencia es estrictamente creciente. En la expresión pselect los símbolos ~ y ~[-1] son los elementos actual y anterior dentro del conjunto adyacente.

En pandas también se dispone de rolling para medias móviles

Ejemplo pandas moving average: sales = pd.Series([123,345,321,345,546,542,874,234,543,983,434,897]) result = sales.rolling(window=3, min_periods=1).mean()

Pero comprobar secuencias crecientes requiere usar lambda dentro de rolling y la ventana es de tamaño fijo, mientras que en SPL la referencia ~[,0] representa desde el primer elemento hasta el actual y ~[0,] desde el actual hasta el último, ofreciendo una sintaxis unificada y flexible.

Para cálculos estructurados SPL permite referenciar campos directamente sin repetir el nombre del conjunto. Por ejemplo si la tabla sales tiene campos month amount rate la derivada del crecimiento amount por rate respecto al mes anterior se expresa así

Ejemplo SPL con campos: sales.derive(amount*rate-amount[-1]*rate[-1]:increase)

En pandas la expresión equivalente repite nombres de columnas y suele requerir rolling o shift con una lambda

Ejemplo pandas con columnas: sales['increase']=(sales['amount']*sales['rate']).rolling(window=2).apply(lambda x:x[1] - x[0], raw=True)

La referencia adyacente de SPL funciona también sobre subconjuntos agrupados. Si la tabla sales contiene datos de varias tiendas ordenados por mes, calcular el crecimiento mensual por tienda se hace de forma natural

Ejemplo SPL por grupos: sales.group(store).(~.derive(amount-amount[-1]:increase))

La función group agrupa por tienda y conserva los subconjuntos ordenados. El símbolo ~ dentro de la operación de grupo se refiere al subconjunto actual y la sintaxis de referencia adyacente es la misma que para el conjunto global.

En SQL la versión por grupo necesita partition by en las funciones ventana y repite ordenamientos, lo que complica la consulta

Ejemplo SQL con partition: with monthly_growth as ( select *, ((amount - lag(amount, 1) over (partition by store order by month)) / lag(amount, 1) over (partition by store order by month)) as increase from sales ) select * from monthly_growth order by store, month;

En pandas se puede combinar groupby y rolling pero sigue siendo necesario definir lambdas y manejar índices intermedios

Ejemplo pandas por grupo: sales['increase'] = sales.groupby(store)['amount'].rolling(window=2).apply(lambda x: x[1] - x[0], raw=True)

Resumen: SQL es potente para consultas relacionales pero al ser expresado sobre conjuntos no ordenados obliga a usar ventanas y subconsultas para cálculos entre filas, lo que genera código verboso. Python con pandas soporta operaciones ordenadas y ventanas pero su sintaxis es heterogénea, a veces exige crear objetos intermedios y definir lambdas explícitas. SPL proporciona una sintaxis consistente y concisa basada en referencias adyacentes ~ y ~[a,b], facilitando cálculos de diferencias, medias móviles, condiciones sobre subventanas y operaciones agrupadas.

SPL es open source. Código fuente disponible en https://github.com/SPLWare/esProc y descarga en https://www.esproc.com/download-esproc/

Sobre Q2BSTUDIO: somos una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones de inteligencia artificial ciberseguridad y servicios cloud. Ofrecemos software a medida y aplicaciones a medida diseñadas para optimizar procesos, mejorar la toma de decisiones y potenciar la seguridad digital. Nuestros servicios incluyen implementación de soluciones en AWS y Azure desarrollo de plataformas de inteligencia de negocio e integración con herramientas como Power BI para visualización y reporting.

En Q2BSTUDIO combinamos experiencia en inteligencia artificial e ia para empresas para crear agentes IA personalizados, pipelines de datos y modelos que generan valor desde la primera iteración. Además ofrecemos servicios de ciberseguridad para proteger infraestructuras críticas, auditorías, hardening y respuesta ante incidentes. También desarrollamos servicios cloud aws y azure para migración despliegue y administración continua, y servicios inteligencia de negocio que transforman datos en insights accionables.

Palabras clave y enfoque SEO: aplicaciones a medida software a medida inteligencia artificial ciberseguridad servicios cloud aws y azure servicios inteligencia de negocio ia para empresas agentes IA power bi. Si buscas un partner para desarrollar soluciones a medida que integren inteligencia artificial, seguridad y visualización avanzada, Q2BSTUDIO puede ayudarte a diseñar e implementar la solución adecuada para tu negocio.

Contacta con Q2BSTUDIO para proyectos de software a medida aplicaciones a medida agentes IA y modernización cloud. Potencia tus análisis con referencias adyacentes bien diseñadas y mejora tus procesos de inteligencia de negocio con la combinación adecuada de tecnología y consultoría experta.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Intel·ligència artificial

Agents d'IA, chatbots i assistents intel·ligents que automatitzen tasques i atenen els teus clients 24/7 per millorar l'eficiència del teu negoci.

Més info

Desenvolupament de programari

Aplicacions web, mòbils i d'escriptori, intranets, e-commerce, SaaS i plataformes de gestió dissenyades per a les necessitats concretes de la teva empresa.

Més info

Serveis cloud

Migració, infraestructura, hosting gestionat, alta disponibilitat i seguretat en Microsoft Azure i Amazon Web Services perquè el teu negoci escali sense límits.

Més info

Ciberseguretat i pentesting

Auditories de seguretat, test d'intrusió (pentesting) i protecció d'aplicacions, dades i infraestructura on-premise i cloud, amb hacking ètic i compliment normatiu.

Més info

Business Intelligence

Quadres de comandament i anàlisi de dades amb Power BI: integrem les teves fonts, dissenyem dashboards i KPIs i convertim les teves dades en decisions.

Més info

Automatització de processos

Automatitzem tasques repetitives i connectem les teves aplicacions amb n8n, Power Automate, Make i RPA, eliminant treball manual i augmentant la productivitat.

Més info

Formació per a empreses

Formem els teus equips en tecnologia amb criteri: desenvolupament web, bases de dades, Git, bones pràctiques i seguretat, automatització amb n8n, intel·ligència artificial per a empreses i creació de solucions d'IA amb Azure AI Foundry.

Més info

Auditoria de codi

Auditem el codi que creguis tu, el teu equip o una IA: et diem què està bé i què millorar, el securitzem i el deixem llest per a producció, web o app.

Més info

Generació d'imatges amb IA

Creem per tu les imatges que necessita el teu negoci amb intel·ligència artificial: producte, xarxes, publicitat, il·lustració i avatars. Tu ens dius què vols i t'ho lliurem llest per fer servir.

Més info

Generació de vídeos amb IA

Creem per tu vídeos amb intel·ligència artificial: promocionals, per a xarxes, presentadors virtuals, doblatge i animacions. Ens comptes la idea i t'ho lliurem muntat i llest per publicar.

Més info

Avatars conversacionals amb IA

Creem avatars conversacionals amb IA —humans digitals amb cara i veu— que atenen els teus clients i equips amb el coneixement de la teva empresa, a la teva web, monitors interactius, WhatsApp o Teams.

Més info

Màrqueting Online i IA

Google Ads, Meta Ads, LinkedIn Ads i posicionament en motors d'IA (GEO/AEO): captem clients i fem que la teva marca aparegui on et busquen, també a ChatGPT, Gemini i Perplexity.

Més info

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.

Live Chat