De senaste åren har det pratats mycket om ”big data” och de spännande insikter man kan utvinna ur det. Det finns väl ingen exakt definition på big data, men det man generellt brukar mena är väl data som är för stor för att få plats på en enskild dator och som kräver lite andra verktyg för att arbeta med, t.ex. att man använder tekniker som map-reduce för att använda flera datorer parallellt för att bearbeta sin data.
På Booli jobbar vi med en massa data av olika slag där olika dataset så klart är lite olika stora. Den här artikeln handlar om fördelarna med att hitta subset av data som är så små som möjligt, den flexibilitet det kan ge och vad det i sin tur möjliggör i våra produkter.
Reducera dataset så de blir små och enkla att jobba med
Bostadsmarknaden är så klart vårt huvudfokus på Booli och sedan 2008 har vi samlat in information om mer eller mindre alla försäljningar som sker i Sverige. Vi har också data om alla bostäder i Sverige, all nyproduktion som säljs, alla registrerade mäklare, en områdesdatabas som är en av Sveriges mest omfattande mm. Ur all den här spännande datan vill vi så klart plocka fram olika insikter, och vi vill kunna bygga tjänster där våra användare själva kan gräva efter det som intresserar dem. Det är ju svårt för oss att förutse vad alla våra användare är intresserade av, så vi behöver ha en flexibilitet där vi kan skära datan på olika sätt och göra en massa olika beräkningar.
All den här datan kan man ju tycka låter mycket och man kanske börjar snegla mot ”big data”-världens verktyg för att arbeta med den. Men genom att istället plocka ut de mest relevanta attributen från de här dataseten så blir det förvånansvärt lite data. Runt en gigabyte ungefär faktiskt, och det får ju utan problem plats i minnet på en enda dator.
Genom att reducera datan till sin essens har vi kunnat bygga en tjänst, vårt statistik-api, som tar de här dataseten och kan beräkna statistik aggregerad och filtrerad på väldigt flexibla sätt. Den tjänsten driver vår produkt Booli Pro som riktar sig till professionella användare på bostadsmarknaden men används också på många andra ställen i våra produkter.
Flexibla beräkningar med Python Pandas
När man fått ner storleken på sin data så kommer det roliga steget att beräkna statistik på den. För många användningsområden kan man så klart använda en SQL-databas, ElasticSearch eller liknande för olika beräkningar. Vi har dock varit tvungna att gå en lite annan väg eftersom vi inte hittade något färdigt som gjorde riktigt det vi behövde.
En utmaning med just vår data, särskild bostadsannonser, är att de har ett ganska komplicerat livsflöde. Mäklarna publicerar ofta en annons först, håller ett par visningar och försöker få igång en budgivning. Om bostaden då inte blir såld så plockas annonsen ofta ner för att återpubliceras igen vid ett senare tillfälle, så att bostaden inte ska se svårsåld ut. Det ställer till det lite när vi ska räkna på hur många bostäder som varit ute till salu under olika tidsperioder, så att vi inte dubbelräknar bostäder som återpublicerats.
För att kunna beräkna vår statistik flexibelt och ta hänsyn till den sortens komplicerade tidsflöden har vi byggt vår egen beräkningsmotor med hjälp av Python Pandas. Genom att formattera om vår data och göra den enkel att läsa in som Pandas dataframes behöver vi inte förberäkna något utan kan filtrera direkt i underlaget och sedan räkna fram exakt vad vi vill ha. T.ex. kan vi plocka fram sånt här:
Hur många gamla lägenheter (byggda före 1934) var ute till salu under 2020?
12 894 st.
Vilken kommun hade flest miljonprogramslägenheter ute till salu under 2020?
Göteborg, med 1 235 st.
Vilken bostadsutvecklare hade flest nyproduktionsprojekt till salu under 2020?
JM, med 131 st.
Vi kan också enkelt plocka fram tidsserier och följa statistik över tid. T.ex kan vi ser hur antalet annonser som ligger ute som snart till salu har ökat år för år.
En annan trevlig fördel med att jobba med Pandas är att det är väldigt lätt att göra det tillgängligt som API:er eftersom Python har många bra bibliotek för sånt.
Möjliggör avancerade beräkningar
En annan fördel med att använda sig av Pandas är att man inte är begränsad till de statistik-funktioner som finns i den databas man använder. I samma tjänst som beräknar statistik-serierna ovan så beräknar vi också våra prisindex som är en mer avancerad modell, nämligen ett hedoniskt time-dummy index (sug på den karamellen). Eftersom vi redan hade vår beräkningsmotor på plats med tillgång till hela det stora eko-system av bibliotek som finns till Python så var det enkelt att utöka den med de mer avancerade beräkningarna också.
Det här sättet att reducera data till små hanterliga subset som det är enkelt att göra flexibla beräkningar på har möjliggjort många produkter och funktioner hos oss.