Velkommen til dataon's Julekalender 2025!

Hver mandag, onsdag og fredag frem til jul kan du åbne en ny låge.
Tilmeld dig vores mailingliste og modtag en mail på dagen.

22. december
Tema
Lav din egen visualisering med Deneb

(lavet af Frederick Jensen)

Dagens låge handler om Deneb visualiseringen som gør det muligt at lave din helt egen visualisering. I nogle situationer kan det være svært at finde den visualisering som viser data på præcis den måde man ønsker. Og det er måske ikke lige til at finde en custom visualisering som giver den visuelle fremstilling af data man ønsker. Deneb visualieringen er din ven i denne situation. Den giver dig nemlig mulighed for at lave din egen visualisering.

I dagens artikel viser jeg dels hvordan du kommer i gang og og dels giver jeg et færdigt eksempel på hvad du kan opnå ved at arbejde med visualiseringen. Deneb visualiseringen er udviklet af Daniel Marsh-Patrick. Denne side indeholder information om visualiseringen:  https://deneb.guide/. Og på dette link findes mange templates og eksempler på brug af visualiseringen: https://deneb.guide/community/resources

Hvad er Deneb

I Deneb visualiseringen er der to sprog du kan bruge til at lave visualiseringer med. Det nemmeste er at bruge Vega-Lite og alternativet er Vega. Vega-Lite er et højniveau sprog til at lave interaktiv grafik. Syntaksen er JSON og med den kan man skabe et bredt udvalg af visualiseringer til dataanalyse og præsentation.

Sammenlignet med Vega giver Vega-Lite en mere kortfattet og brugervenlig måde at oprette almindelige visualiseringer på. Da Vega-Lite kan kompilere sine specifikationer til Vega-specifikationer, kan du anvende Vega-Lite som det primære visualiseringsværktøj og, hvis det er nødvendigt, skifte til at bruge det lavere niveau Vega til mere avancerede anvendelser.

Hvis du vil springe til det endelige eksempel i Power BI kan du klikke her her. Ellers læs videre nedenfor hvor jeg giver en introduktion til brugen af Deneb.

Deneb - et eksempel

Som det første skal du hente Deneb visualiseringen ind i Power BI. Læs mere her hvis du har brug for hjælp: https://learn.microsoft.com/da-dk/power-bi/developer/visuals/import-visual

I dagens eksempel handler data om livskvaliteten i forskellige lande i Europa i årene 2013, 2018, 2021-2024. Data er hentet data fra eurostat: https://ec.europa.eu/eurostat/databrowser/product/page/ilc_pw01__custom_17746447

Eksemplet bygger på en simpel datamodel som indeholder:

Fact Life Satisfaction
CountryId
Date
Life Satisfaction Score
Average of Life Satisfaction Score (DAX beregning) 

Dim Country
CountryId
Country
Region

Dim Calendar
Date
Year

Med følgende skridt laver du den første simple visualisering:

1) Tilføj Deneb visualiseringen til kanvasen

2) Tilføj de værdier som skal bruges i visualiseringen. Fx: Year, Country og Average of Life Satisfaction Score

3) Klik nu på de tre ”…” i visualiseringen og vælg Edit

4) I dialogboksen, som viser sig, angives

5) I det næste skærmbillede ser du Vega-Lite koden i ventre side, visualiseringen øverst til højre og de rå data nederst til højre:

6) For at vise udviklingen i livskvaliteten for hvert land skal diagrammet ændres til et kurvediagram med én linje pr. land og år på x-aksen. Det kræver 6 ændringer i Vega-Lite koden:

6.1)               Tilføj width i linje 2 -for at lave diagrammet bredere

6.2)               I linje 7, ændres mark\type til “line” -for at ændre visualiseringen til et linje-diagram

6.3)               I linje 10, ændres y til x -for at flytte år til x-aksen

6.4)               I linje 14, ændres x til y -for at flytte livskvaliteten til y-aksen

6.5)               Tilføj linjerne 18-24 for at lave en legend og vise al data

6.6)               Tryk på pilen ”apply changes” for at se ændringerne i diagrammet:

7) For nemmere at tolke data i diagrammet tilføjes, som det næste, 3 linjer: en som markerer max værdien pr år, en om markerer min værdien pr år og en linje som viser gennemsnittet pr år.

Det tager selvfølgelig tid at lære Vega-Lite-syntaksen, men du kan nemt komme i gang og afprøve mulighederne ved at få hjælp fra ChatGPT til at skrive Vega-Lite-kode. Det har jeg selvfølgelig selv gjort.

De 3 linjer tilføjes til diagrammet ved at tilføje “lag” i visualiseringen. Det ses i denne Vega-Lite kode, som nu består af lagene:

* grundlæggende data
* max linje
* min linje
* gennemsnits linje

Nedenfor har jeg skrevet kommentarer til laget “Max linje” som forklarer de forskellige kodedele.

{

"width": 600,

"height": 400,

"autosize": { "type": "fit", "contains": "padding" },

"data": { "name": "dataset" },

//lag

"layer": [

//grundlæggende data

{

"mark": { "type": "line" },

"encoding": {

"x": { "field": "Year", "type": "nominal" },

"y": {

"field": "Average of Life satisfaction",

"type": "quantitative",

"scale": { "zero": false }

},

"color": {

"field": "Country",

"type": "nominal",

"legend": { "title": "Country" }

}

}

},

//max linje


{

//i “transform” transformeres de data der skal bruges.
//dvs: find max værdien af “average of life satisfaction” for hvert år og kald feltet: MaxLS


"transform": [

{

"aggregate": [

{ "op": "max", "field": "Average of Life satisfaction", "as": "MaxLS" }

],

"groupby": ["Year"]

}

],

//mark definerer den grafiske fremstilling af data

"mark": { "type": "line", "color": "black", "strokeWidth": 3 },


//encoding genererer selve visualiseringen

"encoding": {

"x": { "field": "Year", "type": "nominal" },

"y": {

"field": "MaxLS",

"type": "quantitative",

"scale": { "zero": false }

}

}

},

//min linje

{

"transform": [

{

"aggregate": [

{ "op": "min", "field": "Average of Life satisfaction", "as": "MinLS" }

],

"groupby": ["Year"]

}

],

"mark": { "type": "line", "color": "black", "strokeWidth": 3 },

"encoding": {

"x": { "field": "Year", "type": "nominal" },

"y": {

"field": "MinLS",

"type": "quantitative",

"scale": { "zero": false }

}

}

},

//gennemsnit

{

"transform": [

{

"aggregate": [

{ "op": "mean", "field": "Average of Life satisfaction", "as": "AvgLS" }

],

"groupby": ["Year"]

}

],

"mark": {

"type": "line",

"color": "black",

"strokeWidth": 2,

"strokeDash": [6, 4]

},

"encoding": {

"x": { "field": "Year", "type": "nominal" },

"y": {

"field": "AvgLS",

"type": "quantitative",

"scale": { "zero": false }

}

}

}

]

}

Tryk nu øverst i dialogboksen på ”back to report”.

Og diagrammet vises nu i sin helhed i Power BI rapporten hvor det interagerer med andre visualiseringer baseret på andre filtre som sættes på siden:

Et færdig eksempel

Afslutningsvis har jeg lavet en mere avanceret rapport hvor jeg har gjort det nemt at fokusere på outliers og dermed se data (lande) som ligger i toppen og bunden. Rapporten kan ses i Power BI her. Og her er et skærmbillede af rapporten:

Deneb-visualiseringen samler landenes livstilfredshed i et gråt bånd, som viser spændet mellem 10.- og 90.-percentilen på tværs af lande for hvert år. Båndet repræsenterer dermed den midterste del af fordelingen.

Visualiseringen giver et hurtigt overblik over top- og bundlandene, da kun de lande, der ligger uden for båndet, altså blandt de 10 % højeste eller 10 % laveste værdier vises som individuelle datapunkter. Det gør det nemt at identificere lande, der klarer sig markant bedre eller dårligere end gennemsnittet.

Båndets størrelse kan justeres. Initialt er det sat til 10 %, hvilket betyder, at lande mellem 10 % og 90 % ikke vises individuelt, men indgår i båndet. Den sorte linje i midten viser udviklingen i den maksimale livstilfredshed pr. år og giver et indtryk af den overordnede trend over tid.

Ved at justere slideren til venstre i rapporten ændres båndet. Valgmuligheden til højre gør det muligt fokusere på et eller flere udvalgte lande uanset om de er med i båndet eller ej.

Her fokuseres eksempelvis på Danmark og Italien:

Afslutning

Med denne artikel håber jeg at have givet inspiration til nogle af mulighederne med Deneb-visualiseringen og til, hvordan du kan lave dine egne visualiseringer. Du kommer nemt i gang, hvis du får hjælp fra ChatGPT.

Jeg ser Deneb som en mulighed i de situationer, hvor der er behov for noget specielt, som ikke kan lade sig gøre med standardvisualiseringer. Det er altså ikke en visualisering, der skal bruges overalt.

God fornøjelse!