예제 #1
0
def todos_dados():
    conn = jaydebeapi.connect("com.dremio.jdbc.Driver", "jdbc:dremio:direct=bdata01.tce.go.gov.br:31010", [usr_dremio, pswd_dremio], pathDremioJDBC)
    curs = conn.cursor()
    curs.execute(sqlEOF+' WHERE c."Exercício do orçamento (Ano)" >= 2015')
    nomeCampos = [i[0] for i in curs.description]
    df = pd.DataFrame(curs.fetchall(),columns=nomeCampos)
    pickles.criarPickle(df,"df")
    return df
예제 #2
0
def tratarDados(data, opcao):
    # Trata o nome das colunas para trabalhar melhor com os dados
    data.columns = [c.lower().replace(' ', '_') for c in data.columns]
    data.columns = [tratar_texto.removerCaracteresEspeciais(c)for c in data.columns]
    data.columns = [tratar_texto.tratarnomecolunas(c)for c in data.columns]
    identificador_empenho = pd.DataFrame(data['empenho_sequencial_empenho'])
    pickles.criarPickle(identificador_empenho,"modelos_tratamentos/identificador_empenho")
    # Deleta colunas que atraves de analise foram identificadas como nao uteis
    data = data.drop(['exercicio_do_orcamento_ano','classificacao_orcamentaria_descricao',
                      'natureza_despesa_nome',
                      'valor_estorno_anulacao_empenho','valor_anulacao_cancelamento_empenho',
                      'fonte_recurso_cod','elemento_despesa','grupo_despesa',
                      'empenho_sequencial_empenho'], axis='columns')
    # rotulo
    label = data['natureza_despesa_cod']
    label = pd.DataFrame(label)
    data = data.drop('natureza_despesa_cod',axis = 1)
    # tfidf
    textoTratado = tratar_texto.cleanTextData(data["empenho_historico"])
    # Função que gera o TF-IDF do texto tratado
    with open('pickles/modelos_tratamentos/tfidf_modelo'+'.pk', 'rb') as pickle_file:
        tfidf_modelo = pickle.load(pickle_file)
    tfidf =  pd.DataFrame.sparse.from_spmatrix(tfidf_modelo.transform(textoTratado))
    del textoTratado
    data = data.drop('empenho_historico',axis = 1)
    # Tratamento dos dados
    data = tratamento_especifico(data.copy())
    # Normalizando colunas numéricas
    colunas = data.columns
    for col in colunas:
        if(data[col].dtype != "O"):
            with open('pickles/modelos_tratamentos/'+"normalization_"+col+'.pk', 'rb') as pickle_file:
                min_max_scaler = pickle.load(pickle_file)
            data[col] = pd.DataFrame(min_max_scaler.transform(data[col].values.reshape(-1,1)))
    # OHE
    data = one_hot_encoding.aplyOHE(data)
    if(opcao == "OHE"):
        return data, label
    elif(opcao == "tfidf"):
        return tfidf, label
    else:
        aux = sparse.hstack((csr_matrix(data),csr_matrix(tfidf) ))
        data =  pd.DataFrame.sparse.from_spmatrix(aux)
        return data, label
예제 #3
0
def tratamentoDados(data, escolha):
    # Trata o nome das colunas para trabalhar melhor com os dados
    data.columns = [c.lower().replace(' ', '_') for c in data.columns]
    data.columns = [
        tratar_texto.removerCaracteresEspeciais(c) for c in data.columns
    ]
    data.columns = [tratar_texto.tratarnomecolunas(c) for c in data.columns]
    data = filtro(data.copy())
    # Deleta colunas que atraves de analise foram identificadas como nao uteis
    data = data.drop([
        'exercicio_do_orcamento_ano', 'classificacao_orcamentaria_descricao',
        'natureza_despesa_nome', 'valor_estorno_anulacao_empenho',
        'valor_anulacao_cancelamento_empenho', 'fonte_recurso_cod',
        'elemento_despesa', 'grupo_despesa', 'empenho_sequencial_empenho'
    ],
                     axis='columns')
    # Funcao que separa o rotulo do dataset e retorna as linhas com as naturezas de despesa que so aparecem em 1 empenho
    label, linhas_label_unica = tratar_label.tratarLabel(data)
    label = pd.DataFrame(label)
    # Excluindo as naturezas de despesas que so tem 1 empenho do dataset
    data = data.drop(linhas_label_unica, axis=0)
    data.reset_index(drop=True, inplace=True)
    del linhas_label_unica

    if (escolha == "dropar"):
        return data["analise"]
    if (escolha == "tfidf"):
        # Funcao que limpa o texto retira stopwords acentos pontuacao etc.
        textoTratado = tratar_texto.cleanTextData(data["empenho_historico"])
        # Função que gera o TF-IDF do texto tratado
        tfidf = tratar_texto.calculaTFIDF(textoTratado)
        del textoTratado
        pickles.criarPickle(tfidf, 'tfidf')
        return 0
    # Tratamento dos dados
    data = tratamento_especifico(data.copy())
    # Normalizando colunas numéricas
    min_max_scaler = preprocessing.MinMaxScaler()
    colunas = data.columns
    for col in colunas:
        if (data[col].dtype != "O"):
            min_max_scaler.fit(data[col].values.reshape(-1, 1))
            with open(
                    'pickles/modelos_tratamentos/' + "normalization_" + col +
                    '.pk', 'wb') as fin:
                pickle.dump(min_max_scaler, fin)
            data[col] = pd.DataFrame(
                min_max_scaler.transform(data[col].values.reshape(-1, 1)))

    # Excluindo as colunas que ja foram tratadas
    data = data.drop(['empenho_historico', 'natureza_despesa_cod'],
                     axis='columns')
    if (escolha == "OHE"):
        # Aplicando a estrategia One Hot Encoding
        data = one_hot_encoding.oneHotEncoding(data)
        #data = pd.concat([data,tfidf_beneficiario],axis = 1)
        pickles.criarPickle(data, 'data')
        pickles.criarPickle(label, 'label')
    else:
        return None
예제 #4
0
def range_dados(valor = 0, orgao = 0):
    conn = jaydebeapi.connect("com.dremio.jdbc.Driver", "jdbc:dremio:direct=bdata01.tce.go.gov.br:31010", [usr_dremio, pswd_dremio], pathDremioJDBC)
    curs = conn.cursor()
     # Se nao receber parametros avalia a ultima data (ultima data e o dia anterior)
    if(valor == 0):
        valor = (date.today()-timedelta(days=1)).strftime('%Y/%m/%d')
        valor = "\'"+valor+"\'"
        curs.execute(sqlEOF+' WHERE c."Período (Dia/Mes/Ano)" = dia'.replace("dia",valor))
    elif("a" in valor and orgao !=0):
        inicio = valor.split(" ")[0]
        fim =valor.split(" ")[2]
        curs.execute(sqlEOF+' WHERE c."Período (Dia/Mes/Ano)" >= inicio and "Período (Dia/Mes/Ano)" <= fim and "Órgão (Código/Nome)" = orgao'.replace("inicio",inicio).replace("fim",fim).replace("orgao",orgao))
    elif("a" in valor and orgao ==0):
        inicio = valor.split(" ")[0]
        fim =valor.split(" ")[2]
        curs.execute(sqlEOF+' WHERE c."Período (Dia/Mes/Ano)" >= inicio and "Período (Dia/Mes/Ano)" <= fim'.replace("inicio",inicio).replace("fim",fim))
    elif(orgao ==0):
        curs.execute(sqlEOF+' WHERE c."Período (Dia/Mes/Ano)" = dia'.replace("dia",valor))
    else:
        curs.execute(sqlEOF+' WHERE c."Período (Dia/Mes/Ano)" = dia and "Órgão (Código/Nome)" = orgao'.replace("dia",valor).replace("orgao",orgao))
    nomeCampos = [i[0] for i in curs.description]
    df = pd.DataFrame(curs.fetchall(),columns=nomeCampos)
    pickles.criarPickle(df,"dados_teste")
    return df
