def do_md_coluna_def():
    id = getattr(request.forms, 'id')
    id_tabela = getattr(request.forms, 'id_tabela')
    tipo = getattr(request.forms, 'tipo')
    nome = getattr(request.forms, 'nome')
    sql = getattr(request.forms, 'sql')
    desabilitado = getattr(request.forms, 'desabilitado') != ''
    titulo = getattr(request.forms, 'titulo')
    descricao = getattr(request.forms, 'descricao')
    classe = getattr(request.forms, 'classe') != ''
    fl_aluno = getattr(request.forms, 'fl_aluno') != ''
    chave_estrangeira = getattr(request.forms, 'chave_estrangeira') != ''
    id_tabela_fk = getattr(request.forms, 'id_tabela_fk')
    id_coluna_fk = getattr(request.forms, 'id_coluna_fk')
    val_aluno_risco = getattr(request.forms, 'val_aluno_risco')
    sinonimos = getattr(request.forms, 'sinonimos')

    coluna = meta.ObterColuna(id)
    coluna.id_tabela = id_tabela
    coluna.tipo = tipo
    coluna.nome = nome
    coluna.sql = sql
    coluna.desabilitado = desabilitado
    coluna.titulo = titulo
    coluna.descricao = descricao
    coluna.classe = classe
    coluna.fl_aluno = fl_aluno
    coluna.chave_estrangeira = chave_estrangeira
    coluna.id_tabela_fk = id_tabela_fk
    coluna.id_coluna_fk = id_coluna_fk
    coluna.val_aluno_risco = val_aluno_risco
    coluna.sinonimos = sinonimos
    meta.SalvarColuna(coluna)

    redirect('/colunas?id=' + str(id_tabela))
def profAlunos():
    seg.ChecarPerfil(seg.PERFIL_Professor)

    colunaIdAluno = meta.ObterColunaIdAluno()
    nomeColunaClasse, idColunaClasse = meta.ObterColunaClasse(
        colunaIdAluno.id_tabela)

    sql = dbTab.GerarSQL(colunaIdAluno.id_tabela, 'O',
                         [colunaIdAluno.id, idColunaClasse])
    df = dm.db.consultarSQLDataFrame(sql)

    lista = []
    for index, row in df.iterrows():
        login_aluno = row[colunaIdAluno.nome]
        usuario = usu.ObterUsuarioPorLogin(login_aluno)
        lista.append(usuario)

    campos = ({
        'campo': 'login',
        'titulo': 'matricula'
    }, {
        'campo': 'nome',
        'titulo': 'Nome'
    })

    grd = comp.grid('Lista de Alunos', lista, campos)

    return dict(grid=grd)
def mineracao_dados_prever():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    idTabela = request.params.get('id')

    tabela = imp.ObterTabela(idTabela)
    tabPrev = dm.ObterTabelaPredicao(idTabela)
    tabPrevAlg = None
    colunaClasse, id_coluna = meta.ObterColunaClasse(idTabela)

    tabelaPrev = dm.ObterDadosPrevisao(idTabela)
    colunas = []
    for col in tabelaPrev.columns:
        if col == "rowid":
            continue

        coluna = meta.ObterColunaPorTabNome(idTabela, col)

        colunas.append({'campo': coluna.nome, 'titulo': coluna.titulo})

    grid = comp.gridSP('Modelo DB para previsão', tabelaPrev, colunas, '')

    for alg in tabPrev.Alg:
        if alg.selecionado:
            tabPrevAlg = alg

    return dict(idTabela=idTabela,
                tabela=tabela,
                tabPrev=tabPrev,
                tabPrevAlg=tabPrevAlg,
                colunaClasse=colunaClasse,
                grid=grid)
def ListarCampos(idTabela, edt = True, splColunas = []):
    listaCampos = meta.ListarColunas(idTabela)
    listaExibicao = dbTab.ListarExibicao(idTabela)

    campos = [ ]

    for col in listaCampos:
        if col.desabilitado == True:
            continue

        if len(splColunas) != 0:
            existeColunaFiltro = False
            for idCol in splColunas:
                if int(idCol) == int(col.id):
                    existeColunaFiltro = True

            if existeColunaFiltro == False:
                continue


        if col.chave_estrangeira == False or edt == False:
            c_campo = {'campo': col.nome, 'titulo': col.titulo }
        else:
            c_campo = {'campo': col.nome, 'titulo': '<a href="transformacao_sel?idTabela=' + str(idTabela) + '&idColuna=' + str(col.id) + '">' + col.titulo + '</a>' }

        campos.append(c_campo)

    conta_tb = 0
    for colExib in listaExibicao:

        col = meta.ObterColuna(colExib.id_coluna_fk)
        if col.desabilitado == True:
            continue

        if len(splColunas) != 0:
            existeColunaFiltro = False
            for idCol in splColunas:
                if int(idCol) == int(col.id):
                    existeColunaFiltro = True

            if existeColunaFiltro == False:
                continue

        conta_tb = conta_tb + 1

        if edt == True:
            c_campo = {'campo': col.nome, 'titulo': '<a href="#" style="color: red;">' + col.titulo + '</a>' }
        else:
            c_campo = {'campo': col.nome, 'titulo': col.titulo }


        campos.append(c_campo)

    return campos
Beispiel #5
0
def ObterAlunosParaRecomendacoes(id_aluno):
    listaMensanges = []
    nomeAluno = ''
    tx_acerto = 0

    nomeColuna, id_colunaClasse = meta.ObterColunaClasse()

    colunaClasse = meta.ObterColuna(id_colunaClasse)
    tabela = imp.ObterTabela(colunaClasse.id_tabela)

    colunaIdAluno = meta.ObterColunaIdAluno(colunaClasse.id_tabela)

    listaAlunos = []
    listaColunas = []
    listaColunas.append(colunaIdAluno.id)
    listaColunas.append(colunaClasse.id)

    sql = dbTab.GerarSQL(tabela.id, 'O', listaColunas)
    dfAlunos = db.consultarSQLDataFrame(sql)

    session = db.getSession()

    for index, row in dfAlunos.iterrows():
        usuario = session.query(
            db.Usuario).filter_by(login=row[colunaIdAluno.nome]).first()
        usuario.selecionado = False

        if id_aluno == usuario.id:
            nomeAluno = usuario.nome
            usuario.selecionado = True

        listaAlunos.append(usuario)

    session.close()

    algPredicao = ObterTabelaPredicao(tabela.id)
    for alg in algPredicao.Alg:
        if alg.selecionado:
            tx_acerto = alg.tx_acerto

    if id_aluno != 0:
        listaMensanges = ObterRecomendacoesPorAluno(id_aluno)

    return dict(listaAlunos=listaAlunos,
                listaMensanges=listaMensanges,
                id_aluno=id_aluno,
                nomeAluno=nomeAluno,
                tx_acerto=tx_acerto)
