build_cache.py 4.71 KB
Newer Older
1
2
3
4
from script.utils.utils import *
from script.utils.situations import *
from script.analysis.degree_analysis import *
from script.analysis.student_analysis import *
5
from script.analysis.course_analysis import *
6
7
from script.analysis.admission_analysis import *

8
from collections import defaultdict
9
10
11
12
13
14
15
16
17
18
19
20
21
22

try:
	to_unicode = unicode
except NameError:
	to_unicode = str


def build_cache(dataframe):
#	os.chdir("../src")
	path = 'cache/curso'
	
	ensure_path_exists(path)

	for cod, df in dataframe.groupby('COD_CURSO'):
Maria Ruy's avatar
Maria Ruy committed
23
		path = path + '/' + cod + '/'
24
25
		# generate_degree_data(path, df)
		# generate_student_data(path+'students/',df)
Maria Ruy's avatar
Maria Ruy committed
26
27
		generate_admission_data(path+'/admission/',df)
		#generate_student_list(path)
28
29
30
		# generate_admission_data(path, dataframe)
		# generate_admission_list(path, dataframe)
		# generate_course_data(path+'disciplina/' ,dataframe)
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109

def generate_degree_data(path, dataframe):
	ensure_path_exists(path)
	ensure_path_exists(path+'students')

	students = dataframe[['MATR_ALUNO', 'FORMA_EVASAO']].drop_duplicates()

	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)



def historico(dataframe):
	res = []

	for _, row in dataframe.iterrows():
		res.append(dict(row[['ANO', 'MEDIA_FINAL', 'PERIODO', 'SITUACAO', 'COD_ATIV_CURRIC', 'NOME_ATIV_CURRIC',
							 'CREDITOS', 'CH_TOTAL', 'DESCR_ESTRUTURA', 'FREQUENCIA']]))

	return res


def process_semestre(per, df):
	ira = df[df.SITUACAO.isin(Situation.SITUATION_AFFECT_IRA)].MEDIA_FINAL.mean()
	completas = df[df.SITUACAO.isin(Situation.SITUATION_PASS)].shape[0]
	tentativas = df[df.SITUACAO.isin(Situation.SITUATION_COURSED)].shape[0]

	return {
		'semestre': per,
		'ira': ira,
		'completas': completas,
		'tentativas': tentativas,
		'aprovacao': completas/tentativas if tentativas else 0,
		'ira_por_quantidade_disciplinas': ira/tentativas if tentativas else 0
	}



def generate_student_data(path, dataframe):
	student_data = dict()
	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"),
bhm15's avatar
bhm15 committed
110
111
112
		
		(taxa_aprovacao(dataframe),
		"taxa_aprovacao"),
113
114
115
116
117
118
119
120
	]
	
	for x in student_data:
		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])
	
bhm15's avatar
bhm15 committed
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
	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])
	
	
	
	
136
137
138
139
140
141
	#Falta verificar se alguem nao recebeu algumas analises
	
def generate_student_list(path):
	pass

def generate_admission_data(path,df):
Maria Ruy's avatar
Maria Ruy committed
142
143
144
	
	listagem = []
	
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
	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 = {
Maria Ruy's avatar
Maria Ruy committed
160
161
			"ano": x[0],
			"semestre": x[1]
162
163
164
165
166
167
		}

		for analise in turmas[t]:
			resumo_turma[analise] = turmas[t][analise]
		
		listagem.append(resumo_turma)
Maria Ruy's avatar
Maria Ruy committed
168
169
170

	save_json(path+"lista_turma_ingresso.json", listagem)
	
171

Maria Ruy's avatar
Maria Ruy committed
172
def generate_admission_list(path,df):
173
174
	pass

Odair M.'s avatar
Odair M. committed
175
def generate_course_data(path,df):
176
177
178
179
	lista_disciplinas = {} 
	informacoes_gerais(df,lista_disciplinas) 
	analises_gerais(df,lista_disciplinas) 
	analises_semestrais(df,lista_disciplinas) 
Odair M.'s avatar
Odair M. committed
180
181
182
	for disciplina in lista_disciplinas.keys():
		save_json(path+disciplina+'.json' ,lista_disciplinas[disciplina]) 
	disciplinas = listagem_disciplina(df,lista_disciplinas) 
183
	save_json(path+'disciplinas.json',disciplinas) 
Odair M.'s avatar
Odair M. committed
184