|
5 | 5 | Daten bereinigen und validieren |
6 | 6 | =============================== |
7 | 7 |
|
8 | | -Im Folgenden wollen wir euch einen praktischen Überblick über verschiedene |
9 | | -Bibliotheken und Methoden zur `Datenbereinigung |
10 | | -<https://de.wikipedia.org/wiki/Datenbereinigung>`_ und -validierung mit Python |
11 | | -geben. Dabei verwenden wir neben bekannten Bibliotheken wie |
12 | | -:doc:`/workspace/numpy/index` und :doc:`/workspace/pandas/index` auch mehrere |
13 | | -kleine, spezialisierte Bibliotheken wie :doc:`dedupe <deduplicate>`, |
14 | | -:doc:`TheFuzz <string-matching>`, :doc:`voluptuous <voluptuous>`, :doc:`tdda |
15 | | -<tdda>` und :doc:`hypothesis <hypothesis>`. Wir bevorzugen diese |
16 | | -leichtgewichtigeren Lösungen gegenüber großen, universellen Systemen wie `Great |
17 | | -Expectations <https://greatexpectations.io/>`_ oder `MobyDQ |
18 | | -<https://ubisoft.github.io/mobydq/>`_. |
| 8 | +*„Garbage In, Garbage Out“* ist der verzweifelte Hinweis, dass aus mangelhaften |
| 9 | +Daten kaum gute Erkenntnisse gezogen werden können. Zwar gibt es stark |
| 10 | +regulierte, sicherheitskritische Bereiche, in denen Daten routinemäßig in allen |
| 11 | +Phasen überprüft werden, das allgemeine Niveau der Datenvalidierung ist in den |
| 12 | +meisten Analyseprojekten jedoch eher gering. |
19 | 13 |
|
20 | | -.. tip:: |
21 | | - `cusy Seminar: Daten bereinigen und validieren mit Python |
22 | | - <https://cusy.io/de/our-training-courses/cleanse-and-validate-data-with-python.html>`_ |
| 14 | +Wenn wir jedoch Code schreiben, um Daten auszuwerten, die Daten jedoch nicht |
| 15 | +vorher überprüfen, werden einige Ergebnisse irreführend, falsch oder ungültig |
| 16 | +sein. Ähnlich verhält es sich, wenn wir unsere Ausgaben nicht validieren. So |
| 17 | +tragen wir dann auch noch zu den *„schlechten Daten“* bei, gegen das wir alle |
| 18 | +wettern. Hilfreich ist hier das *Postelsche Gesetz*, für das im TCP-Standard |
| 19 | +vorgeschlagene Prinzip der Robustheit: |
| 20 | + |
| 21 | + *„Sei konservativ in dem, was du tust, sei liberal in dem, was du von |
| 22 | + anderen akzeptierst.“* [#]_ |
| 23 | + |
| 24 | +Dies steht in auffälligem Kontrast zu einer der Prinzipien von Python: |
23 | 25 |
|
24 | | -Überblick |
25 | | ---------- |
| 26 | + *„Fehler sollten niemals unbemerkt bleiben.“* [#]_ |
26 | 27 |
|
27 | | -.. csv-table:: GitHub-Insights |
28 | | - :header: "Name", "Stars", "Mitwirkende", "Commit-Aktivität", "Lizenz" |
| 28 | +Auch die :doc:`XML |
| 29 | +<../data-processing/serialisation-formats/xml-html/index>`-Spezifikation |
| 30 | +schreibt vor, dass nicht wohlgeformte XML-Dokumente zurückgewiesen werden |
| 31 | +sollen: |
29 | 32 |
|
30 | | - "`scikit-learn <https://github.com/scikit-learn/scikit-learn>`_",".. image:: https://raster.shields.io/github/stars/scikit-learn/scikit-learn",".. image:: https://raster.shields.io/github/contributors/scikit-learn/scikit-learn",".. image:: https://raster.shields.io/github/commit-activity/y/scikit-learn/scikit-learn",".. image:: https://raster.shields.io/github/license/scikit-learn/scikit-learn" |
31 | | - "`fg-data-profiling <https://github.com/Data-Centric-AI-Community/fg-data-profiling>`_",".. image:: https://raster.shields.io/github/stars/Data-Centric-AI-Community/fg-data-profiling",".. image:: https://raster.shields.io/github/contributors/Data-Centric-AI-Community/fg-data-profiling",".. image:: https://raster.shields.io/github/commit-activity/y/Data-Centric-AI-Community/fg-data-profiling",".. image:: https://raster.shields.io/github/license/Data-Centric-AI-Community/fg-data-profiling" |
32 | | - "`Hypothesis <https://github.com/HypothesisWorks/hypothesis>`_",".. image:: https://raster.shields.io/github/stars/HypothesisWorks/hypothesis",".. image:: https://raster.shields.io/github/contributors/HypothesisWorks/hypothesis",".. image:: https://raster.shields.io/github/commit-activity/y/HypothesisWorks/hypothesis",".. image:: https://raster.shields.io/github/license/HypothesisWorks/hypothesis" |
33 | | - "`marshmallow <https://github.com/marshmallow-code/marshmallow>`_",".. image:: https://raster.shields.io/github/stars/marshmallow-code/marshmallow",".. image:: https://raster.shields.io/github/contributors/marshmallow-code/marshmallow",".. image:: https://raster.shields.io/github/commit-activity/y/marshmallow-code/marshmallow",".. image:: https://raster.shields.io/github/license/marshmallow-code/marshmallow" |
34 | | - "`dedupe <https://github.com/dedupeio/dedupe>`_",".. image:: https://raster.shields.io/github/stars/dedupeio/dedupe",".. image:: https://raster.shields.io/github/contributors/dedupeio/dedupe",".. image:: https://raster.shields.io/github/commit-activity/y/dedupeio/dedupe",".. image:: https://raster.shields.io/github/license/dedupeio/dedupe" |
35 | | - "`pandera <https://github.com/unionai-oss/pandera>`_",".. image:: https://raster.shields.io/github/stars/unionai-oss/pandera",".. image:: https://raster.shields.io/github/contributors/unionai-oss/pandera",".. image:: https://raster.shields.io/github/commit-activity/y/unionai-oss/pandera",".. image:: https://raster.shields.io/github/license/unionai-oss/pandera" |
36 | | - "`thefuzz <https://github.com/seatgeek/thefuzz>`_",".. image:: https://raster.shields.io/github/stars/seatgeek/thefuzz",".. image:: https://raster.shields.io/github/contributors/seatgeek/thefuzz",".. image:: https://raster.shields.io/github/commit-activity/y/seatgeek/thefuzz",".. image:: https://raster.shields.io/github/license/seatgeek/thefuzz" |
37 | | - "`Voluptuous <https://github.com/alecthomas/voluptuous>`_",".. image:: https://raster.shields.io/github/stars/alecthomas/voluptuous",".. image:: https://raster.shields.io/github/contributors/alecthomas/voluptuous",".. image:: https://raster.shields.io/github/commit-activity/y/alecthomas/voluptuous",".. image:: https://raster.shields.io/github/license/alecthomas/voluptuous" |
38 | | - "`datacleaner <https://github.com/rhiever/datacleaner>`_",".. image:: https://raster.shields.io/github/stars/rhiever/datacleaner",".. image:: https://raster.shields.io/github/contributors/rhiever/datacleaner",".. image:: https://raster.shields.io/github/commit-activity/y/rhiever/datacleaner",".. image:: https://raster.shields.io/github/license/rhiever/datacleaner" |
39 | | - "`popmon <https://github.com/ing-bank/popmon>`_",".. image:: https://raster.shields.io/github/stars/ing-bank/popmon",".. image:: https://raster.shields.io/github/contributors/ing-bank/popmon",".. image:: https://raster.shields.io/github/commit-activity/y/ing-bank/popmon",".. image:: https://raster.shields.io/github/license/ing-bank/popmon" |
40 | | - "`TDDA <https://github.com/tdda/tdda>`_",".. image:: https://raster.shields.io/github/stars/tdda/tdda",".. image:: https://raster.shields.io/github/contributors/tdda/tdda",".. image:: https://raster.shields.io/github/commit-activity/y/tdda/tdda",".. image:: https://raster.shields.io/github/license/tdda/tdda" |
41 | | - "`Validr <https://github.com/guyskk/validr>`_",".. image:: https://raster.shields.io/github/stars/guyskk/validr",".. image:: https://raster.shields.io/github/contributors/guyskk/validr",".. image:: https://raster.shields.io/github/commit-activity/y/guyskk/validr",".. image:: https://raster.shields.io/github/license/guyskk/validr" |
42 | | - "`Probatus <https://github.com/ing-bank/probatus>`_",".. image:: https://raster.shields.io/github/stars/ing-bank/probatus",".. image:: https://raster.shields.io/github/contributors/ing-bank/probatus",".. image:: https://raster.shields.io/github/commit-activity/y/ing-bank/probatus",".. image:: https://raster.shields.io/github/license/ing-bank/probatus" |
| 33 | + *„Validierende Prozessoren MÜSSEN … Verstöße gegen … die Nichteinhaltung der |
| 34 | + in dieser Spezifikation festgelegten Gültigkeitsbedingungen melden.“* [#]_ |
43 | 35 |
|
44 | | -Ruhende Projekte |
45 | | ----------------- |
| 36 | +Die Abschnitte :doc:`procedures/index`, :doc:`procedures/ranges` und |
| 37 | +:doc:`procedures/regression_tests` setzen keine Python-Kenntnisse voraus und |
| 38 | +sind damit auch allgemein für Fachkräfte aus den Bereichen Datenmanagement, |
| 39 | +Unternehmensführung und Qualitätssicherung geeignet. |
| 40 | + |
| 41 | +Anschließend geben wir euch einen praktischen Überblick über verschiedene |
| 42 | +:doc:`libs-methods/index` zur `Datenbereinigung |
| 43 | +<https://de.wikipedia.org/wiki/Datenbereinigung>`_ und -validierung mit Python. |
| 44 | + |
| 45 | +.. tip:: |
| 46 | + `cusy Seminar: Daten bereinigen und validieren mit Python |
| 47 | + <https://cusy.io/de/our-training-courses/cleanse-and-validate-data-with-python.html>`_ |
46 | 48 |
|
47 | | -.. csv-table:: GitHub-Insights |
48 | | - :header: "Name", "Stars", "Mitwirkende", "Commit-Aktivität", "Lizenz" |
| 49 | +---- |
49 | 50 |
|
50 | | - "`Bulwark <https://github.com/ZaxR/bulwark>`_",".. image:: https://raster.shields.io/github/stars/ZaxR/bulwark",".. image:: https://raster.shields.io/github/contributors/ZaxR/bulwark",".. image:: https://raster.shields.io/github/commit-activity/y/ZaxR/bulwark",".. image:: https://raster.shields.io/github/license/ZaxR/bulwark" |
51 | | - "`PandasSchema <https://github.com/multimeric/PandasSchema>`_",".. image:: https://raster.shields.io/github/stars/multimeric/PandasSchema",".. image:: https://raster.shields.io/github/contributors/multimeric/PandasSchema",".. image:: https://raster.shields.io/github/commit-activity/y/multimeric/PandasSchema",".. image:: https://raster.shields.io/github/license/multimeric/PandasSchema" |
52 | | - "`pandas-validation <https://github.com/jmenglund/pandas-validation>`_",".. image:: https://raster.shields.io/github/stars/jmenglund/pandas-validation",".. image:: https://raster.shields.io/github/contributors/jmenglund/pandas-validation",".. image:: https://raster.shields.io/github/commit-activity/y/jmenglund/pandas-validation",".. image:: https://raster.shields.io/github/license/jmenglund/pandas-validation" |
53 | | - "`Opulent-Pandas <https://github.com/danielvdende/opulent-pandas>`_",".. image:: https://raster.shields.io/github/stars/danielvdende/opulent-pandas",".. image:: https://raster.shields.io/github/contributors/danielvdende/opulent-pandas",".. image:: https://raster.shields.io/github/commit-activity/y/danielvdende/opulent-pandas",".. image:: https://raster.shields.io/github/license/danielvdende/opulent-pandas" |
54 | | - "`signpost <https://github.com/ilsedippenaar/signpost>`_",".. image:: https://raster.shields.io/github/stars/ilsedippenaar/signpost",".. image:: https://raster.shields.io/github/contributors/ilsedippenaar/signpost",".. image:: https://raster.shields.io/github/commit-activity/y/ilsedippenaar/signpost",".. image:: https://raster.shields.io/github/license/ilsedippenaar/signpost" |
| 51 | +.. [#] Jon Postel: `Transmission Control Protocol |
| 52 | + <https://www.rfc-editor.org/info/rfc761/#section-2.10>`_, 1980 |
| 53 | +.. [#] Tim Peters: :pep:`The Zen of Python <20>`, 1999 |
| 54 | +.. [#] `XML-Spezifikation 1.0, Abschnitt 5.1 |
| 55 | + <https://www.w3.org/TR/2008/REC-xml-20081126/#proc-types>`_, 1998 |
55 | 56 |
|
56 | 57 | .. toctree:: |
57 | 58 | :hidden: |
58 | 59 | :titlesonly: |
59 | 60 | :maxdepth: 0 |
60 | 61 |
|
61 | | - nulls.ipynb |
62 | | - outliers.ipynb |
63 | | - string-matching.ipynb |
64 | | - deduplicate.ipynb |
65 | | - hypothesis.ipynb |
66 | | - tdda.ipynb |
67 | | - voluptuous.ipynb |
68 | | - scikit-learn-reprocessing.ipynb |
69 | | - dask-pipeline.ipynb |
| 62 | + categories |
| 63 | + procedures/index |
| 64 | + libs-methods/index |
0 commit comments