zzmez commited on
Commit
504cdb5
·
1 Parent(s): 328f94a

feat: Add support for "Offers - IDs only" type in compute_offer function

Browse files
Files changed (2) hide show
  1. app.py +2 -2
  2. utils/gradio_utils.py +15 -5
app.py CHANGED
@@ -14,10 +14,10 @@ PASS = os.getenv("PASSWORD")
14
  # create an interface and limit output's width for the dataframe bu
15
  list_iface = gr.Interface(fn=compute_offer,
16
  inputs=[gr.File(label="Upload CSV", type="file"),
17
- gr.Slider(1, 365, value=3, step=1, label="Days", info="Number of days to look back"),
18
  gr.Slider(5000, 10000000, value=1000000, step=1, label="Minimum Sent", info="Minimum number of emails sent"),
19
  gr.Dropdown(["Comcast", "Yahoo", "Hotmail", "Aol"], value="Yahoo", label="Domain"),
20
- gr.Radio(["Newsletters", "Offers"], label="Type", value="Offers"),
21
  gr.Textbox(label="Exclude list", info="Example: INH,MNP", value="INH,DHI,HHP,RTA,JVR,HTH,FNC,SCD,ENH,WIP")],
22
  outputs="dataframe")
23
 
 
14
  # create an interface and limit output's width for the dataframe bu
15
  list_iface = gr.Interface(fn=compute_offer,
16
  inputs=[gr.File(label="Upload CSV", type="file"),
17
+ gr.Slider(0, 365, value=3, step=1, label="Days", info="Number of days to look back"),
18
  gr.Slider(5000, 10000000, value=1000000, step=1, label="Minimum Sent", info="Minimum number of emails sent"),
19
  gr.Dropdown(["Comcast", "Yahoo", "Hotmail", "Aol"], value="Yahoo", label="Domain"),
20
+ gr.Radio(["Newsletters", "Offers", 'Offers - IDs only'], label="Type", value="Offers - IDs only"),
21
  gr.Textbox(label="Exclude list", info="Example: INH,MNP", value="INH,DHI,HHP,RTA,JVR,HTH,FNC,SCD,ENH,WIP")],
22
  outputs="dataframe")
23
 
utils/gradio_utils.py CHANGED
@@ -283,7 +283,7 @@ def compute_offer(csv_file, days_lookback, min_sent, domain, offer_type, x_list)
283
  (df_all['Nume'].str.contains(r' \d{4}$')) & \
284
  (~df_all['Nume'].str.contains('TRIMITE'))
285
  ]
286
- elif offer_type == "Offers":
287
  df_all = df_all[~df_all['Nume'].str.startswith("Aeon News")]
288
  df_all = df_all[~df_all['Nume'].str.contains("NU SE TRIMITE")]
289
  df_all = df_all[~df_all['Nume'].str.contains("de testat")]
@@ -304,16 +304,26 @@ def compute_offer(csv_file, days_lookback, min_sent, domain, offer_type, x_list)
304
 
305
  if offer_type == "Newsletters":
306
  final_df = df_all.groupby(["Oferta", "Nume"])\
307
- .agg( N=('Oferta', 'count'), send_avg=('Send', 'mean'), CO=('Click Open', 'mean'))\
308
- .sort_values(['CO', 'N'], ascending=False)
309
  final_df['send_avg'] = final_df['send_avg'].astype(int)
310
  final_df['CO'] = final_df['CO'].round(2).astype(float)
311
  final_df.reset_index(inplace=True)
312
  elif offer_type == "Offers":
313
  final_df = df_all.groupby(["Oferta", "Nume"])\
314
- .agg( N=('Oferta', 'count'), send_avg=('Send', 'mean'), ECPM=('ECPM', 'mean'))\
315
- .sort_values(['ECPM', 'N'], ascending=False)
316
  final_df['send_avg'] = final_df['send_avg'].astype(int)
317
  final_df['ECPM'] = final_df['ECPM'].round(2).astype(float)
318
  final_df.reset_index(inplace=True)
 
 
 
 
 
 
 
 
 
 
319
  return final_df
 
283
  (df_all['Nume'].str.contains(r' \d{4}$')) & \
284
  (~df_all['Nume'].str.contains('TRIMITE'))
285
  ]
286
+ elif offer_type == "Offers" or offer_type == "Offers - IDs only":
287
  df_all = df_all[~df_all['Nume'].str.startswith("Aeon News")]
288
  df_all = df_all[~df_all['Nume'].str.contains("NU SE TRIMITE")]
289
  df_all = df_all[~df_all['Nume'].str.contains("de testat")]
 
304
 
305
  if offer_type == "Newsletters":
306
  final_df = df_all.groupby(["Oferta", "Nume"])\
307
+ .agg( times_sent=('Oferta', 'count'), send_avg=('Send', 'mean'), CO=('Click Open', 'mean'))\
308
+ .sort_values(['CO', 'times_sent'], ascending=False)
309
  final_df['send_avg'] = final_df['send_avg'].astype(int)
310
  final_df['CO'] = final_df['CO'].round(2).astype(float)
311
  final_df.reset_index(inplace=True)
312
  elif offer_type == "Offers":
313
  final_df = df_all.groupby(["Oferta", "Nume"])\
314
+ .agg( times_sent=('Oferta', 'count'), send_avg=('Send', 'mean'), ECPM=('ECPM', 'mean'))\
315
+ .sort_values(['ECPM', 'times_sent'], ascending=False)
316
  final_df['send_avg'] = final_df['send_avg'].astype(int)
317
  final_df['ECPM'] = final_df['ECPM'].round(2).astype(float)
318
  final_df.reset_index(inplace=True)
319
+ elif offer_type == "Offers - IDs only":
320
+ df_all['offer_id'] = df_all['Nume'].str.extract(r'(\d{3,4}$)')
321
+ final_df = df_all.groupby(["offer_id"])\
322
+ .agg( times_sent=('offer_id', 'count'), send_avg=('Send', 'mean'), ECPM=('ECPM', 'mean'))\
323
+ .sort_values(['ECPM', 'times_sent'], ascending=False)
324
+ final_df['send_avg'] = final_df['send_avg'].astype(int)
325
+ final_df['ECPM'] = final_df['ECPM'].round(2).astype(float)
326
+ final_df.reset_index(inplace=True)
327
+ else:
328
+ final_df = pd.DataFrame()
329
  return final_df