Commit 5c2403e0 authored by João Denis Rodrigues's avatar João Denis Rodrigues

Mudando para o pandas

parent 702ba02b
import re
import os
import sys
import pandas as pd
import pathlib
from pathlib import Path
from glob import glob
from json import load as json_load
#import django
#sys.path.append(os.getcwd())
#os.environ["DJANGON_SETTINGS_MODULE"] = "adega.settings"
#django.setup()
#from degree.models import *
#from student.models import *
#from course.models import *
#from admission.models import *
#from klass.models import *
def start():
directory = os.fsencode('relatorios')
# path = Path(str(directory))
# print(path)
for path, subdirs, files in os.walk(directory):
# print(subdirs)
# print(pathlib.PurePath(str(p), 'teste'))
# print(pathlib.PurePath(
for f in files:
print(f)
file_path = pathlib.PurePath(str(path), str(f))
print(pathlib.PurePath(str(path), str(f)))
file_open(file_path)
# print(pathlib.PurePath(path, str(f)))
def file_open(path):
if str(path).find('csv'):
print('csv')
return pd.read_csv(str(path))
else:
print('excel')
return pd.read_excel(str(path))
if __name__ == '__main__':
start()
import pandas as pd
import numpy as np
import math
from utils.situations import Situation
def average_graduation(df):
not_nan = df.dropna(axis=0)
total_student = not_nan.shape[0]
list_graduation = not_nan[not_nan.FORMA_EVASAO == 'Formatura']
total_graduate = list_graduation.shape[0]
return total_graduate / total_student
def general_failure(df):
not_nan = df.dropna(axis=0)
affect_ira = not_nan[not_nan.SITUACAO.isin(Situation.SITUATION_AFFECT_IRA)]
failures = affect_ira[affect_ira.SITUACAO.isin(Situation.SITUATION_FAIL)]
average = failures.shape[0] / affect_ira.shape[0]
student_courses = affect_ira.groupby(['MATR_ALUNO'], as_index=False)\
.aggregate({'SITUACAO': 'count'})
student_failures = failures.groupby(['MATR_ALUNO'], as_index=False)\
.aggregate({'SITUACAO': 'count'})
merged = pd.merge(student_courses, student_failures, on=['MATR_ALUNO'])
merged.columns = ['MART_ALUNO', 'FEITAS', 'REPROVADO']
variance = merged['REPROVADO'].div(merged['FEITAS']).sub(average)\
.pow(2).sum() / merged.shape[0]
standard_deviation = math.sqrt(variance)
return (average, standard_deviation)
def general_ira(df):
fixed = df.dropna(axis=0)[df.SITUACAO.isin(Situation.SITUATION_AFFECT_IRA)]
fixed = fixed[fixed.MEDIA_FINAL <= 100]
return (fixed.MEDIA_FINAL.mean(), fixed.MEDIA_FINAL.std())
import re
import os
import sys
import pandas as pd
from glob import glob
from json import load as json_load
from utils.situations import *
def load_dataframes(cwd='.'):
dataframes = []
for path, dirs, files in os.walk(cwd):
for f in files:
file_path = path + '/' + f
dh = {'name': f, 'dataframe': None}
if 'csv' in f:
dh['dataframe'] = read_csv(file_path)
if 'xls' in f:
dh['dataframe'] = read_excel(file_path)
if dh['dataframe'] is not None:
dataframes.append(dh)
return dataframes
def read_excel(path, planilha='Planilha1'):
return pd.read_excel(path)
def read_csv(path):
return pd.read_csv(path)
def fix_dataframes(dataframes):
for df in dataframes:
fix_situation(df['dataframe'])
def fix_situation(df):
if hasattr(df, 'SITUACAO'):
for situation in Situation.SITUATIONS:
df.loc[df.SITUACAO == situation[1], 'SITUACAO'] = situation[0]
if situation[1] == 'Outro':
temp = df[~df['SITUACAO'].astype(str).str.isdigit()]
df.loc[~df.SITUACAO.astype(str).str.isdigit()] = situation[0]
import sys
import os
import time
import math
from datetime import timedelta
from pathlib import Path
from utils.utils import build_path
from analysis.degree_analysis import *
try:
to_unicode = unicode
except NameError:
to_unicode = str
def build_cache(registry, history):
# os.chdir("../src")
path = "cache"
build_path(path)
path += "/curso"
build_path(path)
generate_degree_data(path, registry, history)
generate_student_data(path)
generate_student_list(path)
generate_admission_data(path)
generate_admission_list(path)
generate_course_data(path)
generate_course_general_data(path)
def generate_degree_data(path, registry, history):
average_graduation(registry)
general_failure(history)
general_ira(history)
pass
def generate_student_data(path):
pass
def generate_student_list(path):
pass
def generate_admission_data(path):
pass
def generate_admission_list(path):
pass
def generate_course_data(path):
pass
def generate_course_general_data(path):
pass
import os
import time
from base.dataframe_base import load_dataframes, fix_dataframes
from build_cache import build_cache
from datetime import timedelta
def main():
start_time = time.clock()
start_time_exec = time.time()
dataframes = load_dataframes(os.getcwd() + '/' + 'base')
fix_dataframes(dataframes)
for df in dataframes:
if 'historico' in df['name']:
history = df['dataframe']
if 'matricula.xls' in df['name']:
registry = df['dataframe']
build_cache(registry, history)
cpu_time = timedelta(seconds=round(time.clock() - start_time))
run_time = timedelta(seconds=round(time.time() - start_time_exec))
print("--- Tempo de CPU: {} ---".format(cpu_time))
print("--- Tempo total: {} ---".format(run_time))
if __name__ == "__main__":
main()
# == Admission Form == #
class AdmissionType:
AT_DESCONHECIDO = 0
AT_VESTIBULAR = 1
AT_ENEM = 2
AT_PROVAR = 3
AT_REOPCAO = 4
AT_TRANSFERENCIA_EX_OFICIO = 5
AT_APROVEITAMENTO_CURSO = 6
AT_MOBILIDADE = 7
AT_REINTEGRACAO = 8
AT_OUTROS = 100
ADMISSION_FORM = (
(AT_DESCONHECIDO, 'Desconhecido'),
(AT_VESTIBULAR, 'Vestibular'),
(AT_ENEM, 'ENEM'),
(AT_PROVAR, 'PROVAR'),
(AT_REOPCAO, 'Reopção de curso'),
(AT_TRANSFERENCIA_EX_OFICIO, 'Transferência por ex-ofício'),
(AT_APROVEITAMENTO_CURSO, 'Aproveitamento de curso'),
(AT_MOBILIDADE, 'Mobilidade Acadêmica'),
(AT_REINTEGRACAO, 'Reintegração'),
(AT_OUTROS, 'Outro'),
)
# == Evasion Form == #
class EvasionForm:
EF_DESCONHECIDO = 0
EF_ATIVO = 1
EF_FORMATURA = 2
EF_ABANDONO = 3
EF_DESISTENCIA_VESTIBULAR = 4
EF_CANCELAMENTO = 5
EF_NAO_CONFIRMACAO_VAGA = 6
EF_NOVO_VESTIBULAR = 7
EF_TRANSFERENCIA_EXTERNA = 8
EF_REOPCAO = 9
EF_DESISTENCIA = 10
EF_JUBILAMENTO = 11
EF_OUTROS = 100
EVASION_FORM = (
(EF_DESCONHECIDO, 'Desconhecido'),
(EF_ATIVO, 'Ativo'),
(EF_FORMATURA, 'Formado'),
(EF_ABANDONO, 'Abandono'),
(EF_DESISTENCIA_VESTIBULAR, 'Desistencia vestibular'),
(EF_CANCELAMENTO, 'Cancelamento'),
(EF_NAO_CONFIRMACAO_VAGA, 'Não confirmação de vaga'),
(EF_NOVO_VESTIBULAR, 'Novo vestibular'),
(EF_TRANSFERENCIA_EXTERNA, 'Transferência externa'),
(EF_REOPCAO, 'Reopção de curso'),
(EF_DESISTENCIA, 'Desistência'),
(EF_JUBILAMENTO, 'Jubilado'),
(EF_OUTROS, 'Outros'),
)
# == Situation Courses == #
class Situation:
SIT_DESCONHECIDA = 0
SIT_APROVADO = 1
SIT_REPROVADO = 2
SIT_MATRICULA = 3
SIT_REPROVADO_FREQ = 4
SIT_EQUIVALENCIA = 5
SIT_CANCELADO = 6
SIT_DISPENSA_COM_NOTA = 7
SIT_DISPENSA_SEM_NOTA = 8
SIT_CONHECIMENTO_APROVADO = 9
SIT_CONHECIMENTO_REPROVADO = 10
SIT_TRANCAMENTO_TOTAL = 11
SIT_TRANCAMENTO_ADMINISTRATIVO = 12
SIT_REPROVADO_SEM_NOTA = 13
SIT_HORAS = 13
SIT_OUTROS = 100
SITUATIONS = (
(SIT_DESCONHECIDA, 'Desconhecido'),
(SIT_APROVADO, 'Aprovado'),
(SIT_REPROVADO, 'Reprovado por nota'),
(SIT_MATRICULA, 'Matrícula'),
(SIT_REPROVADO_FREQ, 'Reprovado por Frequência'),
(SIT_EQUIVALENCIA, 'Equivalência de Disciplina'),
(SIT_CANCELADO, 'Cancelado'),
(SIT_DISPENSA_COM_NOTA, 'Dispensa de Disciplinas (com nota)'),
(SIT_DISPENSA_SEM_NOTA, 'Dispensa de Disciplinas (sem nota)'),
(SIT_CONHECIMENTO_APROVADO, 'Aprov Conhecimento'),
(SIT_CONHECIMENTO_REPROVADO, 'Reprov Conhecimento'),
(SIT_TRANCAMENTO_TOTAL, 'Trancamento Total'),
(SIT_TRANCAMENTO_ADMINISTRATIVO, 'Trancamento Administrativo'),
(SIT_REPROVADO_SEM_NOTA, 'Reprovado sem nota'),
(SIT_HORAS, 'Horas'),
(SIT_OUTROS, 'Outro'),
)
SITUATION_AFFECT_IRA = (
SIT_APROVADO,
SIT_REPROVADO,
SIT_REPROVADO_FREQ,
SIT_DISPENSA_COM_NOTA,
SIT_CONHECIMENTO_APROVADO,
SIT_CONHECIMENTO_REPROVADO
)
SITUATION_PASS = (
SIT_APROVADO,
SIT_CONHECIMENTO_APROVADO,
SIT_DISPENSA_COM_NOTA
)
SITUATION_FAIL = (
SIT_REPROVADO,
SIT_REPROVADO_FREQ,
SIT_CONHECIMENTO_REPROVADO
)
import os
def build_path(path):
if not os.path.exists(path):
os.mkdir(path)
import sys
import os
import django
import time
import math
from datetime import timedelta
from pathlib import Path
os.environ["DJANGO_SETTINGS_MODULE"] = "adega.settings"
django.setup()
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