from database import MySqlDao from models.rank.data.config import OrderConfig import numpy as np from sklearn.preprocessing import StandardScaler class UserItemScore: def __init__(self, data): self._order_data = data.copy() self._load_data() def _load_data(self): """加载订单记录表""" self._order_data =self._order_data[OrderConfig.FEATURE_COLUMNS] # 数据清洗 self._order_data["sale_qty"] = self._order_data["sale_qty"].fillna(0) self._order_data = self._order_data.groupby(["cust_code", "product_code"], as_index=False)["sale_qty"].mean() self._order_data = self._order_data[self._order_data["sale_qty"] != 0] # 归一化处理 scaler = StandardScaler() normalized = scaler.fit_transform(self._order_data["sale_qty"].values.reshape(-1, 1)) self._order_data["sale_qty"] = ((1 / (1 + np.exp(-normalized))) * 100).flatten() def generate_product_scores(self): self._order_data = self._order_data.rename(columns={'sale_qty': 'score'}) self._order_data = self._order_data.sort_values(['product_code', 'score'], ascending=[True, False]) self._score_data = self._order_data[['product_code', 'cust_code', 'score']] # self._score_data.to_csv(save_path, index=False, encoding="utf-8") return self._score_data if __name__ == "__main__": save_path = "./data/itemcf/scores.csv" score_utils = UserItemScore("00000000000000000000000011445301") score_utils.generate_product_scores(save_path)