Spaces:
Sleeping
Sleeping
Update helper.py
Browse files
helper.py
CHANGED
@@ -11,24 +11,12 @@ import pandas as pd
|
|
11 |
from sklearn.preprocessing import MinMaxScaler
|
12 |
|
13 |
def assign_main_accounts(creators_file, chatter_files):
|
14 |
-
"""
|
15 |
-
Process creators and chatter files to assign main accounts to chatters and prepare data for scheduling.
|
16 |
-
Returns the updated chatter files, processed creator file, and combined assignments for preview.
|
17 |
-
"""
|
18 |
-
# Load and process creators data
|
19 |
creators = pd.read_excel(creators_file)
|
20 |
creators.columns = creators.columns.str.strip()
|
21 |
|
22 |
-
# Ensure required columns
|
23 |
-
required_columns = ["Creator", "Total earnings", "Subscription", "Total active fans"]
|
24 |
-
missing_columns = [col for col in required_columns if col not in creators.columns]
|
25 |
-
if missing_columns:
|
26 |
-
raise KeyError(f"Missing required columns in creators file: {missing_columns}")
|
27 |
-
|
28 |
-
# Normalize and rank creators
|
29 |
creators["Total earnings"] = creators["Total earnings"].replace("[\$,]", "", regex=True).astype(float)
|
30 |
creators["Subscription"] = creators["Subscription"].replace("[\$,]", "", regex=True).astype(float)
|
31 |
-
creators["
|
32 |
|
33 |
scaler = MinMaxScaler()
|
34 |
creators[["Earnings_Normalized", "Subscriptions_Normalized"]] = scaler.fit_transform(
|
@@ -39,39 +27,20 @@ def assign_main_accounts(creators_file, chatter_files):
|
|
39 |
0.7 * creators["Earnings_Normalized"] + 0.3 * creators["Subscriptions_Normalized"]
|
40 |
) * creators["Penalty Factor"]
|
41 |
creators["Rank"] = creators["Score"].rank(ascending=False)
|
42 |
-
|
43 |
creators = creators.sort_values(by="Rank").reset_index(drop=True)
|
44 |
|
45 |
-
|
46 |
-
processed_creator_file = creators[["Creator", "Total active fans"]].rename(
|
47 |
-
columns={"Total active fans": "ActiveFans"}
|
48 |
-
)
|
49 |
|
50 |
-
# Assign main accounts to chatters
|
51 |
updated_chatter_files = []
|
52 |
-
|
53 |
|
54 |
for idx, chatter_file in enumerate(chatter_files):
|
55 |
-
shift_name = ["Overnight", "Day", "Prime"][idx]
|
56 |
chatters = pd.read_excel(chatter_file)
|
57 |
-
chatters
|
58 |
-
|
59 |
-
if "Final Rating" not in chatters.columns:
|
60 |
-
raise KeyError(f"'Final Rating' column is missing in {chatter_file}")
|
61 |
-
|
62 |
-
chatters = chatters.sort_values(by="Final Rating", ascending=False).reset_index(drop=True)
|
63 |
-
num_chatters = len(chatters)
|
64 |
-
top_creators = creators.iloc[:num_chatters]
|
65 |
-
chatters["Main Account"] = top_creators["Creator"].values
|
66 |
-
chatters["Shift"] = shift_name
|
67 |
-
|
68 |
updated_chatter_files.append(chatters)
|
69 |
-
|
70 |
-
|
71 |
-
# Combine all assignments for display
|
72 |
-
combined_assignments_df = pd.concat(combined_assignments, ignore_index=True)
|
73 |
|
74 |
-
return updated_chatter_files, processed_creator_file,
|
75 |
|
76 |
|
77 |
|
|
|
11 |
from sklearn.preprocessing import MinMaxScaler
|
12 |
|
13 |
def assign_main_accounts(creators_file, chatter_files):
|
|
|
|
|
|
|
|
|
|
|
14 |
creators = pd.read_excel(creators_file)
|
15 |
creators.columns = creators.columns.str.strip()
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
creators["Total earnings"] = creators["Total earnings"].replace("[\$,]", "", regex=True).astype(float)
|
18 |
creators["Subscription"] = creators["Subscription"].replace("[\$,]", "", regex=True).astype(float)
|
19 |
+
creators["ActiveFans"] = pd.to_numeric(creators["ActiveFans"], errors="coerce").fillna(0)
|
20 |
|
21 |
scaler = MinMaxScaler()
|
22 |
creators[["Earnings_Normalized", "Subscriptions_Normalized"]] = scaler.fit_transform(
|
|
|
27 |
0.7 * creators["Earnings_Normalized"] + 0.3 * creators["Subscriptions_Normalized"]
|
28 |
) * creators["Penalty Factor"]
|
29 |
creators["Rank"] = creators["Score"].rank(ascending=False)
|
|
|
30 |
creators = creators.sort_values(by="Rank").reset_index(drop=True)
|
31 |
|
32 |
+
processed_creator_file = creators[["Creator", "ActiveFans"]]
|
|
|
|
|
|
|
33 |
|
|
|
34 |
updated_chatter_files = []
|
35 |
+
assignments = []
|
36 |
|
37 |
for idx, chatter_file in enumerate(chatter_files):
|
|
|
38 |
chatters = pd.read_excel(chatter_file)
|
39 |
+
chatters["Main Account"] = creators.iloc[:len(chatters)]["Creator"].values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
updated_chatter_files.append(chatters)
|
41 |
+
assignments.append(chatters)
|
|
|
|
|
|
|
42 |
|
43 |
+
return updated_chatter_files, processed_creator_file, pd.concat(assignments)
|
44 |
|
45 |
|
46 |
|