Sqlite

Essa seção carrega as informações para o banco e permite usuários de realizem queries nas informações.

Wrapper

A seguinte seção adiciona uma cada de abstração para a execução de queries SQLite. A presente aplicação requer o carregamento inicial do conjunto de dados abertos da UFRN, que é então disponibilizado para leitura de diversos usuários.

Precisa-se checar se a máquina que vai receber a aplicação tem memória suficiente para roda-la.

def get_memory_usage_of_db(connection):
    with tempfile.NamedTemporaryFile(delete=True) as temp_file:
        file_connection = sqlite3.connect(temp_file.name)
        connection.backup(file_connection)
        file_connection.close()

        size_in_bytes = os.path.getsize(temp_file.name)
        size_in_mb = size_in_bytes / (1024 * 1024)

        return size_in_mb

db = ReadOnlyInMemorySQLite()
memory_usage = get_memory_usage_of_db(db.connection)
print(f"Memory usage of the database: {memory_usage} bytes")
db.execute_query(f'SELECT unidade_responsavel FROM data LIMIT 1')
unidade_responsavel = 'DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA'
nome_componente = 'FUNDAMENTOS MATEMÁTICOS DA COMPUTAÇÃO II'
docente = 'ATHANASIOS TSOUANAS'
q = f"""SELECT descricao, COUNT(*) as contagem
FROM (
    SELECT DISTINCT discente, descricao
    FROM data
    WHERE unidade_responsavel = '{unidade_responsavel}'
    AND nome_componente = '{nome_componente}'
    AND nome_docente = '{docente}'
)
GROUP BY descricao;"""
import pandas as pd
data = pd.read_sql_query(q, db.connection)
data['porcentagem'] = (data['contagem'] / data['contagem'].sum()) * 100
data
contagem_descricao = data['descricao'].value_counts()
contagem_descricao
contagem_descricao.index
db.execute_query("SELECT DISTINCT(nome_componente) from data WHERE unidade_responsavel = 'DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA' ORDER BY nome_componente")