GitLab wurde erfolgreich aktualisiert. Durch regelmäßige Updates bleibt das THM GitLab sicher. Danke für Ihre Geduld.

Commit 1b6da76f authored by Jens Plüddemann's avatar Jens Plüddemann

commenting

parent 5bf10cc2
......@@ -8,63 +8,111 @@ from sklearn.impute import SimpleImputer
class PropertyData:
def __init__(self, file_path: str):
self.file_path = file_path
# Lese die CSV-Datei ein
self.df = pd.read_csv(self.file_path)
def look_at_the_data(self):
# Schreibe die ersten 5 Zeilen des Datensatzes in die Konsole
print(self.df.head())
# Schreibe alle Daten des Datensatzes
# ProTip: .to_string() verhindert, dass Teile des Datensatzes nicht geschrieben werden!
print(self.df.to_string())
def find_missing_values_matrix(self):
# Plotte die Missing Values Matrix der Bibliothek MissingNo
mn.matrix(self.df)
# Zeige alle Plots
plt.show()
def find_missing_values_bar(self):
# Plotte die Missing Values Bar der Bibliothek MissingNo
mn.bar(self.df)
# Zeige alle Plots
plt.show()
def check_each_column(self):
# Für jede Spalte im Datensatz
for column in self.df.columns:
# Schreibe eine leere Zeile und den Spaltennamen
print('\n' + column)
# Schreibe den Inhalt der Spalte
print(self.df[column].to_string())
def fix_missing_data(self):
# Lese die CSV erneut ein und definiere, dass ['na', '--'] zu NaN (not a number) umgewandelt werden
self.df = pd.read_csv(self.file_path, na_values=['na', '--'])
# Für jeden Wert in der Spalte 'OWN_OCCUPIED'
# Ersetze Y durch True und N durch False
# Anschließend überprüfe, ob etwas von Typ Boolean (True oder False) ist, wenn nicht wird er zum NaN - Wert
self.df['OWN_OCCUPIED'] = self.df['OWN_OCCUPIED'] \
.replace(['Y', 'N'], [True, False]) \
.apply(lambda value: value if type(value) is bool else np.nan)
# Für jeden Wert in der Spalte 'NUM_BATH'
# Ersetze alle Werte zu numerischen Werten
# errors='coerce' lässt alle Werte die nicht numerisch sein können zu NaN werden
# Anschließend runde alle Werte ab und wandle sie zu ganzzahligen Werten um
self.df['NUM_BATH'] = pd.to_numeric(self.df['NUM_BATH'], errors='coerce')
self.df['NUM_BATH'] = self.df['NUM_BATH'] \
.apply(lambda value: value if np.isnan(value) else int(np.floor(value)))
def list_wise_deletion(self):
# Lösche alle Zeilen mit NaN Werten
self.df.dropna()
def mean_imputation(self):
# Erstelle einen neuen einfachen Imputer
imputer = SimpleImputer()
# Erstelle eine Liste mit Spaltennamen, in welchen NaN mit Mittelwerden ersetzt werden sollen
to_impute = ['ST_NUM', 'NUM_BEDROOMS', 'NUM_BATH', 'SQ_FT']
# Für jeden Spaltennamen in der Liste
for impute in to_impute:
# Hinzufügen der Spalte zum Imputer
# Datensatz des Spaltennamens wird in eine Liste verwaltelt
# Reshape ist nötig, da die Werte in der Form [[..], [..]] erwartet werden, aber in [.., ..] sind
# Standardmäßig arbeitet der Imputer mit der Strategie 'mean'
self.df[impute] = imputer.fit_transform(self.df[impute].to_numpy().reshape(-1, 1))
def most_frequent_imputation(self):
# Hinzufügen der Spalte zum Imputer
# Datensatz des Spaltennamens wird in eine Liste verwaltelt
# Reshape ist nötig, da die Werte in der Form [[..], [..]] erwartet werden, aber in [.., ..] sind
# Strategie wird hier auf 'most_frequent' geändert, um den häufigsten Wert bei NaN einzufügen
self.df['OWN_OCCUPIED'] = SimpleImputer(strategy='most_frequent').fit_transform(
self.df['OWN_OCCUPIED'].to_numpy().reshape(-1, 1))
def final_result(self):
# Umfassende Funktion, um das finale Ergebnis zu sehen
self.fix_missing_data()
self.mean_imputation()
self.most_frequent_imputation()
if __name__ == '__main__':
# Erstellen des AirlinePassengers Objekts, um auf die Funktionen zuzugreifen
data_set = PropertyData('../../res/propertydata.csv')
# data_set.look_at_the_data()
# Kommentiere die Funktionen einzeln, um die Ergebnisse zu sehen
data_set.look_at_the_data()
# data_set.find_missing_values_matrix()
# data_set.find_missing_values_bar()
# data_set.check_each_column()
data_set.final_result()
# data_set.final_result()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment