首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中创建高效快速的评分系统?

如何在python中创建高效快速的评分系统?
EN

Stack Overflow用户
提问于 2019-03-27 06:43:03
回答 1查看 459关注 0票数 -3

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

作为值,表示要注意的值。

问题是:

因此,我开始使用JSON来使用evaluator方法对我的评分标准进行分组。

我的json文件:

代码语言:javascript
复制
{
  "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]
    }
  },

下面是我的代码:

代码语言:javascript
复制
class Notation(object):
    def assign_notation(self, score, criterion='A'):
        try:
            grade = self.get_grade_for_criterion(self.fetchScoringSystem('scoringSystem.json'), criterion)
        except Exception as exc:
            logger.error('Impossible to retrieve the criteria scale '+criterion+' : ' + exc)
        else:
            grades = grade['graduation']
            for key in sorted(grades, key=int, reverse=True):
                evaluator, param = grades[key]
                if self.__getattribute__(evaluator)(score, param):
                    return (int(key) * int(grade['weighting']))
                else:
                    raise AttributeError
                    logger.error('Unable to access the function '+evaluator+' with the parameters '+ score + param)

    def fetchGradingScale(self, infile):
        import json
        from collections import OrderedDict

        with open(infile, 'r') as f:
            data = json.load(f, object_pairs_hook=OrderedDict)
        logger.info("Read file %s", infile)
        return data

    def greater_than_or_equal(self, score, x):
        try:
            return score >= x
        except ValueError as exc:
            logger.error('Error in values :' + exc)

    def lesser_than_or_equal(self, score, x):
        try:
            return score <= x
        except ValueError as exc:
            logger.error('Error in values :' + exc)

目前,python返回以下错误: TypeError:'int‘对象不可迭代

EN

回答 1

Stack Overflow用户

发布于 2019-03-27 08:46:27

在这里,你描述的是一个“成本函数”,而不是一个“算法”。有时,当几个KPI被塞进一个没有单位的数字时,人们会把它称为“品质因数”或FoM。

可以将得分10分配给最高值(例如,售出的商品数量)或在某些情况下分配给最低值(number of

这没有什么意义,你需要“好”一致地对应,比如说,高值,然后“坏”对应低值。最简单的解决方法是用(10 - score)翻转它,以获得“向后”的条件。一旦进行了分数调整,你就可以自由地放弃当前对较大/较小的跟踪。

我假设日期不会保持这种方式,而是会转换为一个数字,就像days_old一样,它的处理方式与其他条件非常相似。

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

类型错误:“int”对象不可迭代

代码语言:javascript
复制
                evaluator, param = grades[key]

看起来你希望解开一个二元组,但是像7一样,grades[key]只是一个整数。get_grade_for_criterion()函数需要注意返回格式正确的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55367224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档