Datarensning

 

Hvad er datarensning?

Datarensning er en process, som man gennemgår ved at rydde op i dataen for et eller flere vilkårlige datasæt, for at gøre dataen mere præcis og brugbar. Dette inkluderer at man identificerer ukorrekt data, som man enten kan ændre, erstatte eller slette fra datasættet. Dette kan man gøre ved hjælp af værktøjer til databearbejdning, som f.eks. Pandas (et Python modul) og regulære udtryk.

Når man udfylder en formular på nettet, hvor man f.eks. skal indtaste kontaktoplysninger som navn, alder, adresse, email og telefonnummer, så bliver dataen sendt til behandling sammen med alle andre formularer. Her bliver alt dataen behandlet så den lever op til nogle kvalitetskrav der gør at den mere effektivt kan bruges. Ofte bliver data indtastet forkert eller er ubrugeligt på andre måder, så man bliver nødt til at lave justeringer i det med datarensning før det kan bruges. Det kunne f.eks. være et telefonnummer, som kun er på syv cifre, hvilket betyder at det ikke er gyldigt. I sådan et tilfælde skal man tage stilling til, om man vil slette datafeltet, eller opdatere det ved at skaffe det rigtige telefonnummer.

Datarensning

I denne artikel vil kravene for datakvalitet blive gennemgået, samt arbejdsprocessen i forbindelse med at rense data. Til sidst vil artiklen gennemgå regulære udtryk, som er et system der kan bruges i forbindelse med datarensning til at finde mønstre i dataen.

 

Datakvalitet

Når man renser data er formålet at dataen så vidt muligt overholder en bestemt række kvalitetskrav:

  • Gyldighed
  • Nøjagtighed
  • Komplethed
  • Overensstemmelse
  • Ensartethed

Disse krav bliver gennemgået her.

 

Gyldighed

Dataen skal overholde nogle krav som validerer dens gyldighed. Det betyder at følgende skal gøre sig gældende i datasættet: datatypen for hver kolonne skal være ens, numre skal høre ind under en bestemt rækkevidde, bestemte datafelter skal være unikke og udfyldte, bestemte felter skal have bestemte værdier (f.eks. skal en persons køn enten være mand eller kvinde), nogle tekstfelter skal følge et bestemt mønster (f.eks. skal et telefonnummer bestå af otte cifre) og to eller flere forskellige datafelter må ikke modstride hinanden.

 

Nøjagtighed

Datafelternes værdier skal være så nøjagtige og reflektere virkeligheden så vidt muligt. Det kunne f.eks. være at en adresse ikke eksisterer, en email er ugyldig eller en persons højde er forkert. Hvis det er muligt, så skal disse dataværdier rettes.

 

Komplethed

Datasættet skal være så komplet som muligt. Der hænder ofte at der forekommer datafelter som der ikke er indtastede nogle værdier i. Hvis man opdager at noget af dataen ikke er komplet, så bliver man nødt til at tage fat i datakilden for at få den korrekte data, så vidt det er muligt.

 

Overensstemmelse

Dataværdier for et eller flere datasæt bør ikke modsige hinanden. Noget der står ét sted skal også stemme overens med noget der står et andet sted i dataen, da man ellers ikke ville vide hvad der er sandt og falskt.

 

Ensartethed

Data skal angives med de samme måleenheder. F.eks. bør en kolonne med priser ikke indeholde flere forskellige valutaer. Lige så vel, bør højden på en person ikke blive målt i både meter og centimeter. Hvis en person er 1,82 meter kan det også angives som 182 centimeter. I disse tilfælde skal der foretages en ændring, da dataen ellers ikke vil kunne sammenlignes og foretages statistik på.

 

Arbejdsprocess

Den krævne process for datarensning er opbygget af fire trin:

  1. Inspektion
  2. Rensning
  3. Verificering
  4. Rapportering

Disse fire trin vil blive gennemgået her.

 

Inspektion

I det første trin i processen skal man inspicere dataen for at udforske datafelter, som ikke lever op til kvalitetskravene for data. Her skal man holde øje med forskellige slags fejl i dataen. Bl.a. skal man kigge efter om der er noget data som mangler, om dataen er den korrekte datatype, om noget data afviger for meget sammenlignet med resten, om dataen følger de samme måleenheder, om nogle datafelter er gentaget flere gange og om noget af dataen er irrelevant.

 