def mineracao_dados_executar_tudo():
    id_tabela = request.params.get('id')
    id_coluna = meta.ObterColunaClasse(id_tabela)[1]

    tam_tst = 20
    dm.CalcularPreditivo(id_tabela, id_coluna, int(tam_tst))
    dm.GerarRecomendacoes(id_tabela)

    redirect('/mineracao_dados?id=' + str(id_tabela))
def mineracao_dados():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    idTabela = request.params.get('id')

    tam_tst = 15

    id_coluna = 0
    colunaClasse = ''

    if idTabela == None:
        idTabela = 0

    listaTabelas = imp.ListarTabelas()
    tabPred = None
    listaTabelaDesc = []
    listaColunaT = []
    listaColunaN = []

    if int(idTabela) != 0:
        colunaClasse, id_coluna = meta.ObterColunaClasse(idTabela)
        tabPred = dm.ObterTabelaPredicao(idTabela)
        listaTabelaDesc = dm.ListarTabelaDescricao(idTabela)

        listaColunaT = meta.ListarColunasPorTipo(idTabela, 'T')
        listaColunaN = meta.ListarColunasPorTipo(idTabela, 'N')

        if tabPred != None:
            tam_tst = tabPred.reserva_treino

    for tab in listaTabelas:
        tab.selecionado = False
        if int(tab.id) == int(idTabela):
            tab.selecionado = True

    return dict(idTabela=idTabela,
                tam_tst=tam_tst,
                listaTabelas=listaTabelas,
                id_coluna=id_coluna,
                colunaClasse=colunaClasse,
                tabPred=tabPred,
                listaTabelaDesc=listaTabelaDesc,
                listaColunaT=listaColunaT,
                listaColunaN=listaColunaN)
def DefColunas():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    id = request.params.get('id')

    if id == None:
        id = 0

    coluna = meta.ObterColuna(id)
    listaTabelas = imp.ListarTabelas()
    colunasFk = None

    if coluna != None:
        if coluna.val_aluno_risco == None:
            coluna.val_aluno_risco = ''

        if coluna.chave_estrangeira == True:
            colunasFk = meta.ListarColunas(coluna.id_tabela_fk)

        coluna.lstTipos = (
            {
                'id': 'T',
                'nome': 'Texto',
                'selecionado': False
            },
            {
                'id': 'N',
                'nome': 'Número',
                'selecionado': False
            },
            {
                'id': 'D',
                'nome': 'Data (seq. temporal)',
                'selecionado': False
            },
        )

        for tp in coluna.lstTipos:
            tp['selecionado'] = False
            if tp['id'] == coluna.tipo:
                tp['selecionado'] = True

    return dict(listaTabelas=listaTabelas, colunasFk=colunasFk, coluna=coluna)
Beispiel #9
0
def Outlier(idTabela, filtro, campoD, campoV):

    tabela = imp.ObterTabela(idTabela)

    sql = dbTab.GerarSQL(idTabela, 'S')
    if tabela.sql_sem_hist != None and tabela.sql_sem_hist != '':
        if filtro == 'H':
            sql = sql + ' WHERE NOT (' + tabela.sql_sem_hist + ')'
        elif filtro == 'A':
            sql = sql + ' WHERE (' + tabela.sql_sem_hist + ')'

    lista = db.consultarSQLDataFrame(sql)

    campoVal = meta.ObterColuna(campoV).nome
    campoDesc = meta.ObterColuna(campoD).nome

    existeOutlier, listaDf = desc.Outliers(lista, campoVal, campoDesc)

    modelo = {
        'campoV': campoVal,
        'campoD': campoDesc,
        'existe': existeOutlier,
        'lista': listaDf
    }

    md_outlier = json.dumps(modelo)

    session = db.getSession()
    tabDesc = session.query(db.TabelaDescricao).filter_by(
        id_tabela=idTabela).filter_by(id_alg=id_alg_outliers).first()
    if tabDesc == None:
        tabDesc = db.TabelaDescricao(None, idTabela, id_alg_outliers,
                                     md_outlier, datetime.now())
        session.add(tabDesc)
    else:
        tabDesc.modelo = md_outlier
        tabDesc.dt_processo = datetime.now()

    session.commit()
    session.close()

    return "OK"
Beispiel #10
0
def SalvarMensagens(tabela, msgs):
    print(
        '==============================================================================================='
    )
    print('Salvar Mensagens')

    listaColunas = meta.ListarColunas(tabela.id)

    sqlDelete = 'DELETE FROM mensagem WHERE id_tabela = ' + str(tabela.id)

    print(sqlDelete)

    session = db.getSession()
    session.execute(sqlDelete)

    coluna_identif_aluno = None
    for col in listaColunas:
        if (col.fl_aluno):
            coluna_identif_aluno = col
            break

    dt_geracao = datetime.now()
    for msg in msgs:
        rowid = msg['Aluno']

        sql_busca_usuario = 'SELECT U.id  FROM "' + tabela.nome + '" AS T0 INNER JOIN usuario AS U ON "' + coluna_identif_aluno.nome + '" = U.login  WHERE T0.rowid = ' + str(
            rowid) + ' LIMIT 1'
        print(sql_busca_usuario)
        id_usuario_aluno = session.execute(
            sql_busca_usuario).fetchall()[0]['id']

        coluna = ObterColunaPorNomeLista(listaColunas, msg['Campo'])
        print(coluna.titulo)

        desc_mensagem = 'Na característica "' + coluna.titulo + '" esta informado: "' + msg[
            'ValAtual'] + '".\nRecomendamos que seja modificado para "' + msg[
                'ValSuger'] + '"'
        print(desc_mensagem)

        mensagem = db.Mensagem(None)
        mensagem.id_tabela = tabela.id
        mensagem.id_coluna = coluna.id
        mensagem.id_usuario_aluno = id_usuario_aluno
        mensagem.val_atual = msg['ValAtual']
        mensagem.val_suger = msg['ValSuger']
        mensagem.descartado = 'N'
        mensagem.lido = 'N'
        mensagem.dt_gerado = dt_geracao
        mensagem.descricao = desc_mensagem

        session.add(mensagem)

    session.commit()
    session.close()
