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 -*-
import pprint
import pandas as pd
import json
import numpy as np
......@@ -189,13 +190,11 @@ def trancamento(qtd,disciplina_dict,qtd_matr):
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
disciplina foi ofertada, a logica da analise eh a mesma so muda os valores
do dataframe qtd e o nomes das chaves do dicionario.Eh possivel reaproveitar
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'''
disciplina foi ofertada, a logica das analise sao a mesma so muda os valores
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.'''
sit_reprov = sit.SITUATION_FAIL + (sit.SIT_REPROVADO_SEM_NOTA,)
reprov_df = qtd.loc[(qtd.SITUACAO == sit_reprov[0]) |
(qtd.SITUACAO == sit_reprov[1]) |
......@@ -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_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):
''' 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_ultimo_geral = \
df.groupby(['COD_ATIV_CURRIC','SITUACAO','ANO','PERIODO']).size().reset_index(name='qtd')
matr_por_semestre = \
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():
disciplina_dict = {}
disciplina_dict = {} #facilitar os calculos
qtd = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina]
disciplina_semestral = qtd_ultimo_geral.loc[qtd_ultimo_geral.COD_ATIV_CURRIC == \
disciplina]
ano = np.amax(disciplina_semestral.ANO)
disciplina_ano = disciplina_semestral.loc[disciplina_semestral.ANO \
== ano]
periodo = np.amax(disciplina_ano.PERIODO)
qtd_ultimo = disciplina_ano.loc[disciplina_ano.PERIODO == periodo]
#quantidade de alunos
qtd_matriculas = lista_disciplinas[disciplina]['qtd_alunos']
qtd_matr_ultimo = \
matr_por_semestre.loc[(matr_por_semestre.COD_ATIV_CURRIC == disciplina) &
(matr_por_semestre.ANO == ano) &
(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]
#faz analises relacionada ao conhecimento
conhecimento(qtd,disciplina_dict)
# faz analises relacionada ao trancamento
trancamento(qtd,disciplina_dict,qtd_matriculas)
# faz analises relacionada a reprovacoes
reprovacao(qtd,disciplina_dict,qtd_matriculas,'taxa_reprovacao_absoluta','taxa_reprovacao_frequencia')
reprovacao(qtd_ultimo,disciplina_dict,qtd_matriculas,'taxa_reprovacao_ultimo_absoluta',
'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_trancamento
# -taxa_conhecimento
......@@ -255,47 +302,44 @@ def analises_gerais(df,lista_disciplinas):
# -taxa_reprovacao_ultimo_absoluto
# -taxa_reprovacao_ultimo_frequencia
# -taxa_trancamento
# *nota geral desvio padrao geral
# *nota ultima vez ofertado e desvio padrao
# -nota geral desvio padrao geral
# -nota ultima vez ofertado e desvio padrao
def analises_semestrais(df,lista_disciplinas):
geral_df = \
df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name
= 'matr' )
for disciplina in lista_disciplinas.keys():
disciplina_dict = {}
disciplina_df = df.loc[df.COD_ATIV_CURRIC == disciplina]
print(disciplina)
print(disciplina_df.ANO)
for ano in disciplina_df.ANO:
disciplina_ano = disciplina_df.loc[disciplina_df.ANO == ano]
for periodo in disciplina_ano.PERIODO:
disciplina_periodo = disciplina_ano.loc[disciplina_ano.PERIODO
== periodo]
soma_df = disciplina_periodo.loc[
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[0]) |
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[1]) |
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[2]) |
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[3]) |
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[4]) |
(disciplina_periodo.SITUACAO == sit.SITUATION_AFFECT_IRA[5]) ]
soma_np = soma_df.MEDIA_FINAL.sum()
soma = 0 if np.isnan(soma_np) else soma_np
qtd = soma_df.shape[0]
# 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]
df_semestral = df.groupby(['COD_ATIV_CURRIC', 'ANO', 'PERIODO' ,
'MEDIA_FINAL','SITUACAO']).size().reset_index(name = 'qtds' )
disciplinas = {}
for count,i in enumerate(df_semestral.iterrows()):
disciplina = i[1].COD_ATIV_CURRIC
if not(disciplina in disciplinas):
disciplinas[disciplina] = {}
ano = str(int(i[1].ANO))
periodo = str(i[1].PERIODO)
situacao = i[1].SITUACAO
media = i[1].MEDIA_FINAL
periodo_curso = ano+"/"+periodo
disciplinas[disciplina][periodo_curso] = [0.0,0]
if situacao in sit.SITUATION_AFFECT_IRA:
disciplinas[disciplina][periodo_curso][0] += media
disciplinas[disciplina][periodo_curso][1] +=1
for disciplina in disciplinas.keys():
for ano_periodo in disciplinas[disciplina].keys():
qtd = disciplinas[disciplina][ano_periodo][1]
disciplinas[disciplina][ano_periodo][0] = 0.0 if qtd == 0 else qtd
# *taxa aprovacao semestral
# *quantidade de matricula por semestre
aprovacao_semestral = disciplinas[disciplina]
lista_disciplinas[disciplina]['aprovacao_semestral'] = \
aprovacao_semestral
# -taxa aprovacao semestral
# -quantidade de matricula por semestre
def analises_disciplinas(df):
lista_disciplinas = {}
informacoes_gerais(df,lista_disciplinas)
analises_gerais(df,lista_disciplinas)
analises_semestrais(df,lista_disciplinas)
for disciplina in lista_disciplinas.keys():
pprint.pprint(lista_disciplinas[disciplina] )
print("---------------------------------------" )
# """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