Commit cb71df5e authored by Odair M.'s avatar Odair M.
Browse files

adega#123: adiciona report_api & inicia frontend degree

parents f2827eb9 9e08b9e1
......@@ -33,7 +33,28 @@ $ sudo make docker-up # Executa os containers postgres e webserver
## Desenvolvimento com o docker
Enquanto o `sudo make docker-up` estiver sendo executado, as alterações feitas nos arquivos do projeto será compartilhado com os arquivos do container docker. Ou seja, é possível alterar qualquer arquivo do projeto e haverá resultados em tempo real.
### Dependências
Docker >=1.13.1
Docker-compose >=1.21.2
#### Possíveis erros:
*1*: O docker-compose padrão nos repositórios podem não conter a versão mais recente. Caso a etapa de instalação não funcione, consulte a [referência dos desenvolvedores](https://github.com/docker/compose/releases).
*2*: Seu computador pode ter problemas ao configurar o DNS. Neste caso, erros parecidos como os a seguir irão acontecer:
```bash
E: Unable to locate package python3-pip
E: Unable to locate package postgresql-client
```
Neste caso, consulte [este tutorial](https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns/) para resolver o problema.
Lembre de utilizar o comando `sudo docker system prune -a` para limpar a cache e evitar os problemas.
### Uso
Enquanto o `sudo make docker-up` estiver sendo executado, as alterações feitas nos arquivos do projeto serão compartilhadas com os arquivos do container docker. Ou seja, é possível alterar qualquer arquivo do projeto e haverá resultados em tempo real.
Assim como é possível realizar qualquer comando como seria feito no com o manage.py, também é possível por meio do comando `sudo make docker-manage`. Por exemplo:
......@@ -54,7 +75,7 @@ $ sudo make docker-fix
## Remover os containers + banco de dados
Para apagar os containers e o banco de dados, execute o seguinte comando:
```bash
$ sudo docker-remove-all
$ sudo make docker-remove-all
```
*Observação*: Esse comando **não** irá deletar qualquer arquivo do projeto / diretório local, apenas os containers.
......@@ -110,6 +131,28 @@ Ao sair do projeto execute `exit` para sair do virtualenv e evitar polui-lo
Após você logar no sistema com o seu super usuário você terá acesso ao `URL_DO_SITE/admin`, graças ao [Django admin](https://docs.djangoproject.com/en/1.10/ref/contrib/admin/) nesta tela você é capaz de gerenciar os dados salvos nas models do projeto.
Para transformar o seu usuário em professor basta clicar em `professor`e então selecionar o seu usuário e o curso. Agora se você voltar para a página inicial do sistema você deve ver uma listagem dos seus cursos.
## Executando análises
Para executar as análises, acesse `localhost:8000/admin` e adicione um submission.
Após isso execute o comando:
```bash
sudo make docker-manage analyze 1 # usando o docker
```
ou
```bash
python3 manage.py analyze 1
```
Onde 1 é o id do submission.
## Gerar diagrama do projeto
......
import numpy as np
from script.utils.situations import *
from script.analysis.student_analysis import ira_alunos
from collections import defaultdict
import numpy as np
ANO_ATUAL = 2017
SEMESTRE_ATUAL = 2
def iras_alunos_turmas_ingressos(df):
iras = ira_alunos(df)
turmas_ingresso_grr = df.groupby([
"ANO_INGRESSO",
"SEMESTRE_INGRESSO",
"MATR_ALUNO"]
).groups
# Cria um dicionario cujas chaves são GRR
# e valor são tuplas (ano_ingresso,semestre_ingresso)
ano_semestre_do_grr = {}
for ti in turmas_ingresso_grr:
ano_semestre_do_grr[ ti[2] ] = (ti[0],ti[1])
resultados = defaultdict(list)
for grr in iras:
semestre_ano = ano_semestre_do_grr[grr]
resultados[ semestre_ano ].append(iras[grr])
return resultados
def media_ira_turma_ingresso(df):
iras_alunos_por_turma = iras_alunos_turmas_ingressos(df)
# Calcula a média do ira para cada turma_ingresso
resultados = {}
for r in iras_alunos_por_turma:
aux = np.array(iras_alunos_por_turma[r])
resultados[r] = np.mean(aux)
return resultados
def listagem_turma_ingresso(df):
#~ print(df.groupby(["ANO_INGRESSO", "SEMESTRE_INGRESSO"]).groups)
grupos = df.groupby(["ANO_INGRESSO", "SEMESTRE_INGRESSO"]).groups
for t in grupos:
print(t)
print("\n\n")
print(df["FORMA_INGRESSO"][grupos[t]].drop_duplicates())
def desvio_padrao_turma_ingresso(df):
iras_alunos_por_turma = iras_alunos_turmas_ingressos(df)
# Calcula o desvio padrão para cada turma_ingresso
resultados = {}
for r in iras_alunos_por_turma:
aux = np.array(iras_alunos_por_turma[r])
resultados[r] = np.std(aux)
return resultados
......@@ -5,6 +5,7 @@ from script.analysis.student_analysis import *
from script.analysis.course_analysis import *
from script.analysis.admission_analysis import *
from collections import defaultdict
try:
to_unicode = unicode
......@@ -20,12 +21,7 @@ def build_cache(dataframe,path):
path = path + '/'
generate_degree_data(path, df)
generate_student_data(path+'students/',df)
#~ generate_admission_data(path+'/'+cod+'/admission/',df)
#generate_degree_data(path, dataframe)
#generate_student_data(path, dataframe)
#generate_student_list(path)
#generate_admission_data(path)
#generate_admission_list(path)
generate_admission_data(path+'/admission/',df)
generate_course_data(path+'disciplina/' ,dataframe)
def generate_degree_data(path, dataframe):
......@@ -33,22 +29,7 @@ def generate_degree_data(path, dataframe):
ensure_path_exists(path+'students')
students = dataframe[['MATR_ALUNO', 'FORMA_EVASAO']].drop_duplicates()
build_degree_json(path,dataframe)
# data = {
# 'average_graduation': average_graduation(dataframe),
# 'general_failure': general_failure(dataframe),
# 'general_ira': general_ira(dataframe),
# 'active_students': students[students.FORMA_EVASAO == EvasionForm.EF_ATIVO].shape[0],
# 'graduated_students': students[students.FORMA_EVASAO == EvasionForm.EF_FORMATURA].shape[0],
# }
#save_json(path+'/degree.json', data)
#~ for ind, hist in dataframe.groupby('MATR_ALUNO'):
#~ generate_student_data_old(path+'students/{}.json'.format(ind), dataframe)
build_degree_json(path,dataframe)
def historico(dataframe):
res = []
......@@ -81,77 +62,105 @@ def generate_student_data(path, dataframe):
all_grrs = list(dataframe["MATR_ALUNO"].drop_duplicates())
for x in all_grrs:
student_data[x] = dict()
analises = [
# tupla que contem no primeiro elemento a funcao que retorna um dicionario com {"GRR": valor}
# e na segunda posicao o nome que esta analise tera no json
(posicao_turmaIngresso_semestral(dataframe),
"posicao_turmaIngresso_semestral"),
(periodo_real(dataframe),
"periodo_real"),
(periodo_pretendido(dataframe),
"periodo_pretendido"),
(ira_semestral(dataframe),
"ira_semestral"),
(ira_por_quantidade_disciplinas(dataframe),
"ira_por_quantidade_disciplinas"),
(indice_aprovacao_semestral(dataframe),
"indice_aprovacao_semestral"),
(aluno_turmas(dataframe),
"aluno_turmas"),
(taxa_aprovacao(dataframe),
"taxa_aprovacao"),
]
for x in student_data:
for a in analises: # Usar para fazer a verificacao de
for a in analises: # Usar para fazer a verificacao de
student_data[x][a[1]] = a[0][x] # analises nulas para um GRR
save_json(path+x+".json", student_data[x])
listagens_arquivos = [
EvasionForm.EF_ABANDONO,
EvasionForm.EF_DESISTENCIA,
EvasionForm.EF_FORMATURA,
EvasionForm.EF_ATIVO
]
listagens = listagem_alunos(dataframe)
for l in listagens:
if(l in listagens_arquivos):
save_json(path+"listagem/"+str(l)+".json", listagens[l])
#Falta verificar se alguem nao recebeu algumas analises
def generate_student_list(path):
pass
def generate_admission_data(path,df):
listagem_turma_ingresso(df)
pass
def generate_admission_list(path):
pass
listagem = []
analises = [
("ira", media_ira_turma_ingresso(df)),
("desvio_padrao", desvio_padrao_turma_ingresso(df)),
]
# cria um dicionario com as analises para cada turma
turmas = defaultdict(dict)
for a in analises:
for x in a[1]:
turmas[x][ a[0] ] = a[1][x]
listagem = []
for t in turmas:
resumo_turma = {
"ano": x[0],
"semestre": x[1]
}
for analise in turmas[t]:
resumo_turma[analise] = turmas[t][analise]
listagem.append(resumo_turma)
save_json(path+"lista_turma_ingresso.json", listagem)
def generate_admission_list(path,df):
pass
def generate_course_data(path,df):
lista_disciplinas = {}
informacoes_gerais(df,lista_disciplinas)
analises_gerais(df,lista_disciplinas)
analises_semestrais(df,lista_disciplinas)
lista_disciplinas = {}
informacoes_gerais(df,lista_disciplinas)
analises_gerais(df,lista_disciplinas)
analises_semestrais(df,lista_disciplinas)
for disciplina in lista_disciplinas.keys():
save_json(path+disciplina+'.json' ,lista_disciplinas[disciplina])
disciplinas = listagem_disciplina(df,lista_disciplinas)
save_json(path+'disciplinas.json',disciplinas)
save_json(path+disciplina+'.json',lista_disciplinas[disciplina])
disciplinas = listagem_disciplina(df,lista_disciplinas)
save_json(path+'disciplinas.json',disciplinas)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment