Monthly Archives: December 2012

Web application user visualization (in shell with awk)

I had an interesting quick task last week, and I’m allowed to post 3 pics from it. I got to visualise users of an internet company based on some TSV (tab separated value) file. They generate this user-stats file daily where each row represents one user. But they couldn’t see if they are making any progress with their iterations and changes or not, except by approximate assessment while scrolling the file. They wanted it done in shell as they would mostly use it over ssh so I decided to use awk.

Sign-ins in last 14 days

One thing I could get from that file is the info if a user has signed-in in last 14 days. I decided to visualise it like this. Each -/¤ represents one user, they are ordered by sign up date. The green ¤ did login in last 14 days.

We can nicely see how green fields become more and more frequent with time.

dataoko_company_active14d

What this doesn’t answer us is if this is because of user churn or did the web product get better with time. Probably both but to what degree?

Users that signed-up for the second day

To find out that I needed some datapoint that isn’t affected by distance from now, and it was there. Did the user sign-in for any other than the first day.

dataoko_company_multidaylogin

So this tells us few things. From start in 2009 to Jun 2011 this rate was improving considerably. Then it peaked and flatted out. From May 2012 it actually had some drops which could mean that new iterations reduced the quality of the web app. Because drops are short and rate returns to approximate plateau level between them (and based on dates which show increased number of users per month) it could also mean that the web app got some less quality visitors that just checked out the webapp. These things are typical if you get promoted in some media, which brings a spike of users, but they are there for curiosity and not necesarry looking for exactly such app at that particular time.

What I would dare to judge is that the perceived first user’s app quality didn’t improve in any meaningfull way sice Jun. 2011, which was a shock to them.

How many users upgraded from free plan

Suposedly 37signals once wrote (and everybody keeps parroting it to this company all the time) that “free users don’t convert to paid users, and most of paid users start as paid users”.

They knew that users did upgrade on them, but never knew exactly how many, so I visulised that too. Stars are currently active paid users. Blue stars are the one that started as paid users, greens are the ones that upgraded:

dataoko_company_upgrades

Well the parrots should maybe keep their beaks closed. It turns out that 30 out of 71 currently active paying users came here by upgrading from the free plan. It also seems that the upgraders are much less “churny”, which makes sense.

This says nothing against 37signals, they have their own data. But it does say that what holds for A doesn’t necesarily hold for B.

update: I decided to show the script for the first 2 tables (it accepts the width and what to measure), but don’t shoot me for its fugliness, I just hacked away until it did what I wanted, and I am fine with it:

#!/bin/bash
awk -v width=$1 -v char=$2 -F"\t" '{x=substr($7,char,1);if(x=="+"){p++;x="33[1;31m¤33[0m"};if(x=="*"){p++;x="33[1;32m¤33[0m"};printf("%s ", x);i++;if(i>width){i=0;printf(" | ");printf("33[1;34m %s33[0m\t", $4);while(p-->0){printf("_")};p=0;print""}} END {print""}'

The TSV looked something like this:

1234    lite   1       1-Dec-2012      00-xxx-0000     1-Dec-2012      .***
1235    pro    1       2-Dec-2012      00-xxx-0000     6-Dec-2012      +**-   

~follow me on twiter~

Advertisements

Slovenske občine #2 :: Kam?

Do določene mere smo v prejšnji objavi odgovorili na vprašanje KOLIKO, sedaj pa nas zanima osnovna slika o KAM.

S pomočjo supervizorja in par dodatnih skript pridobimo zneske in osnovne dejavnosti podjetij s katerimi so občine poslovale med letom 2003 in 2012. Dejavnosti po SKD (standardni klasifikaciji dejavnosti) je preveč, da bi bilo uporabno, a k sreči so hirarhično urejene. Tako lahko pri vsaki dejavnosti poiščemo dejavnost na prvem nivoju in jih seštejemo.

S tem dobimo matriko, ki jo je najlažje videti v “heatmap”-u. Svetlejša barva je bolj vroča in  predstavlja višjo vrednost. Graf je normaliziran po mestih in razvrščen po povprečjih zneskov, tako da nižje občine so načeloma večje.

Kliknite na sliko in z zoom/scrool brskalnika boste lahko videli več.

dataoko_obcine1_heatmap_norm_orgs__cluster_orgs

Opazke in vprašanja:

  • občine so imele največ plačil ustanovam iz finančnega/zavarovalniškega področja in gradbeništva. Sledi voda/okolje/komunala.

Manjšinske kategorije

