Commit 38cf594f authored by João Denis Rodrigues's avatar João Denis Rodrigues

Coisas do antigo

parent 62721014
# ADEGA
Este software faz parte de um projeto do PET Computação UFPR para
análise de dados dos cursos de graduação da UFPR. Veja a [wiki](http://gitlab.c3sl.ufpr.br/pet/adega/wikis/home).
## Versão
0.0.0
## Obtendo os códigos
Os códigos fonte do projeto estão disponíveis publicamente no [gitlab]
(gitlab.c3sl.ufpr.br/pet/adega).
E podem ser clonado com o comando
```bash
$ git clone git@gitlab.c3sl.ufpr.br:pet/adega.git
```
## Instalação e dependências
```bash
sudo make install-dev
```
se você possui o arquivo do banco de dados compartilhado internamente pelos
desenvolvedores do projeto coloque-o na home do projeto, ele vem com um usuário
`pet` com senha `pet` pré-configurado para testes.
se você não possui o arquivo rode
```bash
python manage.py migrate
python manage.py createsuperuser
```
## Executando o projeto
Por padrão ele irá rodar no 127.0.0.1:8000
```bash
python manage.py runserver
```
Se estiver usando o cloud9 use o ip e a porta que ele libera, assim:
```bash
python manage.py runserver $IP:$PORT
```
Então acesse pela url fornecida
## Transformando o seu usuário em um professor
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.
## Gerar diagrama do projeto
Basta executar:
```bash
python manage.py graph_models -a -o diagrama.png
```
### Entendendo as dependências do projeto:
* [Django](https://www.djangoproject.com/) - Framework base. Trata a requisição dos clientes e chama as devidas rotinas.
* [Bootstrap](http://getbootstrap.com/) - Framework css. Usamos os seus componentes para deixar as telas bonitas
* [Charts.js](http://www.chartjs.org/) - Biblioteca javascript para desenhar gráficos.
* [Pandas](http://pandas.pydata.org/) - usada para importação dos dados
* [django-extensions](https://django-extensions.readthedocs.io/en/latest/) - Várias extensões para o django. Estamos usando para gerar o diagrama do projeto.
Dependências antigas
* [Pyyaml](http://pyyaml.org/)
* [Scipy](https://www.scipy.org/)
* [Matplotlib](http://matplotlib.org/)
* [IPython](https://ipython.org/)
## Contato
Email - pet@inf.ufpr.br
Facebook - pt-br.facebook.com/petcompufpr
#! /bin/bash
FILE=$(tail -n +2 "$1") #sem cabeçalho
head -1 $1 #cabeçalho
while read line
do
ementa=$(echo "$line" | cut -d',' -f15)
re='^[0-9]+$'
if [[ $ementa =~ $re ]] ; then
echo "$line" | cut -d',' -f1-14 --output-delimiter="," | xargs echo -n
echo -n ",,"
echo "$line" | cut -d',' -f15- --output-delimiter=","
else
echo "$line"
fi
done <<< "$FILE"
#!/usr/bin/env python
# *-* coding:utf-8
from __future__ import print_function
import pandas as pd
import sys
def shift_evasao(row):
if row['ANO_EVASAO'] in ("1o. Semestre", "2o. Semestre"):
row['PERIODO_EVASAO'] = row['ANO_EVASAO']
row['ANO_EVASAO'] = row['DT_SAIDA']
row['DT_SAIDA'] = None
return row
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
PATH = sys.argv[1]
if not PATH:
eprint('Erro: Passe o caminho do relatório de matricula dos alunos como parametro')
df = pd.read_csv(PATH)
df = df.apply(shift_evasao, axis=1)
df.to_csv(sys.stdout, sep=',', encoding='utf-8')
#!/usr/bin/env python
# *-* coding:utf-8
from __future__ import print_function
import pandas as pd
import sys
def preenhce_situacao_limpa_media_credito(row):
if row['MEDIA_CREDITO'] != 'A':
row['SITUACAO_CURRICULO'] = row['MEDIA_CREDITO']
row['MEDIA_CREDITO'] = ''
return row
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
PATH = sys.argv[1]
if not PATH:
eprint('Erro: Passe o caminho do relatório do historico dos alunos como parametro')
df = pd.read_csv(PATH)
# shifta DESCR_ESTRUTURA e ID_ESTRUTURA_CUR uma coluna para direita
df = df.rename(columns={'DESCR_ESTRUTURA': 'OLD_DESCR_ESTRUTURA'})
df = df.rename(columns={'ID_ESTRUTURA_CUR': 'DESCR_ESTRUTURA'})
df = df.rename(columns={'ID_NOTA': 'ID_ESTRUTURA_CUR'})
df['ID_NOTA'] = pd.Series()
df = df.apply(preenhce_situacao_limpa_media_credito, axis=1)
df.to_csv(sys.stdout, sep=',', encoding='utf-8')
This diff is collapsed.
#!/usr/bin/python3
'''
rodar do diretório adega, não do load_excel
'''
import re
import os
import sys
import pandas as pd
from glob import glob
from json import load as json_load
import django
sys.path.append(os.getcwd())
print(os.getcwd())
os.environ["DJANGO_SETTINGS_MODULE"] = "adega.settings"
django.setup()
from curso.models import *
from student.models import *
from disciplina.models import *
from turmaIngresso.models import *
from turma.models import *
hist = pd.read_excel('load_excel/relatorios/historico.xls', 'Planilha1')
matr = pd.read_excel('load_excel/relatorios/matricula.xls', 'Planilha1')
validos = set(hist.MATR_ALUNO.values)
bcc = Curso.objects.create(codigo='21A', ano_relatorio=2016,
semestre_relatorio=2, nome="Ciência da Computação")
g2007 = Grade.objects.create(curso=bcc, ano_inicio=2007)
g2011 = Grade.objects.create(curso=bcc, ano_inicio=2011)
with open('load_excel/data/bcc/grade2007.json') as f:
g2007_data = json_load(f)
with open('load_excel/data/bcc/grade2011.json') as f:
g2011_data = json_load(f)
for obr in g2007_data:
d = Disciplina()
d.codigo = obr['codigo']
d.nome = obr['nome']
d.carga_horaria = obr['carga_horaria']
d.creditos = obr['creditos']
d.save()
dg = DisciplinaGrade()
dg.grade = g2007
dg.disciplina = d
if 'periodo' in obr:
dg.periodo = obr['periodo']
dg.tipo_disciplina = obr['tipo']
dg.save()
for obr in g2011_data:
try:
d = Disciplina.objects.get(codigo=obr['codigo'])
except Disciplina.DoesNotExist:
d = Disciplina()
d.codigo = obr['codigo']
d.nome = obr['nome']
d.carga_horaria = obr['carga_horaria']
d.creditos = obr['creditos']
d.save()
dg = DisciplinaGrade()
dg.grade = g2011
dg.disciplina = d
if 'periodo' in obr:
dg.periodo = obr['periodo']
dg.tipo_disciplina = obr['tipo']
dg.save()
for _, student in matr.iterrows():
if student['MATR_ALUNO'] not in validos:
continue
s = Student()
s.grr = student['MATR_ALUNO']
s.name = student['NOME_PESSOA']
s.forma_evasao = student['FORMA_EVASAO']
grade = g2011
if type(student['PERIODO_EVASAO']) == str:
r = re.search('(?P<ano>\d*)/(?P<semestre>\d)', student['PERIODO_EVASAO'])
if r is None:
continue
ano, semestre = int(r.group('ano')), int(r.group('semestre'))
s.ano_evasao = ano
s.semestre_evasao = semestre
if ano < 2011:
grade = g2007
r = re.search('(?P<ano>\d*)/(?P<semestre>\d)', student['PERIODO_INGRESSO'])
ano, semestre = int(r.group('ano')), int(r.group('semestre'))
t, _ = TurmaIngresso.objects.get_or_create(ano=ano, semestre=semestre, curso=bcc)
s.turma_ingresso = t
s.grade_atual = grade
s.save()
sys.exit(0)
for _, data in hist.iterrows():
student = Student.objects.get(grr=data['MATR_ALUNO'])
disciplina = Disciplina.objects.get(codigo=data['COD_ATIV_CURRIC'])
ano = data['ANO']
try:
semestre = int(data['PERIODO'][0])
except:
semestre = 1
turma = Turma.objects.get_or_create(disciplina=disciplina, ano=ano, semestre=semestre)
t = AlunoTurma()
t.turma = turma
t.student = student
t.nota = data['MEDIA_FINAL']
t.situacao = data['SITUACAO']
t.save()
#!/usr/bin/python3
import re
import os
import sys
import pandas as pd
from glob import glob
from json import load as json_load
import django
sys.path.append(os.getcwd())
os.environ["DJANGO_SETTINGS_MODULE"] = "adega.settings"
django.setup()
from curso.models import *
from student.models import *
from disciplina.models import *
from turmaIngresso.models import *
from turma.models import *
hist = pd.read_excel('load_excel/relatorios/historico.xls', 'Planilha1')
total = hist.shape[1]
def proccess(d):
data = d[1]
try:
student = Student.objects.get(grr=data['MATR_ALUNO'])
disciplina = Disciplina.objects.get(codigo=data['COD_ATIV_CURRIC'])
except:
return
ano = data['ANO']
try:
semestre = int(data['PERIODO'][0])
except:
semestre = 1
turma, _ = Turma.objects.get_or_create(disciplina=disciplina, ano=ano, semestre=semestre)
t = AlunoTurma()
t.turma = turma
t.student = student
t.nota = data['MEDIA_FINAL']
t.situacao = data['DESCR_SITUACAO']
t.save()
count = 0
total = hist.shape[0]
for i in hist.iterrows():
proccess(i)
if count % 100 == 0:
print('{:>6} / {}'.format(count, total))
count += 1
#!/usr/bin/python3
import re
import os
import sys
import pandas as pd
from glob import glob
from json import load as json_load
import django
sys.path.append(os.getcwd())
os.environ["DJANGO_SETTINGS_MODULE"] = "adega.settings"
django.setup()
from curso.models import *
from student.models import *
from disciplina.models import *
from turmaIngresso.models import *
from turma.models import *
from student.analysis import SITUACOES_CONTRIBUEM_IRA
hist = pd.read_excel('load_excel/relatorios/historico.xls', 'Planilha1')
group = hist.groupby('MATR_ALUNO')
total = len(group)
for i, data in enumerate(group):
index, data = data[0], data[1]
try:
aluno = Student.objects.get(grr=index)
except:
continue
print("{:>5}/{}\t\t{}".format(i, total, index))
ira = data[data.DESCR_SITUACAO.isin(SITUACOES_CONTRIBUEM_IRA)].MEDIA_FINAL.mean()
aluno.ira = ira if pd.notnull(ira) else None
aluno.save()
SITE-OWNER = www-data
SITE-OWNER-GROUP = www-data
all:
clean:
@rm -rf *~ *.pyc *.backup
clean-deploy: clean
@rm -rf static db.sqlite3
coverage:
coverage run --source='.' manage.py test
coverage html
xdg-open htmlcov/index.html
docs:
@echo 'ainda não implementado'
deploy:
python manage.py migrate
python manage.py collectstatic -v0 --noinput
chown $(SITE-OWNER):$(SITE-OWNER-GROUP) -R .
clean-docs:
@rm -rf docs
install:
apt-get install -y python3-dev
apt-get install -y python3-pip
pip3 install -U pip setuptools
pip3 install -r requirements.txt
install-dev: install
pip3 install -r requirements-dev.txt
create-db:
mysql -u root < configure-db.sql
python3 manage.py migrate
coverage
ipython
pydotplus
jupyter
django-silk
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