Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用python创建高效快速的评分系统?_Python_Python 3.x - Fatal编程技术网

如何用python创建高效快速的评分系统?

如何用python创建高效快速的评分系统?,python,python-3.x,Python,Python 3.x,作为python项目的一部分,我需要开发一个快速高效的符号系统来对对象进行评级。简单地说,我有几个评级标准,我称之为A,B,C,C,D。。。每项标准的评分为10分 我必须评估一个字典,它的关键是符号的标准(a,B,C,D…),作为值,需要注意的值 问题是: 要评估的数据可以有几种类型:int/float/date 最高值(项目数)可获得10分 例如已售出)或在某些情况下最低(订单数量) 取消) 每个评分标准必须加权 算法必须优化和快速,以实时记录对象 因此,我开始使用JSON将我的评分标准与ev

作为python项目的一部分,我需要开发一个快速高效的符号系统来对对象进行评级。简单地说,我有几个评级标准,我称之为A,B,C,C,D。。。每项标准的评分为10分

我必须评估一个字典,它的关键是符号的标准(a,B,C,D…),作为值,需要注意的值

问题是:

  • 要评估的数据可以有几种类型:int/float/date
  • 最高值(项目数)可获得10分 例如已售出)或在某些情况下最低(订单数量) 取消)
  • 每个评分标准必须加权
  • 算法必须优化和快速,以实时记录对象
  • 因此,我开始使用JSON将我的评分标准与evaluator方法分组

    我的json文件:

    {
      "A": {
        "weighting": 2,
        "graduation": {
          "10": ["lesser_than_or_equal", 0],
          "9": ["lesser_than_or_equal", 1],
          "8": ["lesser_than_or_equal", 2],
          "7": ["lesser_than_or_equal", 3],
          "6": ["lesser_than_or_equal", 4],
          "5": ["lesser_than_or_equal", 5],
          "4": ["lesser_than_or_equal", 6],
          "3": ["lesser_than_or_equal", 7],
          "2": ["lesser_than_or_equal", 9],
          "1": ["great_than", 10]
        }
      },
      "B": {
        "weighting": 3,
        "graduation": {
          "10": ["greater_than_or_equal", 10000000],
          "9": ["greater_than_or_equal", 1000000],
          "8": ["greater_than_or_equal", 100000],
          "7": ["greater_than_or_equal", 10000],
          "6": ["greater_than_or_equal", 1000],
          "5": ["greater_than_or_equal", 100],
          "4": ["greater_than_or_equal", 50],
          "3": ["greater_than_or_equal", 30],
          "2": ["greater_than_or_equal", 20],
          "1": ["less_than", 20]
        }
      },
    
    这是我的代码:

    类表示法(对象):
    def分配符号(自我、分数、标准='A'):
    尝试:
    grade=self.get_grade_作为_标准(self.fetchScoringSystem('scoringSystem.json'),标准)
    除作为exc的例外情况外:
    logger.error('无法检索标准刻度'+criteria+':'+exc)
    其他:
    等级=等级[“毕业”]
    对于已排序的关键字(等级,关键字=int,反转=True):
    评估员,参数=等级[关键]
    如果self.\uuuu getattribute\uuuuu(评估者)(分数,参数):
    返回值(整数(关键)*整数(等级['加权]))
    其他:
    提高属性错误
    logger.error('无法使用参数'+score+param'访问函数'+evaluator+'))
    def FETCHTGRADINGSCALE(自、填充):
    导入json
    从集合导入订单
    开放式(填充“r”)为f:
    data=json.load(f,object\u pairs\u hook=OrderedDict)
    logger.info(“读取文件%s”,填充)
    返回数据
    def大于或等于(自我、分数、x):
    尝试:
    返回分数>=x
    除了作为exc的ValueError:
    logger.error('值中的错误:'+exc)
    def小于或等于(自我、分数、x):
    尝试:
    
    返回分数在这里,您描述的更多的是“成本函数”,而不是“算法”。有时,当多个KPI被塞进一个无单位的数字时,人们会称之为“绩效指标”或FoM

  • 分数为10可以指定给最高值(例如,售出的商品数量)或在某些情况下指定给最低值(订单取消数量)
  • 这没有什么意义,你需要“好”来统一地对应,比如说,高值,然后“坏”来对应低值。 最简单的修复方法是用
    (10-score)
    翻转“向后”的标准。 一旦进行了分数调整,您就可以自由地放弃当前的大/小跟踪

    我假设日期不会保持这种方式,但会转换为一个数字,如
    days\u old
    ,处理方式与其他标准非常相似

    为所有标准定义权重,并计算加权和。 小菜一碟。 从单位间隔0.中选择权重。。1、可能是最方便的。 权重不需要求和到1.0,但当人类解释输入及其对输出的贡献时,这肯定会有所帮助

    TypeError:“int”对象不可编辑

    看起来您希望解包一个2元组,但
    grades[key]
    结果只是一个整数,如
    7

    get\u grade\u for\u criteria()
    函数在返回格式正确的结果时需要小心。

    最好包含完整的错误跟踪,因此我们不会试图猜测是哪一行导致了错误或导致错误的上下文。如果错误位于将注释函数赋值给行:evaluator,param=grades[key]感谢您的帮助为什么您认为重量应该在[0.1]范围内?我不太了解目前的兴趣。做(10分)的想法很好,但在这种情况下,如何区分正常标准和“向后”标准?我只是看了一下FoMs,但找不到任何有用的信息。你有关于FoM的文章给我建议吗?记笔记后的想法是通过决策树来确定最佳对象
                    evaluator, param = grades[key]