Spaces:
Runtime error
Runtime error
import gradio as gr | |
from huggingface_hub import from_pretrained_keras | |
import pandas as pd | |
import numpy as np | |
import json | |
from matplotlib import pyplot as plt | |
f = open('scaler.json') | |
scaler = json.load(f) | |
TIME_STEPS = 288 | |
# Generated training sequences for use in the model. | |
def create_sequences(values, time_steps=TIME_STEPS): | |
output = [] | |
for i in range(len(values) - time_steps + 1): | |
output.append(values[i : (i + time_steps)]) | |
return np.stack(output) | |
def normalize_data(data): | |
df_test_value = (data - scaler["mean"]) / scaler["std"] | |
return df_test_value | |
def plot_test_data(df_test_value): | |
fig, ax = plt.subplots(figsize=(12, 6)) | |
df_test_value.plot(legend=False, ax=ax) | |
ax.set_xlabel("Time") | |
ax.set_ylabel("Value") | |
ax.set_title("Input Test Data") | |
return fig | |
def get_anomalies(df_test_value): | |
# Create sequences from test values. | |
x_test = create_sequences(df_test_value.values) | |
model = from_pretrained_keras("keras-io/timeseries-anomaly-detection") | |
# Get test MAE loss. | |
x_test_pred = model.predict(x_test) | |
test_mae_loss = np.mean(np.abs(x_test_pred - x_test), axis=1) | |
test_mae_loss = test_mae_loss.reshape((-1)) | |
# Detect all the samples which are anomalies. | |
anomalies = test_mae_loss > scaler["threshold"] | |
return anomalies | |
def plot_anomalies(df_test_value, data, anomalies): | |
# data i is an anomaly if samples [(i - timesteps + 1) to (i)] are anomalies | |
anomalous_data_indices = [] | |
for data_idx in range(TIME_STEPS - 1, len(df_test_value) - TIME_STEPS + 1): | |
if np.all(anomalies[data_idx - TIME_STEPS + 1 : data_idx]): | |
anomalous_data_indices.append(data_idx) | |
df_subset = data.iloc[anomalous_data_indices] | |
fig, ax = plt.subplots(figsize=(12, 6)) | |
data.plot(legend=False, ax=ax) | |
df_subset.plot(legend=False, ax=ax, color="r") | |
ax.set_xlabel("Time") | |
ax.set_ylabel("Value") | |
ax.set_title("Anomalous Data Points") | |
return fig | |
def master(file): | |
# read file | |
data = pd.read_csv(file, parse_dates=True, index_col="timestamp") | |
df_test_value = normalize_data(data) | |
# plot input test data | |
plot1 = plot_test_data(df_test_value) | |
# predict | |
anomalies = get_anomalies(df_test_value) | |
#plot anomalous data points | |
plot2 = plot_anomalies(df_test_value, data, anomalies) | |
return plot2 | |
outputs = gr.outputs.Image() | |
iface = gr.Interface( | |
fn=master, | |
inputs=gr.inputs.File(label="CSV File"), | |
outputs=outputs, | |
examples=["art_daily_jumpsup.csv"], | |
title="Timeseries Anomaly Detection Using an Autoencoder", | |
description="Anomaly detection of timeseries data." | |
) | |
iface.launch() | |