| 12345678910111213141516171819202122232425262728293031323334353637 |
- 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, city_uuid):
- self._dao = MySqlDao()
- self._load_data(city_uuid)
-
- def _load_data(self, city_uuid):
- """加载订单记录表"""
- print("item-cf: 正在加载order_info...")
- self._order_data = self._dao.load_order_data(city_uuid)
- 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"].sum()
- 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, save_path):
- 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")
-
-
- if __name__ == "__main__":
- save_path = "./data/itemcf/scores.csv"
- score_utils = UserItemScore("00000000000000000000000011445301")
- score_utils.generate_product_scores(save_path)
|