Rensning

Når man har inspiceret dataen og fundet de vilkårlige datafelter, kolonner og rækker som ikke lever op til kravene, så skal man foretage et valg i forhold til, hvad man skal gøre ved dem. Skal de slettes, ændres eller erstattes?

Data som er irrelevant eller data som er gentaget kan sagtens slettes; data som har en forkert måleenhed skal ændres til den korrekte måleenhed; data med stavefejl eller for mange blanke tegn (mellemrum osv.) bør rettes; tekstværdier bør følge de samme regler for store og små bogstaver, f.eks. bør nogle tekstværdier ikke været skrevet udelukkende med store bogstaver mens andre værdier kun har et stort begyndelsesbogstav.

Hvis nogle værdier mangler, så er der flere forskellige muligheder at håndtere det på. Enten kan man slette de tomme datafelter, ellers kan man kalkulere de manglende værdier baseret på de andre indtastede dataværdier, eller også kan man afmærke datafeltet. Den sidste mulighed er især nyttig, hvis man gerne vil have et overblik over hvor mange datafelter der ikke er blevet indsat en værdi i.

 

Verificering

Når man har renset dataen skal man verificere, at alt er korrekt og at dataen nu lever op til kvalitetskravene. Det betyder at man bl.a. skal tjekke at dataværdierne ikke modsiger hinanden efter at man har ændret i dem.

 

Rapportering

I det sidste trin i forbindelse med datarensning bør man få lavet en rapport over dataens status for at få et overblik over hvilke ændringer der er blevet foretaget i datarensning-processen og hvad det har haft af betydning for dataen. Diverse softwarepakker og moduler kan generere rapporter og statistikker over dataen, som kan benyttes til det sidste trin i processen.

 

Datarensning med regulære udtryk

Regulære udtryk er et system der blev opfundet af Stephen Cole Kleene i 1951 til at validere mønstre i skriftsprog. Et mønster er en bestemt rækkefølge af tegn. Et regulært udtryk vil kunne validere alle de input som følger et bestemt mønster. Lad os sige, at man skal lave et regulært udtryk som kan validere et telefonnummer. Her skal man overveje kravene for et gyldigt telefonnummer. Det skal bestå af otte cifre og det må ikke være andet end tal. Dette kan man lave til et regulært udtryk, så hvis inputtet ikke følger dette mønster, så vil det ikke blive valideret af udtrykket.

Regulære udtryk er et effektivt værktøj til datarensning eftersom det kan frasortere alt det data, som ikke følger det bestemte mønster. Hjemmesiden regexr.com tilbyder værktøjer, så man nemt kan lave og teste regulære udtryk.

De grundlæggende principper for regulære udtryk vil blive gennemgået her.

 

Den nøjagtige tekst

Et regulært udtryk kan blot være en vilkårlig tekst, f.eks. zebra. Med dette regulære udtryk, så vil alle input som indeholder de præcise tegn, zebra, blive valideret.

 

Vekslen mellem to eller flere ord

Et regulært udtryk kan være to eller flere ord separeret med en lodret streg (|). Når man separerer ordene med en lodret streg betyder det at inputtet blot behøver at være ét af de vilkårlige ord. Det regulære udtryk, zebra|elefant vil validere inputtet zebra og inputtet elefant.

Man kan også sætte ord separeret med en lodret streg ind imellem parenteser for at angive at et af de vilkårlige ord kan indsættes et sted i en sætning. Det regulære udtryk, Mit yndlingsdyr er en (zebra|elefant), vil validere inputtet, Mit yndlingsdyr er en zebra, og inputtet Mit yndlingsdyr er en elefant.

 

Potentielle tegn

Et regulært udtryk kan indeholde firkantede parenteser. Tegnene imellem parenteserne kan alle erstatte et vilkårligt tegn i teksten. Dette er nyttigt for ord der ofte bliver lavet stavefejl i. Det regulære udtryk, finan[sc]iere, vil både validere finansiere (stavet med “s”) og financiere (stavet med “c”). Mange folk staver nemlig “finansiere” med “c”, hvilket er forkert.

Man kan sætte en cirkumfleks (^) foran tegnene inde i de firkantede parenteser, som gør at udtrykket vil validere alle tegn som ikke er angivet. Det regulære udtryk, [^aeiouyæøå]at vil validere alle tekster som ender med “at” og starter med tegn som ikke er a, e, i, o, u, y, æ, ø og å. Det kunne f.eks. være kat eller hat.

