Skip to content
Snippets Groups Projects
Commit f662f340 authored by odair mario's avatar odair mario
Browse files

resolve problemas das semtrais

parent 9d5d5b1b
No related branches found
No related tags found
1 merge request!1WIP: Development
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import pprint
import pandas as pd import pandas as pd
import json import json
import numpy as np import numpy as np
...@@ -189,13 +190,11 @@ def trancamento(qtd,disciplina_dict,qtd_matr): ...@@ -189,13 +190,11 @@ def trancamento(qtd,disciplina_dict,qtd_matr):
def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq): def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq):
'''existe as analises reprovacao absoluta, reprovacao por frequencia e '''existem as analises reprovacao absoluta, reprovacao por frequencia,
reprovacao absoluta, reprovacao por frequencia da ultima vez que a reprovacao absoluta, reprovacao por frequencia da ultima vez que a
disciplina foi ofertada, a logica da analise eh a mesma so muda os valores disciplina foi ofertada, a logica das analise sao a mesma so muda os valores
do dataframe qtd e o nomes das chaves do dicionario.Eh possivel reaproveitar do dataframe qtd e o nomes das chaves do dicionario,logo é possível reaproveitar
o mesmo codigo para fazer analise geral e da ultima vez que foi ofertado, o mesmo codigo para fazer analise geral e da ultima vez que foi ofertado.'''
para isso so eh preciso enviar outro dataframe qtd e enviar como string o
indice do dicionario para ser atribuido de forma correta'''
sit_reprov = sit.SITUATION_FAIL + (sit.SIT_REPROVADO_SEM_NOTA,) sit_reprov = sit.SITUATION_FAIL + (sit.SIT_REPROVADO_SEM_NOTA,)
reprov_df = qtd.loc[(qtd.SITUACAO == sit_reprov[0]) | reprov_df = qtd.loc[(qtd.SITUACAO == sit_reprov[0]) |
(qtd.SITUACAO == sit_reprov[1]) | (qtd.SITUACAO == sit_reprov[1]) |
...@@ -212,41 +211,89 @@ def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq): ...@@ -212,41 +211,89 @@ def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq):
disciplina[taxa_reprov_absoluta] = 0.0 disciplina[taxa_reprov_absoluta] = 0.0
disciplina[taxa_reprov_freq] = 0.0 disciplina[taxa_reprov_freq] = 0.0
def nota(notas,disciplina,index):
notas_l = []
for i in notas.iterrows():
if i[1].SITUACAO in sit.SITUATION_AFFECT_IRA:
if not(np.isnan(i[1].MEDIA_FINAL)):
notas_l.append(i[1].MEDIA_FINAL)
notas_np = np.array(notas_l)
media = notas_np.mean()
desvio_padrao = notas_np.std()
disciplina[index] = [media,desvio_padrao]
def analises_gerais(df,lista_disciplinas): def analises_gerais(df,lista_disciplinas):
''' Os dataframes qtd_geral e qtd_ultimo_geral são dataframes que possuem
as colunas em comun COD_ATIV_CURRIC e SITUACAO, o qtd_ultimo_geral
possuem as colunas ano e periodo.Ambos os dataframes possui a coluna qtd
que é a quantidade de vezes que cada situacao se repete por disciplina'''
qtd_geral= df.groupby(['COD_ATIV_CURRIC','SITUACAO']).size().reset_index(name='qtd' ) qtd_geral= df.groupby(['COD_ATIV_CURRIC','SITUACAO']).size().reset_index(name='qtd' )
qtd_ultimo_geral = \ qtd_ultimo_geral = \
df.groupby(['COD_ATIV_CURRIC','SITUACAO','ANO','PERIODO']).size().reset_index(name='qtd') df.groupby(['COD_ATIV_CURRIC','SITUACAO','ANO','PERIODO']).size().reset_index(name='qtd')
matr_por_semestre = \ matr_por_semestre = \
df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name='matr') df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name='matr')
''' dataframe com a quantidade de matriculas por periodo e ano, por exemplo
disciplina ci055 2010/1 teve x matriculas'''
'''Dataframes relacionado a notas.O campo qtd é inutil, o groupby pede se
que se use um apply sobre o groupby, pois se não o grouby é tratado como
objeto e não como um dataframe '''
nota_geral_df = df.groupby(['COD_ATIV_CURRIC','MEDIA_FINAL', 'SITUACAO',
]).size().reset_index(name = 'qtd' )
nota_semestral_df = df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO', 'MEDIA_FINAL', 'SITUACAO',
]).size().reset_index(name = 'qtd' )
for disciplina in lista_disciplinas.keys(): for disciplina in lista_disciplinas.keys():
disciplina_dict = {} disciplina_dict = {} #facilitar os calculos
qtd = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina] qtd = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina]
disciplina_semestral = qtd_ultimo_geral.loc[qtd_ultimo_geral.COD_ATIV_CURRIC == \ disciplina_semestral = qtd_ultimo_geral.loc[qtd_ultimo_geral.COD_ATIV_CURRIC == \
disciplina] disciplina]
ano = np.amax(disciplina_semestral.ANO) ano = np.amax(disciplina_semestral.ANO)
disciplina_ano = disciplina_semestral.loc[disciplina_semestral.ANO \ disciplina_ano = disciplina_semestral.loc[disciplina_semestral.ANO \
== ano] == ano]
periodo = np.amax(disciplina_ano.PERIODO) periodo = np.amax(disciplina_ano.PERIODO)
qtd_ultimo = disciplina_ano.loc[disciplina_ano.PERIODO == periodo] qtd_ultimo = disciplina_ano.loc[disciplina_ano.PERIODO == periodo]
#quantidade de alunos #quantidade de alunos
qtd_matriculas = lista_disciplinas[disciplina]['qtd_alunos'] qtd_matriculas = lista_disciplinas[disciplina]['qtd_alunos']
qtd_matr_ultimo = \ qtd_matr_ultimo = \
matr_por_semestre.loc[(matr_por_semestre.COD_ATIV_CURRIC == disciplina) & matr_por_semestre.loc[(matr_por_semestre.COD_ATIV_CURRIC == disciplina) &
(matr_por_semestre.ANO == ano) & (matr_por_semestre.ANO == ano) &
(matr_por_semestre.PERIODO == periodo)].matr.values[0] (matr_por_semestre.PERIODO == periodo)].matr.values[0]
#qtd eh um dataframe que contem a ocorrencia de cada situacao
#qtd é um dataframe que contem a ocorrencia de cada situacao
qtd = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina] qtd = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina]
#faz analises relacionada ao conhecimento #faz analises relacionada ao conhecimento
conhecimento(qtd,disciplina_dict) conhecimento(qtd,disciplina_dict)
# faz analises relacionada ao trancamento # faz analises relacionada ao trancamento
trancamento(qtd,disciplina_dict,qtd_matriculas) trancamento(qtd,disciplina_dict,qtd_matriculas)
# faz analises relacionada a reprovacoes # faz analises relacionada a reprovacoes
reprovacao(qtd,disciplina_dict,qtd_matriculas,'taxa_reprovacao_absoluta','taxa_reprovacao_frequencia') reprovacao(qtd,disciplina_dict,qtd_matriculas,'taxa_reprovacao_absoluta','taxa_reprovacao_frequencia')
reprovacao(qtd_ultimo,disciplina_dict,qtd_matriculas,'taxa_reprovacao_ultimo_absoluta', reprovacao(qtd_ultimo,disciplina_dict,qtd_matriculas,'taxa_reprovacao_ultimo_absoluta',
'taxa_reprovacao_ultimo_frequencia') 'taxa_reprovacao_ultimo_frequencia')
lista_disciplinas[disciplina].update(disciplina_dict)
#print(disciplina_dict)
#faz as analises relacionada a nota
nota_df = nota_geral_df.loc[nota_geral_df.COD_ATIV_CURRIC == disciplina]
nota_por_semestre_df = nota_semestral_df.loc[nota_semestral_df.COD_ATIV_CURRIC == disciplina]
nota_ultimo_df = nota_por_semestre_df.loc[nota_por_semestre_df.ANO ==
ano]
periodo_nota = np.amax(nota_ultimo_df.PERIODO)
nota_ultimo = nota_ultimo_df.loc[nota_ultimo_df.PERIODO == periodo_nota]
nota(nota_df,disciplina_dict,'nota')
nota(nota_ultimo,disciplina_dict,'nota_ultimo_ano')
lista_disciplinas[disciplina].update(disciplina_dict)
# -qtd_conhecimento # -qtd_conhecimento
# -qtd_trancamento # -qtd_trancamento
# -taxa_conhecimento # -taxa_conhecimento
...@@ -255,47 +302,44 @@ def analises_gerais(df,lista_disciplinas): ...@@ -255,47 +302,44 @@ def analises_gerais(df,lista_disciplinas):
# -taxa_reprovacao_ultimo_absoluto # -taxa_reprovacao_ultimo_absoluto
# -taxa_reprovacao_ultimo_frequencia # -taxa_reprovacao_ultimo_frequencia
# -taxa_trancamento # -taxa_trancamento
# *nota geral desvio padrao geral # -nota geral desvio padrao geral
# *nota ultima vez ofertado e desvio padrao # -nota ultima vez ofertado e desvio padrao
def analises_semestrais(df,lista_disciplinas): def analises_semestrais(df,lista_disciplinas):
geral_df = \ geral_df = \
df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name
= 'matr' ) = 'matr' )
for disciplina in lista_disciplinas.keys(): df_semestral = df.groupby(['COD_ATIV_CURRIC', 'ANO', 'PERIODO' ,
disciplina_dict = {} 'MEDIA_FINAL','SITUACAO']).size().reset_index(name = 'qtds' )
disciplina_df = df.loc[df.COD_ATIV_CURRIC == disciplina] disciplinas = {}
print(disciplina) for count,i in enumerate(df_semestral.iterrows()):
print(disciplina_df.ANO) disciplina = i[1].COD_ATIV_CURRIC
for ano in disciplina_df.ANO: if not(disciplina in disciplinas):
disciplina_ano = disciplina_df.loc[disciplina_df.ANO == ano] disciplinas[disciplina] = {}
for periodo in disciplina_ano.PERIODO: ano = str(int(i[1].ANO))
disciplina_periodo = disciplina_ano.loc[disciplina_ano.PERIODO periodo = str(i[1].PERIODO)
== periodo] situacao = i[1].SITUACAO
soma_df = disciplina_periodo.loc[ media = i[1].MEDIA_FINAL
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[0]) | periodo_curso = ano+"/"+periodo
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[1]) | disciplinas[disciplina][periodo_curso] = [0.0,0]
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[2]) | if situacao in sit.SITUATION_AFFECT_IRA:
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[3]) | disciplinas[disciplina][periodo_curso][0] += media
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[4]) | disciplinas[disciplina][periodo_curso][1] +=1
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[5]) ] for disciplina in disciplinas.keys():
soma_np = soma_df.MEDIA_FINAL.sum() for ano_periodo in disciplinas[disciplina].keys():
soma = 0 if np.isnan(soma_np) else soma_np qtd = disciplinas[disciplina][ano_periodo][1]
qtd = soma_df.shape[0] disciplinas[disciplina][ano_periodo][0] = 0.0 if qtd == 0 else qtd
# for situacao in sit.SITUATION_AFFECT_IRA:
# soma_df = disciplina_periodo.loc[disciplina_periodo.SITUACAO
# == situacao]
# soma_np = soma_df.MEDIA_FINAL.sum()
# soma += 0 if np.isnan(soma_np) else soma_np
# qtd +=soma_df.shape[0]
# media = 0.0 if qtd == 0 else soma/qtd
# index = str(ano)+"/"+str(periodo)
# disciplina_dict[index] = [media,qtd]
# *taxa aprovacao semestral aprovacao_semestral = disciplinas[disciplina]
# *quantidade de matricula por semestre lista_disciplinas[disciplina]['aprovacao_semestral'] = \
aprovacao_semestral
# -taxa aprovacao semestral
# -quantidade de matricula por semestre
def analises_disciplinas(df): def analises_disciplinas(df):
lista_disciplinas = {} lista_disciplinas = {}
informacoes_gerais(df,lista_disciplinas) informacoes_gerais(df,lista_disciplinas)
analises_gerais(df,lista_disciplinas) analises_gerais(df,lista_disciplinas)
analises_semestrais(df,lista_disciplinas) analises_semestrais(df,lista_disciplinas)
for disciplina in lista_disciplinas.keys():
pprint.pprint(lista_disciplinas[disciplina] )
print("---------------------------------------" )
# """tranformar para json """ # """tranformar para json """
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment