Great expectations: Descubra como aplicar conceitos de qualidade de dados na prática.

Thiago Santos
9 min readNov 16, 2021

--

Inicialmente vamos abordar um pouco a respeito do tema qualidade de dados, então segure as suas expectativas só mais um pouquinho. Você provavelmente já deve ter visto esta imagem, que é comumente chamada de “a pirâmide do conhecimento” ou Hierarquia DIKW (Data-Information-Knowledge-Wisdom).

Essa imagem reforça o quanto os dados têm importância quando precisamos tomar uma decisão, pois é através de contexto, tratamento, organização e integração que, um simples conjuntos de dados podem gerar o conhecimento necessário para uma corporação posicionar-se estrategicamente sobre um determinado assunto.

Olhando mais uma vez para a imagem, é simples de notar que, a base dessa pirâmide é justamente os dados, e, é aí que chegamos ao ponto que desejo destacar. Nessa pirâmide a qualidade é o alicerce que sustenta toda a essa estrutura cada vez mais vital para gerar vantagem competitiva, seja qual for o mercado que uma organização esteja inserida.

Na governança de dados existe uma função que trata deste tópico de “Data Quality” ou simplesmente qualidade de dados, caso você realize uma busca vai se deparar com várias definições, que geralmente como bem observou Carlos Barbieri (em seu livro “Governança de dados”) tem em comum as seguintes dimensões:

Completude: O dado deve ser composto de tudo que esperamos dele. Exemplo: se eu tenho um endereço que não possui a rua, eu não posso considerar esse dado em sua total completude.

Unicidade: O atributo identificador ou a chave de identificação deve ser única. Exemplo: A existência de um cliente no cadastro com CPF iguais estaria descumprindo o conceito de unicidade desse cadastro.

Razoabilidade: O dado deve cumprir as questões lógicas da regra de negócio. Exemplo: A data de fabricação de um produto que é posterior a data de vencimento estaria contrariando o conceito de razoabilidade.

Integridade: A resposta obtida a partir de um dado deve ser a mesma em qualquer fonte onde ele esteja, desde que seja no mesmo formato. Exemplo: Valores de vendas mensais divergentes em duas bases da mesma empresa não é característica de um dado integro.

Temporalidade: O dado deve ser fornecido dentro do período necessário para o consumo. Exemplo: Um site para acompanhar resultados de partida de futebol que só atualiza o placar em D-1, certamente não cumpre o quesito da temporalidade.

Validade: Os dados devem estar dispostos no padrão acordado, tanto estrutura quanto campo. Exemplo: Uma nota fiscal que é transmitida em um arquivo em formato “.doc” jamais será aceita pela Sefaz, o emitente deveria transmitir a nota em um formato aceito como por exemplo “xml”, ou então o campo de CNPJ que deve ter 14 dígitos ou os valores dos produtos da nota tem de estar com o formato Double e etc.

Até aqui você pode estar pensando “Nossa quantos conceitos, mas isso existe na prática?”Como posso validar um conjunto de dados aplicando essas tais ‘dimensões’?”. Pois bem, apresento-lhes o Great Expectations!

Uma das ferramentas open source mais utilizadas mais para validar, documentar e traçar o perfil de um conjunto de dados. Ele tem uma ótica bem simples de funcionamento, você define o que espera dos dados criando uma suíte definindo os padrões que são esperados, depois executa essa suíte e pronto! Ela já consegue detectar os problemas nos dados rapidamente. Com o Great Expectations também é possível criar uma espécie de documentação de dados e relatórios de qualidade de dados a partir dessas suítes.

Bem, agora vamos lá mãos a obra!

Aqui vou te mostrar como é simples de construir sua primeira suíte no Great Expectations. A primeira coisa a ser feita é claro, devemos instalar o Great Espectations.

pip install great_expectations

E depois só para confirmar a instalação podemos execute:

great_expectations --version

Se ocorreu tudo bem, a versão instalada do Great Espectations deverá ser exibida no seu terminal, algo semelhante a isso:

Para poder prosseguir devemos indicar o contexto dos nossos dados justamente para gerenciar as configurações do nosso projeto. Aqui você deve criar uma pasta para o seu projeto, que no meu caso chamarei de “ge_sales_games”, depois deverá navegar para dentro desta pasta e executar o seguinte comando:

great_expectations --v3-api init

Após isso será criado na raiz do nosso projeto uma pasta chamada “great_expectations” que terá o diretório base das configurações citadas anteriormente.

Agora precisamos configurar a conexão com a fonte de dados que aplicaremos a suíte, para iremos usar como exemplo um dataset simples em csv “Video_Games_Sales_as_at_22_Dec_2016.csv” que pode ser baixado aqui . Após fazer o download do arquivo, crie uma pasta chamada “data” na raiz do seu projeto e mova este arquivo para dentro da pasta.

Para criar a fonte de dados use o seguinte comando:

great_expectations --v3-api datasource new

