Plataforma de Business Intelligence: Tutorial Usando o Pipeline de Agregação do MongoDB

Publicados: 2022-03-11

Usar dados para responder a perguntas interessantes é o que os pesquisadores estão ocupados fazendo no mundo atual orientado por dados. Dados os grandes volumes de dados, o desafio de processá-los e analisá-los é grande; especialmente para estatísticos ou analistas de dados que não têm tempo para investir no aprendizado de plataformas de inteligência de negócios ou tecnologias fornecidas pelo ecossistema Hadoop, Spark ou bancos de dados NoSQL que os ajudariam a analisar terabytes de dados em minutos.

A norma hoje é que pesquisadores ou estatísticos construam seus modelos em subconjuntos de dados em pacotes de análise como R, MATLAB ou Octave e, em seguida, forneçam as fórmulas e as etapas de processamento de dados para as equipes de TI que criam soluções de análise de produção.

Um problema com essa abordagem é que, se o pesquisador perceber algo novo depois de executar seu modelo em todos os dados em produção, o processo terá que ser repetido novamente.

E se o pesquisador pudesse trabalhar com um desenvolvedor do MongoDB e executar sua análise em todos os dados de produção e usá-los como seu conjunto de dados exploratório, sem ter que aprender nenhuma nova tecnologia ou linguagens de programação complexas, ou mesmo SQL?

mongodb e inteligência de negócios

Se usarmos o Pipeline de Agregação do MongoDB e o MEAN efetivamente, podemos conseguir isso em um tempo razoavelmente curto. Através deste artigo e do código que está disponível aqui neste repositório do GitHub, gostaríamos de mostrar como é fácil conseguir isso.

A maioria das ferramentas de Business Intelligence que estão no mercado estão fornecendo meios para os pesquisadores importarem conjuntos de dados de NoSQL e outras tecnologias de Big Data para a ferramenta, então as transformações e análises são feitas dentro da ferramenta. Mas neste tutorial de inteligência de negócios estamos usando o poder do MongoDB Aggregation Pipeline sem extrair os dados do MongoDB, e o pesquisador está usando uma interface simples para fazer todos os tipos de transformações em um sistema de big data de produção.

Pipeline de agregação do MongoDB para inteligência de negócios

Simplificando, o pipeline de agregação do MongoDB é uma estrutura para realizar uma série de transformações de dados em um conjunto de dados. O primeiro estágio recebe toda a coleção de documentos como entrada e, a partir de então, cada estágio subsequente recebe o conjunto de resultados da transformação anterior como entrada e produz alguma saída transformada.

Existem 10 tipos de transformações que podem ser usadas em um pipeline de agregação:

  • $geoNear: gera documentos na ordem do mais próximo para o mais distante de um ponto especificado

  • $match: filtra o registro de entrada definido por qualquer expressão dada

  • $project: cria um conjunto de resultados com um subconjunto de campos de entrada ou campos calculados

  • $redact: restringe o conteúdo dos documentos com base nas informações do documento

  • $unwind: pega um campo de array com n elementos de um documento e retorna n documentos com cada elemento adicionado a cada documento como um campo substituindo aquele array

  • $group: agrupa por uma ou mais colunas e realiza agregações em outras colunas

  • $limit: escolhe os primeiros n documentos dos conjuntos de entrada (útil para cálculos de percentil, etc.)

  • $skip: ignora os primeiros n documentos do conjunto de entrada

  • $sort: ordena todos os documentos de entrada de acordo com o objeto fornecido

  • $out: pega todos os documentos devolvidos do estágio anterior e os grava em uma coleção

Com exceção da primeira e última da lista acima, não há regras sobre a ordem em que essas transformações podem ser aplicadas. $out deve ser usado apenas uma vez e, no final, se quisermos gravar o resultado do pipeline de agregação em uma coleção nova ou existente. $geoNear pode ser usado apenas como o primeiro estágio de um pipeline.

