def CriarIndices(table):
    print('Criando indíces...')
    print('')
    print('Limpando...')
    session = db.getSession()
    dfIdx = db.consultarSQLDataFrame('PRAGMA index_list([' + table + ']);')
    for idx in dfIdx['name']:
        sql = 'DROP INDEX [' + idx + ']'
        print(sql)
        session.execute(sql)

    print('')
    print('')
    sql = 'SELECT * FROM [' + table + '] WHERE 0=1'
    print(sql)
    df = db.consultarSQLDataFrame(sql)
    print('Criando...')

    for col in df.columns:
        sql_create_index = 'CREATE INDEX [idx_' + table + '_' + col + '] ON [' + table + ']([' + col + '])'
        print(sql_create_index)
        session.execute(sql_create_index)

    session.commit()
    session.close()
    print('')
    print('Finalizado!')
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 GerarColunasComSQL(table, sql):
    session = db.getSession()
    obj = session.query(db.Tabela).filter_by(nome=table).first()

    sql = 'SELECT * FROM (' + sql + ') AS T WHERE 0=1'
    df = db.consultarSQLDataFrame(sql)

    i_conta = 0
    for col in df.columns:
        i_conta+=1
        coluna = db.Coluna(None, i_conta, obj.id, col, col, 'T', col, '', False, False, False, False, None, None, None)
        session.add(coluna)

    session.commit()
示例#4
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)
示例#5
0
def Cluster(idTabela, filtro, qtd_clusters):

    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)
    modeloDados, listaCopy = ut.PrepararLista(lista)

    kmeans = desc.Cluster(listaCopy, int(qtd_clusters))
    clusters = kmeans.cluster_centers_
    labels = kmeans.labels_

    display = list()
    for x in range(0, int(qtd_clusters)):
        display.append('Cluster_' + str(x))

    objModelo = {
        'n_clusters': qtd_clusters,
        'modeloDados': modeloDados,
        'clusters': clusters.tolist(),
        'labels': labels.tolist(),
        'display': display
    }

    md_clusters = json.dumps(objModelo)

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

    session.commit()
    session.close()

    return None
示例#6
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
示例#7
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"
示例#8
0
def GerarDfVisaoPln(id_tabela, colunasDimensoes, colunasMedidas, filtro=''):
    # montar itens da visão
    listaColunas = []
    listaTodasColunas = []
    listaColunasExibGrd = []
    defColunasAgrp = {  }
    campoCateg = None
    filtroClasse = 'O'
    for coluna in colunasDimensoes:
        listaColunas.append(coluna.id)
        nomeCampo = coluna.nome

        if campoCateg == '':
            campoCateg = coluna.nome
        else:
            campoSerie = coluna.nome

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

    for coluna in colunasMedidas:
        listaColunas.append(coluna.id)
        nomeCampo = coluna.nome

        if coluna.tipo == 'N':
            defColunasAgrp[coluna.id] = 'Sum'

        listaTodasColunas.append(nomeCampo)
        listaColunasExibGrd.append( {'campo': coluna.nome, 'titulo': coluna.titulo } )

    sql = dbTab.GerarSQL(id_tabela, filtroClasse, listaColunas, True, defColunasAgrp, filtro)
    df = db.consultarSQLDataFrame(sql)
    for col in df.columns:
        if col == 'final_result':
            df[col][df[col] == 'LA :: Prev :: Falha'] = 'Falha'
            df[col][df[col] == 'LA :: Prev :: Sucesso'] = 'Sucesso'

    return df
def RecriarCampos(iid):
    session = db.getSession()

    tabela = session.query(db.Tabela).filter_by(id=iid).first()

    listaCol = session.query(db.Coluna).filter_by(id_tabela=iid)
    for col in listaCol:
        session.delete(col)

    sql = 'SELECT * FROM [' + tabela.nome + '] WHERE 0=1'
    if tabela.sql_destino != None and tabela.sql_destino != '':
        sql = 'SELECT * FROM (' + tabela.sql_destino + ') AS T WHERE 0=1'

    df = db.consultarSQLDataFrame(sql)

    i_conta = 0
    for col in df.columns:
        i_conta+= 1
        coluna = db.Coluna(None, i_conta, tabela.id, col, col, 'T', col, '', False, False, False, False, None, None, None)
        session.add(coluna)

    session.commit()
    session.close()
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
示例#11
0
def ObterDadosPrevisao(idTabela):
    sql = dbTab.GerarSQL(idTabela, 'O')
    return db.consultarSQLDataFrame(sql)
示例#12
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