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

Commit e9974405 authored by Jens Plüddemann's avatar Jens Plüddemann

commenting

parent f8eabfbc
......@@ -11,81 +11,138 @@ register_matplotlib_converters()
class SeaIce:
def __init__(self, file_path: str):
# Lese die CSV Datei
df = pd.read_csv(file_path)
# Wandle die Spalte 'Time' zu einem Datumsobjekt um
df['Time'] = pd.to_datetime(df['Time'], format='%YM%m')
# Füge eine neue Spalte namens 'Arctic-Antarctica' hinzu welche aus Arctic-Antarctica besteht
df.insert(3, 'Arctic-Antarctica', df['Arctic'] - df['Antarctica'])
# Variablen für Autovervollständigung
self.df = df
self.time = self.df['Time']
self.arctic = self.df['Arctic']
self.antarctica = self.df['Antarctica']
self.difference = self.df['Arctic-Antarctica']
# Eine Liste an Spalten, welche geplottet werden sollen
self.to_plot = [self.arctic, self.antarctica, self.difference]
def plot_initial(self):
# Plotte alle Spalten gegen die Zeit
plt.plot(self.time, self.arctic, label='Arctic ice')
plt.plot(self.time, self.antarctica, label='Antarctic ice')
plt.plot(self.time, self.difference, label='Arctic - Antarctic ice')
# Cosmetics
plt.title('Arctic vs Antarctic vs Difference')
plt.xlabel('Time')
plt.ylabel('Ice')
plt.legend()
# Zeige alle Plots
plt.show()
def plot_moving_averages(self, windows: List[int] = None):
# Standardmäßig ist windows eine Liste an 11 und 17 und wird überschrieben, falls etwas übergeben wird
if windows is None:
windows = [11, 17]
# Erstellen einer neuen Figur und alle Plots darin zu Plotten
# ist nötig, da wir mehrere Plots in einem Fenster plotten wollen
fig, ax = plt.subplots(len(self.to_plot))
# Fixen des Abstandes zwischen den Zeilen an Plots
plt.subplots_adjust(hspace=.5)
# Für jede Spalte die geplottet werden soll
# enumerate Zählt von 0 mit und ermöglicht so über den Index auf die Figur zuzugreifen
for idx, plot in enumerate(self.to_plot):
# Plotte die initialen Daten
ax[idx].plot(self.time, plot, label=f'{plot.name} initial')
# Für jeden Wert, welcher übergeben wurde
for window in windows:
# Errechne den gleitenden Mittelwert
rolling_mean = plot.rolling(window).mean()
# Füge die errechneten Werte der Figur hinzu
ax[idx].plot(self.time, rolling_mean, label=f'{plot.name} window={window}')
# Setzt den Titel der Figur
ax[idx].set_title(plot.name, y=1)
ax[idx].legend(loc='lower left')
# Zeige alle Figuren und Plots
plt.show()
def plot_acf(self, lags=20):
# Erstellen einer neuen Figur und alle Plots darin zu Plotten
# ist nötig, da wir mehrere Plots in einem Fenster plotten wollen
fig, ax = plt.subplots(len(self.to_plot))
plt.subplots_adjust(hspace=.5)
# Für jede Spalte die geplottet werden soll
# enumerate Zählt von 0 mit und ermöglicht so über den Index auf die Figur zuzugreifen
for idx, plot in enumerate(self.to_plot):
plot_acf(plot, lags=20, ax=ax[idx], title=f'Autocorrelation {plot.name} with τ={lags}')
# Plotte ein ACF Plot mittels der Bibliothek Statsmodels
plot_acf(plot, lags=lags, ax=ax[idx], title=f'Autocorrelation {plot.name} with τ={lags}')
# Zeige alle Plots
plt.show()
def plot_arima(self):
# Erstellen einer neuen Figur und alle Plots darin zu Plotten
# ist nötig, da wir mehrere Plots in einem Fenster plotten wollen
fig, ax = plt.subplots(len(self.to_plot))
plt.subplots_adjust(hspace=.5)
# Für jede Spalte die geplottet werden soll
# enumerate Zählt von 0 mit und ermöglicht so über den Index auf die Figur zuzugreifen
for idx, plot in enumerate(self.to_plot):
# Antarctica throws error
# Antarctica lässt sich NICHT mit ARIMA(2, 1, 2) plotten, also nehmen wir es raus
if plot.name != 'Antarctica':
# Erstelle ein neues Arima Model und füge die Daten hinzu
res = ARIMA(plot, order=(2, 1, 2)).fit(disp=-1)
# Errechne die Vorhersagen
predictions = res.fittedvalues.cumsum()
# Plotte die initialen Daten
ax[idx].plot(plot, label='Given data')
# Plotte die errechneten Daten
ax[idx].plot(res.fittedvalues, label='estimated differences')
ax[idx].plot(predictions, label='cumulated sum')
# Plotte ein Vorhersagenplot
fig = res.plot_predict(200, 400)
# Cosmetics
fig.suptitle(f'{plot.name} prediction')
# Cosmetics
ax[idx].set_title(plot.name)
ax[idx].legend()
# Zeige alle Plots
plt.show()
if __name__ == '__main__':
data_set = SeaIce('../../res/sea_ice.csv')
# Kommentiere Funktionen einzeln um diese Auszuführen
data_set.plot_initial()
data_set.plot_moving_averages()
data_set.plot_acf()
data_set.plot_arima()
# data_set.plot_moving_averages()
# data_set.plot_acf()
# data_set.plot_arima()
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