예제 #5
0
def tratarDados(data, opcao = "visao dupla"):
    # Trata o nome das colunas para trabalhar melhor com os dados
    data.columns = [c.lower().replace(' ', '_') for c in data.columns]
    data.columns = [tratar_texto.removerCaracteresEspeciais(c)for c in data.columns]
    data.columns = [tratar_texto.tratarnomecolunas(c)for c in data.columns]
    identificador_empenho = pd.DataFrame(data['empenho_sequencial_empenho'])
    pickles.criarPickle(identificador_empenho,"modelos_tratamentos/identificador_empenho")
    # Deleta colunas que atraves de analise foram identificadas como nao uteis
    data = data.drop(['exercicio_do_orcamento_ano','classificacao_orcamentaria_descricao',
                      'natureza_despesa_nome',
                      'valor_estorno_anulacao_empenho','valor_anulacao_cancelamento_empenho',
                      'fonte_recurso_cod','elemento_despesa','grupo_despesa',
                      'empenho_sequencial_empenho'], axis='columns')
    # rotulo
    label = data['natureza_despesa_cod']
    label = pd.DataFrame(label)
    if(opcao == "Modelo 2"):
        opcao = "OHE"
    else:
        data = data.drop('natureza_despesa_cod',axis = 1)
    # tfidf
    textoTratado = tratar_texto.cleanTextData(data["empenho_historico"])
    # Função que gera o TF-IDF do texto tratado
    with open('pickles/modelos_tratamentos/tfidf_modelo'+'.pk', 'rb') as pickle_file:
        tfidf_modelo = pickle.load(pickle_file)
    tfidf =  pd.DataFrame.sparse.from_spmatrix(tfidf_modelo.transform(textoTratado))
    del textoTratado
    data = data.drop('empenho_historico',axis = 1)
    # Tratamento dos dados
    data = tratamento_especifico(data.copy())
    # Tratando o beneficiario nome
    nome = [""]*data.shape[0]
    for i in range(data.shape[0]):
        if(data['pessoa_juridica'].iloc[i]):
            nome[i] = data["beneficiario_nome"].iloc[i]
        else:
            nome[i] = "pessoafisica"
    data["beneficiario_nome"] = nome
    # Tratando o campo beneficiario nome como texto livre e fazendo TFIDF
    texto_beneficiario = tratar_texto.cleanTextData(data["beneficiario_nome"])
    with open('pickles/modelos_tratamentos/tfidf_beneficiario'+'.pk', 'rb') as pickle_file:
        tfidf_beneficiario = pickle.load(pickle_file)
    data_cv = tfidf_beneficiario.transform(texto_beneficiario)
    tfidf_beneficiario = pd.DataFrame.sparse.from_spmatrix(data_cv, columns = tfidf_beneficiario.get_feature_names())
    data = data.drop("beneficiario_nome", axis='columns')
    pickles.criarPickle(tfidf_beneficiario,"dados_tfidf_beneficiario")
    # Normalizando colunas numéricas
    colunas = data.columns
    for col in colunas:
        if(data[col].dtype != "O"):
            with open('pickles/modelos_tratamentos/'+"normalization_"+col+'.pk', 'rb') as pickle_file:
                min_max_scaler = pickle.load(pickle_file)
            data[col] = pd.DataFrame(min_max_scaler.transform(data[col].values.reshape(-1,1)))
    # OHE
    if(opcao == "OHE"):
        data = one_hot_encoding.aplyOHE(data)
        tfidf_beneficiario = pickles.carregarPickle("dados_tfidf_beneficiario")
        data = pd.concat([data, tfidf_beneficiario], axis = 1)
        return data, label
    elif(opcao == "tfidf"):
        return tfidf, label
    else:
        data = one_hot_encoding.aplyOHE(data)
        tfidf_beneficiario = pickles.carregarPickle("dados_tfidf_beneficiario")
        data = pd.concat([data, tfidf_beneficiario], axis = 1)
        data = sparse.hstack((csr_matrix(data),csr_matrix(tfidf) ))
        data =  pd.DataFrame.sparse.from_spmatrix(data)
        return data, label
예제 #6
0
    del data_teste, label_teste
    label_treino.reset_index(drop=True, inplace=True)
    # Acha o melhor conjunto de hiperparametros para o algoritmo
    modelo_validado = SVC(kernel="linear", random_state=0)
    hiperparametros = {'C': [0.1, 1, 10, 100]}
    espalhamento = 3
    melhor_c = refinamento_hiperparametros(data_treino, label_treino,
                                           modelo_validado, hiperparametros,
                                           espalhamento)["C"]
    modelo_validado = SVC(kernel="linear", random_state=0, C=melhor_c)
    modelo_validado.fit(data_validado, label_validado.values.ravel())
    with open('pickles/modelos_tratamentos/modelo_SVM_validado.pk',
              'wb') as fin:
        pickle.dump(modelo_validado, fin)
    # Salvando o rotulo validado
    pickles.criarPickle(label_validado, "label_validado")

else:
    label = pickles.carregarPickle("label")
    label_validado = pickles.carregarPickle("label_validado")
    with open('pickles/modelos_tratamentos/modelo_SVM.pk',
              'rb') as pickle_file:
        modelo = pickle.load(pickle_file)
    with open('pickles/modelos_tratamentos/modelo_SVM_validado.pk',
              'rb') as pickle_file:
        modelo_validado = pickle.load(pickle_file)
    # Pega os novos dados
    if (len(sys.argv) == 1):
        dados_novos = range_dados()
    elif (len(sys.argv) == 3):
        dados_novos = range_dados(sys.argv[2])