DavMelchi commited on
Commit
4bd0342
Β·
1 Parent(s): 95972c3

adding pre and post average analysis

Browse files
Files changed (1) hide show
  1. apps/kpi_analysis/trafic_analysis.py +69 -16
apps/kpi_analysis/trafic_analysis.py CHANGED
@@ -145,30 +145,69 @@ def merge_and_compare(df_2g, df_3g, df_lte, pre_range, post_range, last_period_r
145
 
146
  comparison = df[df["period"].isin(["pre", "post"])]
147
 
148
- pivot = (
149
  comparison.groupby(["code", "period"])[
150
  ["total_voice_trafic", "total_data_trafic"]
151
  ]
152
  .sum()
153
  .unstack()
154
  )
155
- pivot.columns = [f"{metric}_{period}" for metric, period in pivot.columns]
156
- pivot = pivot.reset_index()
157
 
158
  # Differences
159
- pivot["total_voice_trafic_diff"] = (
160
- pivot["total_voice_trafic_post"] - pivot["total_voice_trafic_pre"]
161
  )
162
- pivot["total_data_trafic_diff"] = (
163
- pivot["total_data_trafic_post"] - pivot["total_data_trafic_pre"]
164
  )
165
 
166
  for metric in ["total_voice_trafic", "total_data_trafic"]:
167
- pivot[f"{metric}_diff_pct"] = (
168
- (pivot.get(f"{metric}_post", 0) - pivot.get(f"{metric}_pre", 0))
169
- / pivot.get(f"{metric}_pre", 1)
170
  ) * 100
171
- return df, last_period, pivot.round(2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
 
173
 
174
  def monthly_data_analysis(df: pd.DataFrame) -> pd.DataFrame:
@@ -261,8 +300,15 @@ if st.button("πŸ” Run Analysis"):
261
  df_3g_clean = preprocess_3g(df_3g)
262
  df_lte_clean = preprocess_lte(df_lte)
263
 
264
- full_df, last_period, summary_df = merge_and_compare(
265
- df_2g_clean, df_3g_clean, df_lte_clean, pre_range, post_range, last_period_range
 
 
 
 
 
 
 
266
  )
267
 
268
  monthly_voice_df, monthly_data_df = monthly_data_analysis(full_df)
@@ -273,7 +319,7 @@ if st.button("πŸ” Run Analysis"):
273
  # πŸ” Display Summary
274
  st.success("βœ… Analysis completed")
275
  st.subheader("πŸ“ˆ Summary Analysis Pre / Post")
276
- st.dataframe(summary_df)
277
  TraficAnalysis.last_period_df = last_period
278
 
279
  #######################################################################################################""
@@ -444,10 +490,17 @@ if TraficAnalysis.last_period_df is not None:
444
  st.plotly_chart(fig)
445
 
446
  final_dfs = convert_dfs(
447
- [full_df, summary_df, monthly_voice_df, monthly_data_df],
 
 
 
 
 
 
448
  [
449
  "Global_Trafic_Analysis",
450
- "Pre_Post_analysis",
 
451
  "Monthly_voice_analysis",
452
  "Monthly_data_analysis",
453
  ],
 
145
 
146
  comparison = df[df["period"].isin(["pre", "post"])]
147
 
148
+ sum_pivot = (
149
  comparison.groupby(["code", "period"])[
150
  ["total_voice_trafic", "total_data_trafic"]
151
  ]
152
  .sum()
153
  .unstack()
154
  )
155
+ sum_pivot.columns = [f"{metric}_{period}" for metric, period in sum_pivot.columns]
156
+ sum_pivot = sum_pivot.reset_index()
157
 
158
  # Differences
159
+ sum_pivot["total_voice_trafic_diff"] = (
160
+ sum_pivot["total_voice_trafic_post"] - sum_pivot["total_voice_trafic_pre"]
161
  )
162
+ sum_pivot["total_data_trafic_diff"] = (
163
+ sum_pivot["total_data_trafic_post"] - sum_pivot["total_data_trafic_pre"]
164
  )
165
 
166
  for metric in ["total_voice_trafic", "total_data_trafic"]:
167
+ sum_pivot[f"{metric}_diff_pct"] = (
168
+ (sum_pivot.get(f"{metric}_post", 0) - sum_pivot.get(f"{metric}_pre", 0))
169
+ / sum_pivot.get(f"{metric}_pre", 1)
170
  ) * 100
171
+
172
+ avg_pivot = (
173
+ comparison.groupby(["code", "period"])[
174
+ ["total_voice_trafic", "total_data_trafic"]
175
+ ]
176
+ .mean()
177
+ .unstack()
178
+ )
179
+ avg_pivot.columns = [f"{metric}_{period}" for metric, period in avg_pivot.columns]
180
+ avg_pivot = avg_pivot.reset_index()
181
+
182
+ # Differences
183
+ avg_pivot["total_voice_trafic_diff"] = (
184
+ avg_pivot["total_voice_trafic_post"] - avg_pivot["total_voice_trafic_pre"]
185
+ )
186
+ avg_pivot["total_data_trafic_diff"] = (
187
+ avg_pivot["total_data_trafic_post"] - avg_pivot["total_data_trafic_pre"]
188
+ )
189
+
190
+ for metric in ["total_voice_trafic", "total_data_trafic"]:
191
+ avg_pivot[f"{metric}_diff_pct"] = (
192
+ (avg_pivot.get(f"{metric}_post", 0) - avg_pivot.get(f"{metric}_pre", 0))
193
+ / avg_pivot.get(f"{metric}_pre", 1)
194
+ ) * 100
195
+
196
+ # rename avg_pivot columns
197
+ avg_pivot = avg_pivot.rename(
198
+ columns={
199
+ "total_voice_trafic_pre": "avg_voice_trafic_pre",
200
+ "total_voice_trafic_post": "avg_voice_trafic_post",
201
+ "total_voice_trafic_diff": "avg_voice_trafic_diff",
202
+ "total_voice_trafic_diff_pct": "avg_voice_trafic_diff_pct",
203
+ "total_data_trafic_pre": "avg_data_trafic_pre",
204
+ "total_data_trafic_post": "avg_data_trafic_post",
205
+ "total_data_trafic_diff": "avg_data_trafic_diff",
206
+ "total_data_trafic_diff_pct": "avg_data_trafic_diff_pct",
207
+ }
208
+ )
209
+
210
+ return df, last_period, sum_pivot.round(2), avg_pivot.round(2)
211
 
212
 
213
  def monthly_data_analysis(df: pd.DataFrame) -> pd.DataFrame:
 
300
  df_3g_clean = preprocess_3g(df_3g)
301
  df_lte_clean = preprocess_lte(df_lte)
302
 
303
+ full_df, last_period, sum_pre_post_analysis, avg_pre_post_analysis = (
304
+ merge_and_compare(
305
+ df_2g_clean,
306
+ df_3g_clean,
307
+ df_lte_clean,
308
+ pre_range,
309
+ post_range,
310
+ last_period_range,
311
+ )
312
  )
313
 
314
  monthly_voice_df, monthly_data_df = monthly_data_analysis(full_df)
 
319
  # πŸ” Display Summary
320
  st.success("βœ… Analysis completed")
321
  st.subheader("πŸ“ˆ Summary Analysis Pre / Post")
322
+ st.dataframe(sum_pre_post_analysis)
323
  TraficAnalysis.last_period_df = last_period
324
 
325
  #######################################################################################################""
 
490
  st.plotly_chart(fig)
491
 
492
  final_dfs = convert_dfs(
493
+ [
494
+ full_df,
495
+ sum_pre_post_analysis,
496
+ avg_pre_post_analysis,
497
+ monthly_voice_df,
498
+ monthly_data_df,
499
+ ],
500
  [
501
  "Global_Trafic_Analysis",
502
+ "Sum_pre_post_analysis",
503
+ "Avg_pre_post_analysis",
504
  "Monthly_voice_analysis",
505
  "Monthly_data_analysis",
506
  ],