Nedanstående artikel är ett gästinlägg från “en läsare”, som gjort visualiseringarna av lägenhetspriserna i våra tre största städer, Stockholm, Göteborg och Malmö, samt tidigare priskartor över villor.
Då önskemål har uppkommit om att berätta hur jag visualiserat bostadspriser har jag bestämt mig för att bryta tystnaden, dela med mig av min kodbas och beskriva hur jag gått tillväga.
Jag heter Stefan Larsson och är till vardags antälld hos en fordonstillverkare i Göteborgstrakten. Jag arbetar med dataanalyser liknande den jag gjort men inte på samma sätt och absolut inte i samma domän. Då jag ofta får frågor varför jag gör detta brukar jag svara att “vissa löser korsord eller Sudoku på fritiden, jag gör sånt här”. Jag tror personligen att detta är till större gagn för samhället än att lösa Sudoku. 🙂
Det hela började med att jag upptäckte Boolis öppna API och insåg att det vore trevligt att försöka visualisera bostadspriser på en karta. Jag har tidigare gjort kartor med densitetsmått i mitt arbete och tänkte att det inte kan vara helt annorlunda. Sagt och gjort gav jag mig på uppgiften med hjälp av programmeringsspråket Python och biblioteket Matplotlib med kartritning i form av paketet Basemap.
Tyvärr, som säkert många såg på de första kartorna, var kartmaterialet i Basemap avsett för oceanografi på global nivå och kustlinjerna var minst sagt grova vid kraftig inzooming. Dessutom fanns det inget vidare stöd för några bra landmärken på land.
Nåja, det blev kartor som visade intressanta trender och jag kontaktade Cornucopia och frågade om han kunde vara intresserad av att publicera materialet vilket han visade sig vara. (Jag tänkte att det kunde vara en form av “betalning” för att jag läser bloggen gratis.) De första kartorna tog inte hänsyn till tidsaxeln och jag provade att bygga modeller med en tredje axel i form av tid med enheten dagar. Resultatet blev en animering som egentligen inte sade så mycket mer än att priserna ökade i Göteborg.
Jag lade sedan några veckor på att försöka rita egna kartor genom att undersöka OpenStreetMap och Natural Earth. Genom boken “Python Geospatial Development, 2nd Edition” av Erik Westra (Bokus 376:-) lärde jag mig mycket om hur man ritar, projicerar och tolkar kartdata från diverse källor som används inom GIS (Geographic Information System). Jag höll på att prova mig fram med fria verktyg såsom SagaGIS, och det gick att få ut vettiga kartor med densitetsplottar, men inte med den kontroll jag önskade och inte med en tidsaxel.
Jag gav sedan upp försöken att rita kartorna själv och började istället använda ett program vid namn Maperitive för att manuellt extrahera kartdata vilket gav resultat snabbt. Jag kunde förse Cornucopia först med bostadspriser och sedan nu nyligen med lägenhetspriser mycket snabbare än tidigare. Jag insåg även att det inte var lönt att göra animeringar eftersom kartorna kräver såpass hög upplösning vilket inte är praktiskt för filmer. Därmed föddes kartor där derivatan för ett givet datum räknades ut och som visade sig bli bra mycket mer lättavlästa.
Jag har nu kommit till ett skede där det är dags att be om hjälp av de som känner sig intresserade och manade. Jag tror att den information som visualiseringarna medför ger ett mervärde utöver de ihopklumpade medelvärden per kommun som finns tillgänliga för övrigt. Jag lägger därför ut all källkod under GPLv3-licens på http://bitbucket.org/lastsys/pricemap.
Jag hoppas nu på hjälp med följande:
1. Granskning av modelleringstekniken. Jag välkomnar kritiska ögon som kan hitta brister i modelleringstekniken och som kan hjälpa till att förbättra den. En given förbättring är att få in konfidensintervall på modellens prisestimat samt även på derivatorna (dvs x kr/m2/dag +/- någonting). En annan kan vara att ersätta den likformiga fördelningen av basfunktioner med varierande täthet baserat på täthet hos mätpunkter för att eventuellt kunna minska antalet basfunktioner och snabba upp lösaren (min i5 med fyra kärnor och 32GB minne tar cirka 50 minuter på sig för att lösa ett glest ekvationssystem med 1,1 miljoner ekvationer för en karta).
2. Vidareutveckling av kodbasen. Det vore trevligt att slippa klippa ut kartor manuellt från Maperitive. Kan man bygga om programmet till en fristående program med användargränsnitt kan fler dra ut vad man vill ha från det. Jag har själv kompetensen att göra det med Qt (PySide), men hinner inte med det på fritiden. En del kod skulle även må bra av att implementeras i C för prestanda.
3. Hitta mer data att modellera på. Själv lade jag en del tid under arbetet på att försöka få tag på lagfarter från Lantmäteriet. Det visade sig att via en återförsäljare kostar det 1,50 kr per lagfart. Bara tillbaka till 2009 finns det 250000 lagfarter. Jag ville ha alla lagfarter som finns för att kunna modellera priser så långt bakåt i tiden som möjligt (och göra en animering över tid). Men det verkar kräva enorma summor pengar. Jag antar att det bara är vissa utvalda forskare och institut som har fri tillgång till sådan information. Vet någon hur man kan hitta mer information än den som finns hos Booli, så hör av er.
4. Det har kommit förfrågningar på att göra kartor för mindre orter. Jag har försökt för många många orter, men det blir sällan bra för det är för litet dataunderlag. (Dessutom verkar resten av landet vara något mer sansat än Stockholm…) Hade jag haft tillgång till mer data hade det förmodligen varit enklare.
Jag har därmed beskrivit deta hela i stora drag. Detaljer kring hur modelleringen fungerar finns i källkoden. Surfa in på http://bitbucket.org/lastsys/pricemap och titta.
Jag tänkte avsluta med att kommentera framtida potential givet att datakällor finns samt eventuella alternativa sätt att modellera. På http://www.trulia.com finns en amerikansk tjänst som visualiserar bra mycket mer (men inte förändringstakt). Klicka på “Local Info” längst uppe så kan man se prisnivåer på olika sätt, pendlingstid, skolkvalitet, risk för naturkatastrofer samt brottstatistik. Finns denna information lätt tillgänglig?
Jag har även sett en modell över bostadspriser i Helsingfors där skaparen via data från OpenStreetMap prissatt enskilda gator (jag har tyvärr tappat bort länken). För att göra detta krävs att man gräver ner sig rejält i datastrukturen för OpenStreetMap som är långt ifrån trivial att få ordning på. Lyckas man kan man rent av börja värdera pendlingstid med avseende på bostadspriser och så vidare. Möjligheterna är oändliga bara informationen finns. Det är bara politik och juridik som står ivägen. Tekniskt är det inget problem att hantera…
30 kommentarer
Bolånetorsk eller Hyresmupp?
😉
skjutning i Sätila står det på DN. Hoppas du är ok Cornu.
Ja man undrar…. Trodde Cornu skulle vara uppe med tuppen och ge oss klarhet.
Även Västnytt på TV rapporterar om skottlossning i Sätila, Marks kommun.
5 skott genom ytterdörren.
Bra jobbat Stefan!
Vad skulle du säga är den minsta ort i antal innevånare som går att modulera med denna teknik om man antar att antal avslut är någorlunda proportionell mot ortstorleken?
Du kan gå in på Booli och söka på "slutpriser" för en given ort och se hur många träffar du får. Gränsen verkar gå vid Karlstad, Örebro ungefär.
Sundsvall har 1 854 träffar, duger det?
Ja, det låter som om det skulle kunna fungera. Vissa orter hade runt 48 träffar vilket inte blev bra överhuvudtaget.
Hur mycket måste jag muta dig för att göra det? 🙂
Imponerande arbete!
Gediget och innovativt. Bra jobbat! Självklart att sådana här saker dyker upp på den här bloggen – det är kvalitet.
@Stefan Larsson
Har du tittat på open source biblioteket Armadillo ( http://arma.sourceforge.net/ )?
Jag har använt detta för att lösa ekvationssystem i C++.
Snabbt och mycket lätt att använda.
Nej, men jag tittat på Eigen3 som nästan skall vara i klass med Intel MKL. http://eigen.tuxfamily.org
Interesting to see … thank you it's well done 🙂
besiktning
Grattis till ett gedigt arbete! Spännande att även läsa dina resonemang bakom. Prata med t.ex. fastighetsekonomi på KTH om vad de har för datakällor att tillgå. Om du vill kan du säkert skriva något akademiskt om detta och åka och presentera på en konferens.
from __future__ import braces …
Ett imponerande arbete! Jag rekomenderar också att ta kontakt med forskare ang tillgång till prisuppgifter, de är säkerligen också intresserade av använda mjukvaran. Att hamna som medförfattare på publicerade papper lär inte vara svårt om du kommer dragandes med det här.
Även om det ligger högt över min kompetens, så är jag tacksam att du avslöjar metoderna. Än mer så, då du använt fria Open Source program för att göra beräkningarna.
Detta sista gör att alla som är intresserade kan prova på, utan att ha tillgång till något svindyrt program, som t ex Matlab.
http://xkcd.com/353/
En riktigt vardagshjälte i mina ögon, otroligt roligt att se någon som gör något helt utan betalning gör det likväl så förbaskat bra! Tummen upp för dig Stefan!
Riktigt coolt arbete du har gjort! Bra av Cornu att ta in detta. Är det här den nya tidens public service? I sånt fall känner jag mig genast mindre orolig över tidningsdöden.
Väl hackat! Har ett tag funderat på att göra något liknande och nu vet jag vart jag ska börja.
Wow. Riktigt intressant och bra gjort!
Den här kommentaren har tagits bort av skribenten.
Snyggt!, jag kopplar in en vän som är GIS-specialist och hör om hon kan tillföra något, eller lära sig något 🙂
Snyggt! Som gammal python-programmerare på en fordonstillverkare i Göteborgstrakten så kan vi mycket möjligt ha träffats. Ska kolla på koden och se om jag kan tillföra något.
Stefan har lovat att komma ut med en ny version, förhoppningsvis i afton.
Jag har ägnat dagen åt att ta mig igenom en del hinder.
Eftersom jag är Pythonamatör fastnar jag även på små saker.
Det är inga stora saker, bara tidstjuvar.
Framförallt kommer Stefan att se till att alla kataloger och indatafiler finns tillgängliga.
Han kommer också att ge lite instruktioner för vad som behöver laddas ner och vilka versioner som behövs för de olika programmen.
Uppdatering pushad. Nu skall det vara körbart direkt utan handpåläggning förutom att man får lägga till sitt eget Booli ID/key i config.json.
För en med sympati för data och Python var det extra roligt att se vad som ligger bakom det hela. Bra jobbat.
Jag är inte begåvad med programmeringskunskaper men använder helst/gärna öppen källkod.
Tack för bidraget , herr'n.
Hej
Har du brug for en komfortabel lån til din tilfredshed?
Vi tilbyder overkommelige lån @ 3% rente til rådighed for lokale
og
internationale låntagere.
Vi er certificeret, troværdig, pålidelig, effektiv, hurtig og dynamisk
og vi samarbejder med vores kunder.
Vi giver langsigtede lån 2-50 år Maksimal
Kontakt os
på ([email protected])
Lån ansøgningsskema
NAME: …………………………..
KØN: …………………….
Civilstand: ………………………
Kontakt Adresse: …………………………..
CITY / ZIP: ……………..
LAND: ……………..
ALDER: …………
Beløb, der kræves AS LÅN: …………..
LÅN VARIGHED: ……………
Månedlige indkomst: ………….
ERHVERV: …………
FORMÅLET MED LÅN: ………..
Gyldigt telefonnummer: ………….
FAX: …………….
Udfyld denne formular og sender den tilbage til (
[email protected])