def Obter():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    id = request.params.get('id')
    listaColunas = meta.ListarColunas(id)

    lstCol = []
    for col in listaColunas:
        lstCol.append({'id': col.id, 'nome': col.nome})

    return json.dumps(lstCol)
def RetornarValoresColuna(idTabela, idColuna):
    tabela = imp.ObterTabela(idTabela)
    coluna = meta.ObterColuna(idColuna)

    sql_table = tabela.nome
    if not (tabela.sql_destino == None or tabela.sql_destino == ''):
        sql_table = tabela.sql_destino

    sql = 'SELECT COUNT(*) AS qtd, ' + coluna.sql + ' as COL FROM "' + sql_table + '" GROUP BY COL'

    #resultado = db.consultarSQL(sql)
    resultado = db.consultarSQLDataFrame(sql)

    return resultado
def pre_processamento():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    listaTabelas = imp.ListarTabelas()
    idTabela = request.params.get('idTabela')
    idColuna = request.params.get('idColuna')
    nomeColuna = ''
    nomeTabela = ''
    sql=''

    for tab in listaTabelas:
        tab.selecionado = False


    if idTabela == None:
        idTabela = 0
    else:
        for tab in listaTabelas:
            if int(tab.id) == int(idTabela):
                tab.selecionado = True
                nomeTabela = tab.nome

    listaColunas = meta.ListarColunas(idTabela)
    for col in listaColunas:
        col.selecionado = False

    if idColuna == None:
        idColuna = 0
    else:
        for col in listaColunas:
            if int(col.id) == int(idColuna):
                col.selecionado = True
                nomeColuna = col.nome
                sql = col.sql

    
    resultado = None
    if idColuna != 0 and idTabela != 0:
        resultado = pre.RetornarValoresColuna(idTabela, idColuna)

    grfPizza = comp.grfPizza('Valores Válidos', resultado, 'COL', 'qtd', 'Valores válidos para a coluna selecionada');
    return dict(listaTabelas=listaTabelas, 
                listaColunas=listaColunas,
                nomeTabela=nomeTabela,
                nomeColuna=nomeColuna,
                idTabela=idTabela,
                idColuna=idColuna,
                sql=sql,
                grfPizza=grfPizza.grf,
                scriptGrafico=grfPizza.js)
Beispiel #14
0
def PreverValores(idTabela):
    tabela = imp.ObterTabela(idTabela)
    colunaClasse, id_coluna = meta.ObterColunaClasse(idTabela)
    coluna = meta.ObterColuna(id_coluna)

    nomeTabela = tabela.nome
    nomeColunaClasse = coluna.nome

    LimparDadosColunaClasse(nomeTabela, nomeColunaClasse)

    tabPredicao = ObterTabelaPredicao(tabela.id)
    algPredicao = None
    for alg in tabPredicao.Alg:
        if alg.selecionado:
            algPredicao = alg

    modeloDb = json.loads(tabPredicao.modelo)
    modeloDbColClasse = modeloDb[colunaClasse]

    df = ObterDadosPrevisao(idTabela)
    dfListaCopy = df.copy()
    rowids = df['rowid']
    del dfListaCopy[colunaClasse]
    del dfListaCopy['rowid']

    for index, row in dfListaCopy.iterrows():
        rowPred = ut.VoltarModelo(dict(row), modeloDb)
        val_prev = algPredicao.clf.predict([rowPred])

        for key, value in modeloDbColClasse.items():
            if int(key) == int(val_prev):
                classe_prev = 'LA :: Prev :: ' + value
                rowid = rowids[index]
                AtualiarClasse(nomeTabela, nomeColunaClasse, classe_prev,
                               rowid)
                break
def ObterColunaClasse(idTabela):
    session = db.getSession()
    obj = session.query(db.Coluna).filter_by(id_tabela=idTabela).filter_by(classe=True).first()
    session.close()
    if obj != None:
        return obj.nome, obj.id       
    else:
        listaExibicao = dbTab.ListarExibicao(idTabela)

        for colExib in listaExibicao:
            col = meta.ObterColuna(colExib.id_coluna_fk)

            if col.classe:
                return col.nome, col.id

    return '', None
Beispiel #16
0
def def_visao():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    id_tabela = request.params.get('id_tabela')
    id = request.params.get('id')
    nome = ''
    modelo = ''
    tipo = {  }
    tipo['1']  = ''
    tipo['2']  = ''
    tipo['3']  = ''
    tipo['4']  = ''
    tipo['5']  = ''

    tabela = imp.ObterTabela(id_tabela)
    listaColunas = meta.ListarColunas(id_tabela)
    for col in listaColunas:
        col.selecionado = False

    visao = None
    if id != '0':
        visao = vis.ObterVisao(id)
        nome = visao.nome
        dTipo = visao.tipo
        modelo = visao.modelo

        tipo[dTipo] = 'selected'

        objModelo = json.loads(modelo)

        for col in listaColunas:
            for mod in objModelo:
                if int(mod['id_coluna']) == col.id:
                    col.selecionado = True

    else:
        tipo['1'] = 'checked'

    return dict(id=id,
                nome=nome,
                tipo=tipo,
                modelo=modelo,
                idTabela=id_tabela,
                nomeTabela=tabela.nome,
                listaColunas=listaColunas,
                visao=visao,
                js='<script>ReconstruirGrid();</script>')
