универсальный модуль оценки с использованием python pandas

Привет, я пытаюсь разработать общий модуль оценки для оценки учащихся на основе различных атрибутов. Я пытаюсь разработать общий метод с использованием python pandas. Ввод: кадр входных данных с идентификатором студента и UG Major и атрибутами для оценки (я назвал df_input). кадр данных, содержащий параметры оценки

Процесс: на основе типа переменной разработка процесса для расчета баллов для каждого атрибута.

Выходные данные: кадр входных данных с добавленными столбцами, отражающими оценку атрибута. Пример:

df_input

+

------------+-----------+----+------------+-----+------+
| STUDENT_ID | UG_MAJOR  | C1 |     C2     | C3  |  C4  |
+------------+-----------+----+------------+-----+------+
|        123 | MATH      | A  | 8000-10000 | 12% | 9000 |
|        234 | ALL_OTHER | B  | 1500-2000  | 10% | 1500 |
|        345 | ALL_OTHER | A  | 2800-3000  | 8%  | 2300 |
|        456 | ALL_OTHER | A  | 8000-10000 | 12% | 3200 |
|        980 | ALL_OTHER | C  | 1000-2500  | 15% | 2700 |
+------------+-----------+----+------------+-----+------+

df_ref +

---------+---------+---------+
| REF_COL | REF_VAL | REF_SCR |
+---------+---------+---------+
| C1      | A       |      10 |
| C1      | B       |      20 |
| C1      | C       |      30 |
| C1      | NULL    |       0 |
| C1      | MISSING |       0 |
| C1      | A       |      20 |
| C1      | B       |      30 |
| C1      | C       |      40 |
| C1      | NULL    |      10 |
| C1      | MISSING |      10 |
| C2      | <1000   |       0 |
| C2      | >1000   |      20 |
| C2      | >7000   |      30 |
| C2      | >9500   |      40 |
| C2      | MISSING |       0 |
| C2      | NULL    |       0 |
| C3      | <3%     |       5 |
| C3      | >3%     |      10 |
| C3      | >5%     |     100 |
| C3      | >7%     |     200 |
| C3      | >10%    |     300 |
| C3      | NULL    |       0 |
| C3      | MISSING |       0 |
| C4      | <5000   |      10 |
| C4      | >5000   |      20 |
| C4      | >10000  |      30 |
| C4      | >15000  |      40 |
+---------+---------+---------+

+------------+-----------+----+------------+-----+------+--------+--------+--------+---------+
| Req.Output |           |    |            |     |      |        |        |        |         |
+------------+-----------+----+------------+-----+------+--------+--------+--------+---------+
| STUDENT_ID | UG_MAJOR  | C1 | C2         | C3  | C4   | C1_SCR | C2_SCR | C3_SCR | TOT_SCR |
| 123        | MATH      | A  | 8000-10000 | 12% | 9000 |        |        |        |         |
| 234        | ALL_OTHER | B  | 1500-2000  | 10% | 1500 |        |        |        |         |
| 345        | ALL_OTHER | A  | 2800-3000  | 8%  | 2300 |        |        |        |         |
| 456        | ALL_OTHER | A  | 8000-10000 | 12% | 3200 |        |        |        |         |
| 980        | ALL_OTHER | C  | 1000-2500  | 15% | 2700 |        |        |        |         |
+------------+-----------+----+------------+-----+------+--------+--------+--------+---------+

Я хочу посмотреть, будет ли разработана какая-либо вещь, подобная функции, для достижения этой цели.

Спасибо, Пари.


person pmv    schedule 30.09.2015    source источник
comment
Добро пожаловать в StackOverflow. Прочтите необходимую справочную документацию, особенно stackoverflow.com/help/how-to-ask и stackoverflow.com/help/mcve. Вычисление оценок для атрибутов звучит как своего рода процесс машинного обучения. Вы их исследовали? Или вы просто хотели что-то для расчета процентов оценок? Это простая алгебра. В любом случае вам необходимо предоставить код, который вы написали, результат, который вы получили, и описание проблемы.   -  person Prune    schedule 30.09.2015


Ответы (1)


Если я правильно понимаю вопрос, вы пытаетесь сохранить набор правил в df_ref, которые должны применяться к df_input для получения оценок. Хотя это, безусловно, можно сделать, вы должны убедиться, что ваши правила четко определены. Это также поможет вам написать соответствующую функцию оценки.

Например, предположим, что один из учащихся получает значение 10000 в столбце C3. 10000 больше, чем 1000, 7000 и 9500. Это означает, что оценка неоднозначна. Предположим, вы хотите выбрать самую высокую из всех оценок в этом конкретном столбце. Затем вам нужна другая таблица, определяющая правило выбора для каждого столбца, когда выбрано несколько оценок.

Во-вторых, вы должны подумать о типе переменной Python, хранящейся в столбце REF_VAL. Если >7000 является строкой, вам придется проделать дополнительную работу, чтобы определить счет. Попробуйте вместо этого сохранить это как 7000 и указать оператор сравнения в другом месте.

Наконец, глядя на ваши текущие правила, кажется, что есть закономерность. Каждая оценка связана с NULL, MISSING или границей диапазона. Это можно зафиксировать следующим образом:

import pandas as pd
import numpy as np
from itertools import dropwhile

# stores values and scores for special values and cutoff values
sample_range_rule = {
    'MISSING' : 0,
    'NULL'    : 0,
    'VALS'    : [
        (0, 0),
        (10, 50),
        (70, 75),
        (90, 100),
        (100, 100)
    ]
}

# takes a dict with rules and produces a scoring function
def getScoringFunction(range_rule):
    def score(val):
        if val == 'MISSING':
            return range_rule['MISSING']
        elif val == 'NULL':
            return range_rule['NULL']
        else:
            return dropwhile(lambda (cutoff, score): cutoff < val,
                range_rule['VALS']).next()[1]
    return score

sample_scoring_function = getScoringFunction(sample_range_rule)

for test_value in ['MISSING', 'NULL', 0, 12, 55, 66, 99]:
    print 'Input', test_value,
    print 'Output', sample_scoring_function(test_value)

После того, как у вас есть словарь, определяющий правило для каждого столбца, вы можете сделать следующее:

df['Ck_SCR'] = df['Ck'].apply(getScoringFunction(Ck_dct))

Преобразование pandas DataFrame с двумя столбцами в словарь этой формы не должно быть сложным.

person hilberts_drinking_problem    schedule 30.09.2015