Forked from
adega / adega
326 commits behind the upstream repository.
-
odair mario authoredodair mario authored
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)