Beispiel #17
0
def CalcularPreditivo(idTabela, id_coluna, tam_tst):
    sql = dbTab.GerarSQL(idTabela, 'S')
    lista = db.consultarSQLDataFrame(sql)

    del lista['rowid']

    colunaClasse = meta.ObterColuna(id_coluna)

    modeloDados, listaCopy = ut.PrepararLista(lista)
    listaModeloPred = None

    jsModeloDados = json.dumps(modeloDados, default=iDefault)

    if colunaClasse.tipo == 'N':
        listaCopy[colunaClasse.nome] = ut.TransformarNumeros(
            lista[colunaClasse.nome].values())
        listaModeloPred = pred.ModeloReg(listaCopy, colunaClasse.nome, tam_tst)
    else:
        listaModeloPred, clfTree = pred.ModeloClf(listaCopy, colunaClasse.nome,
                                                  tam_tst)

    lstPesos = pred.ObterPesos(lista, clfTree, colunaClasse.nome,
                               colunaClasse.val_aluno_risco)
    strPesos = json.dumps(lstPesos)

    maiorTxAcerto = 0
    id_alg_sel = 0
    for modelo in listaModeloPred:
        txAcerto = modelo['TxAcerto']

        if maiorTxAcerto < txAcerto:
            id_alg_sel = modelo['id_alg']
            maiorTxAcerto = txAcerto

    tabPred = db.TabelaPredicao(0, idTabela, jsModeloDados, None, tam_tst,
                                strPesos, id_alg_sel)

    tabPred = SalvarTabelaPredicao(tabPred)
    SalvarTabelaPredicaoAlg(tabPred.id, listaModeloPred, lstPesos)

    #modelo2, listaCopy2 = ut.PrepararListaComModelo(modeloDados, lista)

    ExportarDados(idTabela)

    return listaModeloPred
def LstColunas():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    listaTabelas = imp.ListarTabelas()
    campos = ({
        'campo': 'id_coluna_cid',
        'titulo': 'ID'
    }, {
        'campo': 'comando',
        'titulo': 'Nome'
    }, {
        'campo': 'tipo',
        'titulo': 'Tipo'
    }, {
        'campo': 'titulo',
        'titulo': 'Titulo'
    }, {
        'campo': 'desabilitado',
        'titulo': 'Desabilitado'
    })

    idTabela = request.params.get('id')
    listaColunas = meta.ListarColunas(idTabela)

    for col in listaColunas:
        col.comando = '<a href="/defcoluna?id=' + str(
            col.id) + '">' + col.nome + '</a>'

    for tab in listaTabelas:
        tab.selecionado = False

    if idTabela == None:
        idTabela = 0
    else:
        for tab in listaTabelas:
            if int(tab.id) == int(idTabela):
                tab.selecionado = True

    grid = comp.grid('Lista de Colunas', listaColunas, campos,
                     'dados atualizados em 26/01/2018')

    return dict(listaTabelas=listaTabelas, grid=grid)
Beispiel #19
0
def ListarRecomendacoes(idTabela):
    session = db.getSession()
    listaMensagens = session.query(
        db.Mensagem).filter_by(id_tabela=idTabela).all()

    listaRetorno = []

    listaColunas = meta.ListarColunas(idTabela)

    for msg in listaMensagens:
        existeAluno = False
        edtRow = {}
        msgsAluno = []

        for rowRet in listaRetorno:
            if rowRet['id_usuario_aluno'] == msg.id_usuario_aluno:
                existeAluno = True
                edtRow = rowRet
                msgsAluno = edtRow['MsgsAluno']
                break

        if existeAluno == False:
            edtRow['id_usuario_aluno'] = msg.id_usuario_aluno
            usuario = session.query(
                db.Usuario).filter_by(id=msg.id_usuario_aluno).first()
            edtRow['nome'] = usuario.nome
            listaRetorno.append(edtRow)

        msgsAluno.append(msg)
        edtRow['MsgsAluno'] = msgsAluno

    session.close()

    tabPredicao = ObterTabelaPredicao(idTabela)
    tx_acerto = 0
    for alg in tabPredicao.Alg:
        if alg.selecionado:
            tx_acerto = alg.tx_acerto

    return dict(tabela=imp.ObterTabela(idTabela),
                tx_acerto=tx_acerto,
                lista=listaRetorno)
Beispiel #20
0
def ExportarDados(id_tabela):
    tabela = imp.ObterTabela(id_tabela)
    #-- Rede Gazeta
    #path = "C:/Users/bstoll/source/repos/LA-Intervencao/LA-Intervencao/arquivosUpld"
    #-- pythonanywhere
    path = "/home/bstoll/mysite/arquivosUpld"
    #-- Casa
    #path = "C:/Users/Bruno Stoll/source/repos/LA-Intervencao/LA-Intervencao"

    pathFile = "{path}/{file}".format(path=path, file=tabela.nome + ".csv")

    listaColunas = meta.ListarColunas(id_tabela)
    ar_lst_cols = []
    for col in listaColunas:
        ar_lst_cols.append(col.id)

    sql = dbTab.GerarSQL(id_tabela, 'O', ar_lst_cols)
    df = dbTab.db.consultarSQLDataFrame(sql)
    if os.path.isfile(pathFile):
        os.remove(pathFile)

    df.to_csv(pathFile, index=False)
Beispiel #21
0
def ExibirMatrizConfusao(idTabela, idModPredAlg):
    modeloPredAlg = ObterModeloPredicaoAlg(idModPredAlg)
    tabPred = ObterTabelaPredicao(idTabela)
    tabela = imp.ObterTabela(idTabela)
    colunaClasse, id_coluna = meta.ObterColunaClasse(idTabela)

    modeloBanco = json.loads(tabPred.modelo)

    valoresCls = modeloBanco[colunaClasse]

    for valor in valoresCls:
        print(valor)

    matriz_confusao = json.loads(modeloPredAlg.matriz_confusao)

    return dict(idTabela=idTabela,
                tabela=tabela.nome,
                colunaClasse=colunaClasse,
                dt_processo=tabPred.dt_processo,
                algoritmo=modeloPredAlg.nome,
                valoresCls=valoresCls,
                matriz_confusao=matriz_confusao)
