Data Quality
Este projeto de Data Quality foi desenvolvido após Workshop do Luciano Vasconcelos Filho
GitHub do Projeto: Deputados-LuhBorba
Documentação do Projeto: Documentacao
Stack do Projeto
- python
- streamlit
- selenium
- pytest
- taskipy
- pydantic
- openpyxl
- mkdocs
- mkdocstrings
- mkdocs-material
Proposta do Projeto
O projeto tem como objetivo realizar um processo de validação de estrutura de uma planilha no Excel, considerando que hoje no mundo corporativo esta é uma ferramenta amplamente usada, assim buscando definições padrões para envios de dados considerando um estrutura de contrato pre-definida.
A abordagem utilizada é criar um App no Streamlit que realize todo processo de validação, ferramenta com criação de testes, buscando assim um qualidade no dado enviado.
Estrutura do Projeto
O projeto está basicamente dividido em 4 (quatro) arquivos, todos eles dentro da pasta src
.
- app.py
- backend.py
- contrato.py
- frontend.py
App.py
Aqui é particularmente faço a união entre o frontend e backend, carregando assim todas as validações propostas no backend e trazendo todos os visuais carregados no frontend.
# Importando Classe do Arquivo FrontEnd
from frontend import ExcelValidadorUI
# Importando Função do Arquivo BackEnd
from backend import process_excel
def main():
ui = ExcelValidadorUI()
ui.display_header()
upload_file = ui.upload_file()
if upload_file:
result, error = process_excel(upload_file)
ui.display_result(result, error)
if __name__ == "__main__":
main()
Frontend.py
Este arquivo é para configuração do frontend da página, assim deixando de forma separada do app.py
.
# Importando Streamlit
import streamlit as st
# Criando Classe para FrontEnd, para melhor organização e uso
class ExcelValidadorUI:
def __init__(self):
self.set_page_config()
# Criando função para configuração das páginas
def set_page_config(self):
st.set_page_config(
page_title="Validador de Planilha",
page_icon=":snake:"
)
# Criando função para Header da página
def display_header(self):
st.title("Insira sua planilha para realizar a validação!")
# Criando função para o componente de file uploader
def upload_file(self):
return st.file_uploader("Carregue sua planilha", type=["xlsx"])
# Criando função especifica para mostragem de error
def display_result(self, result, error):
if error:
st.error(f"Erro na validação: {error}")
else:
st.success("A planilha está correta")
Backend.py
Este arquivo é para configuração do backend da página, fazendo toda validação dos arquivos 'xlsx'.
# Importando Pandas
import pandas as pd
# Importando classe de Vendas do arquivo de contratos.py
from contrato import Vendas
# Criando função de validação do arquivo excel
def process_excel(uploaded_file):
try:
df = pd.read_excel(uploaded_file)
# Verificando se há colunas extras
extras_cols = set(df.columns) - set(Vendas.model_fields.keys())
if extras_cols:
return False, f"Existem mais colunas que o necessário: {', '.join(extras_cols)}"
# Validar cada linha com o contrato
for index, row in df.iterrows():
try:
_ = Vendas(**row.to_dict())
except Exception as e:
raise ValueError(f"Erro na linha {index + 2}: {e}")
return True, None
except ValueError as ve:
return False, str(ve)
except Exception as e:
return False, f"Erro Inesperado: {str(e)}"