From 5eff804c0cc7c9e11a6677f8fdad3caa74b866be Mon Sep 17 00:00:00 2001 From: odair mario <badwolves123@gmail.com> Date: Wed, 20 Dec 2017 01:53:19 -0200 Subject: [PATCH] semestrais atualizado --- script/analysis/course_analysis.py | 130 +++++++++++++++++------------ 1 file changed, 76 insertions(+), 54 deletions(-) diff --git a/script/analysis/course_analysis.py b/script/analysis/course_analysis.py index 9fc482c..1ed8384 100644 --- a/script/analysis/course_analysis.py +++ b/script/analysis/course_analysis.py @@ -6,33 +6,33 @@ from utils.situations import Situation as sit #funcoes # # make_taxas -- parametros df e ultima turma ingresso -# *qtd_alunos -# *qtd_trancamento -# *taxa_reprovacao_absoluta -# *taxa_reprovacao_frequencia -# *taxa_reprovacao_ultimo_absoluto -# *taxa_reprovacao_ultimo_frequencia -# *taxa_trancamento +# *qtd_alunos +# *qtd_trancamento +# *taxa_reprovacao_absoluta +# *taxa_reprovacao_frequencia +# *taxa_reprovacao_ultimo_absoluto +# *taxa_reprovacao_ultimo_frequencia +# *taxa_trancamento ##listas_disciplinas é dicionario com todas as disciplinas #def taxas_gerais(df,ultima_turma_ingresso,lista_disciplina): # df_quantidade = df.groupby(['COD_ATIV_CURRIC', 'SITUACAO'] # ).size().reset_index(name='Quantidades') # for disciplina in lista_disciplina.keys: -# quantidades = df_quantidade.loc[df_quantidade.COD_ATIV_CURRIC == disciplina] -# +# quantidades = df_quantidade.loc[df_quantidade.COD_ATIV_CURRIC == disciplina] +# # qtd_trancamento_df =quantidades.loc[quantidades.SITUACAO == # (sit.SIT_CANCELADO || sit.SIT_TRANCAMENTO_ADMINISTRATIVO || -# sit.SIT_TRANCAMENTO_TOTAL) ] +# sit.SIT_TRANCAMENTO_TOTAL) ] # qtd_trancamento = qtd_trancamento_df.sum # # qtd_conhecimento_aprov = quantidades.loc[quantidades.SITUACAO == # sit.SIT_CONHECIMENTO_APROVADO].Quantidade # qtd_conhecimento_reprov = quantidades.loc[quantidades.SITUACAO == -# sit.SIT_CONHECIMENTO_REPROVADO].Quantidade +# sit.SIT_CONHECIMENTO_REPROVADO].Quantidade # lista_disciplina[disciplina][qtd_conhecimento] = qtd_conhecimento_aprov # + qtd_conhecimento_reprov # if qtd_conhecimento: -# taxa_conhecimento = qtd_conhecimento_aprov / listas_disciplinas[disciplina][qtd_conhecimento] +# taxa_conhecimento = qtd_conhecimento_aprov / listas_disciplinas[disciplina][qtd_conhecimento] # else: # taxa_conhecimento = -1 # @@ -147,15 +147,15 @@ from utils.situations import Situation as sit # def informacoes_gerais(df,lista_disciplinas): #quantidade de matriculas - disciplinas = df.groupby(['COD_ATIV_CURRIC']).size() + disciplinas = df.groupby(['COD_ATIV_CURRIC']).size() for disciplina in disciplinas.index: - disciplina_dict = {} - disciplina_df = df.loc[df.COD_ATIV_CURRIC == disciplina] - disciplina_dict['qtd_alunos'] = disciplinas[disciplina] - disciplina_dict['disciplina_codigo'] = disciplina + disciplina_dict = {} + disciplina_df = df.loc[df.COD_ATIV_CURRIC == disciplina] + disciplina_dict['qtd_alunos'] = disciplinas[disciplina] + disciplina_dict['disciplina_codigo'] = disciplina disciplina_dict['disciplina_nome'] = \ - disciplina_df.NOME_ATIV_CURRIC.values[0] - lista_disciplinas[disciplina] = disciplina_dict + disciplina_df.NOME_ATIV_CURRIC.values[0] + lista_disciplinas[disciplina] = disciplina_dict # -nome da disciplina # -codigo da disciplina # -lista de disciplina @@ -164,45 +164,45 @@ def informacoes_gerais(df,lista_disciplinas): # matriculas def conhecimento(qtd,disciplina_dict): conheci_df = qtd.loc[(qtd.SITUACAO == sit.SIT_CONHECIMENTO_APROVADO) | - (qtd.SITUACAO == sit.SIT_CONHECIMENTO_REPROVADO)] - total_conheci = conheci_df.qtd.sum() + (qtd.SITUACAO == sit.SIT_CONHECIMENTO_REPROVADO)] + total_conheci = conheci_df.qtd.sum() if np.isnan(total_conheci): total_conheci = 0 conheci_aprov = conheci_df.loc[conheci_df.SITUACAO == \ - sit.SIT_CONHECIMENTO_APROVADO].set_index('COD_ATIV_CURRIC' ) - disciplina_dict['qtd_conhecimento'] = total_conheci + sit.SIT_CONHECIMENTO_APROVADO].set_index('COD_ATIV_CURRIC' ) + disciplina_dict['qtd_conhecimento'] = total_conheci if (total_conheci !=0) and (not conheci_aprov.empty): - disciplina_dict['taxa_conhecimento'] = conheci_aprov.qtd.values[0] / total_conheci + disciplina_dict['taxa_conhecimento'] = conheci_aprov.qtd.values[0] / total_conheci else: disciplina_dict['taxa_conhecimento'] = 0.0 def trancamento(qtd,disciplina_dict,qtd_matr): - trancamento_df = qtd.loc[(qtd.SITUACAO == sit.SIT_TRANCAMENTO_ADMINISTRATIVO) | - (qtd.SITUACAO == sit.SIT_TRANCAMENTO_TOTAL) | - (qtd.SITUACAO == sit.SIT_CANCELADO)] - qtd_tranc = trancamento_df.qtd.sum() + trancamento_df = qtd.loc[(qtd.SITUACAO == sit.SIT_TRANCAMENTO_ADMINISTRATIVO) | + (qtd.SITUACAO == sit.SIT_TRANCAMENTO_TOTAL) | + (qtd.SITUACAO == sit.SIT_CANCELADO)] + qtd_tranc = trancamento_df.qtd.sum() if np.isnan(qtd_tranc): qtd_tranc = 0 - disciplina_dict['qtd_trancamento'] = qtd_tranc + disciplina_dict['qtd_trancamento'] = qtd_tranc disciplina_dict['taxa_trancamento'] = qtd_tranc / qtd_matr if qtd_matr else 0.0 - -def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq): - '''existe as analises reprovacao absoluta, reprovacao por frequencia e + +def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq): + '''existe as analises reprovacao absoluta, reprovacao por frequencia e 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''' + indice do dicionario para ser atribuido de forma correta''' sit_reprov = sit.SITUATION_FAIL + (sit.SIT_REPROVADO_SEM_NOTA,) reprov_df = qtd.loc[(qtd.SITUACAO == sit_reprov[0]) | (qtd.SITUACAO == sit_reprov[1]) | (qtd.SITUACAO == sit_reprov[2]) | (qtd.SITUACAO == sit_reprov[3]) ] qtd_reprov_abso = reprov_df.qtd.sum() #quantidade de reprovacao absoluta - qtd_reprov_freq = reprov_df.loc[reprov_df.SITUACAO == sit_reprov[1]] + qtd_reprov_freq = reprov_df.loc[reprov_df.SITUACAO == sit_reprov[1]] if qtd_matr != 0: disciplina[taxa_reprov_absoluta] = 0.0 \ if np.isnan(qtd_reprov_abso) else qtd_reprov_abso / qtd_matr @@ -210,43 +210,65 @@ def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq): if qtd_reprov_freq.empty else qtd_reprov_freq.qtd.values[0] / qtd_matr else: disciplina[taxa_reprov_absoluta] = 0.0 - disciplina[taxa_reprov_freq] = 0.0 - + disciplina[taxa_reprov_freq] = 0.0 def analises_gerais(df,lista_disciplinas): - qtd_geral= df.groupby(['COD_ATIV_CURRIC','SITUACAO']).size().reset_index(name='qtd' ) - print(df.columns) + 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') for disciplina in lista_disciplinas.keys(): disciplina_dict = {} - disciplina_df = df.loc[df.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] + 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_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 = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina] + qtd = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina] #faz analises relacionada ao conhecimento - conhecimento(qtd,disciplina_dict) + conhecimento(qtd,disciplina_dict) # faz analises relacionada ao trancamento - trancamento(qtd,disciplina_dict,qtd_matriculas) + trancamento(qtd,disciplina_dict,qtd_matriculas) # faz analises relacionada a reprovacoes - reprovacao(qtd,disciplina_dict,qtd_matriculas) - #print(disciplina_dict) - print("\n" ) + 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) + # -qtd_conhecimento # -qtd_trancamento # -taxa_conhecimento # -taxa_reprovacao_absoluta # -taxa_reprovacao_frequencia -# *taxa_reprovacao_ultimo_absoluto -# *taxa_reprovacao_ultimo_frequencia +# -taxa_reprovacao_ultimo_absoluto +# -taxa_reprovacao_ultimo_frequencia # -taxa_trancamento # *nota geral desvio padrao geral # *nota ultima vez ofertado e desvio padrao -#def analises_semestrais() +def analises_semestrais(df,lista_disciplinas): + geral_df = \ + df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name + = 'matr' ) + geral_nota_df = \ + df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO','SITUACAO','MEDIA_FINAL']).size() + print(geral_nota_df.loc[geral_nota_df.SITUACAO == sit.SIT_APROVADO]) # *taxa aprovacao semestral # *quantidade de matricula por semestre -def analises_disciplinas (df): +def analises_disciplinas(df): lista_disciplinas = {} - informacoes_gerais(df,lista_disciplinas) - analises_gerais(df,lista_disciplinas) -# analises_semestrais(df,listas_disciplinas) -# """tranformar para json """ + informacoes_gerais(df,lista_disciplinas) + analises_gerais(df,lista_disciplinas) + analises_semestrais(df,lista_disciplinas) +# """tranformar para json """ -- GitLab