Skip to content
Snippets Groups Projects
Forked from adega / adega
326 commits behind the upstream repository.
course_analysis.py 3.27 KiB
# -*- coding: utf-8 -*-
import pandas as pd
import json
import numpy as np
from utils.situations import *
def print_analise(d):
    '''imprime todo o dataframe, por default o pandas so imprime as
    10 linhas inicias a 10 finais, com essa funcao o pandas imprime
    as linhas '''
    with pd.option_context('display.max_rows', None, 'display.max_columns', 27):
        print(d)

# calcula as taxas
def func(x, matr):
    ''' esta funcao recebe como parametro uma linha do dataframe e a
quantidade de matriculas '''
    c = matr[x['COD_ATIV_CURRIC']].values[0]
    return (x['Quantidade'] / c)

# quantidade de matriculas
def counts_matr(df):
    return df.groupby(['COD_ATIV_CURRIC']).size()

# taxas e quantidades semetrais
def analysis(df):
    qnt_matr = counts_matr(df)  # quantidade de matriculas disciplina
    ''' conta quantas vezes os valores de 'SITUACAO' se repete para
    cada disciplina'''
    disciplinas = df.groupby(['COD_ATIV_CURRIC', 'SITUACAO']
                             ).size().reset_index(name='Quantidade')
    ''' adiciona mais uma coluna ao df disciplina com as taxas de cada valor
     de 'SITUACAO' '''
    disciplina = disciplinas.groupby(['COD_ATIV_CURRIC', 'SITUACAO', 'Quantidade']).apply(
        lambda x: func(x, qnt_matr)).reset_index(name='Taxas gerais')
    disciplina = disciplina.drop('level_3',1) # retira coluna duplicada do index
    return disciplina
# quantidade de vezes cursadas ate obter a aprovacao
def qnt_aprov(df):
    qnt = df.groupby(['MATR_ALUNO', 'COD_ATIV_CURRIC']
                     ).size().reset_index(name='qnt_aprov')
    return qnt
# transforma o dataframe geral em json, # TODO: fazer o mesmo com o semestral
def df_to_json(disciplina,qnt_matr):
    for dis in qnt_matr.keys():
        disc = disciplina.loc[disciplina['COD_ATIV_CURRIC']==dis].drop('COD_ATIV_CURRIC',1) # separa o dataframe em disciplina e elimina a coluna codigo
        # seta a coluna SITUACAO como index
        disc = disc.set_index('SITUACAO').to_dict()
        for i in Situation.SITUATIONS:
            if not(i[0] in disc['Quantidade'].keys()):
                disc['Quantidade'][i[0]] = 0
                disc['Taxas gerais'][i[0]] = 0
        # cria o json
        with open(dis+'.json','w') as f:
            json.dump(disc,f,indent=4)

def matr_semestre(df):
    return df.groupby(['COD_ATIV_CURRIC', 'PERIODO', 'ANO']).size()


def func_semestre(x, matr):
    # print (matr)
    ano = int(x['ANO'])
    # print(ano)
    periodo = x['PERIODO'].values[0]
    disciplina = x['COD_ATIV_CURRIC'].values[0]
    c = matr[disciplina,periodo,ano]
    return (x['counts_semestre'] / c)


def analysis_semestre(df):
    qnt_matr_semestre = matr_semestre(df)
    discipline_semestre = df.groupby(['COD_ATIV_CURRIC', 'PERIODO', 'ANO', 'SITUACAO']).size(
    ).reset_index(name='counts_semestre')
    discipline_semestre = discipline_semestre.groupby(['COD_ATIV_CURRIC', 'PERIODO', 'ANO', 'SITUACAO']).apply(lambda x: func_semestre(x,
                                                                                                        qnt_matr_semestre)).reset_index(name='taxas_semetrais')

    return discipline_semestre
def Main(df):

    Analysis = analysis(df)
    Analysis_semestre = analysis_semestre(df)
    matr = counts_matr(df)
    df_to_json(Analysis,matr)
    matr_semes = matr_semestre(df)