TID: 06:00
Antal resor idag: 446
Cyklade km: 1761

Styr & Ställ Göteborg – Data Engineering & Datavisualisering

Detta projekt är ett sidoprojekt inom data engineering och datavisualisering som analyserar användningen av hyrcykeltjänsten Styr & Ställ (Nextbike) i Göteborg. Genom att kontinuerligt samla in och bearbeta öppna realtidsdata skapas en detaljerad bild av hur cyklar rör sig mellan stadens stationer över tid.

Applikationen är byggd med Svelte / SvelteKit och visualiserar estimerade cykelresor på en interaktiv karta med Mapbox och Deck.gl. Kartan visar faktiska cykelresor som genomfördes under samma veckodag som idag, baserat på historisk data cirka tre månader tillbaka i tiden. För att skydda personlig integritet visas resorna utan koppling till ett specifikt datum. Det går även att söka på en station och få fram mer data om resor från just den stationen.

Detta är ett fristående, icke-kommersiellt projekt och har ingen officiell koppling till eller godkännande från Nextbike. Om du vill veta mer om hur detta är byggt kan du läsa mer nedan.

Datainsamling & Pipeline

Rådata hämtas från Nextbikes API via ett cron-jobb som körs varje minut på en egen VPS. Varje snapshot innehåller information om tillgängliga cyklar per station och sparas som JSON i en PostgreSQL-databas.

Var femte minut analyseras historisk data tre timmar bakåt i tiden för att identifiera förändringar i cykeltillgänglighet mellan stationer. Dessa förändringar används för att inferera faktiska resor, vilka sedan lagras i en separat tabell anpassad för analys och visualisering.

Rutter & Geospatial beräkning

För varje unik kombination av start- och slutstation beräknas en föreslagen cykelrutt med hjälp av OpenRouteService (Betydligt roligare att visualisera på en karta än ett rakt streck, även om det så klart inte alltid speglar verkligheten). Rutterna lagras i databasen tillsammans med sina koordinater för återanvändning.

Om en rutt redan finns används den direkt, annars anropas API:t och resultatet lagras i databasen. Detta minimerar externa API-anrop och gör visualiseringen både snabb och kostnadseffektiv.

Visualisering

Resorna visualiseras på en karta med Deck.gl TripsLayer, vilket möjliggör animerade flöden som visar hur cyklar rör sig genom staden över tid. Kartan är byggd med Mapbox och ger ett tydligt geografiskt sammanhang för datan.

Om man söker på en viss station får man fram data kring totalt antal resor och ett beräknat antal kilometer som cyklats från den stationen de senaste 30 dagarna. Denna data hämtas genom SQL-queries direkt från SQL-databasen och använder även historisk väderdata från SMHIs väder-API för att ge ytterligare insikter om vilka typer av väder som påverkar resandet med Styr & Ställ. Linjegrafen är byggd med D3.

Frontend är byggd med SvelteKit och stylad med Tailwind CSS, med fokus på prestanda, tydlighet och ett rent gränssnitt anpassat för datautforskning. Applikationen är deployad som en Node.js applikation på egen VPS.

Syfte & Lärdomar

Projektets syfte är att demonstrera en komplett data engineering-pipeline: insamling → lagring → transformering → analys → visualisering och är ett exempel på hur rå data kan omvandlas till insikter med hjälp av modern data- och webbutveckling.