Spaces:
Sleeping
Sleeping
Update helper.py
Browse files
helper.py
CHANGED
@@ -7,49 +7,65 @@ import re
|
|
7 |
import pandas as pd
|
8 |
from sklearn.preprocessing import MinMaxScaler
|
9 |
|
10 |
-
def assign_main_accounts(
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
|
55 |
|
|
|
7 |
import pandas as pd
|
8 |
from sklearn.preprocessing import MinMaxScaler
|
9 |
|
10 |
+
def assign_main_accounts(creators_file, chatter_files):
|
11 |
+
|
12 |
+
creators = pd.read_excel(creators_file)
|
13 |
+
creators.columns = creators.columns.str.strip()
|
14 |
+
|
15 |
+
column_mapping = {
|
16 |
+
"Creator": "Creator",
|
17 |
+
"Total earnings": "Total earnings",
|
18 |
+
"Subscription": "Subscription",
|
19 |
+
"Active Fans": "ActiveFans",
|
20 |
+
"Total active fans": "ActiveFans",
|
21 |
+
}
|
22 |
+
creators.rename(columns={k: v for k, v in column_mapping.items() if k in creators.columns}, inplace=True)
|
23 |
+
|
24 |
+
required_columns = ["Creator", "Total earnings", "Subscription", "ActiveFans"]
|
25 |
+
missing_columns = [col for col in required_columns if col not in creators.columns]
|
26 |
+
if missing_columns:
|
27 |
+
raise KeyError(f"Missing required columns in creators file: {missing_columns}")
|
28 |
+
|
29 |
+
|
30 |
+
creators["Total earnings"] = creators["Total earnings"].replace("[\$,]", "", regex=True).astype(float)
|
31 |
+
creators["Subscription"] = creators["Subscription"].replace("[\$,]", "", regex=True).astype(float)
|
32 |
+
creators["ActiveFans"] = pd.to_numeric(creators["ActiveFans"], errors="coerce").fillna(0)
|
33 |
+
|
34 |
+
|
35 |
+
scaler = MinMaxScaler()
|
36 |
+
creators[["Earnings_Normalized", "Subscriptions_Normalized"]] = scaler.fit_transform(
|
37 |
+
creators[["Total earnings", "Subscription"]]
|
38 |
+
0.7 * creators["Earnings_Normalized"] + 0.3 * creators["Subscriptions_Normalized"]
|
39 |
+
) * creators["Penalty Factor"]
|
40 |
+
creators["Rank"] = creators["Score"].rank(ascending=False)
|
41 |
+
|
42 |
+
|
43 |
+
creators = creators.sort_values(by="Rank").reset_index(drop=True)
|
44 |
+
|
45 |
+
|
46 |
+
assignments = {}
|
47 |
+
for idx, chatter_file in enumerate(chatter_files):
|
48 |
+
shift_name = ["overnight", "day", "prime"][idx]
|
49 |
+
if "Final Rating" not in chatters.columns:
|
50 |
+
raise KeyError(f"'Final Rating' column is missing in {chatter_file}")
|
51 |
+
|
52 |
+
|
53 |
+
chatters = chatters.sort_values(by="Final Rating", ascending=False).reset_index(drop=True)
|
54 |
+
|
55 |
+
|
56 |
+
num_chatters = len(chatters)
|
57 |
+
creators_to_assign = creators.iloc[:num_chatters]
|
58 |
+
chatters["Main Account"] = creators_to_assign["Creator"].values
|
59 |
+
|
60 |
+
|
61 |
+
assignments[shift_name] = chatters.to_dict(orient="records")
|
62 |
+
|
63 |
+
assignments["creator_names"] = creators["Creator"].tolist()
|
64 |
+
print("DEBUG: Chatter Data with Main Account Assignments:")
|
65 |
+
print(chatters.head())
|
66 |
+
|
67 |
+
|
68 |
+
return assignments
|
69 |
|
70 |
|
71 |
|