zzmez commited on
Commit
058edcf
·
1 Parent(s): 2f6c49d

feat: added tab with top lists

Browse files
Files changed (2) hide show
  1. app.py +10 -2
  2. utils/gradio_utils.py +32 -1
app.py CHANGED
@@ -2,9 +2,17 @@ import gradio as gr
2
  from utils.gradio_utils import *
3
  import os
4
 
 
 
5
  USER = os.getenv("USERNAME")
6
  PASS = os.getenv("PASSWORD")
7
 
 
 
 
 
 
 
8
  domains_template = """tenderax.com
9
  reach-fortune.com
10
  joyful-healthy-hair.com
@@ -98,8 +106,6 @@ thedropgears.com"""
98
 
99
 
100
  with gr.Blocks() as aeon:
101
-
102
-
103
  with gr.Tab(label="SWAKS"):
104
  with gr.Row():
105
  with gr.Column():
@@ -160,5 +166,7 @@ with gr.Blocks() as aeon:
160
  mix_btn.click(fn=mix, inputs=[domains_raw, output_ips, num_of_ips],\
161
  outputs=output_mix)
162
 
 
 
163
 
164
  aeon.launch(auth=(USER, PASS))
 
2
  from utils.gradio_utils import *
3
  import os
4
 
5
+
6
+
7
  USER = os.getenv("USERNAME")
8
  PASS = os.getenv("PASSWORD")
9
 
10
+ list_iface = gr.Interface(fn=compute_offer,
11
+ inputs=[gr.File(label="Upload CSV", type="file"),
12
+ gr.Slider(1, 365, value=30, step=1, label="Days", info="Number of days to look back")
13
+ ],
14
+ outputs="dataframe")
15
+
16
  domains_template = """tenderax.com
17
  reach-fortune.com
18
  joyful-healthy-hair.com
 
106
 
107
 
108
  with gr.Blocks() as aeon:
 
 
109
  with gr.Tab(label="SWAKS"):
110
  with gr.Row():
111
  with gr.Column():
 
166
  mix_btn.click(fn=mix, inputs=[domains_raw, output_ips, num_of_ips],\
167
  outputs=output_mix)
168
 
169
+ with gr.Tab(label="Top Lists"):
170
+ list_iface.render()
171
 
172
  aeon.launch(auth=(USER, PASS))
utils/gradio_utils.py CHANGED
@@ -1,5 +1,6 @@
1
  import random
2
  import ipaddress
 
3
 
4
 
5
  ### SWAKS ###
@@ -226,4 +227,34 @@ def generate_ips_per_subclass(ip_subclasses: str, num_of_ips: int) -> str:
226
 
227
  # Assuming generate_ips_per_slash24 is the same as the previously discussed generate_ips function
228
  ip_addresses.extend(generate_ips_per_slash24(ip_subclass_24, num_of_ips))
229
- return "\n".join(ip_addresses)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import random
2
  import ipaddress
3
+ import pandas as pd
4
 
5
 
6
  ### SWAKS ###
 
227
 
228
  # Assuming generate_ips_per_slash24 is the same as the previously discussed generate_ips function
229
  ip_addresses.extend(generate_ips_per_slash24(ip_subclass_24, num_of_ips))
230
+ return "\n".join(ip_addresses)
231
+
232
+
233
+ ### GENERATE TOP LISTS ###
234
+ def compute_offer(csv_file, days_lookback):
235
+ cmp_list = ['MSP', 'HOM', 'NTU', 'HCK', 'DDS', 'MNP', 'PSC', 'DTL', 'GVS', 'ANP', 'WDR', 'BSG']
236
+
237
+ #raw_df = pd.read_csv('tools/data/30.08.2023.gabriel.sabau.campanii.csv', parse_dates=['Data'])
238
+ raw_df = pd.read_csv(csv_file.name, parse_dates=['Data'])
239
+
240
+ cols = ['Campanie', 'Oferta', 'Nume', 'Server', 'User',
241
+ 'Lista Custom', 'Data', 'HClicks', 'Clicks', 'Unscribers', 'Openers',
242
+ 'Click Open', 'Leads', 'CLike', 'Complains', 'Traps', 'Send']
243
+ comcast_df = raw_df[raw_df['Nume'].str.contains('|'.join(cmp_list))]
244
+ comcast_df = comcast_df[comcast_df['Domeniu'] == 'Comcast']
245
+ comcast_df = comcast_df[cols]
246
+ comcast_df['Click Open'] = comcast_df['Click Open'].str.replace('%', '').astype(float)
247
+ exclude_list = comcast_df[comcast_df['Data'] > (pd.Timestamp('now') - pd.Timedelta(days=days_lookback))]['Oferta'].unique()
248
+ comcast_df = comcast_df[~comcast_df['Oferta'].isin(exclude_list)]
249
+ comcast_df = comcast_df[comcast_df['Send'] > 350000]
250
+ comcast_df = comcast_df[comcast_df['Lista Custom'].str.contains('open')]
251
+
252
+ comcast_df.reset_index(drop=True, inplace=True)
253
+
254
+ final_df = comcast_df.groupby(["Oferta", "Nume"])\
255
+ .agg( N=('Oferta', 'count'), send_avg=('Send', 'mean'), CO=('Click Open', 'mean'))\
256
+ .sort_values(['CO', 'N'], ascending=False)
257
+ final_df['send_avg'] = final_df['send_avg'].round(2).astype(float)
258
+ final_df.reset_index(inplace=True)
259
+
260
+ return final_df