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)
예제 #2
0
def do_transformacao():
    seg.ChecarPerfil(seg.PERFIL_Analista)

    nome = getattr(request.forms, 'nome')
    sql = getattr(request.forms, 'sql')
    persistir = getattr(request.forms, 'pers')
    descricao = 'Gerado pela transformacao'

    nome = '__' + nome

    tabela = imp.ObterTabela('0')
    tabela.nome = nome
    tabela.descricao = descricao
    tabela.sql_origem = sql
    tabela.id_fonte_dados = fonte_dados_transformacao

    if persistir == 'N':
        tabela.sql_destino = sql
    else:
        tabela.sql_destino = None

    imp.SalvarTabela(tabela)

    if persistir == 'S':
        imp.CriarTabelaDoSql(sql, nome)
        imp.CriarIndices(nome)
        imp.GerarColunas(nome)
    else:
        imp.GerarColunasComSQL(nome, sql)

    tabela = imp.ObterTabelaPorNome(nome)

    redirect('/colunas?id=' + str(tabela.id))
def mineracao_dados_cluster():
    seg.ChecarPerfil(seg.PERFIL_Analista)

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

    tabela = imp.ObterTabela(idTabela)
    tabDesc = dm.ObterTabelaDescr(id)
    #objModelo = {
    #    'n_clusters': qtd_clusters,
    #    'modeloDados': modeloDados,
    #    'clusters': clusters.tolist(),
    #    'labels' : labels.tolist()
    #    }

    modelo = json.loads(tabDesc.modelo)
    n_clusters = modelo['n_clusters']
    modeloDados = modelo['modeloDados']
    clusters = modelo['clusters']
    labels = modelo['labels']
    display = modelo['display']

    lista = []
    for itemCluster in clusters:
        valores2 = []
        for valor in itemCluster:
            valores2.append(int(round(valor, 3)))

        lista.append(valores2)

    grf = comp.grfBolha('Clusters', lista, labels, '')

    return dict(tabela=tabela, display=display, htmlGrf=grf.grf, jsGrf=grf.js)
예제 #4
0
def Association(idTabela, filtro, qtd_regras):

    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.consultarSQL(sql)
    regras = desc.Association(lista, int(qtd_regras))

    dp_regras = json.dumps(regras)

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

    session.commit()
    session.close()

    return tabDesc
def ObterTotalRegistros(idTabela):
    tabela = imp.ObterTabela(idTabela)
    sql_table = tabela.nome
    if not (tabela.sql_destino == None or tabela.sql_destino == ''):
        sql_table = tabela.sql_destino

    sql = 'SELECT COUNT(*) AS qtd FROM ' + sql_table
    resultado = db.consultarSQL(sql)

    return resultado[0]['qtd']
예제 #6
0
def edtTabela():
    seg.ChecarPerfil(seg.PERFIL_Analista)

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

    tabela = imp.ObterTabela(id)

    if tabela.descricao == None:
        tabela.descricao = ''
    if tabela.sql_destino == None:
        tabela.sql_destino = ''

    return dict(tabela=tabela)
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 mineracao_dados_rule_assoc():
    seg.ChecarPerfil(seg.PERFIL_Analista)

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

    tabela = imp.ObterTabela(idTabela)
    tabDesc = dm.ObterTabelaDescr(id)
    regras = json.loads(tabDesc.modelo)
    regrasOrdenadas = sorted(regras, key=itemgetter('lift'), reverse=True)

    objTree = comp.treeView(regrasOrdenadas, 'campos', 'lift', 'Regras')

    return dict(tabela=tabela, treeView=objTree.grf, jsTree=objTree.js)
def mineracao_dados_outlier():
    seg.ChecarPerfil(seg.PERFIL_Analista)

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

    tabela = imp.ObterTabela(idTabela)
    tabDesc = dm.ObterTabelaDescr(id)

    modelo = json.loads(tabDesc.modelo)

    grfOutlier = comp.grfOutliers(modelo['lista'], modelo['campoD'],
                                  modelo['campoV'])

    return dict(tabela=tabela, htmlGrf=grfOutlier.grf, jsGrf=grfOutlier.js)
예제 #10
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)
예제 #11
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>')
예제 #12
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
예제 #13
0
def do_tabela_def():

    id = getattr(request.forms, 'id')
    descricao = getattr(request.forms, 'descricao')
    sql_destino = getattr(request.forms, 'sql_destino')
    sql_sem_hist = getattr(request.forms, 'sql_sem_hist')
    pln = getattr(request.forms, 'pln')

    tabela = imp.ObterTabela(id)

    tabela.descricao = descricao
    tabela.sql_destino = sql_destino
    tabela.sql_sem_hist = sql_sem_hist
    tabela.pln = "s" if pln == 'on' else "n"

    imp.SalvarTabela(tabela)

    redirect('/importacao')
예제 #14
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)
예제 #15
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"
예제 #16
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)
예제 #17
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)
예제 #18
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
예제 #19
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
예제 #20
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)
예제 #21
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
예제 #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