DHEIVER commited on
Commit
26249e1
1 Parent(s): 010d91e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -47
app.py CHANGED
@@ -1,61 +1,27 @@
1
  import gradio as gr
2
  import pandas as pd
3
- import numpy as np
4
- import matplotlib.pyplot as plt
5
 
6
- def detect_anomalies(series, window_size=7, threshold=2.5):
7
- # Calculate the rolling mean and standard deviation using the specified window size
8
- rolling_mean = series.rolling(window=window_size, center=True).mean()
9
- rolling_std = series.rolling(window=window_size, center=True).std()
10
 
11
- # Calculate the z-score for each data point
12
- z_scores = np.abs((series - rolling_mean) / rolling_std)
13
 
14
- # Detect anomalies based on the threshold
15
- anomalies = series[z_scores > threshold]
16
- anomaly_indices = anomalies.index.tolist()
17
 
18
- return anomaly_indices
19
-
20
- def plot_anomalies(series, anomalies):
21
- plt.figure(figsize=(12, 6))
22
- plt.plot(series, label='Original Series')
23
- plt.scatter(anomalies, series[anomalies], color='red', label='Anomalies')
24
- plt.legend()
25
- plt.title('Time Series with Anomalies')
26
- plt.xlabel('Date')
27
- plt.ylabel('Value')
28
- plt.show()
29
-
30
- # Função para o Gradio
31
- def anomaly_detection_app(time_series_txt, window_size=7, threshold=2.5):
32
- # Carregar a série temporal a partir do arquivo de texto
33
- df = pd.read_csv(time_series_txt, header=None, names=["Date", "Value"])
34
- df['Date'] = pd.to_datetime(df['Date'])
35
- df = df.set_index('Date')
36
-
37
- # Detectar anomalias na série temporal usando a média móvel
38
- anomaly_indices = detect_anomalies(df['Value'], window_size=window_size, threshold=threshold)
39
-
40
- # Plotar a série temporal com as anomalias destacadas
41
- plot_anomalies(df['Value'], anomaly_indices)
42
-
43
- # Retornar os pontos de anomalia como um dataframe
44
- anomaly_points = pd.DataFrame({'Date': df.index[anomaly_indices], 'Value': df['Value'][anomaly_indices]})
45
-
46
- return anomaly_points
47
 
48
  # Interface do Gradio
49
  iface = gr.Interface(
50
- fn=anomaly_detection_app,
51
- inputs=[
52
- gr.inputs.File(label="Carregar série temporal (TXT)"),
53
- gr.RangedSlider(minimum=1, maximum=30, default=7, label="Tamanho da janela da média móvel"),
54
- gr.RangedSlider(minimum=0.1, maximum=5, default=2.5, label="Threshold para anomalias (em desvios-padrão)")
55
- ],
56
  outputs=gr.outputs.Dataframe(type="pandas", label="Pontos de Anomalia"),
57
  title="Análise de Anomalias em Séries Temporais",
58
- description="Este aplicativo detecta anomalias em uma série temporal carregada através de um arquivo de texto (TXT) usando a média móvel.",
59
  live=True
60
  )
61
 
 
1
  import gradio as gr
2
  import pandas as pd
 
 
3
 
4
+ # Função para detectar anomalias
5
+ def detect_anomalies(file_path):
6
+ # Carregue o arquivo txt para um DataFrame
7
+ df = pd.read_csv(file_path, sep=",")
8
 
9
+ # Calcule a diferença absoluta entre cada valor e o valor médio
10
+ df["delta"] = abs(df["value"] - df["value"].mean())
11
 
12
+ # Encontre os valores com a maior diferença absoluta
13
+ anomalies = df.loc[df["delta"] > df["delta"].quantile(0.95)]
 
14
 
15
+ # Retorne os valores anômalos como um dataframe
16
+ return anomalies
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  # Interface do Gradio
19
  iface = gr.Interface(
20
+ fn=detect_anomalies,
21
+ inputs=gr.inputs.File(label="Carregar série temporal (TXT)"),
 
 
 
 
22
  outputs=gr.outputs.Dataframe(type="pandas", label="Pontos de Anomalia"),
23
  title="Análise de Anomalias em Séries Temporais",
24
+ description="Este aplicativo detecta anomalias em uma série temporal carregada através de um arquivo de texto (TXT).",
25
  live=True
26
  )
27