Beispiel #22
0
def GerarVisao(id):
    visao = vis.ObterVisao(id)
    tabela = imp.ObterTabela(visao.id_tabela)
    modelo = json.loads(visao.modelo)

    tipo = visao.tipo

    listaColunas = []
    listaTodasColunas = []
    listaColunasExibGrd = []
    defColunasAgrp = {}
    campoCateg = None
    campoSerie = None
    campoValor = None
    filtroClasse = ''
    colunaClasse = ''
    for mod in modelo:
        id_coluna = int(mod['id_coluna'])
        listaColunas.append(id_coluna)
        coluna = meta.ObterColuna(id_coluna)

        nomeCampo = coluna.nome

        if coluna.classe:
            filtroClasse = 'O'
            colunaClasse = coluna.nome

        if mod['agrupador'] != '':
            nomeCampo = mod['agrupador'] + '_' + coluna.nome

        if mod['grafico'] == 'S':
            campoSerie = coluna
        elif mod['grafico'] == 'C':
            campoCateg = coluna
        elif mod['grafico'] == 'V':
            if mod['agrupador'] != '':
                campoValor = mod['agrupador'] + '_' + coluna.nome
            else:
                campoValor = coluna.nome

        defColunasAgrp[id_coluna] = mod['agrupador']
        listaTodasColunas.append(nomeCampo)
        listaColunasExibGrd.append({
            'campo': coluna.nome,
            'titulo': coluna.titulo
        })

    sql = GerarSQL(visao.id_tabela, filtroClasse, listaColunas, True,
                   defColunasAgrp)
    df = db.consultarSQLDataFrame(sql)

    if filtroClasse == 'O':
        valoresClasse = df[colunaClasse]
        for index, row in df.iterrows():
            df[colunaClasse][index] = str(row[colunaClasse]).replace(
                'LA :: Prev :: ', '')

    obj = comp.defGrafico('', '')

    if tipo == '1':  #  Gráfico de Pizza
        print('Gráfico de Pizza')
        obj = comp.grfPizza(visao.nome, df, campoSerie.nome, campoValor, '')
    elif tipo == '2':  # Gráfico Barras
        print('Gráfico Barras')
        obj = comp.grfBarras(visao.nome, df, campoCateg.nome, campoSerie.nome,
                             campoValor)
    elif tipo == '3':  # Gráfico Linha
        print('Gráfico Linha')
        obj = comp.grfLinhas(visao.nome, df, campoCateg.nome, campoSerie.nome,
                             campoValor)
    elif tipo == '4':  # Informação em Cards
        print('Informação em Cards')
        obj = comp.infCard(visao.nome, list(df.T.to_dict().values()),
                           listaTodasColunas)
    elif tipo == '5':  # Informação em Grid
        print('Informação em Grid')
        obj = comp.compGrid(visao.nome, list(df.T.to_dict().values()),
                            listaColunasExibGrd)

    return obj
Beispiel #23
0
def GerarSQL(idTabela,
             filtroClasse='',
             somenteColunas=[],
             agrupar=False,
             defColunasAgrp={},
             filtroSql=''):
    """ filtroClasse
         S = sem classe     = para TREINAR
         O = somente classe = para PREVER
    """

    tabela = imp.ObterTabela(idTabela)
    listaColunas = meta.ListarColunas(idTabela)
    listaExibicao = ListarExibicao(idTabela)
    conta_tb = 0

    sql_table = '[' + tabela.nome + ']'
    if not (tabela.sql_destino == None or tabela.sql_destino == ''):
        sql_table = '(' + tabela.sql_destino + ')'

    sql_table = sql_table

    sql = ''
    sql_coluna = '       rowid'
    sql_coluna_classe = ''
    sql_inner_join = ''
    sql_where = '\n WHERE 0=0 \n'
    sql_group = ''

    if agrupar == True:
        sql_group = ''

    for col in listaColunas:
        if col.desabilitado == True:
            existeSomenteCol = False
            for idCol in somenteColunas:
                if int(idCol) == col.id:
                    existeSomenteCol = True
            if existeSomenteCol == False:
                continue

        if len(somenteColunas) != 0:
            existeFiltroColuna = False
            for idCol in somenteColunas:
                if int(idCol) == int(col.id):
                    existeFiltroColuna = True

            if existeFiltroColuna == False:
                continue

        sql_coluna_tmp = col.sql.replace(col.nome, 't0.' + col.nome)
        sql_coluna_one = sql_coluna_tmp + ' AS ' + col.nome

        if agrupar == True:
            if defColunasAgrp[col.id] != '':
                sql_coluna_one = defColunasAgrp[
                    col.id] + '(' + sql_coluna_tmp + ') AS ' + defColunasAgrp[
                        col.id] + '_' + col.nome
            elif defColunasAgrp[col.id] == '':
                if sql_group == '':
                    sql_group = ' GROUP BY ' + sql_coluna_tmp
                else:
                    sql_group = sql_group + ',' + sql_coluna_tmp

        if col.classe:
            sql_coluna_classe = sql_coluna_one
            if filtroClasse == 'S':
                sql_where += ' AND ' + sql_coluna_tmp + ' IS NOT NULL \n'
                sql_where += ' AND ' + sql_coluna_tmp + ' <> \'\' \n'
                sql_where += ' AND ' + sql_coluna_tmp + ' <> \'?\' \n'
                sql_where += ' AND ' + sql_coluna_tmp + ' NOT LIKE \'LA :: Prev%\' \n'
            elif filtroClasse == 'O':
                sql_where += ' AND (' + sql_coluna_tmp + ' IS NULL \n'
                sql_where += '  OR  ' + sql_coluna_tmp + ' = \'\' \n'
                sql_where += '  OR  ' + sql_coluna_tmp + ' = \'?\' \n'
                sql_where += '  OR  ' + sql_coluna_tmp + ' LIKE \'LA :: Prev%\' ) \n'
        elif sql_coluna == '':
            sql_coluna = '       ' + sql_coluna_one
        else:
            sql_coluna = sql_coluna + ', \n       ' + sql_coluna_one

    tabelasJoin = {}

    for colExib in listaExibicao:

        col = meta.ObterColuna(colExib.id_coluna)
        col_fk = meta.ObterColuna(col.id_coluna_fk)
        col_lookup = meta.ObterColuna(colExib.id_coluna_fk)
        tabela_fk = imp.ObterTabela(colExib.id_tabela_fk)

        if col_lookup.desabilitado == True:
            continue

        if len(somenteColunas) != 0:
            existeFiltroColuna = False
            for idCol in somenteColunas:
                if int(idCol) == int(col_lookup.id):
                    existeFiltroColuna = True

            if existeFiltroColuna == False:
                continue

        sql_table_join = tabela_fk.nome
        if (tabela_fk.sql_destino != None):
            sql_table_join = tabela_fk.sql_destino

        prefixo = ''
        tb_corrente = -1
        if tabela_fk.nome in tabelasJoin:
            tb_corrente = tabelasJoin[tabela_fk.nome]
            prefixo = 't' + str(tb_corrente)
        else:
            conta_tb = conta_tb + 1
            tb_corrente = conta_tb
            prefixo = 't' + str(tb_corrente)
            tabelasJoin[tabela_fk.nome] = conta_tb
            tb_corrente = conta_tb

            sql_inner_join = sql_inner_join + ' INNER JOIN ' + sql_table_join + ' AS ' + prefixo + ' ON t0.' + col.nome + ' = ' + prefixo + '.' + col_fk.nome

        sql_coluna_tmp = col_lookup.sql.replace(
            col.nome, prefixo + '.' + col_lookup.nome)
        sql_coluna_one = sql_coluna_tmp + ' AS ' + col_lookup.nome

        if agrup == True:
            if sql_group == '':
                sql_group = ' GROUP BY ' + sql_coluna_tmp
            else:
                sql_group = sql_group + ',' + sql_coluna_tmp

        if col_lookup.classe:
            sql_coluna_classe = sql_coluna_one
            if filtroClasse == 'S':
                sql_where += ' AND ' + sql_coluna_tmp + ' IS NOT NULL'
                sql_where += ' AND ' + sql_coluna_tmp + ' <> \'\' '
                sql_where += ' AND ' + sql_coluna_tmp + ' <> \'?\' '
                sql_where += ' AND ' + sql_coluna_tmp + ' NOT LIKE \'LA :: Prev%\' '
            elif filtroClasse == 'O':
                sql_where += ' AND (' + sql_coluna_tmp + ' IS NULL'
                sql_where += '  OR  ' + sql_coluna_tmp + ' = \'\' '
                sql_where += '  OR  ' + sql_coluna_tmp + ' = \'?\' '
                sql_where += '  OR  ' + sql_coluna_tmp + ' LIKE \'LA :: Prev%\' )'

        else:
            sql_coluna = sql_coluna + ', ' + sql_coluna_one

    if sql_coluna_classe != '':
        sql_coluna = sql_coluna + ', ' + sql_coluna_classe

    if filtroSql != '':
        sql_where += '\n and ' + filtroSql

    sql = 'SELECT \n' + sql_coluna + ' FROM \n' + sql_table + ' as t0 ' + sql_inner_join + sql_where + '\n' + sql_group

    print('GerarSQL:')
    print(sql)

    return sql
