diff --git a/docs/tdqm/tdqm.ipynb b/docs/tdqm/tdqm.ipynb new file mode 100644 index 0000000..bf4bbe1 --- /dev/null +++ b/docs/tdqm/tdqm.ipynb @@ -0,0 +1,783 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bb8c3a16-f342-4a25-a754-ea39ac5be66a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "# Datenqualität\n", + "\n", + "\n", + "\n", + "Veit Schiele\n", + "\n", + "• Gründer und Geschäftsführer der cusy GmbH, Berlin\n", + "\n", + "• Autor des [Python for Data Science Tutorials](https://www.python4data.science/de/latest/)\n", + "\n", + "• Autor des [PyViz Tutorial](https://pyviz-tutorial.readthedocs.io/)" + ] + }, + { + "cell_type": "markdown", + "id": "28ea65cd-03e9-4960-9518-3b0ef2a8d0c6", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "# Datenqualität" + ] + }, + { + "cell_type": "markdown", + "id": "63f8239b-bee0-489b-b84a-60153a3114ba", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "1. [Einführung](#/2)" + ] + }, + { + "cell_type": "markdown", + "id": "c2bf5d15-cdf2-4664-beeb-64df96f79998", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "2. [Dimensionen der Datenqualität](#/3)" + ] + }, + { + "cell_type": "markdown", + "id": "35fec59f-bd85-4924-9b7e-db0cd53695d7", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "3. [Automatisierte Datenqualitätsmessung](#/4)" + ] + }, + { + "cell_type": "markdown", + "id": "97d772ab-cfdb-4159-bbfc-375fd106995d", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "# 1. Einführung" + ] + }, + { + "cell_type": "markdown", + "id": "0b253612-3c0a-44d0-ae3e-744b3c0ca536", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Die Digitalisierung von Prozessen führt zu einem starken Anstieg der Datenerzeugung und -erfassung. Diese Informationen erhalten immer mehr Aufmerksamkeit und werden daher auch stärker genutzt." + ] + }, + { + "cell_type": "markdown", + "id": "4d82c2f4-a0d1-4129-adcb-a2da70d9a4f5", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 1. Einführung\n", + "\n", + "> ## „84 % der CEOs sind besorgt über die Qualität der Daten, auf die sie ihre Entscheidungen stützen.“\n", + "\n", + "– [2016 Global CEO Outlook, Forbes Insight & KPMG](https://assets.kpmg.com/content/dam/kpmg/pdf/2016/06/2016-global-ceo-outlook.pdf)" + ] + }, + { + "cell_type": "markdown", + "id": "6a3c37f6-8df8-4673-92e1-c21c452d4c2f", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Die größte Schwierigkeit besteht darin, die Daten und ihre Attribute effizient und für den beabsichtigten Zweck zu nutzen." + ] + }, + { + "cell_type": "markdown", + "id": "3e6e6759-8171-4710-b01c-f11216dfe57d", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Die Norm [ISO/IEC 25012](https://www.iso.org/standard/35736.html) definiert die Datenqualität als den Grad, in dem die Daten die Anforderungen ihres Verwendungszwecks erfüllen." + ] + }, + { + "cell_type": "markdown", + "id": "933b522f-b1d0-4811-9480-c6cba6ffa0af", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität" + ] + }, + { + "cell_type": "markdown", + "id": "de2f92d4-445f-4089-92cf-96211540d652", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "[ISO/IEC 25012](https://www.iso.org/standard/35736.html) legt nahe, die Datenqualität davon abhängig zu machen, wie die Daten verwendet werden sollen: So ist beispielsweise in einigen Fällen die **Genauigkeit** der Daten wichtiger als ihre **Vollständigkeit**, während in anderen Fällen das Gegenteil der Fall sein kann." + ] + }, + { + "cell_type": "markdown", + "id": "4ade557e-9320-4826-813f-08744093e58a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Dieses Konzept führt verschiedene Dimensionen der Datenqualität ein, womit die Qualität der Daten auf unterschiedliche Weise gemessen werden kann. Datenqualitätsdimensionen stellen eine Liste von Metriken dar, mit deren Hilfe die Eignung von Daten für einen bestimmten Verwendungszweck beurteilt werden kann." + ] + }, + { + "cell_type": "markdown", + "id": "c3f8ab1d-49a6-4a36-95a4-8d9bdfb7203a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "Technisch gesehen fallen alle Datenqualitätsmetriken unter zwei große Kategorien:" + ] + }, + { + "cell_type": "markdown", + "id": "0529f72c-7be5-405d-97f8-8e6ff2b3567a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "* intrinsische Merkmale" + ] + }, + { + "cell_type": "markdown", + "id": "d409222e-3fec-4c44-9d1e-919995533e77", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "* kontextuelle Merkmale" + ] + }, + { + "cell_type": "markdown", + "id": "620ad138-93b6-45e7-840f-2943e6df7a22", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Intrinsische Merkmale" + ] + }, + { + "cell_type": "markdown", + "id": "f5034120-95ee-4177-981e-f5543045de97", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Die intrinsischen Dimensionen der Datenqualität beurteilen und bewerten direkt den Wert der Daten auf granularer Ebene. Sie berücksichtigen nicht den Kontext, in dem die Daten gespeichert wurden, wie z. B. die Beziehung zu anderen Attributen oder zum Datensatz, in dem sich das Datum befindet." + ] + }, + { + "cell_type": "markdown", + "id": "b6f89e72-1085-4bb4-bfc9-3dccb7185c84", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Intrinsische Merkmale\n", + "\n", + "Die folgenden vier Dimensionen der Datenqualität fallen unter die intrinsische Kategorie:" + ] + }, + { + "cell_type": "markdown", + "id": "3cb13f4f-135f-4c52-be73-e1c37c7b3c34", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "1. Genauigkeit\n", + "\n", + " Die Genauigkeit der Datenwerte wird gemessen, indem sie mit einer bekannten Quelle korrekter Informationen abgeglichen werden.\n", + "\n", + " Diese Messung kann komplex sein, wenn es mehrere Quellen gibt, die die richtigen Informationen enthalten. In solchen Fällen muss diejenige ausgewählt werden, die für den Bereich am besten geeignet ist." + ] + }, + { + "cell_type": "markdown", + "id": "e7996b4c-28b1-402c-8496-3bb9883209e6", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "notes" + }, + "tags": [] + }, + "source": [ + "Beispiel: Fensterthermometer" + ] + }, + { + "cell_type": "markdown", + "id": "eac04ea8-d7ee-40fe-a9f9-ed8aa067aeed", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Intrinsische Merkmale\n", + "\n", + "2. Abstammung\n", + "\n", + " Wie vertrauenswürdig ist die ursprüngliche Quelle der Daten?\n", + "\n", + " Die Abstammung der Datenwerte wird überprüft oder getestet, indem die Ursprungsquelle validiert wird." + ] + }, + { + "cell_type": "markdown", + "id": "5e15fa9e-ea49-431e-aeed-c21674efe667", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Intrinsische Merkmale\n", + "\n", + "3. Semantik\n", + "\n", + " Entsprechen die Datenwerte ihrer Bedeutung?\n", + "\n", + " Der Datenwert muss auch semantisch korrekt sein, d.h. er muss die Bedeutung haben, für die er verwendet wird." + ] + }, + { + "cell_type": "markdown", + "id": "38e021b0-16de-434f-9839-0b1d9bfeebcc", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "notes" + }, + "tags": [] + }, + "source": [ + "Beispiel: Temperatur vs. [Gefühlte Temperatur](https://de.wikipedia.org/wiki/Gefühlte_Temperatur)" + ] + }, + { + "cell_type": "markdown", + "id": "50a9ad3c-7ccb-427e-b264-d27c44678bd8", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Intrinsische Merkmale\n", + "\n", + "4. Aufbau\n", + "\n", + " Liegen die Datenwerte im richtigen Muster und Format vor?" + ] + }, + { + "cell_type": "markdown", + "id": "393b4277-beaf-4f15-aa90-65d7561c4529", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "notes" + }, + "tags": [] + }, + "source": [ + "Beispiel: Liegen manche Temperaturwerte im Fahrenheit, andere in Celsius vor." + ] + }, + { + "cell_type": "markdown", + "id": "24a0fff2-787e-45d3-9837-ae0d2d0616d0", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale" + ] + }, + { + "cell_type": "markdown", + "id": "bfbde670-8fea-47d9-bbe3-742f6ce176d4", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Kontextuelle Merkmale beurteilen und bewerten Daten in ihrem gesamten Kontext.\n", + "\n", + "Diese Dimensionen konzentrieren sich auf die Beziehungen zwischen verschiedenen Datenkomponenten und deren Übereinstimmung mit den Erwartungen an die Datenqualität." + ] + }, + { + "cell_type": "markdown", + "id": "f5a5cab1-0a1b-407b-85eb-78323bef47a9", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale\n", + "\n", + "Die folgenden sechs Dimensionen der Datenqualität fallen unter die kontextbezogene Kategorie:" + ] + }, + { + "cell_type": "markdown", + "id": "0f9971ab-b574-4e43-a920-3dcef2f20fae", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale\n", + "\n", + "5. Vollständigkeit\n", + "\n", + " Sind Ihre Daten so umfassend, wie sie benötigt werden?\n", + "\n", + " Die Vollständigkeit gibt an, inwieweit die benötigten Datenwerte vorhanden sind." + ] + }, + { + "cell_type": "markdown", + "id": "96ec3b0d-0e97-439d-8fed-9ba8deca8c7a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "notes" + }, + "tags": [] + }, + "source": [ + "Beispiel: Stündliche Temperaturmessungen" + ] + }, + { + "cell_type": "markdown", + "id": "c1c942c9-1b1d-4a63-b136-347d72113359", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale\n", + "\n", + "6. Konsistenz\n", + "\n", + " Sind die für denselben Datensatz in verschiedenen Quellen gespeicherten Datenwerte widerspruchsfrei?" + ] + }, + { + "cell_type": "markdown", + "id": "0b7da212-f6d3-4927-9ca3-9c46c4d3ef57", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale\n", + "\n", + "7. Aktualität\n", + "\n", + " Sind die Daten auf dem aktuellen Stand?\n", + "\n", + " Die Datenattribute müssen im Zusammenhang mit ihrer Verwendung das richtige Alter haben. Diese Maßnahme trägt dazu bei, die Informationen auf dem neuesten Stand und in Übereinstimmung mit der jetzigen Zeit zu halten. Kritische Entscheidungen sollten nicht auf der Grundlage veralteter Daten getroffen werden müssen.\n", + "\n", + " Um die Aktualität des Datensatzes zu gewährleisten, können die Daten entweder regelmäßig aktualisiert werden oder Altersgrenzen für ein Attribut festgelegt werden." + ] + }, + { + "cell_type": "markdown", + "id": "f4feb162-ae5f-4417-bdec-2d07f8334811", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale\n", + "\n", + "8. Rechtzeitigkeit\n", + "\n", + " Wie schnell werden die angeforderten Daten zur Verfügung gestellt?\n", + "\n", + " Wieviel Zeit wird benötigt, um auf die angeforderten Informationen zuzugreifen. Wenn die Wntwort auf eure Datenabfragen zu lange dauert, kann es sein, dass die Daten nicht gut organisiert, verknüpft, strukturiert oder formatiert sind.\n", + "\n", + " Die Rechtzeitigkeit misst, wie schnell die neuen Informationen zur Verfügung stehen. Wenn komplexe und zeitaufwändige Prozesse zur Validierung eingehender Daten verwendet werden, kann es passieren, dass an einigen Stellen veraltete Informationen abgefragt und verwendet werden." + ] + }, + { + "cell_type": "markdown", + "id": "fff4817e-3207-4ab6-a482-d776a8ec08c5", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "notes" + }, + "tags": [] + }, + "source": [ + "Beispiel: BfS" + ] + }, + { + "cell_type": "markdown", + "id": "29625b4e-b750-4aba-9a32-2d93325dcf1a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale\n", + "\n", + "9. Angemessenheit\n", + "\n", + " Haben die Datenwerte den richtigen Datentyp und die richtige Größe?\n", + "\n", + " Die Angemessenheit misst, ob die Datenwerte einen angemessenen oder interpretierbaren Datentyp und eine angemessene Größe haben. So kann es z.B. vorkommen, dass alphanumerische Zeichen in einem Textfeld vorliegen, sie sollten jedoch zuverlässig in Ganz- oder Fließkommazahlen umgewandelt werden können.\n", + "\n", + " Darüber hinaus sollten die Daten auch in einem bestimmten Wertebereich liegen. Die Ober- und Untergrenzen müssen dabei nicht statisch sein, sondern können sich auf dynamisch verschieben, sodass z.B. Messwerte von einem in der Zukunft liegenden Datum erkannt werden können." + ] + }, + { + "cell_type": "markdown", + "id": "9fea3320-c814-4925-a3ac-5abf52dbd2d7", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale\n", + "\n", + "10. Identifizierbarkeit\n", + "\n", + " Stellt jeder Datensatz eine eindeutige Identität dar? M.a.W.: Ist er **kein** Duplikat?\n", + "\n", + " Die Identifizierbarkeit gibt den Grad an, in dem Datensätze eindeutig identifizierbar sind und keine Duplikate enthalten.\n", + "\n", + " Vollständig identische Datensätze sind meist einfahch zu finden. Für ähnliche Zeichenketten, die z.B. durch Tippfehler entstanden sind, werden meist [String-Matching-Algorithmen](https://de.wikipedia.org/wiki/String-Matching-Algorithmus) verwendet, um die Ähnlichkeit zu messen. Beispiele hierfür sind:\n", + " * [Levenshtein-Distanz](https://de.wikipedia.org/wiki/Levenshtein-Distanz)\n", + " * [Gestalt Pattern Matching](https://de.wikipedia.org/wiki/Gestalt_Pattern_Matching)" + ] + }, + { + "cell_type": "markdown", + "id": "69b13946-16fa-4adc-9e0a-70d49fd58ebc", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 2. Dimensionen der Datenqualität\n", + "\n", + "## Kontextuelle Merkmale\n", + "\n", + "10. Identifizierbarkeit\n", + "\n", + " Aber auch für ähnlich klingende Wörter gibt es entsprechende Algorithmen, wie [Soundex](https://de.wikipedia.org/wiki/Soundex) oder die [Kölner Phonetik](https://de.wikipedia.org/wiki/String-Matching-Algorithmus)." + ] + }, + { + "cell_type": "markdown", + "id": "72b9b9a4-c307-4073-ac4d-aff956008470", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "# 3. Automatisierte Datenqualitätsüberprüfung\n", + "\n", + " Die Überprüfung der Datenqualität kann sehr komplex und aufwändig werden. Das Erkennen grundlegende Anomalien, u.a.\n", + " \n", + " * [leere Werte finden](https://www.python4data.science/de/latest/clean-prep/nulls.html)\n", + " * [Felddatentypen überprüfen](https://www.python4data.science/de/latest/workspace/pandas/convert-dtypes.html)\n", + " * [deskriptive Statistiken](https://www.python4data.science/de/latest/workspace/pandas/descriptive-statistics.html)\n", + " * [wiederkehrende Muster erkennen](https://www.python4data.science/de/latest/clean-prep/nulls.html)\n", + " \n", + " ermöglichen eine umfassende Sicht auf die Datenqualität." + ] + }, + { + "cell_type": "markdown", + "id": "78378c83-5225-4c29-9140-dd70e05ad52a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 3. Automatisierte Datenqualitätsüberprüfung\n", + "\n", + "Darüberhinaus gibt es viele Bibliotheken, die die Überprüfung von Daten ermöglichen:\n", + "\n", + "[fuzzywuzzy](https://github.com/seatgeek/fuzzywuzzy)\n", + ": für String-Vergleiche.\n", + "\n", + "[Dedupe](https://www.python4data.science/de/latest/clean-prep/deduplicate.html#3.-Dedupe)\n", + ": verwendet ein flaches neuronales Netzwerk, um aus einem kleinen Training zu lernen.\n", + "\n", + "[Bulwark](https://www.python4data.science/de/latest/clean-prep/bulwark.html)\n", + ": erlaubt eigenschaftsbasiertes Testen von pandas-Dataframes, auch mit eigenen benutzerdefinierten Funktionen erstellen.\n", + "\n", + "[Hypothesis](https://www.python4data.science/de/latest/clean-prep/hypothesis.html)\n", + ": für Property-basierte Tests. Hypothesis kann auch Mock-Objekte und Tests für Numpy-Datentypen bereitstellen.\n", + "\n", + "…" + ] + }, + { + "cell_type": "markdown", + "id": "ddd72180-01ee-402f-948d-995dc2844f9f", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "# 3. Automatisierte Datenqualitätsüberprüfung\n", + "\n", + "Darüberhinaus gibt es viele Bibliotheken, die die Überprüfung von Daten ermöglichen:\n", + "\n", + "…\n", + "\n", + "[TDDA](https://www.python4data.science/de/latest/clean-prep/tdda.html)\n", + ": verwendet NumPy-Arrays oder pandas DataFrames und eine Reihe von Constraints zu ermitteln, die als JSON-Datei gespeichert werden.\n", + "\n", + "[Voluptuous](https://www.python4data.science/de/latest/clean-prep/voluptuous.html)\n", + ": für das Erstellen von Schemaprüfungen.\n", + "\n", + "[sklearn.preprocessing](https://www.python4data.science/de/latest/clean-prep/scikit-learn-reprocessing.html)\n", + ": für die Standardisierung der Daten, Zentrierung von Kernel-Matrizen, Nicht-lineare Transformationen etc.\n", + "\n", + "
Daten bereinigen und validieren \n", + "