adding pre and post average analysis
Browse files
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 |
-
|
| 149 |
comparison.groupby(["code", "period"])[
|
| 150 |
["total_voice_trafic", "total_data_trafic"]
|
| 151 |
]
|
| 152 |
.sum()
|
| 153 |
.unstack()
|
| 154 |
)
|
| 155 |
-
|
| 156 |
-
|
| 157 |
|
| 158 |
# Differences
|
| 159 |
-
|
| 160 |
-
|
| 161 |
)
|
| 162 |
-
|
| 163 |
-
|
| 164 |
)
|
| 165 |
|
| 166 |
for metric in ["total_voice_trafic", "total_data_trafic"]:
|
| 167 |
-
|
| 168 |
-
(
|
| 169 |
-
/
|
| 170 |
) * 100
|
| 171 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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,
|
| 265 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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(
|
| 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 |
-
[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 448 |
[
|
| 449 |
"Global_Trafic_Analysis",
|
| 450 |
-
"
|
|
|
|
| 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 |
],
|