Beispiel #24
0
def ExibirPesos(id_tabela):
    tabela = imp.ObterTabela(id_tabela)
    nome_coluna, id_coluna = meta.ObterColunaClasse(tabela.id)
    coluna = meta.ObterColuna(id_coluna)
    tabPredicao = ObterTabelaPredicao(id_tabela)

    listaColunas = meta.ListarColunas(id_tabela)

    pesos = json.loads(tabPredicao.pesos)
    pesosOrdenado = sorted(pesos, key=itemgetter('Peso'), reverse=True)

    scriptGrafico = ''

    for peso in pesosOrdenado:
        df = pd.DataFrame(peso['Valores'])
        print(peso)
        print(df)

        maxFalha = df[df['Classe'] ==
                      coluna.val_aluno_risco]['_percValor'].max()
        maxSucesso = df[
            df['Classe'] != coluna.val_aluno_risco]['_percValor'].max()
        df['destaca'] = ''
        df[df['Classe'] == coluna.val_aluno_risco][df['_percValor'] ==
                                                   maxFalha]['destaca'] = 'F'
        df[df['Classe'] != coluna.val_aluno_risco][df['_percValor'] ==
                                                   maxSucesso]['destaca'] = 'S'

        for item in peso['Valores']:
            item['destaca'] = ''
            if item['Classe'] == coluna.val_aluno_risco and item[
                    '_percValor'] == maxFalha:
                item['destaca'] = 'F'
            if item['Classe'] != coluna.val_aluno_risco and item[
                    '_percValor'] == maxSucesso:
                item['destaca'] = 'S'

        #df[dfClsFalha['_percRelativo'] == df['_percValor']] ['destaca'] = 'R'
        #df[dfClsSucesso['_percRelativo'] == df['_percValor']]['destaca'] = 'B'

        dfClsFalha = df[df['Classe'] == coluna.val_aluno_risco]
        dfClsSucesso = df[df['Classe'] != coluna.val_aluno_risco]

        legendaPadrao = ' Registros com o campo "' + coluna.titulo + '"'
        legendaFalha = legendaPadrao + ' igual a "' + coluna.val_aluno_risco + '"'
        legendaSucesso = legendaPadrao + ' diferente de "' + coluna.val_aluno_risco + '"'

        grfFalha = comp.grfPizza(legendaFalha, dfClsFalha, 'Valor', '_qtd', '')
        grfSucesso = comp.grfPizza(legendaSucesso, dfClsSucesso, 'Valor',
                                   '_qtd', '')
        scriptGrafico += grfFalha.js
        scriptGrafico += grfSucesso.js

        peso['grfFalha'] = grfFalha.grf
        peso['grfSucesso'] = grfSucesso.grf
        campo = ObterColunaPorNomeLista(listaColunas, peso['Campo'])
        peso['Campo'] = campo.titulo

    return dict(id_tabela=tabela.id,
                nome=tabela.nome,
                pesos=pesosOrdenado,
                scriptGrafico=scriptGrafico)
def DiscretizarCampo(idColuna, nome, expressao):
    colunaDiscr = meta.ObterColuna(idColuna)
    colunaDiscr.sql = expressao

    meta.SalvarColuna(colunaDiscr)
