| 123456789101112131415161718192021222324252627282930313233343536 |
- 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)
|