Man kan også benytte en bindestreg (-) for at angive alle tegn i et bestemt omfang. Det kunne f.eks. være [a-d], som angiver tegnene a, b, c og d. Det samme kan gøres med tal. [1-5] angiver tallene 1, 2, 3, 4 og 5. Bemærk at der er forskel på store og små bogstaver. For at inkludere alle bogstaver, både store og små, skal man skrive [A-Za-z].

 

Erstatningstegn

Et regulært udtryk kan indeholde et punktum (.) som angiver et ukendt tegn. Det regulære udtryk, ka..e, vil både validere kaffe og katte, eftersom de to punktummer kan være hvilke som helst tegn.

 

Tegnklasser

Der findes forskellige tegnklasser om angiver hvilke slags tegn som inputtet kan bestå af:

  • \w – Tegnet kan bestå af alle bogstaver i alfabetet, både store og små, samt alle tal fra 0 til 9. Symboler er ikke inkluderet, på nær bundstreg (_).
  • \d – Tegnet kan bestå af alle tal fra 0 til 9.
  • \s – Tegnet kan enten være et mellemrum, et linjeskift, sideskift eller en indrykning.

Derudover findes der tegnklasser som angiver hvilke tegn som inputtet ikke kan bestå af:

  • \W – Tegnet kan ikke bestå af bogstaver i alfabetet, tal fra 0 til 9, men kun symboler, på nær bundstreg (_).
  • \D – Tegnet kan ikke bestå af alle tal fra 0 til 9.
  • \S – Tegnet kan ikke bestå af et mellemrum, et linjeskift, sideskift eller en indrykning.

Bemærk at tegnklasserne kun angiver et enkelt tegn. Man kan tilføje flere af de samme tegnklasser ved siden af hinanden for at angive et længere tekstmønster. F.eks. vil udtrykket, \d\d\d\d\d\d\d\d, validere otte tal lige efter hinanden. Dette regulære udtryk kan benyttes til at validere telefonnumre.

 

Kvantifikatorer

Et regulært udtryk kan indeholde to tuborgparenteser ( {} ) som angiver bestemte kvantifikatorer. Imellem de to tuborgparenteser indsættes et tal, som angiver hvor mange af det foregående tegn eller mønster der må være.

  • \d{5} – angiver at der skal være fem tal
  • \d{1,3} – angiver at der skal være mellem 1 til 3 tal
  • Bø{4}h – angiver at der skal stå B, efterfulgt af fire ø‘er, efterfulgt af et h (Bøøøøh)

Et spørgsmålstegn (?) angiver at det forudgående tegn enten kan være der 0 eller 1 gang. Det regulære udtryk, Bygg?e, vil både validere Byge og Bygge. Man kan også sætte et helt ord ind i en parentes efterfulgt af et spørgsmålstegn for at angive at sætningen kan valideres, om ordet er med eller ej. Det regulære udtryk, Der er en (stor)? bjørn, vil både validere Der er en stor bjørn og Der er en bjørn.

En stjerne (*) angiver at det forudgående tegn enten kan være der 0, 1 eller flere gange. Det regulære udtryk, Bø*h, vil både validere Bh, Bøh, Bøøøh og Bøøøøøøøøh.

Et plustegn (+) angiver at det forudgående tegn enten kan være der 1 eller flere gange. Det regulære udtryk, Bø+h, vil både validere Bøh, Bøøøh og Bøøøøøøøøh.

 

Ankere

Man kan benytte et cirkumfleks (^) i starten af det regulære udtryk og et dollartegn ($) i slutningen af det regulære udtryk for at angive at der ikke kommer noget før og efter. Det regulære udtryk ^hunde er søde$ vil validere teksten hunde er søde, men ikke sorte hunde er søde eller hunde er søde kæledyr.

 

Skiftetegn

Regulære udtryk benytter punktum, spørgsmålstegn, stjerne, cirkumfleks, dollartegn, skråstreg, parenteser og lodrette strege til at lave bestemte mønstre. Hvis man vil benytte disse tegn i selve udtrykket, så skal man sætte en omvendt skråstreg (\) foran tegnet.

Skriv et svar