Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -100,47 +100,60 @@ def apply_prophet(df_clean):
|
|
| 100 |
st.error("DataFrame est谩 vazio ap贸s o pr茅-processamento.")
|
| 101 |
return pd.DataFrame()
|
| 102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
# Criar um DataFrame vazio para armazenar todas as anomalias
|
| 104 |
all_anomalies = pd.DataFrame()
|
|
|
|
| 105 |
# Processar cada linha no DataFrame
|
| 106 |
for index, row in df_clean.iterrows():
|
|
|
|
|
|
|
| 107 |
data = pd.DataFrame({
|
| 108 |
-
'ds':
|
| 109 |
-
'y': row[
|
| 110 |
})
|
| 111 |
-
|
| 112 |
-
#
|
| 113 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 114 |
if data.empty or len(data) < 2:
|
| 115 |
-
|
| 116 |
continue
|
| 117 |
-
|
| 118 |
-
# Try to create and train the model
|
| 119 |
try:
|
| 120 |
-
|
|
|
|
| 121 |
model.fit(data)
|
| 122 |
except ValueError as e:
|
| 123 |
-
|
| 124 |
continue
|
| 125 |
-
|
| 126 |
# Make future predictions
|
| 127 |
future = model.make_future_dataframe(periods=12, freq='M')
|
| 128 |
forecast = model.predict(future)
|
| 129 |
-
|
| 130 |
-
#
|
| 131 |
-
|
| 132 |
-
num_forecast = len(forecast)
|
| 133 |
-
real_values = list(data['y']) + [None] * (num_forecast - num_real)
|
| 134 |
forecast['real'] = real_values
|
| 135 |
anomalies = forecast[(forecast['real'] < forecast['yhat_lower']) | (forecast['real'] > forecast['yhat_upper'])]
|
| 136 |
-
|
| 137 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
anomalies['group'] = row['Rotulo']
|
| 139 |
-
|
| 140 |
-
# Append anomalies to the all_anomalies DataFrame
|
| 141 |
all_anomalies = pd.concat([all_anomalies, anomalies[['ds', 'real', 'group']]], ignore_index=True)
|
| 142 |
|
| 143 |
-
#
|
| 144 |
return all_anomalies
|
| 145 |
|
| 146 |
tab1, tab2 = st.tabs(["Meta Prophet", "Microsoft TAPEX"])
|
|
|
|
| 100 |
st.error("DataFrame est谩 vazio ap贸s o pr茅-processamento.")
|
| 101 |
return pd.DataFrame()
|
| 102 |
|
| 103 |
+
# Debugging: Check structure of df_clean
|
| 104 |
+
st.write("Estrutura do DataFrame df_clean:")
|
| 105 |
+
st.write(df_clean)
|
| 106 |
+
|
| 107 |
# Criar um DataFrame vazio para armazenar todas as anomalias
|
| 108 |
all_anomalies = pd.DataFrame()
|
| 109 |
+
|
| 110 |
# Processar cada linha no DataFrame
|
| 111 |
for index, row in df_clean.iterrows():
|
| 112 |
+
# Extract timestamp and value columns
|
| 113 |
+
date_columns = [col for col in df_clean.columns if isinstance(col, pd.Timestamp)]
|
| 114 |
data = pd.DataFrame({
|
| 115 |
+
'ds': date_columns,
|
| 116 |
+
'y': row[date_columns].values
|
| 117 |
})
|
| 118 |
+
|
| 119 |
+
# Debugging: Check the data passed into Prophet
|
| 120 |
+
st.write(f"Dados para Prophet - Grupo {row['Rotulo']}:")
|
| 121 |
+
st.write(data)
|
| 122 |
+
|
| 123 |
+
# Remove rows where 'y' is zero or missing
|
| 124 |
+
data = data[data['y'] > 0].dropna().reset_index(drop=True)
|
| 125 |
+
|
| 126 |
+
# Ensure there's enough data for Prophet to run
|
| 127 |
if data.empty or len(data) < 2:
|
| 128 |
+
st.write(f"Pular grupo {row['Rotulo']} por n茫o ter observa莽玫es suficientes.")
|
| 129 |
continue
|
| 130 |
+
|
|
|
|
| 131 |
try:
|
| 132 |
+
# Create and fit the Prophet model
|
| 133 |
+
model = Prophet(interval_width=0.95)
|
| 134 |
model.fit(data)
|
| 135 |
except ValueError as e:
|
| 136 |
+
st.write(f"Pular grupo {row['Rotulo']} devido ao erro: {e}")
|
| 137 |
continue
|
| 138 |
+
|
| 139 |
# Make future predictions
|
| 140 |
future = model.make_future_dataframe(periods=12, freq='M')
|
| 141 |
forecast = model.predict(future)
|
| 142 |
+
|
| 143 |
+
# Add real values and calculate anomalies
|
| 144 |
+
real_values = list(data['y']) + [None] * (len(forecast) - len(data))
|
|
|
|
|
|
|
| 145 |
forecast['real'] = real_values
|
| 146 |
anomalies = forecast[(forecast['real'] < forecast['yhat_lower']) | (forecast['real'] > forecast['yhat_upper'])]
|
| 147 |
+
|
| 148 |
+
# Debugging: Check the anomalies detected
|
| 149 |
+
st.write(f"Anomalias detectadas para o grupo {row['Rotulo']}:")
|
| 150 |
+
st.write(anomalies)
|
| 151 |
+
|
| 152 |
+
# Add group label and append anomalies to all_anomalies DataFrame
|
| 153 |
anomalies['group'] = row['Rotulo']
|
|
|
|
|
|
|
| 154 |
all_anomalies = pd.concat([all_anomalies, anomalies[['ds', 'real', 'group']]], ignore_index=True)
|
| 155 |
|
| 156 |
+
# Return the dataframe of all anomalies
|
| 157 |
return all_anomalies
|
| 158 |
|
| 159 |
tab1, tab2 = st.tabs(["Meta Prophet", "Microsoft TAPEX"])
|