|  | @@ -76,12 +76,13 @@ class Mvp:
 | 
	
		
			
				|  |  |          self.shangju_db = MysqlDB('shangju')
 | 
	
		
			
				|  |  |          self.marketing_db = MysqlDB('bi_report')
 | 
	
		
			
				|  |  |          # self.shangju_db.truncate('mvp_standard_score')
 | 
	
		
			
				|  |  | -        self.tag_data = ExcelUtil(path=path).init_mvp_data()
 | 
	
		
			
				|  |  | -        self.crowd_info = ExcelUtil(path=path, sheet_name='选项-人群分类对应表').init_crowd_info()
 | 
	
		
			
				|  |  | +        self.tag_data = ExcelUtil(file_name=path).init_mvp_data()
 | 
	
		
			
				|  |  | +        self.crowd_info = ExcelUtil(file_name=path, sheet_name='选项-人群分类对应表').init_crowd_info()
 | 
	
		
			
				|  |  |          self.citys = self.init_city()
 | 
	
		
			
				|  |  |          self.age = self.init_age()
 | 
	
		
			
				|  |  |          self.people_sub_option_ids = self.marketing_db.select(self.sql_10)
 | 
	
		
			
				|  |  |          self.crowd_contain_sub_option_ids = self.get_crowd_contain_sub_option_ids()
 | 
	
		
			
				|  |  | +        self.module_scores = ExcelUtil(file_name='set-behavior-tag.xlsx', sheet_name='算法关系表').init_module_info()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def init_city(self):
 | 
	
		
			
				|  |  |          """
 | 
	
	
		
			
				|  | @@ -111,7 +112,9 @@ class Mvp:
 | 
	
		
			
				|  |  |          #             datas.append([question, option, data[0][3], data[0][1], key, corr])
 | 
	
		
			
				|  |  |          # self.shangju_db.truncate('mvp_question_classification')
 | 
	
		
			
				|  |  |          # self.shangju_db.add_some(self.sql_3, datas)
 | 
	
		
			
				|  |  | -        result = self.city_age_crowd(city, age, crowd)
 | 
	
		
			
				|  |  | +        scores_behavioral = self.city_age_crowd(city, age, crowd)
 | 
	
		
			
				|  |  | +        scores_module = self.module_score(crowd, city, age, scores_behavioral)
 | 
	
		
			
				|  |  | +        result = {'行为兴趣分值': scores_behavioral, '模型分值': scores_module}
 | 
	
		
			
				|  |  |          print('update finished!!!')
 | 
	
		
			
				|  |  |          return result
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -133,6 +136,27 @@ class Mvp:
 | 
	
		
			
				|  |  |                              scores = self.calculation_standard_score(datas, city, age, crowd_type)
 | 
	
		
			
				|  |  |                              scores_all.extend(scores)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def module_score(self, crowd, city, age, scores):
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +            模块分数计算
 | 
	
		
			
				|  |  | +            城市 年龄 人群分类 模块名称 分数
 | 
	
		
			
				|  |  | +        :return:
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        modules = self.module_scores[crowd]
 | 
	
		
			
				|  |  | +        result = []
 | 
	
		
			
				|  |  | +        for key in modules.keys():
 | 
	
		
			
				|  |  | +            values = modules[key]
 | 
	
		
			
				|  |  | +            module_name = key
 | 
	
		
			
				|  |  | +            score = 0
 | 
	
		
			
				|  |  | +            for value in values:
 | 
	
		
			
				|  |  | +                behavioral_name = value[0]
 | 
	
		
			
				|  |  | +                weight = float(value[2])
 | 
	
		
			
				|  |  | +                standard_score = [x[4] for x in scores if x[2] == behavioral_name]
 | 
	
		
			
				|  |  | +                if len(standard_score) > 0:
 | 
	
		
			
				|  |  | +                    score += standard_score[0] * weight
 | 
	
		
			
				|  |  | +            result.append([city, age, crowd, module_name, score])
 | 
	
		
			
				|  |  | +        return result
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def insert(self, scores):
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  |              计算数据写入数据库中,供接口查看
 | 
	
	
		
			
				|  | @@ -306,9 +330,9 @@ class ExcelUtil:
 | 
	
		
			
				|  |  |          解析excel文件
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def __init__(self, sheet_name=None, path=None):
 | 
	
		
			
				|  |  | -        if path:
 | 
	
		
			
				|  |  | -            self.path = path
 | 
	
		
			
				|  |  | +    def __init__(self, sheet_name=None, file_name=None):
 | 
	
		
			
				|  |  | +        if file_name:
 | 
	
		
			
				|  |  | +            self.path = os.path.join(self.dir_path, file_name)
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  |              self.path = os.path.join(self.dir_path, 'mvp.xlsx')
 | 
	
		
			
				|  |  |          if sheet_name:
 | 
	
	
		
			
				|  | @@ -386,6 +410,34 @@ class ExcelUtil:
 | 
	
		
			
				|  |  |              result[name] = orders
 | 
	
		
			
				|  |  |          return result
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def init_module_info(self):
 | 
	
		
			
				|  |  | +        work_sheet = self.read_excel_by_ox()
 | 
	
		
			
				|  |  | +        max_column = work_sheet.max_column
 | 
	
		
			
				|  |  | +        rows = [row for row in work_sheet.rows][3:]
 | 
	
		
			
				|  |  | +        crowd_name = None
 | 
	
		
			
				|  |  | +        datas = []
 | 
	
		
			
				|  |  | +        for row in rows:
 | 
	
		
			
				|  |  | +            crowd = row[1].value
 | 
	
		
			
				|  |  | +            if crowd is not None:
 | 
	
		
			
				|  |  | +                crowd_name = crowd
 | 
	
		
			
				|  |  | +            behavior = row[2].value
 | 
	
		
			
				|  |  | +            score = row[4].value
 | 
	
		
			
				|  |  | +            for index in range(6, max_column - 1, 2):
 | 
	
		
			
				|  |  | +                module_name = row[index].value
 | 
	
		
			
				|  |  | +                if module_name is not None:
 | 
	
		
			
				|  |  | +                    weight = row[index + 1].value
 | 
	
		
			
				|  |  | +                    datas.append([crowd_name, behavior, score, module_name, weight])
 | 
	
		
			
				|  |  | +        results = {}
 | 
	
		
			
				|  |  | +        for name, items in groupby(datas, key=lambda obj: obj[0]):
 | 
	
		
			
				|  |  | +            sub_results = {}
 | 
	
		
			
				|  |  | +            for name_1, itmes_1 in groupby(items, key=lambda obj: obj[3]):
 | 
	
		
			
				|  |  | +                sub_data = []
 | 
	
		
			
				|  |  | +                for n in itmes_1:
 | 
	
		
			
				|  |  | +                    sub_data.append([n[1], n[2], n[4]])
 | 
	
		
			
				|  |  | +                sub_results[name_1] = sub_data
 | 
	
		
			
				|  |  | +            results[name] = sub_results
 | 
	
		
			
				|  |  | +        return results
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class MysqlDB:
 | 
	
		
			
				|  |  |      """
 | 
	
	
		
			
				|  | @@ -441,6 +493,10 @@ class MysqlDB:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @app.route('/behavioral_statistics', methods=['GET', 'POST'])
 | 
	
		
			
				|  |  |  def behavioral_statistics():
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +        父选项对应的标准化值
 | 
	
		
			
				|  |  | +    :return:
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  |      city = request.args.get('city', default=None, type=str)
 | 
	
		
			
				|  |  |      age = request.args.get('age', default=None, type=str)
 | 
	
		
			
				|  |  |      crowd = request.args.get('crowd', default=None, type=str)
 | 
	
	
		
			
				|  | @@ -454,6 +510,10 @@ def behavioral_statistics():
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @app.route('/infos', methods=["GET", 'POST'])
 | 
	
		
			
				|  |  |  def get_city_age_crowd():
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +        测试数据中城市 年龄 人群分类信息
 | 
	
		
			
				|  |  | +    :return:
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  |      mvp = Mvp()
 | 
	
		
			
				|  |  |      infos = {'城市': mvp.citys, '年龄段': mvp.age}
 | 
	
		
			
				|  |  |      mvp.shangju_db.close()
 | 
	
	
		
			
				|  | @@ -463,6 +523,10 @@ def get_city_age_crowd():
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @app.route('/crowd_people', methods=['GET', 'POST'])
 | 
	
		
			
				|  |  |  def crowd_people():
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +        人群分类人数统计
 | 
	
		
			
				|  |  | +    :return:
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  |      mvp = Mvp()
 | 
	
		
			
				|  |  |      people_count = mvp.get_crowd_people()
 | 
	
		
			
				|  |  |      mvp.shangju_db.close()
 | 
	
	
		
			
				|  | @@ -470,6 +534,16 @@ def crowd_people():
 | 
	
		
			
				|  |  |      return json.dumps(people_count, ensure_ascii=False)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +@app.route('/set_behavior_tag', methods=['GET', 'POST'])
 | 
	
		
			
				|  |  | +def set_behavior_tag():
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +        模块标准化值
 | 
	
		
			
				|  |  | +    :return:
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +    mvp = Mvp()
 | 
	
		
			
				|  |  | +    return json.dumps(mvp.module_scores, ensure_ascii=False)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  if __name__ == '__main__':
 | 
	
		
			
				|  |  |      app.run(
 | 
	
		
			
				|  |  |          host='0.0.0.0',
 |