I want those as multiple pages in a single plot
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import welch, find_peaks
from pandas.plotting import autocorrelation_plot
data = pd.read_csv(”../../geo/copernicus/temperature/2m_Temperature_Czechia_2024_01-02-03_Daily_Hourly.csv”) # Replace with your file
time = data[‘time’] # Ensure there’s a time column
variables = [‘2 metre temperature [C]’] # Replace with your variable names
plt.figure(figsize=(12, 6))
for var in variables:
plt.plot(time, data[var], label=var)
plt.xlabel(‘Time’)
plt.ylabel(‘Value’)
plt.title(‘Weather Time Series’)
plt.legend()
plt.show()
window_size = 24 * 7
for var in variables:
data[f’{var}_rolling_mean’] = data[var].rolling(window=window_size).mean()
data[f’{var}_rolling_var’] = data[var].rolling(window=window_size).var()
plt.figure(figsize=(12, 6))
for var in variables:
plt.plot(time, data[f’{var}_rolling_mean’], label=f’{var} Rolling Mean’)
plt.plot(time, data[f’{var}_rolling_var’], label=f’{var} Rolling Variance’)
plt.xlabel(‘Time’)
plt.ylabel(‘Value’)
plt.title(‘Rolling Statistics’)
plt.legend()
plt.show()
plt.figure(figsize=(12, 6))
for var in variables:
freq, power = welch(data[var].dropna(), fs=1.0) # fs=1.0 assumes 1 observation per time unit
plt.semilogy(freq, power, label=var)
plt.xlabel(‘Frequency’)
plt.ylabel(‘Power’)
plt.title(‘Power Spectral Density’)
plt.legend()
plt.show()
plt.figure(figsize=(12, 6))
for var in variables:
peaks, _ = find_peaks(data[var], prominence=1) # Adjust prominence for sensitivity
plt.plot(time, data[var], label=var)
plt.scatter(time[peaks], data[var][peaks], marker=‘x’, color=‘red’, label=f’{var} Peaks’)
plt.xlabel(‘Time’)
plt.ylabel(‘Value’)
plt.title(‘Peak Detection’)
plt.legend()
plt.show()
plt.figure(figsize=(12, 6))
for var in variables:
plt.title(f’Autocorrelation for {var}’)
autocorrelation_plot(data[var].dropna())
plt.show()
import pywt
plt.figure(figsize=(12, 6))
for var in variables:
signal = data[var].dropna()
scales = np.arange(1, 128)
coefficients, frequencies = pywt.cwt(signal, scales, ‘cmor’) # Use a complex wavelet like ‘cmor’
plt.imshow(np.abs(coefficients), extent=[0, len(signal), 1, 128],
cmap=‘viridis’, aspect=‘auto’, vmax=0.5, vmin=0)
plt.colorbar(label=‘Magnitude’)
plt.title(f’Continuous Wavelet Transform - {var}’)
plt.ylabel(‘Scale’)
plt.xlabel(‘Time’)
plt.show()
for var in variables:
data[f’{var}_zscore’] = (data[var] - data[var].rolling(window=window_size).mean()) / data[var].rolling(window=window_size).std()
plt.figure(figsize=(12, 6))
for var in variables:
plt.plot(time, data[var], label=var)
anomalies = data[data[f’{var}_zscore’].abs() > 3] # Z-score threshold
plt.scatter(anomalies[‘time’], anomalies[var], color=‘red’, label=f’{var} Anomalies’)
plt.xlabel(‘Time’)
plt.ylabel(‘Value’)
plt.title(‘Anomaly Detection Using Z-Scores’)
plt.legend()
plt.show()