Beispiel #26
0
def GerarRecomendacoes(id_tabela):
    print(
        '==============================================================================================='
    )
    print('Gerar recomendações')
    tabela = imp.ObterTabela(id_tabela)
    nome_coluna, id_coluna = meta.ObterColunaClasse(tabela.id)
    coluna = meta.ObterColuna(id_coluna)
    tabPredicao = ObterTabelaPredicao(id_tabela)
    tx_acerto = 0
    for alg in tabPredicao.Alg:
        if alg.selecionado:
            tx_acerto = alg.tx_acerto

    pesos = json.loads(tabPredicao.pesos)
    pesosOrdenado = sorted(pesos, key=itemgetter('Peso'), reverse=True)

    dfSoAlunosRisco = SoAlunosEmRisco(id_tabela, nome_coluna, coluna)

    msgs = []

    for index, row in dfSoAlunosRisco.iterrows():
        i_conta_recomendacoes = 0

        for peso in pesosOrdenado:
            campo = peso['Campo']
            print(
                '==============================================================================================='
            )
            print('Campo: ' + campo)
            print('Peso: ' + str(peso['Peso']))
            print(peso)
            dfValorePesos = pd.DataFrame(peso['Valores'])
            print(dfValorePesos)

            dfClsFalha = dfValorePesos[dfValorePesos['Classe'] ==
                                       coluna.val_aluno_risco]
            dfClsSucesso = dfValorePesos[
                dfValorePesos['Classe'] != coluna.val_aluno_risco]

            print('')
            print('dfClsFalha')
            print(dfClsFalha)

            print('')
            print('dfClsSucesso')
            print(dfClsSucesso)

            valorCol = row[campo]
            rowFalha = dict(
                next(
                    dfClsFalha[dfClsFalha['Valor'] == valorCol].iterrows())[1])
            rowSucesso = dict(
                next(dfClsSucesso[dfClsSucesso['Valor'] ==
                                  valorCol].iterrows())[1])

            qtdReg = len(dfClsFalha['Valor'])
            falhaPerc = rowFalha['_perc']
            falhaPercRel = rowFalha['_percRelativo']
            sucesPerc = rowSucesso['_perc']
            sucesPercRel = rowSucesso['_percRelativo']

            valorPercSucessoMax = valorCol
            percSucessoMax = dfClsSucesso[
                dfClsSucesso['Valor'] != valorCol]['_percValor'].max()
            auxDfvalorPercSucesso = dfClsSucesso[
                dfClsSucesso['_percValor'] == percSucessoMax]['Valor'].values
            if len(auxDfvalorPercSucesso) > 0:
                valorPercSucessoMax = auxDfvalorPercSucesso[0]

            if (falhaPercRel > sucesPercRel
                    or falhaPerc > 25) and valorCol != valorPercSucessoMax:
                msg = dict()
                msg['Aluno'] = row['rowid']
                msg['Campo'] = campo
                msg['ValAtual'] = valorCol
                msg['ValSuger'] = valorPercSucessoMax
                msgs.append(msg)
                i_conta_recomendacoes += 1

            if i_conta_recomendacoes == 5:
                break

    SalvarMensagens(tabela, msgs)

    return dfSoAlunosRisco
def GerarSqlQuartil(tabela, coluna, tp):
    tpDisc = ''
    if tp == 'E':
        tpDisc = 'DISTINCT'

    sqlTexto = """
SELECT *,
       CASE WHEN coluna <= Q1 THEN 'Q1'
            WHEN coluna <= Q2 THEN 'Q2'
            WHEN coluna <= Q3 THEN 'Q3'
       ELSE 'Q4'
       END AS QUARTIL
  FROM (
SELECT *,
       (SELECT COUNT(*) FROM (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}})) AS QTD,
       (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}} ORDER BY 1 LIMIT (((SELECT COUNT(*) FROM (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}})) / 4) * 1), 1) Q1,
       (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}} ORDER BY 1 LIMIT (((SELECT COUNT(*) FROM (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}})) / 4) * 2), 1) Q2,
       (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}} ORDER BY 1 LIMIT (((SELECT COUNT(*) FROM (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}})) / 4) * 3), 1) Q3
  FROM (
SELECT {{tpQuartil}} {{coluna}} AS coluna
  FROM {{tabela}}) AS T
 ORDER BY 1
) AS T
LIMIT 1"""

    sqlNumero = """
SELECT *,
       CASE WHEN coluna <= Q1 THEN 'Q1'
            WHEN coluna <= Q2 THEN 'Q2'
            WHEN coluna <= Q3 THEN 'Q3'
       ELSE 'Q4'
       END AS QUARTIL
  FROM (
SELECT *,
       (SELECT COUNT(*) FROM (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}})) AS QTD,
       (SELECT {{tpQuartil}} CAST({{coluna}} AS FLOAT) FROM {{tabela}} ORDER BY 1 LIMIT (((SELECT COUNT(*) FROM (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}})) / 4) * 1), 1) Q1,
       (SELECT {{tpQuartil}} CAST({{coluna}} AS FLOAT) FROM {{tabela}} ORDER BY 1 LIMIT (((SELECT COUNT(*) FROM (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}})) / 4) * 2), 1) Q2,
       (SELECT {{tpQuartil}} CAST({{coluna}} AS FLOAT) FROM {{tabela}} ORDER BY 1 LIMIT (((SELECT COUNT(*) FROM (SELECT {{tpQuartil}} {{coluna}} FROM {{tabela}})) / 4) * 3), 1) Q3
  FROM (
SELECT {{tpQuartil}} CAST({{coluna}} AS FLOAT) AS coluna
  FROM {{tabela}}) AS T
 ORDER BY 1
) AS T
LIMIT 1"""

    objTabela = imp.ObterTabelaPorNome(tabela)
    objColuna = meta.ObterColunaPorTabNome(objTabela.id, coluna)
    if objColuna.tipo == 'N':
        sql = sqlNumero.replace('{{tabela}}', tabela).replace(
            '{{coluna}}', coluna).replace('{{tpQuartil}}', tpDisc)
    else:
        sql = sqlTexto.replace('{{tabela}}', tabela).replace(
            '{{coluna}}', coluna).replace('{{tpQuartil}}', tpDisc)

    resultado = db.consultarSQLDataFrame(sql)

    if objColuna.tipo == 'N':
        sqlResultado = 'CASE WHEN CAST(' + str(coluna) + ' AS FLOAT) <= ' + str(
            resultado['Q1'][0]
        ) + ' THEN \'Q1\' WHEN CAST(' + str(coluna) + ' AS FLOAT) <= ' + str(
            resultado['Q2'][0]) + ' THEN \'Q2\'  WHEN CAST(' + str(
                coluna) + ' AS FLOAT) <= ' + str(
                    resultado['Q3'][0]) + ' THEN \'Q3\' ELSE \'Q4\' END'
    else:
        sqlResultado = 'CASE WHEN ' + str(coluna) + ' <= ' + str(
            resultado['Q1']
            [0]) + ' THEN \'Q1\' WHEN ' + str(coluna) + ' <= ' + str(
                resultado['Q2'][0]) + ' THEN \'Q2\'  WHEN ' + str(
                    coluna) + ' <= ' + str(
                        resultado['Q3'][0]) + ' THEN \'Q3\' ELSE \'Q4\' END'

    return sqlResultado
