score.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from database import MySqlDao
  2. from models.rank.data.config import OrderConfig
  3. import numpy as np
  4. from sklearn.preprocessing import StandardScaler
  5. class UserItemScore:
  6. def __init__(self, data):
  7. self._order_data = data.copy()
  8. self._load_data()
  9. def _load_data(self):
  10. """加载订单记录表"""
  11. self._order_data =self._order_data[OrderConfig.FEATURE_COLUMNS]
  12. # 数据清洗
  13. self._order_data["sale_qty"] = self._order_data["sale_qty"].fillna(0)
  14. self._order_data = self._order_data.groupby(["cust_code", "product_code"], as_index=False)["sale_qty"].sum()
  15. self._order_data = self._order_data[self._order_data["sale_qty"] != 0]
  16. # 归一化处理
  17. scaler = StandardScaler()
  18. normalized = scaler.fit_transform(self._order_data["sale_qty"].values.reshape(-1, 1))
  19. self._order_data["sale_qty"] = ((1 / (1 + np.exp(-normalized))) * 100).flatten()
  20. def generate_product_scores(self):
  21. self._order_data = self._order_data.rename(columns={'sale_qty': 'score'})
  22. self._order_data = self._order_data.sort_values(['product_code', 'score'], ascending=[True, False])
  23. self._score_data = self._order_data[['product_code', 'cust_code', 'score']]
  24. # self._score_data.to_csv(save_path, index=False, encoding="utf-8")
  25. return self._score_data
  26. if __name__ == "__main__":
  27. save_path = "./data/itemcf/scores.csv"
  28. score_utils = UserItemScore("00000000000000000000000011445301")
  29. score_utils.generate_product_scores(save_path)