Referencias Esenciales Adyacentes

Descubre SPL y referencias adyacentes para cálculos entre filas y ventanas en conjuntos ordenados, frente a SQL y pandas; aprende con ejemplos de media móvil y agrupados en esProc y Q2BSTUDIO.

22 ago 2025 • 5 min de lectura • Equip Q2BSTUDIO

Inteligencia-Artificial-

El análisis de datos a menudo requiere cálculos entre filas adyacentes, como tasa relativa vinculada LRR, variación interanual YoY y medias móviles. Implementar cálculos entre filas en conjuntos ordenados plantea el reto de referenciar miembros adyacentes dentro del conjunto.

Por ejemplo, un comercio tiene preparados los datos de ventas de 12 meses ordenados por mes y quiere calcular el mayor crecimiento mensual.

En SQL esto suele resolverse con funciones de ventana y lag, lo que obliga a escribir subconsultas y repetir cláusulas order by. El enfoque es correcto pero verboso y poco expresivo respecto al orden natural de los datos.

En lenguajes pensados para conjuntos ordenados existen alternativas más naturales. Por ejemplo, en esProc SPL se dispone de referencias adyacentes directas. Con una secuencia sales = [123, 345, 321, 345, 546, 542, 874, 234, 543, 983, 434, 897] se puede obtener el máximo crecimiento mensual con la expresión sales.(if(#>1,~-~[-1],0)).max() donde ~ representa el miembro actual, # su índice y ~[i] al miembro a distancia i del actual, de modo que ~[-1] es el mes anterior.

La sintaxis de SPL para funciones lambda es compacta: if(#>1,~-~[-1],0) actúa como función aplicada por la operación sales.(). Esto evita subconsultas y múltiples cláusulas order by necesarias en SQL.

En Python con pandas también es posible, pero requiere pasos adicionales. Usando rolling se puede crear una ventana de tamaño 2 y aplicar una lambda: result = sales.rolling(window=2).apply(lambda x: x[1] - x[0], raw=True).max(). Otra opción más directa es usar shift: result = (sales - sales.shift(1)).max() o el método diff: result = sales.diff().max(). Estos enfoques funcionan bien pero implican crear objetos intermedios o usar funciones predefinidas cuando las operaciones son sencillas.

Más allá de miembros individuales, a menudo necesitamos referenciar conjuntos adyacentes. Por ejemplo, la media móvil de cada mes sobre el mes actual y los dos anteriores. En SQL se usa avg sobre una ventana rows between 2 preceding and current row, pero SQL obliga a agregar inmediatamente el conjunto y solo permite funciones agregadas predefinidas. Comprobar si las ventas aumentan durante los tres meses consecutivos no tiene una función agregada directa y obliga a encadenar varias funciones lag y cláusulas order by, lo que resulta engorroso.

SPL extiende la notación de referencia adjacente a conjuntos mediante ~[a,b]. Así ~[-2,0] representa los tres elementos desde dos posiciones antes hasta el actual. Para la media móvil basta sales.(~[-2,0].avg()). Para comprobar si la secuencia es estrictamente creciente se puede usar sales.(~[-2,0].pselect(~<=~[-1])==null) donde pselect busca posiciones que incumplen la condición.

En pandas la media móvil es sencilla con rolling(window=3).mean(), pero evaluar condiciones como secuencia creciente requiere lambdas y la ventana fija de rolling puede resultar inflexible para ventanas que crecen desde el inicio o se extienden hasta el final, lo que obliga a invertir la secuencia o usar otras funciones.

SPL unifica la sintaxis con referencias como ~[,0] para desde el primer miembro hasta el actual y ~[0,] para desde el actual hasta el último, facilitando expresiones coherentes y compactas para todo tipo de ventanas y subconjuntos.

Para cálculos sobre campos de tablas, SPL permite usar directamente el nombre del campo con referencias adyacentes. Por ejemplo, si la tabla sales tiene campos month, amount y rate, la derivada del crecimiento monto por tasa se expresa así sales.derive(amount*rate-amount[-1]*rate[-1]:increase) eliminando la necesidad de repetir el nombre de la tabla al referenciar la fila previa.

En pandas para tablas es común repetir el nombre de la columna y combinar groupby y rolling, por ejemplo sales['increase'] = sales.groupby('store')['amount'].rolling(window=2).apply(lambda x: x[1] - x[0], raw=True). El resultado es funcional pero menos compacto que la notación adyacente de SPL.

SPL aplica su mecanismo de referencia adyacente a todos los conjuntos, incluidos subconjuntos agrupados. Si sales almacena las ventas por tienda ordenadas por mes, calcular la variación mensual por tienda es directo con =sales.group(store).(~.derive(amount-amount[-1]:increase)) donde group conserva los subconjuntos y ~ hace referencia al subconjunto actual.

En resumen, SQL trabaja sobre conjuntos desordenados y depende de funciones de ventana y subconsultas para cálculos entre filas, lo que suele dar lugar a código extenso. Python y pandas admiten conjuntos ordenados y ofrecen varias herramientas como rolling, shift y diff, pero la sintaxis puede ser inconsistente según el caso y a veces exige operaciones auxiliares. SPL, con su mecanismo de referencias adyacentes basado en conjuntos ordenados, proporciona una sintaxis concisa, consistente y expresiva para cálculos entre miembros y subconjuntos.

SPL es open source. El código fuente está disponible en github com SPLWare esProc y se puede probar gratuitamente desde la web oficial de esProc.

Sobre Q2BSTUDIO: Somos una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones tecnológicas avanzadas. Diseñamos software a medida y aplicaciones a medida para impulsar la transformación digital de las empresas. Nuestro equipo de especialistas en inteligencia artificial desarrolla soluciones de ia para empresas, agentes IA y modelos integrables que automatizan procesos y mejoran la toma de decisiones. También ofrecemos servicios de ciberseguridad para proteger datos y sistemas, y servicios cloud aws y azure para desplegar infraestructuras seguras y escalables.

Nuestros servicios incluyen consultoría y desarrollos a medida en inteligencia de negocio y power bi para visualización y reporting, implantación de plataformas de inteligencia artificial y agentes IA conversacionales, desarrollo de software a medida para procesos críticos, y soluciones integrales de ciberseguridad. En Q2BSTUDIO combinamos experiencia técnica con enfoque en negocio para entregar proyectos que generan impacto medible.

Palabras clave y áreas de expertise: 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 deseas optimizar procesos analíticos que requieran referencias entre filas o ventanas adyacentes, mejorar visualización y reporting con power bi, integrar modelos de inteligencia artificial en tus operaciones o asegurar tus entornos en la nube con servicios cloud aws y azure, en Q2BSTUDIO estamos listos para ayudarte con soluciones personalizadas y escalables.

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