def explorar_dados():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    idTabela = request.params.get('id')
    idColunas = request.params.get('idColunas')
    tipo = request.params.get('tipo')

    listaTabelas = imp.ListarTabelas()
    listaColunas = []
    grid = ''

    if tipo == None:
        tipo = 'D'

    if idTabela == None:
        idTabela = 0
        idColunas = ''
        tipo = 'D'

    else:
        for col in meta.ListarColunas(idTabela):
            listaColunas.append(col)

        listaExibicao = dbTab.ListarExibicao(idTabela)

        for colExib in listaExibicao:
            col_lookup = meta.ObterColuna(colExib.id_coluna_fk)
            listaColunas.append(col_lookup)

        for col in listaColunas:
            col.selecionado = False

        if idColunas == None or idColunas == '':
            idColunas = ''
        else:
            splColunas = idColunas.split(',')

            for col in listaColunas:
                for idCol in splColunas:
                    if int(idCol) == int(col.id):
                        col.selecionado = True

            if len(splColunas) != 0:
                campos = meta.ListarCampos(idTabela, False, splColunas)
                if tipo == 'D':
                    resultado = dbTab.ListarDados(idTabela, splColunas)
                    grid = comp.grid('Registros', resultado, campos, '')
                elif tipo == 'I':
                    resultado = dbTab.InformDados(idTabela, splColunas)
                    #grid = comp.grid('Registros', resultado, campos, '')

    for tab in listaTabelas:
        tab.selecionado = False
        if int(tab.id) == int(idTabela):
            tab.selecionado = True

    return dict(idTabela=idTabela,
                idColunas=idColunas,
                tipo=tipo,
                listaTabelas=listaTabelas,
                listaColunas=listaColunas,
                grid=grid)
Beispiel #29
0
def PainelDinamicoPln(expressao):
    expressao, d_filtro = Parametros(expressao)

    nlp = spacy.load('pt') # pt_core_news_sm
    doc = nlp(expressao)
    sents = [sent for sent in doc.sents]
    #tokenCalculoMedidas = [token for token in nlp('soma,média,mínimo,máximo') if token.is_punct == False]
    id_tabela = 53 # parte fixa no código
    listaObjColunas =  [coluna for coluna in meta.ListarColunas(id_tabela) if coluna.sinonimos != '']

    html = ''
    js = ''
    conta=0
    tokenFiltro = [token for token in nlp('onde')][0]

    for sent in sents:
        print(str(sent))
        existeFiltro = False
        sentencaTotal = str(sent)
        sentencaBase =  str(sent)
        sentencaFiltro = ''

        for token in sent:
            d_similaridade = tokenFiltro.similarity(token)
            print(str(token), d_similaridade)
            if tokenFiltro.similarity(token) > 0.9:
                sentencaFiltro = sentencaTotal[sentencaTotal.find(str(token)):]
                sentencaBase = sentencaTotal[:sentencaTotal.find(str(token))-1]
                print('existe filtro!')
                print('sentenca base:', sentencaBase)
                print('sentenca filtro:', sentencaFiltro)
                existeFiltro = True
                break
        
        sentFiltro = None
        if existeFiltro:
            sent = nlp(sentencaBase)
            sentFiltro = nlp(sentencaFiltro)

        conta+= 1
        caminho = "/static/images/sentence" + str(conta) + ".svg"

        if not existeFiltro:
            svg = displacy.render(sent, style="dep")
            output_path = Path("." + caminho)
            output_path.open("w", encoding="utf-8").write(svg)
            html += '<div class="row"><div class="col-lg-5"><img src="' + caminho + '" style="max-width: 120%" /></div>'
        else:
            svg = displacy.render(sent, style="dep")
            output_path = Path("." + caminho)
            output_path.open("w", encoding="utf-8").write(svg)

            caminhoFiltro = "/static/images/sentence" + str(conta) + "_filtro.svg"            
            svg = displacy.render(sentFiltro, style="dep")
            output_path = Path("." + caminhoFiltro)
            output_path.open("w", encoding="utf-8").write(svg)
            
            html += '<div class="row"><div class="col-lg-5"><img src="' + caminho + '" style="max-width: 100%" /><br><img src="' + caminhoFiltro + '" style="max-width: 100%" /></div>'

        tokens = [token for token in sent if not token.is_punct]
        
        colunasMedidas, colunasDimensoes = ProcessarSentenca(nlp, tokens, listaObjColunas)
        filtro = ' (final_result = \'\' or final_result LIKE \'LA :: Prev%\' )'
        if existeFiltro:
            tokensFiltros = [token for token in sentFiltro if not token.is_punct]
            filtro_medidas, filtro_dimensoes = ProcessarSentenca(nlp, tokensFiltros, listaObjColunas, tokenFiltro)
            print('filtro_ColMedida', filtro_medidas)
            print('filtro_ColDimensoes', filtro_dimensoes)

            conta=0
            for col in filtro_dimensoes:
                conta+= 1
                nomeParam = 'param' + str(conta)
                aux_filtro = col.nome+'= \'' + d_filtro[nomeParam] + '\''
                if filtro != '':
                    filtro += ' and ' + aux_filtro
                else:
                    filtro = aux_filtro

        df = None
        if len(colunasMedidas) == 0:
            df = GerarDfVisaoPln(id_tabela, listaObjColunas, [], filtro)
        else:
            df = GerarDfVisaoPln(id_tabela, colunasDimensoes, colunasMedidas, filtro)

        obj = GerarVisao(str(sent), df, colunasDimensoes, colunasMedidas)
        if obj != None:
            html += '<div class="col-lg-7">' + obj.grf + '</div>'
            js += obj.js
        
        html+= "</div>"

    return html, js