O projeto desenvolvido envolve a utilização de ferramentas como MySQL e DBeaver para realizar análises de dados em duas empresas, “Baynsuit” e “StreamDinner”. Através de scripts SQL, foram extraídos insights significativos sobre o comportamento do usuário, vendas por categoria, e avaliações de filmes, entre outros. O objetivo principal é compreender as KPIs de e-commerce e streaming, além de executar consultas “Ad Hoc” e explorar comandos SQL essenciais para a análise de dados. O público-alvo inclui tanto agentes primários com conhecimentos avançados quanto agentes secundários que utilizam consultas improvisadas.
FERRAMENTAS:
MySQL: dentre tantas tecnologias, o MySQL é o SGBD (Sistema de Gerenciamento de Banco de Dados) adequado para aprendizagem SQL e forte presença em aplicações CLOUD, sendo ideal para análises de dados mais simples;
DBeaver: ferramenta universal para uso de NoSQL e SQL que reúne o uso de muitos SGBDs diferentes, além de fornecer uma interface amigável para construção de scripts, criação de DER (Diagrama Entidade Relacionamento) e visualização de características das entidades, além da forte presença no mercado.
INSIGHTS:
Ao longo do projeto, muitos insights são extraídos tanto do sistema E-commerce Baynsuit quanto sistema Streaming StreamDinner, desde descobrir: “Valor médio gasto por usuário”, “Vendas por categoria”, ou mesmo, “Filmes mais bem avaliados por gênero”, “Categorizar os filmes por sua avaliação”, “Gêneros com mais de 10 filmes“, dentre outros. Ambas as análises SQLs atendem a dor do cliente e usam diferentes cláusulas da análise.
BENEFÍCIOS DA ANÁLISE DE DADOS:
CONHECIMENTOS APRENDIDOS:
Atuando como freelancer de analista de dados, atuei em frentes de análise de dados SQL para atender as necessidades de duas companhias: “Baynsuit” e “StreamDinner”. A primeira organização de porte médio tem forte presença no mercado de e-commerce de ternos, sapatos e acessórios masculinos, enquanto, StreamDinner faz referência aos projeto anterior, uma plataforma streaming de filmes com a disponibilização de mais de 300 filmes para os usuários. Ambas as empresas geraram muitos dados históricos concentrados em Warehouse e distribuídos entre Data Marts, necessitando a extração de insights específicos.
A partir das informações apresentadas no parágrafo anterior, entende-se que é necessário extrair insights originados de Data Marts, isto é, “Bancos de dados relacionais Departamentais”, em que cada base de dados possui sua própria governança e respectivo conjunto de dados. Para tanto, indica-se que as análises de dados somente são possíveis através do desenvolvimento de scripts SQL, considerando sua origem de bases MySQL.
Em relação ao público-alvo, esta atividade está direcionada aos “agentes primários”, aqueles que detém conhecimentos avançados para análise de dados, bem como “agentes secundários”, que possuem habilidades superficiais e utilizam de “consultas Ad Hoc”, seja um gerente administrativo do setor, analistas de negócios, desenvolvedores, entre outros.
Dando início detalhando sobre o E-commerce Baynsuit, o gerente de vendas desejava alguns insights e, por essa razão, listou as métricas:
Para iniciar uma análise de dados, deve-se transformar uma afirmação em pergunta, como consequência, “Qual o valor médio gasto por usuário ou cliente em compras?”, para se responder, cria-se o seguinte script SQL usando cláusulas SELECT e AVG:
SELECT UserID AS ‘Usuário’, AVG(FinalPrice) AS ‘Valor Medio Gasto’ FROM sale s GROUP BY UserID;
Transformando o script numa explicação, estamos requisitando que seja selecionado a coluna UserID para ser retornado chamando-o de “Usuário”, e será acompanhado pela média (Preço Final/Qtde de preços finais incluídos) apelidado de “Valor Medio Gasto”, e são originados da tabela sale agrupados conforme os dados do usuário.
Para entender ainda mais o script, a cláusula “AS” é empregada para apelidar as colunas durante o retorno e melhorar o entendimento dos dados. Exemplificando, este insight pode abrir portas para implementar um programa de fidelidade, efetuando um marketing que a cada R$250 de compras, acumula-se pontos.
⚠ ️Obs.: Vale dizer que é necessário ter cuidado durante a nomeação de colunas num script, e cada SGBD possui sua regra. Por exemplo, no MySQL, para nomear colunas com espaços é necessário impor aspas simples (”), por outro lado, o SGBD SQL Server utiliza colchetes ([]).
Desmistificando o seguinte insight: “Qual a quantidade de vendas por categoria?”, e para alcançá-la é necessário desenvolver o script abaixo e o resultado estará em seguida.
SELECT Category AS Categoria, COUNT(*) AS ‘Quantidade Vendida’ FROM sale s GROUP BY Category;
Explicando, a consulta retorna a categoria, e acompanhada da contagem da quantidade de vendas agrupadas conforme a categoria e originadas da tabela sale. A cláusula COUNT realiza uma contagem total (*), isto é, conta todos os registros presentes na tabela, este é presente em análises de dados SQL. A partir do insight, tem-se bem claro que as quantidades estão proporcionais para cada categoria, porém, a que tem maior domínio é “Home & Kitchen”, consequentemente, abertura para maior disponibilidade de produtos desse setor.
A pergunta que fica, “a cláusula ‘SUM’ pode ser utilizada para análise de dados?”, a resposta para isso está na captura da “Receita total por categoria”, pois é resultante de cada captura de linha, e soma dos preços finais dos produtos após descontos. Observe a seguir:
SELECT Category AS Categoria, FLOOR(SUM(FinalPrice)) AS ‘Receita Total’ FROM sale s GROUP BY Category ORDER BY ‘Receita Total’ DESC;
Como analista de dados, notou o uso da cláusula específica que é o “FLOOR”, frequente na manipulação numérica, considerando o primeiro comando uma especifica um arredondamento de um valor decimal para um valor inteiro próximo mais baixo. O contrário da função desta instrução seria o “CEIL” (arredondamento para cima) e “ROUND” (arredondamento normal matemático).
Vale ressaltar que é interessante para um maior entendimento da análise ordenar de maneira decrescente (maior para o menor) de acordo com a receita gerada, para isso, deve-se utilizar a cláusula “ORDER BY” acompanhado de DESC ou ASC (menor para o maior).
Aumentando mais um nível de complexidade, o desafio é encontrar os compradores que mais tiveram compras dos produtos, uma vez que servirá como seleção de indivíduos candidatos para serem patrocinadores ou analistas de produtos (reviewers) para Unboxing. Isto é possível através de dois SQL:
SELECT c.NameCustomer AS ‘Cliente’, c.Cell AS ‘Tel’, c.Email, COUNT(s.UserID) AS ‘Total Compras’ FROM Sale s JOIN Customer c ON s.UserID = c.UserID GROUP BY c.NameCustomer, c.Email, c.Cell ORDER BY ‘Total Compras’ DESC LIMIT 3;
SELECT c.NameCustomer AS ‘Cliente’, c.Cell AS ‘Tel’, c.Email, COUNT(s.UserID) AS ‘Total Compras’ FROM Sale s JOIN Customer c ON s.UserID = c.UserID WHERE c.UserID LIKE ‘337%’ GROUP BY c.NameCustomer, c.Email, c.Cell ORDER BY ‘Total Compras’ DESC;
Destrinchando os componentes, o 1° script retorna os nomes, e-mails, telefones dos usuários/clientes para encontrar meios de comunicação, como também impõe o “Total de Compras” que é a contagem de compras já efetuadas para trazer um elemento essencial para BI que são números. Além de que está restrito de trazer apenas 3 clientes através do LIMIT.
E para trazer dados tanto da tabela Sale e Customer é por meio da cláusula JOIN, estabelecendo uma ponte de relacionamentos através da propriedade comum entre elas o “UserID”, indicando que o UserID (nível de chave estrangeira) de Sale é o mesmo da tabela Customer (nível de chave primária).
O 2° script funciona como uma outra vertente, sendo ela uma busca mais específica, entrando no cenário de premiar o cliente que mais fez compras, assim, os scripts usam a cláusula WHERE para condicionar a busca e LIKE para uma manipulação de caracteres. Na questão anterior, diríamos que deve retornar o dado onde o ID do usuário deve começar com as iniciais “337”.
Dando continuidade, para atender os requisitos do produto StreamDinner, o supervisor de TI tem a necessidade de saber os valores das 4 perguntas:
Começaremos com a categorização dos filmes de 2024 por sua avaliação, considerando três indicadores: “Excelente”, “Bom”, “Regular” e “Ruim” para aplicá-los num gráfico de colunas num dashboard, para tanto, empregamos a cláusula CASE que estabelecem condicionais conforme um critério, observe o script abaixo:
SELECT SeriesTitle AS ‘Título’, IMDBRating AS ‘IMDB’,
CASE
WHEN IMDBRating >= 9.5 THEN ‘Excelente’
WHEN IMDBRating >= 9 THEN ‘Bom’
WHEN IMDBRating >= 8.5 THEN ‘Regular’
END AS ‘Avaliação Categorizada’
FROM movie m;
Nesta instrução retorna o título, avaliação numérica, avaliação interpretativa nomeada de “Avaliação Categorizada”. Detalhando acerca da cláusula, resumidamente, CASE (CASO), WHEN (QUANDO), THEN (ENTÃO), ELSE (SENÃO), portanto, caso quando IMDB for maior ou igual a 8.5, então, a avaliação será ‘Regular’, senão, será ‘Ruim’.
Para manter os lucros apesar dos impedimentos de licenças autorais de disponibilização dos filmes, é necessário encontrar o filme com avaliação acima da média geral para mantê-lo até uma determinada data, e posteriormente, torná-lo indisponível. O script responsável por isso é:
SELECT SeriesTitle AS ‘Título’, IMDBRating AS ‘IMDB’ FROM movie m WHERE IMDBRating = (SELECT MAX(IMDBRating) FROM movie);
Analisando, percebe que uma subquery, ou seja, um consulta dentro da outra para retornar um resultado, que nesse caso, está buscando o filme onde a avaliação é igual ao título com a maior avaliação usando a cláusula MAX. Para fins de curiosidade, caso fosse o contrário representaria o MIN (valor mínimo).
Agora, a penúltima consulta centraliza o uso da cláusula HAVING com o objetivo de consultar os gêneros que possuem mais de 10 filmes, que está encarregada de ser uma espécie de filtro num agrupamento (GROUP BY). Atente-se ao script:
SELECT Genre AS ‘Gênero’, COUNT(*) AS ‘Num. de filmes’ FROM movie m GROUP BY Genre HAVING COUNT(*) > 10;
Aparentemente, o SQL busca o gênero, e a contagem dos filmes, alinhando-os pelo gênero, e retornando os gêneros que a contagem que seja maior que 10 filmes. Por meio da tabela retornada, somente o gênero ”Drama” possui 22 filmes. Então, uma estratégia é diversificar para gêneros de aventura, terror, animes, entre outros.
Para fins de aprendizagem, usa-se o DISTINCT, que, simplesmente, executa uma contagem de diferentes itens, por exemplo, na questão, dentre os mais de 150 filmes, quais os gêneros distintos entre eles, veja a seguir:
SELECT DISTINCT Genre AS “Gênero” FROM movie m;
Por fim, um próximo passo seria aplicações “virtualização das tabelas”, em outras palavras, pegar as consultas mais populares e deixá-la pré-definida, e quando otimizadas facilitará o acesso aos dados e reduzirá a complexidade I/O. Este estágio é fundamental para obter “insights stream” em sistemas ODS (Armazenamento de dados Operacionais), especialmente, análises em tempo real. Um ótimo exemplo seria aplicar a cláusula VIEW para os gastos médios por usuário para desenvolver ofertas relâmpagos, utilizando-se do script:
CREATE VIEW GastoMedioUsuario AS SELECT UserID AS ‘Usuário’, AVG(FinalPrice) AS ‘Valor Medio Gasto’ FROM sale s GROUP BY UserID;
Após a extração das análises, faz-se um processo de BI (Business Intelligence), ou seja, agrega-se um forte valor de negócios aos dados, e deve-se buscar soluções para um “overview” dos insights, portanto, são direcionados para relatórios estáticos ou dinâmicos (dashboard) usando ferramentas de Data Viz., desde: Power BI, Tableau, Qlik Sense, ou mesmo, Machine Learning para tratamento dos dados pegos, caso seja o processo seja ELT (Extract – Load – Transform), ou para treinamento de um modelo IA (Inteligência Artificial) para criação de chatbots ou IAs próprias.