Cornucopia?

Aktuellt

Var tredje tackar nej till jobb utan möjlighet till distansarbete - hälften av kvinnorna

Enligt en undersökning från Sifo, beställd av Sigma IT, så tackar 35% av svenskarna nu nej till ett jobb som inte erbjuder distansarbete. 46...

2013-10-15 07:11

Gästinlägg: Källkod och teknik bakom priskartorna

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...
Nedanstående kommentarer är inte en del av det redaktionella innehållet och användare ansvarar själva för sina kommentarer. Se även kommentarsreglerna. För att din kommentar inte automatiskt ska raderas måste du sedan 28:e juni 2019 finnas på en VITLISTA. Skriv med kvalitet och följ kommentarsreglerna, så kan du komma in på listan. Ytterligare anonyma signaturer som unknown etc kommer inte att godkännas. Att vara vitlistad betyder inte att kommentaren stöds av bloggen, bara att kommentatorn når över en viss lägsta kvalitet och inte bryter mot reglerna. Genom att kommentera samtycker du till att din kommentar, tidsstämpel, profillänk och pseudonym sparas av Googles Blogger-system så länge det är relevant, dvs så länge blogginlägget är publicerat.

30 kommentarer:

  1. Bolånetorsk eller Hyresmupp?

    ;)

    SvaraRadera
  2. skjutning i Sätila står det på DN. Hoppas du är ok Cornu.

    SvaraRadera
    Svar
    1. Ja man undrar.... Trodde Cornu skulle vara uppe med tuppen och ge oss klarhet.

      Radera
    2. Även Västnytt på TV rapporterar om skottlossning i Sätila, Marks kommun.
      5 skott genom ytterdörren.

      Radera
  3. 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?

    SvaraRadera
    Svar
    1. 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.

      Radera
    2. Sundsvall har 1 854 träffar, duger det?

      Radera
    3. Ja, det låter som om det skulle kunna fungera. Vissa orter hade runt 48 träffar vilket inte blev bra överhuvudtaget.

      Radera
    4. Hur mycket måste jag muta dig för att göra det? :)

      Radera
  4. Gediget och innovativt. Bra jobbat! Självklart att sådana här saker dyker upp på den här bloggen - det är kvalitet.

    SvaraRadera
  5. @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.

    SvaraRadera
    Svar
    1. Nej, men jag tittat på Eigen3 som nästan skall vara i klass med Intel MKL. http://eigen.tuxfamily.org

      Radera
  6. Interesting to see ... thank you it's well done :)

    besiktning

    SvaraRadera
  7. 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.

    SvaraRadera
  8. 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.

    SvaraRadera
  9. Ä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.

    SvaraRadera
  10. 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!

    SvaraRadera
  11. 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.

    SvaraRadera
  12. Väl hackat! Har ett tag funderat på att göra något liknande och nu vet jag vart jag ska börja.

    SvaraRadera
  13. Wow. Riktigt intressant och bra gjort!

    SvaraRadera
  14. Den här kommentaren har tagits bort av skribenten.

    SvaraRadera
  15. 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 :-)

    SvaraRadera
  16. 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.

    SvaraRadera
  17. 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.

    SvaraRadera
    Svar
    1. 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.

      Radera
    2. För en med sympati för data och Python var det extra roligt att se vad som ligger bakom det hela. Bra jobbat.

      Radera
  18. Jag är inte begåvad med programmeringskunskaper men använder helst/gärna öppen källkod.
    Tack för bidraget , herr'n.

    SvaraRadera
  19. 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])

    SvaraRadera