Commit 027d8432 authored by bhmeyer's avatar bhmeyer Committed by msrr18
Browse files

Update "Criar informações das análises"

parent dbf97ddd
...@@ -6,7 +6,28 @@ ...@@ -6,7 +6,28 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<h1>Informações Gerais - Turma Ingresso</h1> <h1>
Informações Gerais - Turma Ingresso
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Para o cálculo do IRA, somente as situações consideradas como <b>Aprovação</b> ou <b>Reprovação</b> são consideradas.<br>
Também, alguns casos como o cálculo do índice de reprovação utilizam o conceito de disciplians cursadas.
<br>
Situações consideradas como <b>Aprovação:</b><br>
{% for x in situations_pass %}
{{x}}<br>
{% endfor %}
<br>
Situações consideradas como <b>Reprovação:</b><br>
{% for x in situations_fail %}
{{x}}<br>
{% endfor %}
<br>
Situações consideradas como <b>Cursada:</b><br>
{% for x in situations_coursed %}
{{x}}<br>
{% endfor %}
"></a>
</h1>
<table class="table"> <table class="table">
<tr> <tr>
<td>Ano/Semestre</td> <td>Ano/Semestre</td>
...@@ -15,22 +36,42 @@ ...@@ -15,22 +36,42 @@
<tr> <tr>
<td>Quantidade de alunos</td> <td>Quantidade de alunos</td>
<td> {{admission_info.quantidade_alunos}} </td> <td> {{admission_info.quantidade_alunos}} </td>
<td>
<a tabindex="0" class=" fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Quantidade de alunos que possuem ano e semestre de matrícula referente a esta turma ingresso."></a>
</td>
</tr> </tr>
<tr> <tr>
<td>IRA Médio</td> <td>IRA Médio</td>
<td> {{admission_info.ira|floatformat:2}} &plusmn {{admission_info.std|floatformat:2}} </td> <td> {{admission_info.ira|floatformat:2}} &plusmn {{admission_info.std|floatformat:2}} </td>
<td>
<a tabindex="0" class=" fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="IRA médio e desvio padrão dos alunos desta turma. São apenas consideradas as disciplinas cujas situações são classificadas como <b>Reprovação</b> ou <b>Aprovação</b>."></a>
</td>
</tr> </tr>
<tr> <tr>
<td>Tempo médio de formatura em anos <b>atual</b></td> <td>Tempo médio de formatura em anos <b>atual</b></td>
<td> {{admission_info.formatura_media}} </td> <td> {{admission_info.formatura_media}} </td>
<td>
<a tabindex="0" class=" fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Tempo médio de formatura em anos (dentre aqueles que se formaram)."></a>
</td>
</tr> </tr>
<tr> <tr>
<td>Índice de Reprovação</td> <td>Índice de Reprovação</td>
<td> {{admission_info.taxa_reprovacao|to_percent}} </td> <td> {{admission_info.taxa_reprovacao|to_percent}} </td>
<td>
<a tabindex="0" class=" fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Valor que representa a taxa de reprovação de disciplinas cursadas pelos alunos desta turma. É calculado a partir da razão entre disciplinas consideradas como <b>Reprovação</b> e disciplinas consideradas como <b>Cursada</b>."></a>
</td>
</tr> </tr>
<tr> <tr>
<td>Indice de Evasão</td> <td>Indice de Evasão</td>
<td> {{admission_info.taxa_evasao|to_percent}} </td> <td> {{admission_info.taxa_evasao|to_percent}} </td>
<td>
<a tabindex="0" class=" fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Valor que representa a taxa de de evasão desta turma. É calculado a partir da razão entre alunos ativos e a quantidade total de alunos da turma."></a>
</td>
</tr> </tr>
<tr> <tr>
<td>Quantidade de Evadidos</td> <td>Quantidade de Evadidos</td>
...@@ -83,11 +124,23 @@ ...@@ -83,11 +124,23 @@
<div id="graficos"> <div id="graficos">
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<h3>IRA/Semestre</h3> <h3>
IRA por Semestre
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Média e desvio padrão do IRA semestral dos alunos desta turma em diferentes períodos. O valor do IRA é calculado individualmente
para cada semestre, ou seja, os valores das notas não são acumulados.
São apenas consideradas as disciplinas cujas situações são classificadas como
<b>Reprovação</b> ou <b>Aprovação</b>."></a>
</h3>
<div id="ira_semestral"></div> <div id="ira_semestral"></div>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<h3>Quantidade de alunos/Semestre</h3> <h3>
Quantidade de alunos por Semestre
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Calcula, para cada período, o número de alunos desta turma que realizaram ao menos uma matrícula em alguma disciplina.">
</a>
</h3>
<div id="students_per_semester"></div> <div id="students_per_semester"></div>
</div> </div>
</div> </div>
......
...@@ -8,12 +8,27 @@ ...@@ -8,12 +8,27 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<h2>Turmas de Ingresso</h2> <h2>
Turmas de Ingresso
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Para o cálculo do IRA, somente as situações consideradas como <b>Aprovação</b> ou <b>Reprovação</b> são consideradas.<br>
<br>
Situações consideradas como <b>Aprovação:</b><br>
{% for x in situations_pass %}
{{x}}<br>
{% endfor %}
<br>
Situações consideradas como <b>Reprovação:</b><br>
{% for x in situations_fail %}
{{x}}<br>
{% endfor %}">
</a>
</h2>
<table class="table table-striped table-bordered" id="admission_table"> <table class="table table-striped table-bordered" id="admission_table">
<thead> <thead>
<tr> <tr>
<th>Ano/Semestre</th> <th>Ano/Semestre</th>
<th>Ira médio</th> <th>IRA médio</th>
<th>Quantidade Ingresso</th> <th>Quantidade Ingresso</th>
<th>Alunos Evadidos</th> <th>Alunos Evadidos</th>
<th>Alunos Formados</th> <th>Alunos Formados</th>
......
...@@ -8,14 +8,22 @@ from report_api.views import get_list_admission, get_admission_detail ...@@ -8,14 +8,22 @@ from report_api.views import get_list_admission, get_admission_detail
from submission.models import Submission from submission.models import Submission
from guardian.decorators import permission_required_or_403 from guardian.decorators import permission_required_or_403
from submission.analysis.utils.situations import Situation
situations_pass = Situation.SITUATION_PASS
situations_pass = [Situation.code_to_str(c) for c in situations_pass]
situations_fail = Situation.SITUATION_FAIL
situations_fail = [Situation.code_to_str(c) for c in situations_fail]
situations_coursed = Situation.SITUATION_COURSED
situations_coursed = [Situation.code_to_str(c) for c in situations_coursed]
@permission_required_or_403('view_admission', (Submission, 'id', 'submission_id')) @permission_required_or_403('view_admission', (Submission, 'id', 'submission_id'))
def detail(request, submission_id, ano, semestre): def detail(request, submission_id, ano, semestre):
submission_id = int(submission_id) submission_id = int(submission_id)
submission = Submission.objects.get(id=submission_id) submission = Submission.objects.get(id=submission_id)
degree = submission.degree degree = submission.degree
for admission in get_list_admission(request.session, degree, submission_id): for admission in get_list_admission(request.session, degree, submission_id):
if(admission["ano"] == ano and admission["semestre"] == semestre): if(admission["ano"] == ano and admission["semestre"] == semestre):
...@@ -35,11 +43,16 @@ def detail(request, submission_id, ano, semestre): ...@@ -35,11 +43,16 @@ def detail(request, submission_id, ano, semestre):
if(admission_info["formatura_media"] == -1): if(admission_info["formatura_media"] == -1):
admission_info["formatura_media"] = "Não há alunos formados nesta turma" admission_info["formatura_media"] = "Não há alunos formados nesta turma"
else:
admission_info["formatura_media"] = str(admission_info["formatura_media"]) + " anos"
return render(request, 'admission/detail.html',{ return render(request, 'admission/detail.html',{
"degree": degree, "degree": degree,
"admission_info": admission_info, "admission_info": admission_info,
"submission": submission "submission": submission,
"situations_pass": situations_pass,
"situations_fail": situations_fail,
"situations_coursed": situations_coursed,
}) })
...@@ -54,8 +67,10 @@ def index(request, submission_id): ...@@ -54,8 +67,10 @@ def index(request, submission_id):
"listage_admissions": get_list_admission( "listage_admissions": get_list_admission(
request.session, request.session,
degree, degree,
submission_id submission_id,
), ),
"situations_pass": situations_pass,
"situations_fail": situations_fail,
"degree": degree, "degree": degree,
"submission": submission "submission": submission
}) })
...@@ -126,7 +126,11 @@ ...@@ -126,7 +126,11 @@
<div id="aprovacao_semestre"></div> <div id="aprovacao_semestre"></div>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<!-- <h3>Quantidade de Alunos/Vezes Cursadas</h3> --> <h3>
Reincidência de matrículas
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Contagem de alunos que cursaram a disciplina X vezes."></a>
</h3>
<div id="qtd_cursada_aprov"></div> <div id="qtd_cursada_aprov"></div>
</div> </div>
</div> </div>
......
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<h2>Disciplinas</h2> <h2>
Listagem de Disciplinas
</h2>
<table id="course_table" class="table table-striped table-bordered"> <table id="course_table" class="table table-striped table-bordered">
<thead> <thead>
<tr> <tr>
......
...@@ -116,32 +116,29 @@ ...@@ -116,32 +116,29 @@
<div id="graficos container"> <div id="graficos container">
<div class="row"> <div class="row">
<div class="col-md-11"> <div class="col-md-12">
<!-- <h3>Quantidade alunos/IRA</h3> --> <h3>Distribuição de alunos por faixas de IRA
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Distribuição dos IRA dos alunos do curso. O
gráfico mostra a distribuição de todos os alunos que fizeram ao menos uma disciplina, dos
alunos que estão no curso e dos alunos que já se formaram.<br>
<br>
<b>Atenção:</b> Alunos que possuem data de evasão indeterminada são desconsiderados."></a>
</h3>
<div id="ira_semestral"></div> <div id="ira_semestral"></div>
</div> </div>
<div class="col-md-1">
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Distribuição dos IRA dos alunos do curso. O
gráfico mostra a distribuição de todos os alunos que fizeram ao menos uma disciplina, dos
alunos que estão no curso e dos alunos que já se formaram.<br>
<br>
<b>Atenção:</b> Alunos que possuem data de evasão indeterminada são desconsiderados."></a>
</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-11"> <div class="col-md-12">
<!-- <h3>Quantidade evasão/período</h3> --> <h3>Histórico de evasão
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Gráfico com a quantidade de evasão de cada
semestre e cada ano desde o inicio do curso.<br>
No gráfico, para cada quantidade de evasão é mostrada sua respectiva razão entre seu valor e a quantidade total de evasão."></a>
</h3>
<div id="evasao_semestre"></div> <div id="evasao_semestre"></div>
</div> </div>
<div class="col-md-1">
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Gráfico com a quantidade de evasão de cada
semestre e cada ano desde o inicio do curso.<br>
No gráfico, para cada quantidade de evasão é mostrada sua respectiva razão entre seu valor e a quantidade total de evasão."></a>
</div>
<!-- <!--
<div class="col-md-6"> <div class="col-md-6">
<h3>Nota Média/Periodo</h3> <h3>Nota Média/Periodo</h3>
......
...@@ -185,28 +185,76 @@ ...@@ -185,28 +185,76 @@
<div id="graficos"> <div id="graficos">
<div class="row"> <div class="row">
<h3>Relação entre IRA e a quantidade de disciplinas por semestre
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="IRA médio do estudante e quantidade de disciplinas cursadas em cada semestre. O valor do IRA é calculado individualmente
para cada semestre, ou seja, os valores apresentados não são acumulados.
São apenas consideradas as disciplinas cujas situações são classificadas como
<b>Reprovação</b> ou <b>Aprovação</b>."></a>
</h3>
<div class="col-md-11">
<div id="ira_disciplinas_semestre"></div>
</div>
</div>
<br>
<!-- <div class="row">
<h3>IRA/Semestre</h3> <h3>IRA/Semestre</h3>
<div class="col-md-12"> <div class="col-md-11">
<div id="ira_semestral"></div> <div id="ira_semestral"></div>
</div> </div>
<div class="col-md-12"> <div class="col-md-1">
<h3>Índice de aprovação/Semestre</h3> <a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="IRA médio do estudante em cada semestre. O valor é calculado individualmente
para cada semestre, logo os valores apresentados não são acumulados.
São apenas consideradas as disciplinas cujas situações são classificadas como
<b>Reprovação</b> ou <b>Aprovação</b>."></a>
</div>
</div>
<br> -->
<div class="row">
<div class="col-md-11">
<h3>Índice de aprovação por Semestre
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Quantidade de disciplinas cursadas e aprovadas em cada semestre.
São apenas consideradas as disciplinas cujas situações são classificadas como
<b>Reprovação</b> ou <b>Aprovação</b>."></a>
</h3>
<div id="aprovacao_semestral"></div> <div id="aprovacao_semestral"></div>
</div> </div>
</div> </div>
<br>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-11">
<h3>Posição do aluno em relação a turma de ingresso/Semestre(%)</h3> <h3>Posição do aluno em relação a Turma de Ingresso por Semestre
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Posição do aluno em relação à própria turma de ingresso em cada semestre.
A posição é calculada considerando o IRA médio em cada semestre de forma individual.
Portanto, o IRA não é acumulado.<br><br>
O valor máximo é 1 quando o aluno obteve o melhor IRA dentre os alunos de sua turma que
cursaram ao menos uma disciplina em um determinado semestre, e 0 quando o aluno obteve o pior
desempenho. O valor é calculado de forma que se o aluno obteve a N-esima melhor
média de nota (IRA semestral) em um semestre, sua posição neste semestre é (1+N)/TOTAL,
onde TOTAL representa o total de alunos de sua turma que cursaram ao menos uma disciplina
no semestre em questão.<br><br>
São apenas consideradas as disciplinas cujas situações são classificadas como
<b>Reprovação</b> ou <b>Aprovação</b>."></a>
</h3>
<div id="posicao_turma_ingresso_semestral"></div> <div id="posicao_turma_ingresso_semestral"></div>
</div> </div>
<div class="col-md-12">
<h3>Relação entre IRA e a quantidade de disciplinas por semestre</h3>
<div id="ira_disciplinas_semestre"></div>
</div>
</div> </div>
<br>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<h3>Aprovações Acumuladas</h3> <h3>Aprovações Acumuladas
<a tabindex="0" class="fa fa-info-circle" data-toggler="popover" data-html="true"
data-content="Acumulo de aprovações (azul) e total de disciplinas cursadas (laranja) em cada período.
São apenas consideradas as disciplinas cujas situações são classificadas como
<b>Reprovação</b> ou <b>Aprovação</b>."></a>
</h3>
<div id="aprovacao_acumulada"></div> <div id="aprovacao_acumulada"></div>
</div> </div>
</div> </div>
...@@ -222,15 +270,15 @@ ...@@ -222,15 +270,15 @@
{% block js-foot %} {% block js-foot %}
<script> <script>
var chart1 = new AdegaChart({ // var chart1 = new AdegaChart({
data: {{analysis_result.ira_semestral|safe}}, // data: {{analysis_result.ira_semestral|safe}},
div_target: "ira_semestral", // div_target: "ira_semestral",
//type: "bar", // //type: "bar",
title: "Relação entre IRA e período", // title: "Relação entre IRA e período",
legend: "IRA semestral", // legend: "IRA semestral",
xaxis_title: "Período", // xaxis_title: "Período",
yaxis_title: "IRA semestral", // yaxis_title: "IRA semestral",
}); // });
var chart2 = new AdegaChart({ var chart2 = new AdegaChart({
data: {{analysis_result.indice_aprovacao_semestral|safe}}, data: {{analysis_result.indice_aprovacao_semestral|safe}},
......
...@@ -20,6 +20,7 @@ class Admission(object): ...@@ -20,6 +20,7 @@ class Admission(object):
self.__dataframes["df_filted"] = df.drop_duplicates(["MATR_ALUNO"]) self.__dataframes["df_filted"] = df.drop_duplicates(["MATR_ALUNO"])
self.__groupbys["groupby_original"] = df.groupby(['ANO_INGRESSO_y', 'SEMESTRE_INGRESSO']) self.__groupbys["groupby_original"] = df.groupby(['ANO_INGRESSO_y', 'SEMESTRE_INGRESSO'])
self.__groupbys["groupby_filted"] = self.__dataframes["df_filted"].groupby(['ANO_INGRESSO_y', 'SEMESTRE_INGRESSO']) self.__groupbys["groupby_filted"] = self.__dataframes["df_filted"].groupby(['ANO_INGRESSO_y', 'SEMESTRE_INGRESSO'])
def count_evasion_form(self, g, evasion_form): def count_evasion_form(self, g, evasion_form):
return g.apply(lambda x: x.loc[(x.FORMA_EVASAO == evasion_form)].shape[0]) return g.apply(lambda x: x.loc[(x.FORMA_EVASAO == evasion_form)].shape[0])
...@@ -41,7 +42,7 @@ class Admission(object): ...@@ -41,7 +42,7 @@ class Admission(object):
("qtd_abandono", ef.EF_ABANDONO), ("qtd_abandono", ef.EF_ABANDONO),
("qtd_formatura", ef.EF_FORMATURA), ("qtd_formatura", ef.EF_FORMATURA),
("qtd_ativos", ef.EF_ATIVO) ("qtd_ativos", ef.EF_ATIVO)
] ]
# calcula a quantidade de alunos qtd_ativos, qtd_abandono e qtd_formatura # calcula a quantidade de alunos qtd_ativos, qtd_abandono e qtd_formatura
for i in evasions: for i in evasions:
self.analysis[i[0]] = self.count_evasion_form(self.__groupbys["groupby_filted"], i[1]) self.analysis[i[0]] = self.count_evasion_form(self.__groupbys["groupby_filted"], i[1])
...@@ -85,6 +86,7 @@ class Admission(object): ...@@ -85,6 +86,7 @@ class Admission(object):
media_formatura = admission_g.apply(lambda x:\ media_formatura = admission_g.apply(lambda x:\
((x.ANO_EVASAO.astype(float)+x.SEMESTRE_EVASAO.astype(float))-\ ((x.ANO_EVASAO.astype(float)+x.SEMESTRE_EVASAO.astype(float))-\
(x.ANO_INGRESSO_y.astype(float)+x.SEMESTRE_INGRESSO.astype(float))).mean()) (x.ANO_INGRESSO_y.astype(float)+x.SEMESTRE_INGRESSO.astype(float))).mean())
self.analysis["media_formatura"] = media_formatura.rename({0.0: '1', 0.5:'2'}) self.analysis["media_formatura"] = media_formatura.rename({0.0: '1', 0.5:'2'})
def taxa_reprovacao(self): def taxa_reprovacao(self):
...@@ -119,7 +121,6 @@ class Admission(object): ...@@ -119,7 +121,6 @@ class Admission(object):
def admission_list(self): def admission_list(self):
self.analysis["admission_list"] = list(self.__groupbys["groupby_filted"].groups.keys()) self.analysis["admission_list"] = list(self.__groupbys["groupby_filted"].groups.keys())
def build_analysis(self): def build_analysis(self):
self.counts() self.counts()
self.admission_list() self.admission_list()
...@@ -292,28 +293,35 @@ def desvio_padrao_turma_ingresso(df, student_analysis): ...@@ -292,28 +293,35 @@ def desvio_padrao_turma_ingresso(df, student_analysis):
def evasion_per_semester(df): def evasion_per_semester(df):
# filtra a planilha, deixando apenas 1 linha por estudante por periodo que ele passou desde que entrou no curso # filtra a planilha, deixando apenas 1 linha por estudante por periodo que ele passou desde que entrou no curso
turmas_ingresso = df.drop_duplicates(['ANO_INGRESSO_y','SEMESTRE_INGRESSO', 'ANO','PERIODO', 'MATR_ALUNO'], keep='last') turmas_ingresso = df.drop_duplicates(['ANO_INGRESSO_y','SEMESTRE_INGRESSO', 'ANO','PERIODO', 'MATR_ALUNO'], keep='last')
# agrupa as linhas do dataframe resultante da filtragem pela tupla (ano de entrada, periodo de entrada, ano, periodo) # agrupa as linhas do dataframe resultante da filtragem pela tupla (ano de entrada, periodo de entrada, ano, periodo)
t_i_semestral_size = turmas_ingresso.groupby(['ANO_INGRESSO_y','SEMESTRE_INGRESSO', 'ANO','PERIODO'])['MATR_ALUNO'] t_i_semestral_size = turmas_ingresso.groupby(['ANO_INGRESSO_y','SEMESTRE_INGRESSO', 'ANO','PERIODO'])['MATR_ALUNO']
# filtra o dataframe, deixando apenas 1 linha por estudante que evadiu # filtra o dataframe, deixando apenas 1 linha por estudante que evadiu
t_i_evasions = turmas_ingresso.loc[(turmas_ingresso.FORMA_EVASAO != EvasionForm.EF_ATIVO) & (turmas_ingresso.FORMA_EVASAO != EvasionForm.EF_FORMATURA) & (turmas_ingresso.FORMA_EVASAO != EvasionForm.EF_REINTEGRACAO)] t_i_evasions = turmas_ingresso.loc[(turmas_ingresso.FORMA_EVASAO != EvasionForm.EF_ATIVO) & (turmas_ingresso.FORMA_EVASAO != EvasionForm.EF_FORMATURA) & (turmas_ingresso.FORMA_EVASAO != EvasionForm.EF_REINTEGRACAO)]
# agrupa as linhas do dataframe de evadidos indexados pela tupla (ano de entrada, periodo de entrada, ano, periodo), conta o numero de linhas e transforma isso em um dicionario # agrupa as linhas do dataframe de evadidos indexados pela tupla (ano de entrada, periodo de entrada, ano, periodo), conta o numero de linhas e transforma isso em um dicionario
t_i_evasions_semestral_size = t_i_evasions.groupby(['ANO_INGRESSO_y','SEMESTRE_INGRESSO', 'ANO_EVASAO','SEMESTRE_EVASAO'])['MATR_ALUNO'].nunique().to_dict() t_i_evasions_semestral_size = t_i_evasions.groupby(['ANO_INGRESSO_y','SEMESTRE_INGRESSO', 'ANO_EVASAO','SEMESTRE_EVASAO'])['MATR_ALUNO'].nunique().to_dict()
dict_evasion = {} dict_evasion = {}
aux = {} aux = {}
# transforma o groupby em um dicionario que contem a evasao dividida pelo numero de linhas de cada grupo do agrupamento, indexado pela tupla de tuplas ((ano de entrada, periodo de entrada), (ano, periodo)) # transforma o groupby em um dicionario que contem a evasao dividida pelo numero de linhas de cada grupo do agrupamento, indexado pela tupla de tuplas ((ano de entrada, periodo de entrada), (ano, periodo))
for t_i_s in t_i_semestral_size: for t_i_s in t_i_semestral_size:
# trata os campos 2 e 3 da tupla (ano de entrada, periodo de entrada, ano, periodo) para que fique no mesmo formato que as chaves do dicionario t_i_evasions_semestral_size # trata os campos 2 e 3 da tupla (ano de entrada, periodo de entrada, ano, periodo) para que fique no mesmo formato que as chaves do dicionario t_i_evasions_semestral_size
t_i_s_aux = (t_i_s[0][0], t_i_s[0][1], str(t_i_s[0][2]), t_i_s[0][3].split("o")[0]) t_i_s_aux = (t_i_s[0][0], t_i_s[0][1], str(t_i_s[0][2]), t_i_s[0][3].split("o")[0])
# pega o numero de evasoes de acordo com a tupla (ano de entrada, periodo de entrada, ano, periodo) # pega o numero de evasoes de acordo com a tupla (ano de entrada, periodo de entrada, ano, periodo)
if t_i_s_aux in t_i_evasions_semestral_size: if t_i_s_aux in t_i_evasions_semestral_size:
evasions = t_i_evasions_semestral_size[t_i_s_aux] evasions = t_i_evasions_semestral_size[t_i_s_aux]
else: else:
evasions = 0 evasions = 0
aux.update({((t_i_s[0][0], t_i_s[0][1]), (t_i_s[0][2], t_i_s[0][3])):(evasions/t_i_s[1].size)}) aux.update({((t_i_s[0][0], t_i_s[0][1]), (t_i_s[0][2], t_i_s[0][3])):(evasions/t_i_s[1].size)})
# transforma o dicionario anterior em um outro dicionario, indexado pela tupla (ano de entrada, periodo de entrada), tendo como elementos outros dicionarios. # transforma o dicionario anterior em um outro dicionario, indexado pela tupla (ano de entrada, periodo de entrada), tendo como elementos outros dicionarios.
# cada dicionario contido no dicionario e indexado pela tupla (ano, periodo) e contem a evasao dividida pelo numero de linhas de cada grupo do agrupamento # cada dicionario contido no dicionario e indexado pela tupla (ano, periodo) e contem a evasao dividida pelo numero de linhas de cada grupo do agrupamento
for t_i_s, value in aux.items(): for t_i_s, value in aux.items():
dict_evasion.setdefault(t_i_s[0], {})[t_i_s[1]] = value dict_evasion.setdefault(t_i_s[0], {})[t_i_s[1]] = value
return dict_evasion return dict_evasion
def students_per_semester(df): def students_per_semester(df):
......
...@@ -269,7 +269,7 @@ class Course(Analysis): ...@@ -269,7 +269,7 @@ class Course(Analysis):
def coursed_count(self): def coursed_count(self):
""" """
Calcula a quandidade de vezes que cada aluno cursou a disciplina. Calcula a quantidade de vezes que cada aluno cursou a disciplina.
""" """
dict_name = "filted_course_student_groupby" dict_name = "filted_course_student_groupby"
self.__data[dict_name] = self.__data["normal_dataframe"].groupby([ self.__data[dict_name] = self.__data["normal_dataframe"].groupby([
......
import numpy as np import numpy as np
# TODO:
# FAZER CACHE DE TUDO
# AO CHAMAR A FUNCAO VERIFICAR SE TEM ALGO NA CACHE
from<