Pri zgornjem grafu, kot vedno, par kategorij izstopa, zato ne moremo dobro videti vzorcev pri nižji večini kategorij. Če odstranimo največje 4 kategorije se pokažejo še vzorci v teh. Tudi tu so občine razvrščene po povprečju zneskov (nižje občine so načeloma večje).

Kliknite na sliko in z zoom/scrool brskalnika boste lahko videli več.

dataoko_obcine1_heatmap_norm_orgs__cluster_orgs_minor

Vzorci tu so zelo raznovrstni in potrebovali bomo dodatne analize če hočemo ugotoviti kakšna globalna pravila, kakšne povezave. Vsak pa si lahko pogleda graf za posamezne občine (npr. svojo) in morebiti najde kakšne zanimive specifike ali primerja par izbranih občin.

Klustriranje

Da malo bolje spoznamo podatke in dobimo kakšen dodaten uvid si podatke “klustrirajmo” in si jih poglemo še enkrat. Občin je preveč in imena sama ne povedo nič o velikosti, poziciji ali kakšni drugi lastnosti občin. Zato nam klustriranje ne pove nič o samih občinah, bolje pa lahko spoznamo same kategorije. Lahko npr. vidimo kako določene kategorije tvorijo skupine, kako velike so in odnose med kategorijami samimi.

Občine sedaj niso več razporejene po povprečjih zneskov ampak so hirarhično “klustrirane”, kar pomeni da so občine s podobnimi profili kategorij bolj skupaj. Na levi lahko vidite drevo (dendrogram) ki ga je hirarhično klustriranje ustvarilo. Na najvišjem nivoju vidimo dve skupini občin, eno s poudarkom na financah in zavarovalništvu in drugo s poudarkom na gradbeništvu. Če gremo bolj v detajle najdemo še skupine znotraj teh.

heatmap_cluster_rows

Ker je bila bolj raznovrstna je manjšinska slika mogoče še bolj zanimiva. Na prvi pogled izstopa cca. 6 skupin, ene so večje ene manjše kjer ima vsaka poudarjeno eno kategorijo. Na primer daleč najširša je skupina s poudarkom na promet/skladišče, naslednji dve sta videti vozila in predelava, več je skupin okoli ožjih maksimumov.

heatmap_cluster_rows_min

To je za drugo objavo vse. Danes smo dobili občutek ozirom osnovni vpogled v kakšne tipe podjetij gre denar. Kako različne so si po tem občine med seboj. Ne vidimo pa še nobenih povezav tega z drugimi lastnostmi občin. Naslednjič bomo poskušali najti kakšne povezave, ni garancije da jih bomo glede na (omejen vrste podatkov) uspeli, ker ni garancije da močne povezave med podatki ki jih lahko pridobimo obstajajo.

Bralec

Predlogi glede tega kje najti dodatne vrste podatkov o občinah, katere podatke bi bilo smiselno primerjati, kakšna vprašanja naj poskusimo odgovoriti, vaš pogled na doslej prikazano so kot vedno dobrodošli!

Vir podatkov

http://supervizor.kpk-rs.si/

Izjava

Podatke smo obdelali in predstavili v želji, da čimbolje prikažemo realno stanje, vendar ne prevzemamo nobene odgovornosti za njihovo točnost ali za točnost naših postopkov. Prav toko ne prevzemamo odgovornost za kakršnekoli posledice uporabe teh podatkov ali naših prikazov in povzetkov. Vsi izvorni podatki so javni in vsak jih lahko analizira sam, če želi na podlagi njih delovati. Če naletite na kakšne nepravilnosti ali napake nam jih prosim sporočite na dataoko@fastmail.fm.

~sledite me na twiterju~

Slovenske občine #1 :: Koliko?

Trenutno bi to lahko bila celo tredovska tema, a podatke sem začel zbirati in analizirati daleč pred #gotofsi protesti (ali današnjim predlogom reform) in zaenkrat nadaljujem po originalnem načrtu. V prvi objavi želim dobiti osnovno sliko o občinah v Sloveniji.

Iskal sem odgovor na 2 vprašanji, koliko občanov, koliko odhodkov tretjim (pravnim) osebam (ker to se da videti).

Kot osnovni podatek sem vzel seznam občin s številom občanov ter podatke zbrane s spletne strani protikorupcijske komisije supervizor.kpk-rs.si.