Para tornar as coisas mais fáceis de entender, vamos percorrer dois conjuntos de dados e duas perguntas relevantes para esses conjuntos de dados.

Diferença de Salários por Designação

Para explicar o poder do pipeline de agregação do MongoDB, baixamos um conjunto de dados que contém informações salariais de professores universitários para todo o país. Esses dados estão disponíveis em nces.ed.gov. Temos dados de 7598 instituições com os seguintes campos:

 var FacultySchema = mongoose.Schema({ InstitutionName : String, AvgSalaryAll : Number, AVGSalaryProfessors : Number, AVGSalaryAssociateProfessors : Number, AVGSalaryAssistantProfessors : Number, AVGSalaryLecturers : Number, AVGSalaryInstructors : Number, StreetAddress : String, City : String, State : String, ZIPCode : String, MenStaffCount : Number, WomenStaffCount : Number }

Com esses dados queremos saber (em média) qual é a diferença entre os salários dos professores associados e dos professores por estado. Então, um professor associado pode perceber em qual estado ele é mais valorizado em relação a um professor em termos salariais.

Para responder a essa pergunta, um pesquisador primeiro precisa eliminar dados ruins da coleção, porque existem algumas linhas/documentos em nosso conjunto de dados em que o salário médio é uma string nula ou vazia. Para realizar essa limpeza do conjunto de dados, adicionaremos a seguinte etapa:

 {$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}

Isso filtrará todas as entidades que possuem valores de string nesses dois campos. No MongoDB, cada tipo é representado com um número exclusivo - para strings, o número do tipo é 2.

Esse conjunto de dados é um bom exemplo porque, na análise de dados do mundo real, os engenheiros geralmente também precisam lidar com limpezas de dados.

Agora que temos alguns dados estáveis, podemos seguir para a próxima etapa, onde calcularemos a média dos salários por estado:

 {$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}

Precisamos apenas executar uma projeção do conjunto de resultados acima e obter a diferença nos salários médios estaduais, conforme mostrado abaixo na Etapa 3 do nosso pipeline:

 {$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}

Isso deve nos dar a diferença salarial média em nível estadual entre professores e professores associados de um conjunto de dados de 7.519 instituições educacionais em todo os EUA. Para tornar ainda mais conveniente interpretar essas informações, vamos fazer uma ordenação simples para sabermos qual estado tem a menor diferença adicionando um estágio $sort:

 {$sort: { SalaryDifference: 1}}

A partir desse conjunto de dados, fica claro que Idaho, Kansas e West Virginia são três estados onde a diferença de salários de professores associados e professores é a menor em comparação com todos os outros estados.

O pipeline de agregação completo gerado para isso é mostrado abaixo:

 [ {$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}, {$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}, {$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}, {$sort: { SalaryDifference: 1}} ]

O conjunto de dados resultante que aparece se parece com isso. Os pesquisadores também podem exportar esses resultados para CSV para gerar relatórios usando pacotes de visualização como o Tableau ou por meio de gráficos simples do Microsoft Excel.

exemplo de conjunto de dados mongodb

Remuneração Média por Tipo de Emprego

Outro exemplo que exploraremos neste artigo envolve um conjunto de dados obtido em www.data.gov. Dadas as informações de folha de pagamento de todas as organizações governamentais estaduais e locais nos Estados Unidos da América, gostaríamos de descobrir o salário médio dos funcionários de “Administração Financeira” em período integral e meio período em cada estado.

O conjunto de dados foi importado, resultando em documentos de 1975 onde cada documento segue este esquema:

 mongoose.Schema({ State : String, GovernmentFunction : String, FullTimeEmployees : Number, VariationPCT : Number, FullTimePay : Number, PartTimeEmployees : Number, PartTimePay : Number, PartTimeHours : Number, FullTimeEquivalentEmployment : Number, TotalEmployees : Number, TotalMarchPay : Number }, {collection: 'payroll'});

A resposta a esta pergunta pode ajudar um funcionário da Administração Financeira a escolher o melhor estado para se mudar. Com nossa ferramenta baseada em pipeline do agregador MongoDB, isso pode ser feito com bastante facilidade:

Na primeira etapa, filtre na coluna GovernmentFunction para descartar todas as entidades não pertencentes à “Administração Financeira”:

 {$match:{GovernmentFunction:'Financial Administration'}}

Na próxima etapa do tutorial, agruparemos as entidades por estado e calcularemos os salários médios de período integral e meio período em cada estado:

 {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}

Por fim, classificaremos os resultados dos estados pagadores mais altos para os estados pagadores mais baixos:

 {$sort: {FTP_AVG: -1, PTM_AVG: -1}}

Isso deve permitir que a ferramenta gere o seguinte pipeline de agregação:

 [ {$match:{GovernmentFunction:'Financial Administration'}}, {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}, {$sort: {FTP_AVG: -1, PTM_AVG: -1}} ]

A execução do pipeline de agregação deve produzir alguns resultados como este:

pipeline de agregação mongodb

Blocos de construção

Para construir esse aplicativo de inteligência de negócios, usamos o MEAN, que é uma combinação de MongoDB, ExpressJS, AngularJS e NodeJS.

Inteligência de negócios MEAN

Como você já deve saber, o MongoDB é um banco de dados de documentos sem esquema. Embora cada documento armazenado seja limitado a 16 MB de tamanho, sua flexibilidade e desempenho, juntamente com a estrutura de pipeline de agregação que ele fornece, tornam o MongoDB um ajuste perfeito para essa ferramenta. Começar com o MongoDB é muito fácil, graças à sua documentação abrangente.

Node.js, outro componente integral do MEAN, fornece o ambiente Javascript do lado do servidor orientado a eventos. O Node.js executa Javascript usando o mecanismo V8 do Google Chrome. As promessas de escalabilidade do Node.js são o que está levando muitas organizações a ele.

Express.js é a estrutura de aplicativo da Web mais popular para Node.js. Facilita a criação de APIs ou qualquer outro tipo de camada de negócios do lado do servidor para aplicativos da Web. É muito rápido devido à sua natureza minimalista, mas também é bastante flexível.

O AngularJS, criado e mantido por vários engenheiros do Google, está se tornando rapidamente um dos frameworks Javascript front-end mais populares disponíveis à nossa disposição.

Existem duas razões pelas quais o MEAN é tão popular e nossa escolha para desenvolvimento de aplicativos na techXplorers:

  • O conjunto de habilidades é simples. Um engenheiro que entende de JavaScript é bom para ir em todas as camadas.

  • A comunicação entre as camadas de front-end para negócios e banco de dados acontece por meio de objetos JSON, o que nos economiza um tempo significativo no design e desenvolvimento em diferentes camadas.

Conclusão

Neste tutorial de pipeline de agregação do MongoDB, demonstramos uma maneira econômica de fornecer aos pesquisadores uma ferramenta na qual eles podem usar dados de produção como conjuntos de dados exploratórios e executar diferentes conjuntos de transformações para analisar e construir modelos.

Conseguimos desenvolver e implantar esse aplicativo de ponta a ponta em apenas 3 dias. Este aplicativo foi desenvolvido por uma equipe de 4 engenheiros experientes (2 nos EUA e 2 na Índia) e um designer e especialista freelancer em UX nos ajudando com algumas ideias sobre design de interface. Em algum momento no futuro, vou dedicar um tempo para explicar como esse nível de colaboração funciona para criar produtos incríveis em um tempo incrivelmente curto.

Esperamos que você aproveite o pipeline de agregação do MongoDB e coloque o poder nas mãos de seus pesquisadores que podem mudar o mundo com suas análises e insights inteligentes.

Este aplicativo está disponível para ser jogado aqui.