Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
adega
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Odair M.
adega
Commits
f662f340
Commit
f662f340
authored
7 years ago
by
odair mario
Browse files
Options
Downloads
Patches
Plain Diff
resolve problemas das semtrais
parent
9d5d5b1b
No related branches found
No related tags found
1 merge request
!1
WIP: Development
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
script/analysis/course_analysis.py
+87
-43
87 additions, 43 deletions
script/analysis/course_analysis.py
with
87 additions
and
43 deletions
script/analysis/course_analysis.py
+
87
−
43
View file @
f662f340
# -*- 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
'''
existe
m
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 """
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment