slogan3

Maak Matplotlib Visualisaties met Geavanceerde Tijdsreeksenanalyse

description

Met deze prompt kan de gebruiker complexe tijdsreeksen effectief visualiseren, wat helpt bij het identificeren van trends en patronen die met standaardgrafieken moeilijk te zien zijn. Het biedt duidelijke, aanpasbare Python-code, waardoor tijdsreeksanalyse toegankelijker wordt zonder dat de gebruiker diepgaande statistische kennis nodig heeft.

prompt

Help me een Matplotlib-visualisatie te maken die geavanceerde tijdsreeksenanalyse omvat voor mijn dataset: <beschrijf je dataset>. Ik wil functies zoals voortschrijdende gemiddelden, seizoensgebonden trends ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van Python-code met Matplotlib voor het visualiseren van je dataset met geavanceerde tijdsreeksanalyses: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from pandas.plotting import register_matplotlib_converters from pandas.plotting import autocorrelation_plot from matplotlib.dates import DateFormatter register_matplotlib_converters() # Voorbeeld: laad je dataset # Data moet een DataFrame zijn met kolom 'Datum' en 'Verkoop' # Bijvoorbeeld: # df = pd.read_csv('verkoop_data.csv', parse_dates=['Datum']) # Voor nu maken we een mock dataset dates = pd.date_range(start='2022-01-01', end='2023-12-31', freq='D') np.random.seed(0) verkoop = np.random.poisson(lam=100, size=len(dates)) df = pd.DataFrame({'Datum': dates, 'Verkoop': verkoop}) # Zet Datum als index df.set_index('Datum', inplace=True) # Bereken voortschrijdend gemiddelde (bijv. 7-dagen) df['Voortschrijdend_Gemiddelde'] = df['Verkoop'].rolling(window=7).mean() # Seizoensgebonden trend via de STL-decomposition (optioneel, met statsmodels) import statsmodels.api as sm decomposition = sm.tsa.seasonal_decompose(df['Verkoop'], model='additive', period=365) df['Seizoensgebonden_trend'] = decomposition.seasonal # Plot setup plt.figure(figsize=(14, 8)) plt.plot(df.index, df['Verkoop'], color='steelblue', label='Dagelijkse verkoop') plt.plot(df.index, df['Voortschrijdend_Gemiddelde'], color='orange', linewidth=2, label='7-daags voortschrijdend gemiddelde') plt.plot(df.index, df['Seizoensgebonden_trend'], color='green', linewidth=2, linestyle='--', label='Seizoensgebonden trend') # Annotaties voor pieken en dalen # Bijvoorbeeld: top 3 pieken en dalen top_pieken = df['Verkoop'].nlargest(3) top_dalen = df['Verkoop'].nsmallest(3) for datum, waarde in top_pieken.items(): plt.annotate(f'Piek: {waarde}', xy=(datum, waarde), xytext=(datum, waarde + 15), arrowprops=dict(facecolor='red', shrink=0.05), fontsize=9, color='red') for datum, waarde in top_dalen.items(): plt.annotate(f'Dal: {waarde}', xy=(datum, waarde), xytext=(datum, waarde - 20), arrowprops=dict(facecolor='blue', shrink=0.05), fontsize=9, color='blue') # Aangepaste labels en titel plt.title('Tijdsreeksanalyse van online winkel verkoop', fontsize=16) plt.xlabel('Datum', fontsize=14) plt.ylabel('Verkoopaantallen', fontsize=14) # Legenda en grid plt.legend(loc='upper left', fontsize=12) plt.grid(True, linestyle='--', alpha=0.5) # Datum formatter voor x-as plt.gca().xaxis.set_major_formatter(DateFormatter('%Y-%m')) # Opties voor interactie of aanpassen plt.tight_layout() plt.show() ``` Deze code toont: - De dagelijkse verkoop - Een 7-dagen voortschrijdend gemiddelde met felle oranje lijn - Seizoensgebonden trend (via STL-decomposition) met groene stippellijn - Annotaties voor de top 3 piek- en dalwaarden - Duidelijke kleuren, labels, legenda en datumformatering Je kunt de parameters aanpassen naar wens (bijvoorbeeld de window size, kleurtjes, annotatieposities).
provider: deepseek
model: deepseek-chat
Hier is een geavanceerde Python-code voor tijdsreeksanalyse met Matplotlib: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter, MonthLocator import matplotlib.dates as mdates from statsmodels.tsa.seasonal import seasonal_decompose # AANPASBARE PARAMETERS (pas deze aan naar wens) KLEUREN = { 'hoofdlijn': '#FF6B6B', # Fel rood 'voortschrijdend_gemiddelde': '#4ECDC4', # Turkoois 'trendlijn': '#45B7D1', # Blauw 'seizoenscomponent': '#FFE66D', # Geel 'piek_marker': '#FF0000', # Rood 'dal_marker': '#0000FF', # Blauw 'achtergrond': '#F7F7F7' # Lichtgrijs } TIJDSINTERVAL = 'W' # 'D' voor dagelijks, 'W' voor wekelijks, 'M' voor maandelijks VOORTSCHRIJDEND_GEMIDDELDE = 30 # Dagen voor voortschrijdend gemiddelde def maak_tijdsreeks_visualisatie(data, datum_col, verkoop_col): """ Maak een geavanceerde tijdsreeksvisualisatie met verschillende analyses """ # Data voorbereiden df = data.copy() df[datum_col] = pd.to_datetime(df[datum_col]) df = df.set_index(datum_col) df = df.asfreq('D') # Zorg voor dagelijkse frequentie # Voortschrijdend gemiddelde berekenen df['voortschrijdend_gem'] = df[verkoop_col].rolling( window=VOORTSCHRIJDEND_GEMIDDELDE, min_periods=1 ).mean() # Seizoensontleding try: result = seasonal_decompose(df[verkoop_col], model='additive', period=365) df['trend'] = result.trend df['seizoen'] = result.seasonal except: print("Seizoensontleding niet mogelijk met huidige data") df['trend'] = np.nan df['seizoen'] = np.nan # Piek- en daldetectie df['pieken'] = df[verkoop_col][(df[verkoop_col].shift(1) < df[verkoop_col]) & (df[verkoop_col].shift(-1) < df[verkoop_col])] df['dalen'] = df[verkoop_col][(df[verkoop_col].shift(1) > df[verkoop_col]) & (df[verkoop_col].shift(-1) > df[verkoop_col])] # Resample naar gewenst interval df_resampled = df.resample(TIJDSINTERVAL).mean() # Plot opzetten fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(20, 12)) fig.patch.set_facecolor(KLEUREN['achtergrond']) # Hoofdplot - Verkoopcijfers met voortschrijdend gemiddelde ax1.plot(df_resampled.index, df_resampled[verkoop_col], color=KLEUREN['hoofdlijn'], linewidth=2, label='Dagelijkse Verkoop') ax1.plot(df_resampled.index, df_resampled['voortschrijdend_gem'], color=KLEUREN['voortschrijdend_gemiddelde'], linewidth=3, label=f'Voortschrijdend Gemiddelde ({VOORTSCHRIJDEND_GEMIDDELDE}d)') # Markeer pieken en dalen pieken = df_resampled[df_resampled['pieken'].notna()] dalen = df_resampled[df_resampled['dalen'].notna()] ax1.scatter(pieken.index, pieken['pieken'], color=KLEUREN['piek_marker'], s=100, zorder=5, label='Pieken', alpha=0.7) ax1.scatter(dalen.index, dalen['dalen'], color=KLEUREN['dal_marker'], s=100, zorder=5, label='Dalen', alpha=0.7) ax1.set_title('Dagelijkse Verkoopcijfers met Analyse', fontsize=16, fontweight='bold') ax1.set_xlabel('Datum', fontsize=12) ax1.set_ylabel('Verkoopbedrag', fontsize=12) ax1.legend() ax1.grid(True, alpha=0.3) # Trendanalyse if not df_resampled['trend'].isna().all(): ax2.plot(df_resampled.index, df_resampled['trend'], color=KLEUREN['trendlijn'], linewidth=3, label='Trendlijn') ax2.set_title('Trendanalyse', fontsize=16, fontweight='bold') ax2.set_xlabel('Datum', fontsize=12) ax2.set_ylabel('Trend', fontsize=12) ax2.legend() ax2.grid(True, alpha=0.3) # Seizoenscomponent if not df_resampled['seizoen'].isna().all(): ax3.plot(df_resampled.index, df_resampled['seizoen'], color=KLEUREN['seizoenscomponent'], linewidth=2) ax3.set_title('Seizoensgebonden Component', fontsize=16, fontweight='bold') ax3.set_xlabel('Datum', fontsize=12) ax3.set_ylabel('Seizoenseffect', fontsize=12) ax3.grid(True, alpha=0.3) # Boxplot per maand voor seizoensanalyse df['maand'] = df.index.month maand_data = [df[df['maand'] == maand][verkoop_col] for maand in range(1, 13)] ax4.boxplot(maand_data, labels=['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']) ax4.set_title('Maandelijkse Verdeling van Verkoop', fontsize=16, fontweight='bold') ax4.set_xlabel('Maand', fontsize=12) ax4.set_ylabel('Verkoopbedrag', fontsize=12) ax4.grid(True, alpha=0.3) # Datumformattering for ax in [ax1, ax2, ax3]: ax.xaxis.set_major_formatter(DateFormatter('%Y-%m')) ax.xaxis.set_major_locator(MonthLocator(interval=3)) plt.setp(ax.xaxis.get_majorticklabels(), rotation=45) plt.tight_layout() return fig, df # VOORBEELD GEBRUIK: # Veronderstel dat je een DataFrame hebt met kolommen 'datum' en 'verkoop' # df = pd.read_csv('jouw_data.csv') # fig, analyzed_df = maak_tijdsreeks_visualisatie(df, 'datum', 'verkoop') # plt.show() # Extra functie voor gedetailleerde piekannotaties def annotatie_pieken_dalen(ax, df, verkoop_col): """ Voeg gedetailleerde annotaties toe voor pieken en dalen """ pieken = df[df['pieken'].notna()] dalen = df[df['dalen'].notna()] for datum, waarde in pieken['pieken'].items(): ax.annotate(f'Piek: {waarde:.0f}', xy=(datum, waarde), xytext=(10, 30), textcoords='offset points', arrowprops=dict(arrowstyle='->', color='red'), fontsize=9, bbox=dict(boxstyle="round,pad=0.3", fc="white", ec="red", alpha=0.7)) for datum, waarde in dalen['dalen'].items(): ax.annotate(f'Dal: {waarde:.0f}', xy=(datum, waarde), xytext=(10, -40), textcoords='offset points', arrowprops=dict(arrowstyle='->', color='blue'), fontsize=9, bbox=dict(boxstyle="round,pad=0.3", fc="white", ec="blue", alpha=0.7)) # Om annotaties toe te voegen aan de hoofdplot: # annotatie_pieken_dalen(ax1, df_resampled, 'verkoop') ``` **Installatievereisten:** ```bash pip install pandas matplotlib numpy statsmodels ``` **Belangrijke aanpassingsopties:** 1. Wijzig `KLEUREN` dictionary voor kleuraanpassingen 2. Pas `TIJDSINTERVAL` aan voor aggregatieniveau 3. Verander `VOORTSCHRIJDEND_GEMIDDELDE` voor rolling window grootte 4. Pas de subplot-indeling aan in de `subplots()` functie Deze code biedt een complete analyse met visuele weergave van trends, seizoenspatronen, en markeert automatisch pieken en dalen in je verkoopdata!