Um den Code mit deinen eigenen Werten zu verwenden, musst du die folgenden Platzhalter in den angegebenen Zeilen ersetzen:Zeile 6: INPUT_FILE = '[YOUR_INPUT_FILE]'Ersetze [YOUR_INPUT_FILE] durch den Pfad und Namen deiner Eingabedatei (z. B. 'solar_data_hourly.csv'). Beispiel: INPUT_FILE = 'meine_daten.csv' Zeile 7: OUTPUT_PLOT = '[YOUR_OUTPUT_PLOT]'Ersetze [YOUR_OUTPUT_PLOT] durch den gewünschten Pfad und Namen der Ausgabedatei für die Visualisierung (z. B. 'solar_analysis.png'). Beispiel: OUTPUT_PLOT = 'meine_analyse.png' Zeile 8: OUTPUT_CLEAN = '[YOUR_OUTPUT_CLEAN]'Ersetze [YOUR_OUTPUT_CLEAN] durch den gewünschten Pfad und Namen der bereinigten Datendatei (z. B. 'solar_data_clean.csv'). Beispiel: OUTPUT_CLEAN = 'meine_bereinigten_daten.csv' Hinweis:Stelle sicher, dass deine Eingabedatei (CSV) die erforderlichen Spalten (timestamp, ertrag_total, temp, pressure, lux, radiation) enthält, da der Code diese Spalten erwartet. D ie Dateipfade sollten entweder relativ (z. B. 'daten/meine_daten.csv') oder absolut (z. B. 'C:/Pfad/zur/Datei.csv') sein, je nachdem, wo sich deine Dateien befinden. Wenn du die Dateien in einem anderen Verzeichnis speichern möchtest, füge den entsprechenden Pfad in den Platzhaltern hinzu. Nachdem du die Platzhalter ersetzt hast, kannst du den Code ausführen und die Analyse mit deinen Daten durchführen. Der Code speichert die Visualisierung und die bereinigten Daten an den von dir angegebenen Orten. CODE: import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from datetime import datetime # Konfiguration INPUT_FILE = '[YOUR_INPUT_FILE]' OUTPUT_PLOT = '[YOUR_OUTPUT_PLOT]' OUTPUT_CLEAN = '[YOUR_OUTPUT_CLEAN]' print("=" * 60) print("SOLAR DATEN ANALYSE") print("=" * 60) print() # Daten laden df = pd.read_csv(INPUT_FILE) df['timestamp'] = pd.to_datetime(df['timestamp']) df = df.set_index('timestamp') # Umbenennen der Spalten für einfachere Handhabung df.columns = ['ertrag_total', 'temp', 'pressure', 'lux', 'radiation'] print("📊 Datensatz Übersicht:") print(f" Zeitraum: {df.index.min()} bis {df.index.max()}") print(f" Stunden: {len(df)}") print(f" Tage: {(df.index.max() - df.index.min()).days}") print() # Täglichen Ertrag berechnen df['ertrag_daily'] = df['ertrag_total'].diff() df.loc[df['ertrag_daily'] < 0, 'ertrag_daily'] = 0 # Negative Werte entfernen # Tägliche Statistiken daily_yield = df['ertrag_daily'].resample('D').sum() daily_yield = daily_yield[daily_yield > 0] # Nur Tage mit Ertrag print("🌤️ Täglicher Solar-Ertrag:") print(f" Durchschnitt: {daily_yield.mean():.2f} kWh/Tag") print(f" Minimum: {daily_yield.min():.2f} kWh/Tag") print(f" Maximum: {daily_yield.max():.2f} kWh/Tag") print(f" Median: {daily_yield.median():.2f} kWh/Tag") print() # Wetter-Statistiken print("☀️ Solar Radiation:") print(f" Durchschnitt: {df['radiation'].mean():.1f} W/m²") print(f" Maximum: {df['radiation'].max():.1f} W/m²") print() print("💡 Lux (Tageslicht):") print(f" Durchschnitt: {df['lux'].mean():.0f} lx") print(f" Maximum: {df['lux'].max():.0f} lx") print() print("🌡️ Temperatur:") print(f" Durchschnitt: {df['temp'].mean():.1f}°C") print(f" Min: {df['temp'].min():.1f}°C") print(f" Max: {df['temp'].max():.1f}°C") print() # Korrelationsanalyse print("🔗 Korrelation mit täglichem Ertrag:") correlation = df[['ertrag_daily', 'radiation', 'lux', 'temp', 'pressure']].corr()['ertrag_daily'].sort_values(ascending=False) print(correlation) print() # Fehlende Werte print("⚠️ Fehlende Werte:") missing = df.isnull().sum() print(missing[missing > 0] if missing.sum() > 0 else "Keine fehlenden Werte") print() # Zeitbasierte Features für ML df['hour'] = df.index.hour df['day_of_year'] = df.index.dayofyear df['month'] = df.index.month df['is_daylight'] = (df['hour'] >= 6) & (df['hour'] <= 20) # Visualisierung erstellen fig, axes = plt.subplots(3, 2, figsize=(15, 12)) fig.suptitle('Solar-Daten Analyse', fontsize=16, fontweight='bold') # 1. Täglicher Ertrag über Zeit ax1 = axes[0, 0] daily_yield.plot(ax=ax1, color='orange', linewidth=2) ax1.set_title('Täglicher Solar-Ertrag') ax1.set_ylabel('kWh') ax1.grid(True, alpha=0.3) # 2. Solar Radiation über Zeit ax2 = axes[0, 1] df['radiation'].plot(ax=ax2, color='red', alpha=0.6) ax2.set_title('Solar Radiation') ax2.set_ylabel('W/m²') ax2.grid(True, alpha=0.3) # 3. Temperatur über Zeit ax3 = axes[1, 0] df['temp'].plot(ax=ax3, color='blue', alpha=0.6) ax3.set_title('Temperatur') ax3.set_ylabel('°C') ax3.grid(True, alpha=0.3) # 4. Korrelations-Heatmap ax4 = axes[1, 1] corr_matrix = df[['ertrag_daily', 'radiation', 'lux', 'temp', 'pressure']].corr() sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', center=0, ax=ax4) ax4.set_title('Korrelationsmatrix') # 5. Scatter: Radiation vs Ertrag ax5 = axes[2, 0] valid_data = df[['radiation', 'ertrag_daily']].dropna() ax5.scatter(valid_data['radiation'], valid_data['ertrag_daily'], alpha=0.5, color='green') ax5.set_xlabel('Solar Radiation (W/m²)') ax5.set_ylabel('Stündlicher Ertrag (kWh)') ax5.set_title('Radiation vs. Ertrag') ax5.grid(True, alpha=0.3) # 6. Monatliche Durchschnitte ax6 = axes[2, 1] monthly_avg = df.groupby('month')['ertrag_daily'].mean() monthly_avg.plot(kind='bar', ax=ax6, color='teal') ax6.set_title('Durchschnittlicher Ertrag pro Monat') ax6.set_xlabel('Monat') ax6.set_ylabel('kWh') ax6.grid(True, alpha=0.3, axis='y') plt.tight_layout() plt.savefig(OUTPUT_PLOT, dpi=300, bbox_inches='tight') print(f"📈 Visualisierung gespeichert: {OUTPUT_PLOT}") # Bereinigte Daten speichern (ohne fehlende Werte für ML) df_clean = df.dropna() df_clean.to_csv(OUTPUT_CLEAN) print(f"✓ Bereinigte Daten gespeichert: {OUTPUT_CLEAN}") print() print("=" * 60) print("ANALYSE ABGESCHLOSSEN") print("=" * 60)