Commit 641d3c2a authored by Bruno Meyer's avatar Bruno Meyer 😢

Merge branch 'refatora_disciplina' into 'development'

Refatora disciplina

See merge request adega/adega!28
parents 7c3fdc5b e7c26a1d
This diff is collapsed.
# -*- coding: utf-8 -*-
import numpy as np
from script.utils.situations import Situation as sit
from collections import namedtuple
rate = namedtuple("rate", ["name", "collumn_name", "fields_x", "fields_X"])
mean = namedtuple("mean", [
"name",
"collumn_name",
"include_fields",
"sum_collumn"
])
class Analysis(object):
def sum_interval(self, df, col_filter, min_v, max_v, col_sum=None):
"""
Soma os valores contindo no intervalo fechado min_v e max_v.
"""
col_sum = col_filter if col_sum is None else col_sum
df_filted = df.loc[
(df[col_filter] >= float(min_v)) &
(df[col_filter] <= float(max_v))
]
serie = df_filted[col_sum].sum()
return serie
def count(self, group, collumn=None, _filter=None):
"""
Conta a quantidade de linhas de cada dataframe de um groupby.
Conta a quantidade linhas de cada dataframe, se collumn e _filter
não forem None então cada dataframe é filtrado antes de contar as
linhas.
"""
if collumn is None or _filter is None:
return group.apply(lambda x: x.shape[0])
serie = group.apply(lambda x: x[x[collumn].isin(_filter)].shape[0])
return serie
def calc_rate(self, groups, rates):
"""
Calcula uma serie de taxa a partir de um groupby objects.
Calcula todas as taxas contida na lista rates para todos os dataframes
que estão dentro do groupby object groups.
O calculo de uma taxa, para um dataframe em especifico é feito da
seguinte maneira: filtrar se o dataframe de acordo com os valores da
especificado em rate.collumn_name com os valores de rate.field_x para o
numerador e rate.fields_X para o denominador, a taxa é a divisão do
numerador pelo denominador.
Parametros:
groups: groupby objects, contêm todos os dataframes, aplicado o
o calculo da analise.
rates: lista de namedtuples rate, utilizado para calcular taxas de
forma generica
Retorno:
rate_dict: Dicionario python, no qual as chaves são o nome da taxa
(rate.name) e o valores são pandas series.
"""
rate_dict = {}
for rate in rates:
x = self.count(groups, rate.collumn_name, rate.fields_x)
X = self.count(groups, rate.collumn_name, rate.fields_X)
rate_c = x/X
rate_c[np.isnan(rate_c)] = 0.0
rate_dict[rate.name] = [rate_c, x, X]
return rate_dict
This diff is collapsed.
......@@ -2,7 +2,6 @@
import time
from script.base.dataframe_base import load_dataframes
from script.build_cache import build_cache
from script.analysis.course_analysis import *
from datetime import timedelta
......@@ -10,10 +9,10 @@ from datetime import timedelta
def analyze(submission):
start_time = time.clock()
start_time_exec = time.time()
path = submission.path()
path = submission.path()
dataframe = load_dataframes(path)
build_cache(dataframe,path)
build_cache(dataframe, path)
submission.set_done(round(time.clock() - start_time))
......
......@@ -146,6 +146,11 @@ class Situation:
SIT_DISPENSA_COM_NOTA
)
SITUATION_KNOWLDGE = (
SIT_CONHECIMENTO_APROVADO,
SIT_CONHECIMENTO_REPROVADO
)
SITUATION_FAIL = (
SIT_REPROVADO,
SIT_REPROVADO_FREQ,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment