Skip to content
Snippets Groups Projects
Commit 5c2403e0 authored by João Denis Rodrigues's avatar João Denis Rodrigues
Browse files

Mudando para o pandas

parent 702ba02b
No related branches found
No related tags found
No related merge requests found
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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment