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()
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 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
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 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"
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
def ObterDadosPrevisao(idTabela): sql = dbTab.GerarSQL(idTabela, 'O') return db.consultarSQLDataFrame(sql)
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