47
1 Datenbereinigung in R Referent: Stefan Thieß Betreuer: Dr. Julian Kunkel Proseminar Programmieren in R 47/

Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

1

Datenbereinigung in R

Referent: Stefan ThießBetreuer: Dr. Julian Kunkel

Proseminar Programmieren in R

47/

Page 2: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

2

Gliederung

Einführung

● TidyR-Paket

● Typenumwandlung

● StrinR-Paket

● Fehlende Werte

● Extreme Werte

● Data-Warehouse

47/

Page 3: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

3

Einführung

Datenbereinigung ist:

● Auffinden von Fehlern● Erkennen von Widersprüchen● Ersetzen von Daten

Ziel ist es:

● Die Datenqualität zu erhöhen● Die Datenanalyse zu verbessern● Entscheidungsgrundlagen verbessern

47/

Page 4: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

4

Einführung

Standardisierung

Bereinigung

● Strukturieren● Normieren

● Entfernen● Ersetzen● Ableiten● Auftrennen

Daten

Erkundung● Verstehen

Abbildung:[AP1]47/

Page 5: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

5

Das TidyR-Paket

Principel of tidy data by Handley Wickham

47/

Page 6: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

6

Das TidyR-Paket

Tidy data:

● Ein Objekt pro Reihe

● Eine Variable pro Spalte

● Ein Objekttyp pro Tabelle

47/

Page 7: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

7

Das TidyR-Paket

Dirty data:

● Spaltennamen sind Werte

● Variablen sind im Wertebereich

● mehrere Variablen sind in einer Spalte

● mehrere Objekte sind in einer Tabelle

47/

Page 8: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

8

Das TidyR-Paket

TidyR:

● Von Hadley Wickham

● Verändert Tabellen

● Funktionen

– gather , seperate, spread, unite

47/

Page 9: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

9

TidyR-Paket::gather

Problem: Spaltennamen sind Werte

Syntax: gather(data, key, value, …)

Semantik:data: Name des Datensatzes key: Spaltenname für die Werte in der Spalte value: Spaltenname für die Werte …: -data: Spaltennamen, die bleiben sollen

47/

Page 10: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

10

TidyR-Paket::spread

Problem: Variablen sind WerteSyntax: spread(data, key, value)

Semantik:data: Name des Datensatzes key: Name der Spalte, deren Wert zum Spaltenname werden soll value: Name der Spalte ,die zum Wert werden soll

47/

Page 11: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

11

TidyR-Paket::seperate

Problem: mehrere Variablen sind in einer Spalte

Syntax:seperate (data ,col ,into)

Semantik:data = Name des Datensatzescol = Spaltenname, welcher geteilt werden sollinto = c( "Spaltennamen in die aufgeteilt werden soll“)

47/

Page 12: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

12

TidyR-Paket::unite

Syntax:unite (data,col,...)

Semantik:data = Name des Datensatzescol = Spaltenname der neuen Spalte... = Namen der Spalten die zusammengefasst werden sollen

47/

Page 13: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

13

TidyR-Paket:: Tidy data

Problem: mehrere Beobachtungseinheiten sind in einer Tabelle

47/

Page 14: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

14

Typenumwandlung

Typen in R:

● character:"....."

● numeric: 23.44, 120, NaN, Inf

● integer: 4L,1123L

● factor:factor("Hello"), factor(8)

● logical: TRUE, FALSE

47/

Page 15: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

15

Typenumwandlung

47/

Page 16: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

16

Typenumwandlung: lubridate

Das Paket lubridate

● Standardisiert Kalenderdaten und Uhrzeiten

● ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde

● sind frei kombinierbar

47/

Page 17: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

17

Typenumwandlung: lubridate

47/

Page 18: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

18

Stringr-Paket

● Beinhaltet einfache Funktionen zur Veränderung von Strings

● Von Hadley Wickham programmiert

Funktionen:

● str_trim

● str_pad

● str_detect

● str_replace

47/

Page 19: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

19

Stringr-Paket

Anforderungen an Firmen-ID:

● beginnt mit „NEW“

● ist insgesamt 7 Zeichen lang

● alles hintereinander geschrieben

47/

Page 20: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

20

Stringr-Paket

Firmen-ID's enthalten mehrere Fehler:

● Buchstaben sind klein

● Leerzeilen sind vor ,hinter und mitten in der Firmen-ID

● Teilweise sind Firmen-ID nicht 7 Zeichen lang

47/

Page 21: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

21

Stringr-Paket

trim-Funktion:

● Entfernt alle Leerzeichen vor dem ersten und nach dem letzten Zeichen

● Syntax: str_trim(String, side = c("both", "left", "right"))

47/

Page 22: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

22

Stringr-Paket

replace_all-Funktion:

● Ersetzt Zeichen durch andere Zeichen

● Syntax: str_replace_all(string, pattern, replacement)

47/

Page 23: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

23

Stringr-Paket

str_pad-Funktion:

● Fügt Zeichen an

● Syntax: str_pad(string, width, side = c("left", "right", "both"), pad = " ")

47/

Page 24: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

24

Stringr-Paket

toupper-Funktion:

● Macht alle Buchstaben groß

● Syntax: toupper(x)

47/

Page 25: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

25

Stringr-Paket

replace_all-Funktion:● „Old“ wird durch „NEW“ ersetzt

47/

Page 26: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

26

Fehlende Werte

Die Attribute eines Datensatzes sind mit Werten belegt, die semantisch vom Wert NULL abweichen.

47/

Page 27: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

27

Fehlende Werte

Fehlende Werte:

● In R als NA

● #N/A in Excel

● "." in SAS

● als Leerzeichen in weiteren Programmen

47/

Page 28: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

28

Fehlende Werte

Suche fehlender Daten:

● is.na(data)

● any(is.na(data)

● sum(is.na(data))

● summary(data)

47/

Page 29: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

29

Fehlende Werte

is.na-Funktion:

● Gibt einen Wahrheitswert wieder

● In Form des Datentyps der Datei

● Syntax: is.na(data)

47/

Page 30: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

30

Fehlende Werte

Abwandlungen der is.na-Funktionen:

any(is.na(data)):

● Gibt an, ob irgendein NA vorliegt

sum(is.na(data)):

● Summiert die NA's im Datensatz

47/

Page 31: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

31

Fehlende Werte

complete.cases-Funktion

● Gibt eine Wahrheitswert wieder

● Syntax: complete.cases(data)

47/

Page 32: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

32

Fehlende Werte

na.omit-Funktion:

● Entfernt alle Reihen mit NA's

● Syntax: na.omit(data)

47/

Page 33: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

33

Fehlende Werte

Spalten mit fehlenden Werten entfernen:

47/

Page 34: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

34

Extreme Werte

Outliers sind extreme Wert , der von dem Großteil der anderen Werte abweicht.

47/

Page 35: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

35

Extreme Werte

Offensichtliche Fehler:

Formen:

● Werte sind nicht plausibel

z.B. Alter einer Person beträgt 243 Jahre

● Werte machen keinen Sinn

z.B. Alter einer Person beträgt -5 Jahre

● Werte liegen in verschiedenen Einheiten vor

z.B. Größe, Gewicht, Geschwindigkeit

47/

Page 36: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

36

Extreme Werte

Offensichtliche Fehler finden mit editrules:

● Möglichkeit zur Erstellung von Bedingungen

● Bedingung können in Objekte gespeichert werden

● Bedingungen können im Editor gemacht werden

47/

Page 37: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

37

Extreme Werte

Offensichtliche Fehler finden mit editset:

Syntax:

● editset(c(“Bedingung“))

47/

Page 38: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

38

Extreme Werte

Offensichtliche Fehler finden mit violatedEdits:

Syntax: violatedEdits(editrule-Variable ,data)

47/

Page 39: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

39

Extreme Werte

47/

Page 40: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

40

Vollständigkeit

Fehlende Daten ersetzen mit:

47/

Page 41: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

41

Data-Warehouse und R

Datenanalyse

Datensammlung

Datenbereinigung

47/

Page 42: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

42

Data-Warehouse und R

Frage: Wie gestaltet sich der Datenimport/export in R mit Datenbanken?

Pakete zu verbinden mit Datenbanken:

System Paket in R

ODBC RODBC

MySQL RMySQL

Oracle ROracle

PostgreSQL RPostgreSQL

SQLite RSQlite

47/

Page 43: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

43

Data-Warehouse und R

Beispiel: RmySQL – R mit Datenbank verbinden

47/

Page 44: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

44

Data-Warehouse und R

Beispiel: RmySQL – auf Daten zugreifen

47/

Page 45: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

45

Datensätze zusammenführen

47/

Page 46: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

46

Zusammenfassung

Datenreinigung in R:

● tidyR – verändert Tabellen

● lubridate – standardisiert Zeitdaten

● StrinR – verändert Zeichen

● is.na() - finden von fehlenden Werten

● Editset – falsche/fehlende Werte ersetzen

● RmySQL – Datenaustausch zwischen R und MySQL

47/

Page 47: Datenbereinigung in R - VI4IO · ymd_hms = Jahr,Monat,Tag_Stunde,Minute,Sekunde sind frei kombinierbar 47/ 17 Typenumwandlung: lubridate 47/ 18 Stringr-Paket Beinhaltet einfache Funktionen

47

Quellenverzeichnis

[AP1]“Datenqualität erfolgreich Steuern“, Hanser Verlag, Seite: 157

Weitere Quellen:

● Data Cleaning:Problems and Current Approaches, Erhard Rahm, Hong Hai Do

● Tidy data , Hadley Wickham, 2009

47/