From 2967eb039c6ea69298d497127a6762ccb9d2c9a0 Mon Sep 17 00:00:00 2001
From: odair mario <badwolves123@gmail.com>
Date: Fri, 22 Dec 2017 19:18:28 -0200
Subject: [PATCH] precisa terminar a listagem disciplina e tirar os warnings

---
 script/analysis/course_analysis.py | 54 +++++++++++++++++-------------
 1 file changed, 30 insertions(+), 24 deletions(-)

diff --git a/script/analysis/course_analysis.py b/script/analysis/course_analysis.py
index b0de434..18747d7 100644
--- a/script/analysis/course_analysis.py
+++ b/script/analysis/course_analysis.py
@@ -1,3 +1,4 @@
+from datetime import datetime
 # -*- coding: utf-8 -*-
 import pprint
 import pandas as pd
@@ -219,8 +220,8 @@ def nota(notas,disciplina,index):
                 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]  
+    desvio= notas_np.std() 
+    disciplina[index] = [0 if np.isnan(media) else media, 0 if np.isnan(desvio) else desvio]  
 
 
 
@@ -231,9 +232,9 @@ def analises_gerais(df,lista_disciplinas):
         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')  
+    df.groupby(['COD_ATIV_CURRIC','SITUACAO','ANO']).size().reset_index(name='qtd')  
     matr_por_semestre = \
-    df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name='matr') 
+    df.groupby(['COD_ATIV_CURRIC','ANO']).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
@@ -241,7 +242,7 @@ def analises_gerais(df,lista_disciplinas):
     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',
+    nota_semestral_df = df.groupby(['COD_ATIV_CURRIC','ANO', 'MEDIA_FINAL', 'SITUACAO',
             ]).size().reset_index(name = 'qtd' )  
     for disciplina in lista_disciplinas.keys():
         disciplina_dict = {} #facilitar os calculos 
@@ -251,21 +252,20 @@ def analises_gerais(df,lista_disciplinas):
         disciplina_semestral = qtd_ultimo_geral.loc[qtd_ultimo_geral.COD_ATIV_CURRIC == \
                 disciplina] 
 
-        ano = np.amax(disciplina_semestral.ANO) 
+        ano = datetime.now().year - 1
 
-        disciplina_ano = disciplina_semestral.loc[disciplina_semestral.ANO \
-                == ano] 
+        qtd_ultimo = 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_matr_ultimo = matr_por_semestre.loc[(matr_por_semestre.COD_ATIV_CURRIC \
+            == disciplina) & matr_por_semestre.ANO == ano]
+        if qtd_matr_ultimo.empty:
+            qtd_matr_ultimo = -1
+        else:
+             qtd_matr_ultimo = qtd_matr_ultimo.matr.values[0] 
 
         #qtd é um dataframe que contem a ocorrencia de cada situacao
         qtd  = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina] 
@@ -278,18 +278,22 @@ def analises_gerais(df,lista_disciplinas):
 
         # 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') 
+        if qtd_matr_ultimo == -1: 
+            disciplina_dict['taxa_reprovacao_ultimo_absoluta'] = -1  
+            disciplina_dict['taxa_reprovacao_ultimo_frequencia'] = -1  
+        else:
+            reprovacao(qtd_ultimo,disciplina_dict,qtd_matriculas,'taxa_reprovacao_ultimo_absoluta',
+                    'taxa_reprovacao_ultimo_frequencia') 
 
         #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 ==
+        nota_ultimo = 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') 
+        if nota_ultimo.empty:
+            disciplina_dict['nota_ultimo_ano'] = -1 
         nota(nota_ultimo,disciplina_dict,'nota_ultimo_ano') 
 
 
@@ -320,18 +324,20 @@ def analises_semestrais(df,lista_disciplinas):
         situacao = i[1].SITUACAO 
         media = i[1].MEDIA_FINAL 
         periodo_curso = ano+"/"+periodo 
-        disciplinas[disciplina][periodo_curso]  = [0.0,0]  
+        if not(periodo_curso in disciplinas[disciplina] ): 
+            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():  
+            media = disciplinas[disciplina][ano_periodo][0]
             qtd = disciplinas[disciplina][ano_periodo][1]
-            disciplinas[disciplina][ano_periodo][0] = 0.0 if qtd == 0 else qtd
+            disciplinas[disciplina][ano_periodo][0] = 0.0 if qtd == 0 \
+                    else media / qtd
 
-        aprovacao_semestral = disciplinas[disciplina] 
-        lista_disciplinas[disciplina]['aprovacao_semestral'] = \
-            aprovacao_semestral
+        aprovacao_semestral = disciplinas[disciplina]   
+        lista_disciplinas[disciplina]['aprovacao_semestral'] = aprovacao_semestral
 #    -taxa aprovacao semestral
 #    -quantidade de matricula por semestre
 def analises_disciplinas(df):
-- 
GitLab