{"id":570787,"date":"2025-05-28T05:31:32","date_gmt":"2025-05-28T04:31:32","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=570787"},"modified":"2025-09-15T09:38:17","modified_gmt":"2025-09-15T08:38:17","slug":"datenbereinigung-im-bereich-data-science","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/de\/pycharm\/2025\/05\/datenbereinigung-im-bereich-data-science\/","title":{"rendered":"Datenbereinigung im Bereich Data Science"},"content":{"rendered":"<p>In dieser Serie von Blogbeitr\u00e4gen zum Thema Data Science haben wir dar\u00fcber gesprochen, <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/10\/how-to-get-data\/\">wo man Daten am besten erhebt<\/a> und wie man <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/10\/data-exploration-with-pandas\/\" target=\"_blank\" rel=\"noreferrer noopener\">diese Daten mit Pandas erkundet<\/a>. Sie sind zwar hervorragend zum Lernen geeignet, aber nicht vergleichbar mit dem, was wir im Folgenden als <em>\u201ereale Daten\u201c<\/em> definieren werden. Daten, die f\u00fcr Lernzwecke bereitgestellt werden, wurden h\u00e4ufig bereits bereinigt und sorgf\u00e4ltig kuratiert, sodass sie sofort f\u00fcr den Lernprozess genutzt werden k\u00f6nnen, ohne dass man sich mit den Herausforderungen der Datenbereinigung auseinandersetzen muss. Im Gegensatz dazu sind reale Daten oft problembehaftet und unordentlich. Daten aus der realen Welt m\u00fcssen bereinigt werden, bevor sie uns n\u00fctzliche Erkenntnisse liefern k\u00f6nnen \u2013 das ist das Thema dieses Blogbeitrags.<\/p>\n<p>Datenprobleme k\u00f6nnen durch das Verhalten der Daten selbst, die Art der Datenerhebung oder sogar die Art der Dateneingabe verursacht werden. Fehler und Vers\u00e4umnisse k\u00f6nnen bei jedem Schritt auftreten.<\/p>\n<p>Wir sprechen hier konkret von Datenbereinigung und nicht von Datentransformation. Die Datenbereinigung stellt sicher, dass die Schlussfolgerungen, die Sie aus Ihren Daten ziehen, f\u00fcr die von Ihnen definierte Population generalisiert werden k\u00f6nnen. Im Gegensatz dazu umfasst die Datentransformation Aufgaben wie die Konvertierung von Datenformaten, die Normalisierung von Daten sowie die Aggregation von Daten.<\/p>\n<h2 class=\"wp-block-heading\">Warum ist Datenbereinigung wichtig?<\/h2>\n<p>Das Wichtigste, was wir \u00fcber Datens\u00e4tze wissen sollten, ist die Bedeutung dessen, was sie repr\u00e4sentieren. Bei den meisten Datens\u00e4tzen handelt es sich um eine Stichprobe, die eine gr\u00f6\u00dfere Population repr\u00e4sentiert. Wenn Sie mit dieser Stichprobe arbeiten, k\u00f6nnen Sie Ihre Ergebnisse auf diese Population extrapolieren (oder <em>generalisieren<\/em>). Zum Beispiel haben wir in den letzten beiden Blogbeitr\u00e4gen einen speziellen <a href=\"https:\/\/www.kaggle.com\/datasets\/prevek18\/ames-housing-dataset\" target=\"_blank\" rel=\"noopener\">Datensatz<\/a> verwendet. Dieser Datensatz bezieht sich im Gro\u00dfen und Ganzen auf Hausverk\u00e4ufe, deckt aber nur ein kleines geografisches Gebiet, einen beschr\u00e4nkten Zeitraum und m\u00f6glicherweise nicht alle H\u00e4user in diesem Gebiet sowie Zeitraum ab; es handelt sich somit um eine Stichprobe einer gr\u00f6\u00dferen Population.<\/p>\n<p>Ihre Daten m\u00fcssen eine repr\u00e4sentative Stichprobe der breiteren Population darstellen, z.\u00a0B. alle Hausverk\u00e4ufe in diesem Gebiet \u00fcber einen bestimmten Zeitraum. Um sicherzustellen, dass unsere Daten diese Voraussetzung erf\u00fcllen, m\u00fcssen wir zun\u00e4chst die Grenzen unserer Population festlegen.<\/p>\n<p>Wie Sie sich m\u00f6glicherweise vorstellen k\u00f6nnen, ist es h\u00e4ufig unpraktisch, die gesamte Population in Ihre Analysen einzubeziehen \u2013 au\u00dfer vielleicht bei Volksz\u00e4hlungsdaten. Daher ist es wichtig, dass Sie Ihre Grenzen klar definieren. Diese Grenzen k\u00f6nnen geografisch, demografisch, zeitlich, aktionsbezogen (z. B. transaktionsbezogen) oder branchenspezifisch sein. Es gibt zahlreiche Ans\u00e4tze, Ihre Population zu definieren. Um jedoch eine zuverl\u00e4ssige Generalisierung Ihrer Daten zu gew\u00e4hrleisten, ist es notwendig, dies vor der Bereinigung Ihrer Daten zu tun.<\/p>\n<p>Zusammenfassend l\u00e4sst sich sagen, dass Sie, wenn Sie Ihre Daten f\u00fcr irgendeine Art von Analyse oder <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2022\/06\/start-studying-machine-learning-with-pycharm\/\">maschinelles Lernen<\/a> verwenden m\u00f6chten, Zeit f\u00fcr die Datenbereinigung aufwenden m\u00fcssen, um sicherzustellen, dass Sie sich auf Ihre Erkenntnisse verlassen und diese f\u00fcr die <em>reale Welt<\/em> generalisieren k\u00f6nnen. Die Bereinigung Ihrer Daten f\u00fchrt zu einer genaueren Analyse und in Bezug auf maschinelles Lernen auch zu einer Leistungssteigerung.<\/p>\n<p>Wenn Sie Ihre Daten nicht bereinigen, riskieren Sie, dass Sie Ihre Erkenntnisse nicht zuverl\u00e4ssig f\u00fcr die breitere Population generalisieren k\u00f6nnen und dass Sie ungenaue zusammenfassende Statistiken sowie falsche Visualisierungen erhalten. Wenn Sie Ihre Daten zum Trainieren von Modellen f\u00fcr maschinelles Lernen verwenden, kann dies ebenfalls zu Fehlern und ungenauen Vorhersagen f\u00fchren.<\/p>\n<p align=\"center\">\n    <a class=\"jb-download-button\" href=\"https:\/\/jb.gg\/m8p92h\" target=\"_blank\" rel=\"noopener\"><br \/>\nTesten Sie PyCharm Professional kostenlos<br \/>\n<\/a><\/p>\n<h2 class=\"wp-block-heading\">Beispiele f\u00fcr Datenbereinigung<\/h2>\n<p>Lassen Sie uns einen n\u00e4heren Blick auf f\u00fcnf Aufgaben werfen, die Ihnen dabei helfen, Ihre Daten zu bereinigen. Diese Liste ist zwar nicht abschlie\u00dfend, bietet jedoch einen hervorragenden Ausgangspunkt, um erste Einblicke in reale Daten zu gewinnen.<\/p>\n<h3 class=\"wp-block-heading\">Deduplizieren von Daten<\/h3>\n<p>Duplikate sind ein Problem, da sie Ihre Daten verzerren. Stellen Sie sich vor, Sie zeichnen ein Histogramm, in dem Sie die H\u00e4ufigkeit der Verkaufspreise verwenden. Wenn Sie mehrere Duplikate desselben Wertes verarbeiten, wird Ihr Histogramm ein verzerrtes Muster zeigen. Dies liegt an den doppelten Preisen.<\/p>\n<p>Nebenbei bemerkt: Wenn wir davon sprechen, dass die Duplizierung von Datens\u00e4tzen ein Problem darstellt, meinen wir damit die Duplizierung ganzer Zeilen, von denen jede eine einzelne Beobachtung darstellt. Es wird identische Werte in den Spalten geben und das erwarten wir auch. Wir beziehen uns hier ausschlie\u00dflich auf doppelte Beobachtungen.<\/p>\n<p>Zum Gl\u00fcck gibt es eine <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.DataFrame.duplicated.html\" target=\"_blank\" rel=\"noopener\">pandas-Methode<\/a>, mit der wir feststellen k\u00f6nnen, ob in unseren Daten Duplikate pr\u00e4sent sind. Wir k\u00f6nnen den <a href=\"https:\/\/www.jetbrains.com\/de-de\/ai\/\" target=\"_blank\" rel=\"noopener\">JetBrains AI<\/a>-Chat verwenden, falls wir eine Auffrischung unserer Programmierkenntnisse ben\u00f6tigen. Ein entsprechender Beispiel-Prompt w\u00e4re etwa:<\/p>\n<p><em>Code f\u00fcr die Identifizierung doppelter Zeilen<\/em><\/p>\n<p>Hier ist das Ergebnis:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">duplicate_rows = df[df.duplicated()]\nduplicate_rows<\/pre>\n<p>Dieser Code geht davon aus, dass Ihr DataFrame <code>df<\/code><em> <\/em>hei\u00dft. \u00c4ndern Sie den Namen entsprechend, sofern dies nicht der Fall ist.<\/p>\n<p>In dem von uns verwendeten <a href=\"https:\/\/www.kaggle.com\/datasets\/prevek18\/ames-housing-dataset\" target=\"_blank\" rel=\"noopener\">Ames-Housing-Datensatz<\/a> gibt es keine doppelten Daten, aber wenn Sie es ausprobieren m\u00f6chten, werfen Sie doch einen Blick auf den Datensatz der <a href=\"https:\/\/www.kaggle.com\/datasets\/cites\/cites-wildlife-trade-database\" target=\"_blank\" rel=\"noopener\">CITES Wildlife Trade Database<\/a> und pr\u00fcfen Sie, ob Sie die Duplikate mit der obigen pandas-Methode finden k\u00f6nnen.<\/p>\n<p>Sobald Sie Duplikate in Ihrem Datensatz identifiziert haben, m\u00fcssen Sie diese entfernen, um eine Verzerrung Ihrer Ergebnisse zu vermeiden. Den Code hierf\u00fcr erhalten Sie mit JetBrains AI wiederum mit einem Prompt wie folgendem:<\/p>\n<p><em>Code zum Entfernen von Duplikaten aus meinem DataFrame\u00a0<\/em><\/p>\n<p>Der resultierende Code l\u00f6scht die Duplikate, setzt den Index Ihres DataFrame zur\u00fcck und zeigt ihn dann als neuen DataFrame namens df_cleaned an:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">df_cleaned = df.drop_duplicates()\ndf_cleaned.reset_index(drop=True, inplace=True)\ndf_cleaned<\/pre>\n<p>Es gibt noch weitere pandas-Funktionen, die Sie f\u00fcr die <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.DataFrame.drop_duplicates.html\" target=\"_blank\" rel=\"noopener\">erweiterte Verwaltung von Duplikaten<\/a> verwenden k\u00f6nnen, aber der hier dargelegte Ansatz ist ausreichend, um mit der Deduplizierung Ihres Datensatzes zu beginnen.<\/p>\n<h3 class=\"wp-block-heading\">Umgang mit unplausiblen Werten<\/h3>\n<p>Unplausible Werte k\u00f6nnen auftreten, wenn Daten falsch eingegeben wurden oder bei der Datenerhebung etwas schiefgelaufen ist. F\u00fcr unseren <a href=\"https:\/\/www.kaggle.com\/datasets\/prevek18\/ames-housing-dataset\" target=\"_blank\" rel=\"noopener\">Ames-Housing-Datensatz<\/a> k\u00f6nnte ein unplausibler Wert etwa ein negativer SalePrice oder ein numerischer Wert f\u00fcr Roof Style sein.<\/p>\n<p>Die Identifizierung unplausibler Werte in Ihrem Datensatz erfolgt durch einen umfassenden Ansatz. Dieser beinhaltet die Analyse Ihrer <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/10\/data-exploration-with-pandas\/#summary-statistics\">zusammenfassenden Statistiken<\/a>, die \u00dcberpr\u00fcfung der von den Datenerhebern definierten Datenvalidierungsregeln f\u00fcr jede einzelne Spalte sowie das Festhalten aller Datenpunkte, die au\u00dferhalb dieser Vorgaben liegen. Dar\u00fcber hinaus verwenden wir Visualisierungen, um Muster zu erkennen und alles, was nach einer Anomalie aussieht, aufzusp\u00fcren.<\/p>\n<p>Sie sollten sich mit unplausiblen Werten befassen, da sie Ablenkungen verursachen und Probleme bei Ihrer Analyse hervorrufen k\u00f6nnen. Wie Sie mit ihnen umgehen, ist jedoch recht flexibel. Falls Sie im Verh\u00e4ltnis zur Gr\u00f6\u00dfe Ihres Datensatzes nur wenige unplausible Werte haben, k\u00f6nnen Sie die Eintr\u00e4ge, die selbige enthalten, einfach entfernen. Wenn Sie zum Beispiel einen unplausiblen Wert in Zeile 214 Ihres Datensatzes identifiziert haben, k\u00f6nnen Sie die <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.DataFrame.drop.html\" target=\"_blank\" rel=\"noopener\">drop-Funktion von pandas<\/a> verwenden, um diese Zeile aus Ihrem Datensatz zu l\u00f6schen.<\/p>\n<p>Auch hier k\u00f6nnen wir JetBrains AI mit einem Prompt wie diesem dazu bringen, den ben\u00f6tigten Code zu generieren:<\/p>\n<p><em>Code that drops index 214 from <\/em><em>#df_cleaned<\/em><\/p>\n<p>Beachten Sie, dass man in <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/jupyter-notebook-support.html\" target=\"_blank\" rel=\"noopener\">PyCharm-Jupyter-Notebooks<\/a> Worten das Zeichen # voranstellen kann, um JetBrains AI Assistant zu verdeutlichen, dass man zus\u00e4tzlichen Kontext bereitstellt. In diesem Fall wird klargestellt, dass der DataFrame <code>df_cleaned<\/code> hei\u00dft.<\/p>\n<p>Der resultierende Code entfernt diese Beobachtung aus Ihrem DataFrame, setzt den Index zur\u00fcck und zeigt den DataFrame an:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">df_cleaned = df_cleaned.drop(index=214)\ndf_cleaned.reset_index(drop=True, inplace=True)\ndf_cleaned<\/pre>\n<p>Eine weitere beliebte Strategie f\u00fcr den Umgang mit unplausiblen Werten ist Imputation, d.\u00a0h. Sie ersetzen den Wert durch einen anderen, plausiblen Wert auf der Grundlage einer festgelegten Strategie. Einer der g\u00e4ngigsten Ans\u00e4tze ist die Verwendung des Medianwertes anstelle des unplausiblen Wertes. Da der Median nicht von Ausrei\u00dfern beeinflusst wird, wird er h\u00e4ufig von Datenwissenschaftlern bevorzugt. Dennoch kann in bestimmten Situationen auch der Mittelwert oder der Moduswert Ihrer Daten eine geeignetere Wahl darstellen.<\/p>\n<p>Wenn Sie \u00fcber fundiertes Fachwissen hinsichtlich des Datensatzes und der Methodik der Datenerhebung verf\u00fcgen, sind Sie in der Lage, den unplausiblen Wert durch eine aussagekr\u00e4ftigere Alternative zu ersetzen. Falls Sie an der Datenerhebung beteiligt oder dar\u00fcber informiert sind, k\u00f6nnte diese Option m\u00f6glicherweise f\u00fcr Sie von Interesse sein.<\/p>\n<p>Der Umgang mit unplausiblen Werten in Ihrem Datensatz h\u00e4ngt von verschiedenen Aspekten ab. Dazu z\u00e4hlen die H\u00e4ufigkeit dieser Werte, die Methode der Datenerhebung und Ihre spezifische Definition der Population. Auch Ihr Fachwissen spielt eine entscheidende Rolle bei der Bewertung dieser Daten.<\/p>\n<h3 class=\"wp-block-heading\">Formatierung von Daten<\/h3>\n<p>Sie k\u00f6nnen Formatierungsprobleme oft mit Ihren <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/10\/data-exploration-with-pandas\/#summary-statistics\">zusammenfassenden Statistiken<\/a> oder fr\u00fchen <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/10\/data-exploration-with-pandas\/#graphs\">Visualisierungen<\/a> erkennen, die Sie durchf\u00fchren, um einen Eindruck des Zustands Ihrer Daten zu erhalten. Einige Beispiele f\u00fcr eine inkonsistente Formatierung sind numerische Werte, die nicht alle mit derselben Dezimalstelle definiert sind, oder Abweichungen in der Schreibweise, z. B. \u201efirst\u201c und \u201e1st\u201c. Eine fehlerhafte Datenformatierung kann sich auch auf den Speicherbedarf Ihrer Daten auswirken.<\/p>\n<p>Sobald Sie Formatierungsprobleme in Ihrem Datensatz entdeckt haben, m\u00fcssen Sie die Werte standardisieren. Je nach Problem, mit dem Sie konfrontiert sind, bedeutet dies normalerweise, dass Sie Ihren eigenen Standard definieren und die \u00c4nderung anwenden. Auch hier bietet die pandas-Bibliothek einige n\u00fctzliche Funktionen wie <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.DataFrame.round.html\" target=\"_blank\" rel=\"noopener\">round<\/a>. Wenn Sie die Spalte SalePrice auf 2 Dezimalstellen runden m\u00f6chten, k\u00f6nnten wir JetBrains AI nach dem Code hierf\u00fcr fragen:<\/p>\n<p><em>Code to round <\/em><em>#SalePrice<\/em><em> to two decimal places\u00a0<\/em><\/p>\n<p>Der resultierende Code f\u00fchrt die Rundung durch und zeigt dann die ersten 10 Zeilen an, damit Sie diese \u00fcberpr\u00fcfen k\u00f6nnen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">df_cleaned['SalePrice'] = df_cleaned['SalePrice].round(2)\ndf_cleaned.head()<\/pre>\n<p>Ein weiteres Beispiel: Sie haben eine inkonsistente Schreibweise erkannt \u2013 etwa in der Spalte HouseStyle, die sowohl \u201e1Story\u201c als auch \u201eOneStory\u201c beinhaltet. Sie sind sich sicher, dass beide dasselbe bedeuten. Sie k\u00f6nnen den folgenden Prompt verwenden, um den entsprechenden Code zur Angleichung zu erhalten:<\/p>\n<p><em>Code to change all instances of <\/em><em>#OneStory<\/em><em> to <\/em><em>#1Story<\/em><em> in <\/em><em>#HouseStyle<\/em><em>\u00a0<\/em><\/p>\n<p>Der resultierende Code tut genau das und ersetzt alle Instanzen von OneStory durch 1Story:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">df_cleaned[HouseStyle'] = df_cleaned['HouseStyle'].replace('OneStory', '1Story')<\/pre>\n<h3 class=\"wp-block-heading\">Umgang mit Ausrei\u00dfern<\/h3>\n<p>Ausrei\u00dfer kommen in Datens\u00e4tzen sehr h\u00e4ufig vor, aber wie Sie mit ihnen umgehen \u2013 wenn \u00fcberhaupt \u2013 ist sehr kontextabh\u00e4ngig. Eine der einfachsten M\u00f6glichkeiten, Ausrei\u00dfer zu erkennen, ist ein Boxplot, der die Bibliotheken <a href=\"https:\/\/seaborn.pydata.org\/generated\/seaborn.boxplot.html\" target=\"_blank\" rel=\"noopener\">seaborn<\/a> und <a href=\"https:\/\/matplotlib.org\/stable\/api\/_as_gen\/matplotlib.pyplot.figure.html\" target=\"_blank\" rel=\"noopener\">matplotlib<\/a> verwendet. Im letzten Blogbeitrag \u00fcber <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/10\/data-exploration-with-pandas\/\">die Erkundung von Daten mit pandas<\/a> wurden Boxplots besprochen, falls Sie Ihre Kenntnisse eben auffrischen m\u00f6chten.<\/p>\n<p>Wir betrachten f\u00fcr diesen Boxplot den SalePrice in unserem <a href=\"https:\/\/www.kaggle.com\/datasets\/prevek18\/ames-housing-dataset\" target=\"_blank\" rel=\"noopener\">Ames-Housing-Datensatz<\/a>. Auch hier kommt JetBrains AI zum Einsatz, um den Code mit einem Prompt wie diesem zu generieren:<\/p>\n<p><em>Code to create a box plot of <\/em><em>#SalePrice<\/em><em>\u00a0<\/em><\/p>\n<p>Hier ist der resultierende Code, den wir ausf\u00fchren m\u00fcssen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import seaborn as sns\nimport matplotlib.pyplot as plt\n\n# Create a box plot for SalePrice\nplt.figure(figsize=(10, 6))\nsns.boxplot(x=df_cleaned['SalePrice'])\nplt.title('Box Plot of SalePrice')\nplt.xlabel('SalePrice')\nplt.show()<\/pre>\n<p>Der Boxplot zeigt uns, dass wir eine positive Verzerrung haben, weil die vertikale Medianlinie innerhalb der blauen Box links von der Mitte liegt. Eine positive Verzerrung verr\u00e4t uns, dass wir mehr Hauspreise am niedrigeren Ende der Skala haben, was nicht \u00fcberraschend ist. Der Boxplot vermittelt uns zudem visuell, dass wir viele Ausrei\u00dfer auf der rechten Seite haben. Das ist eine kleine Anzahl von H\u00e4usern, die viel teurer sind als der Medianpreis.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"1054\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/01\/image.png\" alt=\"\" class=\"wp-image-536439\" \/><\/figure>\n<p>Sie k\u00f6nnen diese Ausrei\u00dfer akzeptieren, denn es ist recht typisch, dass eine kleine Anzahl von H\u00e4usern einen h\u00f6heren Preis hat als die Mehrheit. Dies h\u00e4ngt jedoch von der Population ab, f\u00fcr die Sie generalisieren m\u00f6chten, und von den Schlussfolgerungen, die Sie aus Ihren Daten ziehen wollen. Wenn Sie klar abgrenzen, was zu Ihrer Population geh\u00f6rt und was nicht, k\u00f6nnen Sie eine fundierte Entscheidung dar\u00fcber treffen, ob Ausrei\u00dfer in Ihren Daten zu einem Problem werden.<\/p>\n<p>Wenn Ihre Population zum Beispiel aus Menschen besteht, die keine teuren Villen kaufen, dann k\u00f6nnen Sie diese Ausrei\u00dfer unter Umst\u00e4nden l\u00f6schen. Sollte Ihre Populationsdemografie jedoch Personen einschlie\u00dfen, von denen man annehmen kann, dass sie in der Lage sind, diese kostspieligen H\u00e4user zu erwerben, empfiehlt es sich, diese Informationen beizubehalten, da sie f\u00fcr Ihre Population relevant sind.<\/p>\n<p>Hier wurden Boxplots als effektives Werkzeug zur Identifizierung von Ausrei\u00dfern vorgestellt. Dar\u00fcber hinaus bieten auch andere Visualisierungen, z. B. Streudiagramme und Histogramme, eine schnelle M\u00f6glichkeit, um festzustellen, ob in Ihren Daten Ausrei\u00dfer vorhanden sind. Diese Informationen erm\u00f6glichen es Ihnen, fundierte Entscheidungen dar\u00fcber zu treffen, ob und welche Ma\u00dfnahmen erforderlich sind.<\/p>\n<p>Die Behandlung von Ausrei\u00dfern l\u00e4sst sich normalerweise in zwei Hauptkategorien einteilen: das Entfernen dieser Werte oder die Anwendung von zusammenfassenden Statistiken, die weniger empfindlich auf Ausrei\u00dfer reagieren. Zun\u00e4chst einmal m\u00fcssen wir genau wissen, um welche Zeilen es sich handelt.<\/p>\n<p>Bis jetzt haben wir nur dar\u00fcber gesprochen, wie man Ausrei\u00dfer visuell identifizieren kann. Es existieren verschiedene Ans\u00e4tze, um festzustellen, welche Beobachtungen als Ausrei\u00dfer betrachtet werden k\u00f6nnen und welche nicht. Ein g\u00e4ngiger Ansatz ist die Methode des <em>modifizierten Z-Scores<\/em>. Bevor wir uns ansehen, wie und warum er ver\u00e4ndert wird, hier die Definition des Z-Scores:<\/p>\n<p><em>Z-Score =<\/em> (<em>Datenpunktwert<\/em> \u2013 <em>Mittelwert<\/em>) \/ <em>Standardabweichung<\/em><\/p>\n<p>Der Grund, warum wir den Z-Score f\u00fcr die Erkennung von Ausrei\u00dfern \u00e4ndern, ist, dass sowohl der Mittelwert als auch die Standardabweichung aufgrund ihrer Berechnungsweise anf\u00e4llig f\u00fcr Ausrei\u00dfer sind. Der modifizierte Z-Score ist definiert als:<\/p>\n<p><em>Modifizierter Z-Score =<\/em> (<em>Datenpunktwert<\/em> \u2013 <em>Medianwert<\/em>) \/ <em>Median-<\/em><em>Absolutabweichung<\/em><\/p>\n<p>Wie wir in Bezug auf <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/10\/data-exploration-with-pandas\/#summary-statistics\">zusammenfassende Statistiken<\/a> gelernt haben, wird der Median nicht von Ausrei\u00dfern beeinflusst. Die <em>Median-Absolutabweichung<\/em> ist der <em>Medianwert<\/em> der absoluten Abweichungen des Datensatzes vom <em>Median<\/em>. Nehmen wir zum Beispiel an, Ihr Datensatz enth\u00e4lt folgende Werte:<\/p>\n<p>1, 2, 2, 2,<strong> 3<\/strong>, 3, 3, 5,9<\/p>\n<p>Dann ist Ihr <em>Median<\/em> 3 als Wert in der Mitte des Datensatzes. Die Abweichungen von Ihrem Medianwert von 3 in der oben dargestellten Reihenfolge gestalten sich wie folgt:<\/p>\n<p>2, 1, 1, 1, 0, 0, 0, 2, 5<\/p>\n<p>Wenn wir diese Abweichungen in aufsteigender Reihenfolge sortieren, erhalten wir:<\/p>\n<p>0, 0, 0, 1, <strong>1<\/strong>, 1, 2, 2, 5<\/p>\n<p>Das bedeutet, dass die <em>Median-Absolutabweichung<\/em> in diesem Beispiel 1 w\u00e4re.<\/p>\n<p>Wie berechnen wir den modifizierten Z-Score f\u00fcr unseren Datensatz f\u00fcr SalePrice? Geben wir JetBrains AI diesen Prompt:<\/p>\n<p><em>Gegeben:<\/em><\/p>\n<p><em>Modified Z-score = (data point value \u2013 median) \/ median absolute deviation<\/em><\/p>\n<p><em>Calculate the Modified Z-score for <\/em><em>#SalePrice<\/em><em>\u00a0<\/em><\/p>\n<p>Das Ergebnis ist folgender Code:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import pandas as pd\nfrom scipy.stats import median_abs_deviation\n\n\n# Assuming 'data' is your DataFrame and it contains the 'SalePrice' column\n\n\n# Calculate the median for the SalePrice column\nmedian_sale_price = data['SalePrice'].median()\n\n\n# Calculate the Median Absolute Deviation (MAD) for the SalePrice column\nmad_sale_price = median_abs_deviation(data['SalePrice'], scale='normal')\n\n\n# Calculate the Modified Z-scores for the SalePrice column\ndata['Modified_Z_Score'] = (data['SalePrice'] - median_sale_price) \/ mad_sale_price\n\n\n# Display the first few rows with the Modified Z-scores\nprint(data[['SalePrice', 'Modified_Z_Score']].head())<\/pre>\n<p>Wenn wir die erforderlichen Pakete installieren und diesen Code ausf\u00fchren, k\u00f6nnen wir sehen, dass wir fast fertig sind. Jetzt m\u00fcssen wir entscheiden, was ein Ausrei\u00dfer f\u00fcr unseren SalePrice auf der Grundlage des modifizierten Z-Scores ist. Die allgemeine Meinung hier ist, dass ein Ausl\u00f6ser alles &gt;=3 ist oder &lt;=-3 however, it\u2019s worth noting that like most statistical decisions, it can and should be tailored to your dataset.<\/p>\n<p>Lassen Sie uns einen weiteren Prompt an JetBrains AI \u00fcbermitteln, damit wir unsere Ausgabe noch mehr anpassen k\u00f6nnen:<\/p>\n<p><em>Just list those that have a <\/em><em>#Modified_Z_Score<\/em><em> of 3 or above or -3 or below\u00a0<\/em><\/p>\n<p>Nehmen wir diesen Codeschnipsel und ersetzen wir ihn durch die entsprechenden Zeilen oben:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Filter the rows where the Modified Z-score is 3 or above, or -3 or below\noutliers = data[(data['Modified_Z_Score'] &gt;= 3) | (data['Modified_Z_Score'] &lt;= -3)]\n\n\n# Print all the filtered rows, showing their index and SalePrice\noutliers = (outliers[[&#039;SalePrice&#039;, &#039;Modified_Z_Score&#039;]])\noutliers<\/pre>\n<p>Der Code wurde ge\u00e4ndert, um die Ausrei\u00dfer in einem neuen DataFrame namens \u201eoutliers\u201c zu speichern und sie auszugeben. So k\u00f6nnen wir sie uns ansehen.<\/p>\n<p>Unser n\u00e4chster Schritt w\u00e4re, diese Ausrei\u00dfer aus unserem DataFrame zu entfernen. Auch hier k\u00f6nnen wir JetBrains AI verwenden, um den Code mit einem Prompt wie folgendem zu generieren:<\/p>\n<p><em>Create a new dataframe without the outliers\u00a0<\/em><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">data_without_outliers = data.drop(index=outliers.index)\n\n\n# Display the new DataFrame without outliers\nprint(data_without_outliers)<\/pre>\n<p>Unser neuer DataFrame \u201edata_without_outliers\u201c schlie\u00dft die Werte aus, bei denen die Variable SalePrice als Ausrei\u00dfer gilt.<\/p>\n<p>Wir k\u00f6nnen unseren Boxplot-Code aktualisieren, um den neuen DataFrame anzusehen. Der Boxplot zeigt wie erwartet weiterhin unsere positive Verzerrung. Allerdings wurden die Werte, die als Ausrei\u00dfer klassifiziert sind, entfernt:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import seaborn as sns\nimport matplotlib.pyplot as plt\n\n\n# Create a box plot for SalePrice\nplt.figure(figsize=(10, 6))\nsns.boxplot(x=data_without_outliers['SalePrice'])\nplt.title('Box Plot of SalePrice')\nplt.xlabel('SalePrice')\nplt.show()<\/pre>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1572\" height=\"1076\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/01\/image-1.png\" alt=\"\" class=\"wp-image-536450\" \/><\/figure>\n<p>Bevor wir hier zum Schluss kommen, lassen Sie uns einen Blick darauf werfen, wie viele Beobachtungen in Prozent aus unserem DataFrame entfernt wurden, weil wir sie auf der Grundlage des SalePrice als Ausrei\u00dfer betrachtet haben.<\/p>\n<p>Wir k\u00f6nnen dazu einen Prompt wie den folgenden verwenden:<\/p>\n<p><em>Calculate the percentage of observations removed between #data and #data_without_outliers<\/em><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Calculate the number of observations in the original and filtered DataFrames\noriginal_count = len(data)\nfiltered_count = len(data_without_outliers)\n\n# Calculate the number of removed observations\nremoved_count = original_count - filtered_count\n\n# Calculate the percentage of observations removed\npercentage_removed = (removed_count \/ original_count) * 100\n\n# Display the percentage\nprint(f\"Percentage of observations removed: {percentage_removed:.2f}%\")<\/pre>\n<p>PyCharm teilt uns mit, dass 5,67 % der Beobachtungen entfernt wurden.<\/p>\n<p>Wie bereits erw\u00e4hnt, sollten Sie, wenn Sie Ihre Ausrei\u00dfer behalten m\u00f6chten, Zusammenfassungswerte verwenden, die weniger anf\u00e4llig f\u00fcr Ausrei\u00dfer sind, z.\u00a0B. <em>Median<\/em> und <em>Interquartilsbereich<\/em>. Sie k\u00f6nnen diese Messungen nutzen, um Ihre Schlussfolgerungen zu ziehen, insbesondere wenn Sie mit Datens\u00e4tzen arbeiten, die Ausrei\u00dfer enthalten, welche Sie nicht ausgeschlossen haben, da diese f\u00fcr die von Ihnen definierte Population und die gew\u00fcnschten Erkenntnisse von Bedeutung sind.<\/p>\n<h3 class=\"wp-block-heading\">Fehlende Werte<\/h3>\n<p>Der schnellste Weg, um fehlende Werte in Ihrem Datensatz zu erkennen, ist Ihre zusammenfassende Statistik. Zur Erinnerung: Klicken Sie in Ihrem DataFrame auf <em>Spaltenstatistik anzeigen<\/em> auf der rechten Seite und w\u00e4hlen Sie dann <em>Kompakt<\/em> aus. Fehlende Werte in den Spalten werden in Rot angezeigt, wie Sie hier f\u00fcr \u201eLot Frontage\u201c in unserem <a href=\"https:\/\/www.kaggle.com\/datasets\/prevek18\/ames-housing-dataset\" target=\"_blank\" rel=\"noopener\">Ames-Housing-Datensatz<\/a> sehen k\u00f6nnen:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"624\" height=\"123\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/AD_4nXdeSNdJvl9sk5Z8QXEJCr5rhDMI5GTGmaRdqvkIufNS8QZNQi-1QwDF1LQgTS_e9vm0B-pSKa5o2aZnNZEmPiAzvoaOjvRxmOICDRzuM_0iWumPGH_UWyR07Q8xTrzIUnYvL7-j-2.png\"><\/p>\n<p>Es gibt drei Arten fehlender Daten, die wir ber\u00fccksichtigen m\u00fcssen:<\/p>\n<ul>\n<li>V\u00f6llig zuf\u00e4lliges Fehlen<\/li>\n<li>Zuf\u00e4lliges Fehlen<\/li>\n<li>Nicht zuf\u00e4lliges Fehlen<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">V\u00f6llig zuf\u00e4lliges Fehlen<\/h3>\n<p>\u201eV\u00f6llig zuf\u00e4lliges Fehlen\u201c bedeutet, dass die Daten v\u00f6llig zuf\u00e4llig fehlen. Die Tatsache, dass sie fehlen, hat keine Beziehung zu anderen Variablen im Datensatz. Das kann z. B. passieren, wenn jemand vergisst, einen Teil einer Umfrage zu beantworten.<\/p>\n<p>V\u00f6llig zuf\u00e4llig fehlende Daten sind selten, aber sie geh\u00f6ren auch zu den am einfachsten zu bew\u00e4ltigenden Problemen. Wenn Sie eine relativ kleine Anzahl von Beobachtungen haben, die v\u00f6llig zuf\u00e4llig fehlen, besteht der g\u00e4ngigste Ansatz darin, diese Beobachtungen zu l\u00f6schen, da dies die Integrit\u00e4t Ihres Datensatzes und damit die Schlussfolgerungen, die Sie zu ziehen hoffen, nicht beeintr\u00e4chtigen sollte.<\/p>\n<h3 class=\"wp-block-heading\">Zuf\u00e4lliges Fehlen<\/h3>\n<p>Das zuf\u00e4llige Fehlen hat kein Muster, aber wir k\u00f6nnen dieses durch andere von uns gemessene Variablen erkl\u00e4ren. Zum Beispiel hat jemand aufgrund der Erhebungsweise der Daten einen Teil einer Umfrage nicht beantwortet.<\/p>\n<p>In unserem <a href=\"https:\/\/www.kaggle.com\/datasets\/prevek18\/ames-housing-dataset\" target=\"_blank\" rel=\"noopener\">Ames-Housing-Datensatz<\/a> wiederum k\u00f6nnten Sie feststellen, dass die Variable \u201eLot Frontage\u201c h\u00e4ufiger bei H\u00e4usern fehlt, die von bestimmten Immobilienagenturen verkauft werden. In diesem Fall k\u00f6nnte dieses Fehlen auf eine inkonsistente Dateneingabepraxis einiger Agenturen zur\u00fcckzuf\u00fchren sein. Wenn dies zutrifft, so steht das Fehlen der Daten f\u00fcr \u201eLot Frontage\u201c in Zusammenhang mit der Art und Weise, wie die Agentur, welche die Immobilie verkauft hat, die Informationen erfasst hat. Dies stellt ein beobachtetes Merkmal dar und hat keinen direkten Bezug zu \u201eLot Frontage\u201c<em> <\/em>selbst.<\/p>\n<p>Wenn einige Daten zuf\u00e4llig fehlen, ist es wichtig, den Grund f\u00fcr deren Fehlen zu ermitteln. Dies erfordert h\u00e4ufig eine eingehende Untersuchung der Methoden, mit denen die Daten erhoben wurden. Sobald Sie verstehen, warum die Daten fehlen, k\u00f6nnen Sie entscheiden, was zu tun ist. Einer der g\u00e4ngigeren Ans\u00e4tze, um mit zuf\u00e4llig fehlenden Daten umzugehen, ist die Imputation der Werte. Wir haben diesen Punkt bereits f\u00fcr unplausible Werte angesprochen, aber es ist auch eine g\u00fcltige Strategie f\u00fcr fehlende Werte. Je nach der von Ihnen definierten Population und den Schlussfolgerungen, die Sie ziehen m\u00f6chten, stehen Ihnen verschiedene Optionen zur Verf\u00fcgung, darunter in diesem Beispiel auch die Verwendung korrelierter Variablen wie Hausgr\u00f6\u00dfe, Baujahr und Verkaufspreis. Wenn Sie das Muster hinter den fehlenden Daten verstehen, k\u00f6nnen Sie oft Kontextinformationen verwenden, um die Werte zu imputieren, wodurch sichergestellt wird, dass die Beziehungen zwischen den Daten in Ihrem Datensatz erhalten bleiben.<\/p>\n<h3 class=\"wp-block-heading\">Nicht zuf\u00e4lliges Fehlen<\/h3>\n<p>Nicht zuf\u00e4llig fehlende Daten schlie\u00dflich liegen vor, wenn die Wahrscheinlichkeit fehlender Daten mit nicht beobachteten Daten zusammenh\u00e4ngt. Das bedeutet, dass das Fehlen von den unbeobachteten Daten abh\u00e4ngig ist.<\/p>\n<p>Lassen Sie uns ein letztes Mal auf unseren <a href=\"https:\/\/www.kaggle.com\/datasets\/prevek18\/ames-housing-dataset\" target=\"_blank\" rel=\"noopener\">Ames-Housing-Datensatz<\/a> zur\u00fcckblicken und dabei die Thematik der fehlenden Daten bei \u201eLot Frontage\u201c beleuchten. Ein Szenario f\u00fcr nicht zuf\u00e4llig fehlende Daten ist, wenn Verk\u00e4ufer sich bewusst daf\u00fcr entscheiden, \u201eLot Frontage\u201c<em> <\/em>nicht zu melden, wenn sie diesen Wert als <em>klein<\/em> erachten und die Meldung daher den Verkaufspreis ihres Hauses verringern k\u00f6nnte. Wenn die Wahrscheinlichkeit, dass Daten zu \u201eLot Frontage\u201c fehlen, von der Gr\u00f6\u00dfe der Frontage abh\u00e4ngt (nicht beobachtet), ist es unwahrscheinlicher, dass kleinere Werte f\u00fcr \u201eLot Frontage\u201c erhoben werden. Dies deutet darauf hin, dass das Fehlen von Daten direkt mit dem nicht angegebenen Wert in Verbindung steht.<\/p>\n<h3 class=\"wp-block-heading\">Visualisierung fehlender Daten<\/h3>\n<p>Wann immer Daten fehlen, m\u00fcssen Sie feststellen, ob es ein Muster gibt. Falls Ihnen ein Muster aufgefallen ist, deutet dies darauf hin, dass ein Problem vorliegen k\u00f6nnte, das m\u00f6glicherweise erst gel\u00f6st werden muss, bevor Sie Ihre Daten generalisieren k\u00f6nnen.<\/p>\n<p>Eine der einfachsten M\u00f6glichkeiten, nach Mustern zu suchen, sind Heatmap-Visualisierungen. Bevor wir uns mit dem Code besch\u00e4ftigen, lassen Sie uns Variablen ausschlie\u00dfen, f\u00fcr die keine Daten fehlen. Wir k\u00f6nnen JetBrains AI nach dem Code daf\u00fcr fragen:<\/p>\n<p><em>Code to create a new dataframe that contains only columns with missingness\u00a0<\/em><\/p>\n<p>Hier ist unser Code:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Identify columns with any missing values\ncolumns_with_missing = data.columns[data.isnull().any()]\n\n# Create a new DataFrame with only columns that have missing values\ndata_with_missingness = data[columns_with_missing]\n\n# Display the new DataFrame\nprint(data_with_missingness)<\/pre>\n<p>Bevor Sie diesen Code ausf\u00fchren, \u00e4ndern Sie die letzte Zeile, damit wir von dem sch\u00f6nen DataFrame-Layout von PyCharm profitieren k\u00f6nnen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">data_with_missingness<\/pre>\n<p>Jetzt ist es an der Zeit, eine Heatmap zu erstellen. Erneut werden wir JetBrains AI nach dem Code hierf\u00fcr fragen:<\/p>\n<p><em>Create a heatmap of <\/em><em>#data_with_missingness<\/em><em> that is transposed<\/em><\/p>\n<p>Hier ist das Ergebnis:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import seaborn as sns\nimport matplotlib.pyplot as plt\n\n\n# Transpose the data_with_missingness DataFrame\ntransposed_data = data_with_missingness.T\n\n\n# Create a heatmap to visualize missingness\nplt.figure(figsize=(12, 8))\nsns.heatmap(transposed_data.isnull(), cbar=False, yticklabels=True)\nplt.title('Missing Data Heatmap (Transposed)')\nplt.xlabel('Instances')\nplt.ylabel('Features')\nplt.tight_layout()\nplt.show()<\/pre>\n<p>Beachten Sie, dass cmap=&#8217;viridis&#8217; aus den Heatmap-Argumenten entfernt wurde, da die Darstellung irritierend ist.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"1065\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/01\/image-24.png\" alt=\"\" class=\"wp-image-537110\" \/><\/figure>\n<p>Diese Heatmap deutet darauf hin, dass es ein Muster fehlender Daten geben k\u00f6nnte, da dieselben Variablen in mehreren Zeilen fehlen. In einer Gruppe k\u00f6nnen wir sehen, dass Bsmt Qual, Bsmt Cond, Bsmt Exposure, BsmtFin Type 1<em> <\/em>und Bsmt Fin Type 2<em> <\/em>in den gleichen Beobachtungen fehlen. In einer anderen Gruppe sehen wir, dass Garage Type, Garage Yr Bit, Garage Finish, Garage Qual und Garage Cond in den gleichen Beobachtungen fehlen.<\/p>\n<p>Diese Variablen beziehen sich alle auf Keller und Garagen, aber es gibt auch noch andere Variablen, die sich auf Garagen oder Keller beziehen und nicht fehlen. Eine m\u00f6gliche Erkl\u00e4rung ist, dass bei der Erhebung der Daten in den verschiedenen Immobilienb\u00fcros unterschiedliche Fragen zu Garagen sowie Kellern gestellt wurden und nicht alle so viele Details wie im Datensatz aufweisen. Solche Szenarien sind bei Daten, die Sie nicht selbst erheben, durchaus \u00fcblich. Sie k\u00f6nnen untersuchen, wie die Daten erfasst wurden, wenn Sie mehr \u00fcber fehlende Daten in Ihrem Datensatz erfahren m\u00f6chten.<\/p>\n<h2 class=\"wp-block-heading\">Best Practices f\u00fcr die Datenbereinigung<\/h2>\n<p>Wie bereits erw\u00e4hnt wurde, steht die Definition Ihrer Population ganz oben auf der Liste der Best Practices zur Datenbereinigung. Machen Sie sich im Vorfeld Gedanken dar\u00fcber, welche Ziele Sie anstreben und auf welche Weise Sie Ihre Daten generalisieren m\u00f6chten, bevor Sie mit der Bereinigung beginnen.<\/p>\n<p>Sie m\u00fcssen sicherstellen, dass alle Ihre Methoden reproduzierbar sind, denn Reproduzierbarkeit spricht auch f\u00fcr saubere Daten. Situationen, die nicht reproduzierbar sind, k\u00f6nnen im weiteren Verlauf erhebliche Auswirkungen haben. Aus diesem Grund sollten Sie Ihre Jupyter-Notebooks \u00fcbersichtlich sowie sequenziell gestalten und gleichzeitig die Markdown-Funktionen nutzen, um Ihre Entscheidungen bei jedem Schritt zu dokumentieren, insbesondere bei der Bereinigung.<\/p>\n<p>Wenn Sie Daten bereinigen, sollten Sie schrittweise vorgehen und eher den DataFrame als die urspr\u00fcngliche CSV-Datei oder Datenbank \u00e4ndern. Stellen Sie sicher, dass Sie alles mit reproduzierbarem, gut dokumentiertem Code durchf\u00fchren.<\/p>\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n<p>Datenbereinigung ist ein gro\u00dfes Thema, das viele Herausforderungen mit sich bringen kann. Je gr\u00f6\u00dfer der Datensatz ist, desto anspruchsvoller ist der Bereinigungsprozess. Es ist wichtig, Ihre Population stets im Blick zu behalten, um Ihre Schlussfolgerungen effektiver generalisieren zu k\u00f6nnen. Dabei sollten Sie einen ausgewogenen Ansatz zwischen dem Entfernen und dem Imputieren fehlender Werte sowie dem Verst\u00e4ndnis der Gr\u00fcnde f\u00fcr das Fehlen dieser Daten finden.<\/p>\n<p>Sie k\u00f6nnen sich selbst als die Stimme der Daten betrachten. Sie kennen den Weg, den die Daten zur\u00fcckgelegt haben, und wissen, inwieweit Sie die Datenintegrit\u00e4t in allen Phasen gewahrt haben. Sie sind die am besten geeignete Person, um diese Schritte zu dokumentieren und sie mit anderen zu teilen.<\/p>\n<p align=\"center\">\n    <a class=\"jb-download-button\" href=\"https:\/\/jb.gg\/m8p92h\" target=\"_blank\" rel=\"noopener\"><br \/>\nTesten Sie PyCharm Professional kostenlos<br \/>\n<\/a><\/p>\n<p><strong>Autorin des urspr\u00fcnglichen Blogposts<\/strong><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/193dd3accbb2e467f1b46a7f38ea929d?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"Helen Scott\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Helen Scott<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":811,"featured_media":570790,"comment_status":"closed","ping_status":"closed","template":"","categories":[952],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/570787"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/users\/811"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/comments?post=570787"}],"version-history":[{"count":5,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/570787\/revisions"}],"predecessor-version":[{"id":601542,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/570787\/revisions\/601542"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media\/570790"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media?parent=570787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/categories?post=570787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/tags?post=570787"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/cross-post-tag?post=570787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}