Na tem mestu naj povem, da je supervizor ena zelo svetlih točk, ki dokazuje da tudi v Sloveniji javni uslužbenci (o katerih drugače nimam naj-naj-lepšega mnenja) znajo delovati inovativno, proaktivno in “deliverati”, ter nas vsaj v delčku postaviti ob bok razvitim demokracijam in projektom kot npr. data.gov.uk.

Koliko občanov?

Najprej sem želel videti kako sploh, so razporejene občine glede na število občanov. Priznam da sem bil presenečen. Veliko socialnih / tržnih / kulturnih / organskih pojavov namreč sledi paretovi (power law) distribuciji. A ker sem mislil, da so občine nekako bolj sistematska tvorba (ki ima mogoče neko optimalno število občanov in nek določen min/max), takšne distribucije nikakor nisem pričakoval.

Nasprotno od tega so občine v Sloveniji videti čisto “kulturna” tvorba, kjer največja občina Ljubljana šteje ~270.000 občanov in najmanjša Hodoš le ~315. Torej razmerje na nivoju 1000:1 !?!

dataoko_obcine1_popul_popul


Plačila podjetjem

Potem sem v roke vzel Supervizor, napisal par skript in dobil seštevek plačil pravnim osebam (podjetjem) za vsako občino, ter jih razvrstil na grafu po enakem vrstnem redu kot zgoraj. Zneski so seštevki plačil od začetka 2003 do konca 2012.

dataoko_obcine1_popul_spent

Kot vidimo je graf v grobem primerljiv z grafom števila občanov, vsekakor pa ni popolnega ujemanja, kar tudi ni bilo za pričakovati.

Plačila podjetjem na občana

Pa si poglejmo kar nas v tem trenutku najbolj zanima. Kaj dobimo, če pri teh ogromnih, srednjih in mikro občinah zdelimo zneske plačil na števila občanov.

Ali so ogromne občine po izdatkih na prebivalca popolnoma različe od srednjih (zaradi distribucije bi lahko rekli da občin srednje velikosti sploh ni) in mikro občin?

dataoko_obcine1_popul_rate

Na moje presenečenje so si kljub ogromnim razlikam v številu občanov zelo podobne.


Moje naključne opazke:

  • Med posameznimi občinami so velika odstopanja. A splošen trend od ogromnih občin do manjših in najmanjših je nenavadno konsistenten. Na primer če vzamemo povprečje 5 največjih občin dobimo zelo podobne števlike, kot če vzamemo 5 občin iz sredine grafa (ki so veliko manjše)
  • Med samimi občinami sorodnih velikosti so razlike, a so zelo enakomerno razporejene. Tu bi bilo vsekakor zanimivo najti kakšne smiselne povezave, in v to bom pogledal v naslednjih objavah.
  • Izravnajoča linija (loess smoothing) pokaže da imajo tiste res najmanjše občine porast izdatkov na občana. Porast se začne tam nekje od 1500 – 1000 občanov navzdol.
  • Povprečna slovenska občina je od leta 2003 do 2012 izplačala podjetjem med 6000 in 7000 na občana.

Kaj se moramo zavedati:

  • To so le izdatki zunanjim pravnim osebam (podjetjem, bankam, društvom, zavodom,…). V grafu ne vidimo internih izdatkov občin (npr. plače, sejnine), ki imajo najbrž spet svoje specifike.
  • Da ima specifična občina plačil več ali manj ni avtomatsko dobro ali slabo. Npr. ne vemo ali je bolj “zapravljiva” ali pa več investira (in je naprimer bolj uspešna pri pridobivanju sredstev, ali zbere več dohodnine na prebivalca). Vsekakor pa je to podatek, ki ga lahko lahko potem nekdo raziskuje naprej.

Viri podatkov

Podatke (občine in št. prebivalcev v 2010) in SKD – standardno klasifikacijo dejavnosti (za naslednjič) sem komaj “spraskal” z nekih spletnih strani. Oboje bom objavil v za-programsko-branje primernem formatu na githubu. Tam bom objavil tudi nadgrajene skripte za dostopanje in parsanje supervizorja, samo da jih še malo uredim.

Naslednjič

Naslednjič si bom skušal odgovoriti na “Kam” in sicer: Kam, v katere vrste (kategorije po SKD) podjetij gredo ta plačila iz občin. Zaenkrat je ideja, da ne izpostavljamo posameznih občin, ampak iščemo splošne trende / povezave / in zanimivosti.
V komentarjih me lahko kaj popravite, mi daste kakšen namig glede dodatnih podatkov ali poveste kako vi vidite prikazano.