Agora basta só seguir as mesmas opções da imagem abaixo, que primeiro indica o desejo de usar os arquivos do sistema como uma fonte de dados, depois indica que usaremos o Pandas para realizar o processamento dos dados, por último informamos o path onde estão os arquivos a serem analisados pela suíte.

Depois que você indicar as opções, um Notebook do Jupyter será aberto para confirmar as configurações. Claro que você pode criar sua suíte em arquivos “.py”, mas neste exemplo vamos utilizar um notebook para ficar mais simples a interação com a API do Great Expectations. No caso do notebook que foi aberto ao criarmos uma nova fonte de dados, vamos utilizá-lo para criar uma suíte bem simples e depois modificamos adicionado mais algumas validações. Você deve executar esse notebook modificando apenas a segunda célula, alterando o “datasource_name” de “my_datasource” para “data__dir”. Realize a alteração e execute todo o notebook, você pode até mesmo fechá-lo após a execução.

Depois dessas configurações podemos finalmente criar a nossa tão falada suíte. Basta executar:

great_expectations --v3-api suite new

Para prosseguirmos, precisamos informar como queremos iniciar a suíte, no nosso caso escolheremos a 3° opção pois ela faz uma espécie de mapeamento e realiza algumas sugestões. Para o restante das opções siga a imagem abaixo.

Ao finalizar uma nova janela será aberta no navegador apresentando o notebook da suíte. Agora vamos entender melhor o que faz cada célula do notebook.

1° — Importa todas as bibliotecas relevantes e carrega o contexto de dados que será entregues a uma suíte através do “Validator”.

2° — Aqui apenas indicamos quais colunas não iremos levar em consideração para gerar a aplicar a suíte.

3° — Com base nas colunas selecionadas na segunda célula, aqui o próprio Great Expectations criará através de um “profile” a suíte com os dados carregados pelo “validator” da primeira célula.

4° — Esta célula salva a suíte em disco, executa a validação no lote de dados carregado e, em seguida, cria e abre documentos de dados em html, para que você possa ver os resultados da validação.

Ates de executar o notebook inteiro vamos comentar apenas a linha da segunda célula, para que a suíte nos traga alguns exemplos de teste de duas colunas do dataset. Na segunda célula comente as linhas 2 e 16, seu código deverá ficar igual a imagem abaixo:

Agora vamos lá, execute o notebook e …

Voilà será aberto uma nova aba com sua primeira suíte criada. Resumindo o que aconteceu, o Great Expectations analisou as colunas “Plataform” e “Rating” do dataset e com base em alguns insides sugeriu uma suíte automaticamente. Sugiro que você explore a suíte que foi aberta, pois ela apresenta alguns indicadores bem interessante e o mais importante: o que foi validado e como foi validado.

Por exemplo, vamos checar como foram validas as informações da coluna “Platform” e quais dimensões de qualidade de dados cada teste pode abranger:

· Os valores devem estar entre os nomes da lista (Completude e Razoabilidade)

· Os valores nunca devem ser nulos (Completude)

· E o tipo do dado deve ser uma String ou algo semelhante (Validade)

Se por acaso você deseja alterar a suíte e acrescentar mais alguma validação é bem simples, precisamos executar o comando abaixo, e depois informar que queremos editar de forma interativa via Jupyter, e utilizar os métodos da API python do Great Expectations:

great_expectations --v3-api suite edit demo.gamesSales

Após executar o comando e selecionar a opção indicada na imagem acima, um novo notebook deverá aparecer, onde realizaremos uma modificação adicionando uma nova célula com mais uma validação a ser feita. Iremos adicionar a linha que validará se o nome das plataformas possui até 5 caracteres.

validator.expect_column_value_lengths_to_be_between(column='Platform', min_value=0, max_value=5)

Após realizar a adição desta nova célula o seu notebook ficará desta maneira:

Execute novamente todo o notebook e você verá que essa nova validação já foi adicionada a suíte de teste.

Viu como é simples editar uma suíte! Agora que você já sabe o caminho, fique a vontade para adicionar mais validações mais colunas ou simplesmente editar os dados e verificar como a suíte vai se comportar. Você pode encontrar uma lista com métodos que podem ser utilizados em uma suíte e exemplos de utilização na documentação da ferramenta.

O Great Expectations é bem útil para equipes de ciência de dados ou e engenharia de dados, principalmente para realizar testes em dados que são consumidos ou repassados a outras equipes ou fornecedores, ele pode ser utilizado até mesmo na etapa de transformação dos dados em uma das etapas do seu pipeline, a fim de garantir a exatidão das transformações. Ele funciona não só com Pandas, mas também com o Spark o que viabiliza o seu uso em projetos com processamento de grande volume de dados . O Great Expectations também possui uma espécie de versionamento para cada validação de conjunto de dados, que é chamado de “checkpoint”, o checkpoint ajuda a manter um histórico simples das validações de uma suíte.

Esse é o link da página principal do projeto: https://greatexpectations.io/

E esse o link do github: https://github.com/great-expectations/great_expectations

Enfim, espero que esse post tenha ajudado a despertar sua curiosidade em conhecer essa ferramenta excepcional!

--

--