Analyse af SKAT's Motorregister med Python, Tableau og AWS Athena

Begrebet 'Big Data' er et hyppigt anvendt buzzword af virksomheder med virke indenfor teknologi, marketing og matematik. Af den grund ringer 'Big Data' en klokke hos langt de fleste, både med og uden kendskab til statistik og data science. Der er mange bud på hvad begrebet egentlig dækker over, de fleste er dog enige i at Big Data omhandler analyse, opbevaring og indsamling af massive datamængder. Størrer datamængder end et Excel ark kan indeholder og ofte også mere data end en person med en ikke-teknisk baggrund kan overskue.

I denne artikel vil jeg kigge nærmere på SKATs motorregister. I Motorregistret findes alle informationer om køretøjer i Danmark. Datasættet er selvsagt ret stort og vil derfor betegnes som Big Data. I ZIP format fylder XML filen 3.4 gb og i udpakket tilstand udgør den mere end 76,6 gb. Datasættet er netop så stort fordi det indeholder detaljerede oplysninger om mere end X køretøjer. F.eks. er det muligt at slå op hvor langt en bil kører på en liter brændstoft, hvilken farve den har, dens vægt, stelnummer og meget mere. Det bliver spændende at se hvad vi kan få ud af denne data når vi først har den tilgænglig i Tableau.

Før vi kommer så langt er det nødvendigt at få et overblik over processen. Nedenstående diagram viser processen i seks overordnede trin. Første trin er nemt og kræver kun adgang til en computer med en internetforbindelse og en harddisk med mere end 80 gb. ledig plads. Data kan downloads på datahub.virk.dk.


Data flow

Trin 2 kræver en del mere computer erfaring end blot at downloade en fil. Kender du ikke allerede til Python anbefaler jeg du starter på YouTube hvor der findes et utal at trænings videoer. Python er heldigvis Open Source og kan kører på alle computere helt gratis. Jeg anbefaler du installerer den nyeste version som i skrivende stund er 3.x og at du kigger nærmere på Jupyter Notebook eller Anaconda pakken.

Konverter til CSV med Python (Trin 2)

AWS Athena kan desværre ikke arbejde med XML filer på nuværende tidspunkt. Dette er den primære årsag til konvertering er nødvendig. Ydermere er kolonne baserede datasæt mere velegnet til traditionelle database. At datasættet er bygget på kolonner betyder at der ikke findes nestede værdier hvilket ellers er normalt for XML formattet. Konverteringen til kolonner fra nested data kaldes at fladgøre "to flatten" datasættet.

Måske har du allerede prøvet at arbejde med fil konvertering i Python og ved derfor allerede hvordan du skal gribe det an. Da dette projekt dog handler Big Data og datasættet fylder hele 76 gb !!! kræver det en lidt anden fremgangsmåde end normalt. Medmindre du har over 76 gb. hukommelse/RAM i din computer er det IKKE muligt at indlæse hele filen på en gang. Filen skal opdeles i mindre bider, skrives til CSV filen i mindre bider og der skal løbende rydes op i hukommelsen. Hvis du ikke har nogen interesse i at lære om programmering og data opbevaring kan du blot springe til afsnittet om visualisering i Tableau.

Python koden du ser nedenfor er inspireret af Bosco K HO' artikel om indlæsning af store XML filer. OBS: Hvis du prøver at lave samme øvelse kræver det at du også har plads på din computer til CSV filen. Dvs. sammenlagt skal du bruge 150 gb. ledig plads på din harddisk inden du går igang.

	
# Import the modules
import sys
import random

ans = True

while ans:
    question = raw_input("Ask the magic 8 ball a question: (press enter to quit) ")
    
    answers = random.randint(1,8)
    
    if question == "":
        sys.exit()
    
    elif answers == 1:
        print "It is certain"
    
    elif answers == 2:
        print "Outlook good"
    
    elif answers == 3:
        print "You may rely on it"
    
    elif answers == 4:
        print "Ask again later"
    
    elif answers == 5:
        print "Concentrate and ask again"
    
    elif answers == 6:
        print "Reply hazy, try again"
    
    elif answers == 7:
        print "My reply is no"
    
    elif answers == 8:
        print "My sources say no"
	

Det er bevidst at jeg ikke gennemgår ovenstående kode i detaljer. Jeg antager at hvis du er dum nok til at kaste dig ud i at gengive dette eksperiment, er du også i stand til at læse og forstå ovenstående kode. Du er dog altid velkommen til at skrive en kommentar i bunden af denne artikel, hvis du har spørgsmål forbedringer mm. til koden.

Upload CSV fil til AWS S3 File Storage (Trin 3)

Et simpelt dashboard i Tableau (Trin 6)



Kommentarer og spørgsmål

Skriv en kommentar eller stil et spørgsmål i en god og venlig tone, så svarer jeg tilbage inden længe