Gramatica Graficii (în engleză The Grammar of Graphics) este un cadru teoretizat de statisticianul Leland Wilkinson în 1999 care abordează crearea graficelor de date într-un mod similar cu cel în care funcționează gramatica unei limbi vorbite.
În trecut am scris despre gramatica graficii în limbajul R, primul care a adoptat-o prin librăria ggplot2, care a tradus teoria lui Wilkinson în cod. Ulterior, gramatica graficii a fost adoptată și în alte limbaje care lucrează cu date, precum Python (prin plotline sau altair), JavaScript (prin Vega și Vega-Lite sau chiar G2 de la Alibaba) sau Julia (prin Gadfly.jl).
Până nu demult, SQL-ul tradițional era considerat un limbaj rigid, destinat exclusiv manipulării și interogării tabelelor de date. Dacă voiai un grafic, trebuia să extragi datele din baza de date și să le muți în R, Python sau un instrument de raportare și vizualizare a datelor, precum Power BI sau Data Studio.
Recent, această barieră a fost spartă prin apariția unor extensii și dialecte SQL moderne care integrează Gramatica Graficii direct în interogările SQL. Unul dintre acestea este Malloy, dezvoltat inițial în cadrul Google ca o alternativă la SQL, dar care are o totuși sintaxă diferită de SQL.
Pentru a dezvolta vizualizări de date folosind un cod cât mai apropiat de sintaxa SQL a apărut recent ggsql, dezvoltat de echipa din spatele ggplot2.
ggsql – vizualizări din sintaxa SQL
Lansat oficial ca proiect open-source de către compania Posit (creatorii ecosistemului tidyverse, din care face parte și ggplot2, dar și ai IDE-urilor RStudio și Positron), ggsql este un instrument revoluționar scris în Rust. Acesta permite combinarea interogărilor SQL cu vizualizarea declarativă de date direct în același script.
În loc să aducă toate datele brute în memoria calculatorului tău, ggsql trimite agregările direct în baza de date. Din acest motiv, este nevoie de unul dintre motoarele suportate nativ, precum DuckDB pentru analiză locală, PostgreSQL sau sau platforme mari de date ca Snowflake sau orice bază de date compatibilă ODBC (Open Database Connectivity).
Pentru a accesa ggsql este nevoie și de un mediu de execuție (IDE), dar este bine de știut că editoarele moderne deja îl suportă:
- VS Code sau noul editor Positron (creat tot de Posit), prin instalarea extensiei oficiale
ggsql - Jupyter Notebooks –
ggsqlvine cu un kernel dedicat pentru Jupyter - Alte IDE-uri care folosesc Quarto / R Markdown pentru publicarea codului sau generarea de rapoarte automate în format PDF sau HTML

Principalele comenzi ggsql
Sintaxa ggsql este construită logic sub formă de blocuri de comenzi declarative. După ce ai scris interogarea SQL standard, folosești cuvântul cheie VISUALISE (sau VISUALIZE), urmat de o serie de comenzi specifice Gramaticii Graficii.
Iată cele mai importante comenzi din ggsql, grupate pe rolul lor în construcția graficului:
MAPPINGpentru definirea legăturilorDRAWpentru desenarea geometriilorSCALEpentru modificarea axelor și culorilorLABELpenru adăugarea de text și eticheteFACETpentru împărțirea în sub-grafice
ggsql 0.4
Recent, s-au lansat versiunile 0.4.0 și 0.4.1. Principalele actualizări aduse de acestea sunt:
- vizualizări spațiale și hărți, printr-un nou strat nativ numit
spatial, adăugarea setului de date încorporatggsql:world(care conține granițele țărilor la o rezoluție de 1:110m), dar și suport în clauzaPROJECT TOpentru proiecții de hărți (cum ar fimollweidesauorthographic) - agregare în interiorul straturilor (in-layer aggregation)
- adăugarea graficelor de tip radar și a decorațiunilor pentru circuite polare
- implementarea cititorului ADBC (Arrow Database Connectivity),
AdbcReader
Motive să utilizăm ggsql
Principalul motiv de a folosi ggsql este eliminarea fragmentării. Datele și codul vizualizării trăiesc în aceeași interogare. Dacă modifici o coloană în SELECT, graficul de mai jos se actualizează instantaneu.
De asemenea, este o tehnologie prietenoasă cu AI-ul, mai exact este LLM-Friendly, iar reproductibilitatea este excelentă.
ggsql a fost anunțat în această primăvară, dar între timp a primit câteva actualizări. Inițial, este în fază alfa, dar avem toate motivele să așteptăm și următoarele noutăți de la cei care se ocupă de acesta.


