- InfinitePy Newsletter 🇧🇷
- Posts
- Analisando dados de vendas do Excel com Python Pandas e Seaborn - Parte III
Analisando dados de vendas do Excel com Python Pandas e Seaborn - Parte III
Visualizando tendências sazonais, receita do cliente e principais produtos para estratégias de vendas.
🕒 Tempo estimado de leitura: 11 minutos
Bem-vindo de volta à terceira parte da nossa série sobre análise de dados de vendas do Excel usando as bibliotecas do Python — Pandas e Seaborn. Se você perdeu nossos artigos anteriores, pode se atualizar clicando aqui e aqui.
hoje, abordaremos:
Análise do padrão de vendas para 2024: para rastrear a atividade de vendas dos produtos e observar quaisquer variações sazonais.
Receita total e média por cliente: para ter uma estimativa das receitas totais e médias que um determinado cliente traz para o negócio, melhorando assim nossa compreensão do valor do cliente.
Histograma do valor médio do pedido (AvgOrderValue): isso contribui para entender a distribuição do valor médio do pedido.
Distribuição das quantidades do pedido: ao realizar a distribuição de frequência das quantidades do pedido, analisaremos os tamanhos gerais do pedido e identificaremos quaisquer anomalias.
Os 10 principais clientes com base nas despesas totais: Descobriremos os principais clientes por sua contribuição nas vendas e assim ser possível analisar seus padrões de compra.
Pedidos dos 10 principais clientes: Analisar o que nossos consumidores fiéis estão comprando.
Top 10 Produtos Mais Vendidos: Determinar a produtividade dos nossos produtos proeminentes.
Todos os exemplos também são explicados aqui 👨🔬, um notebook Google Colab para tornar seu aprendizado ainda mais interativo.
Vendas de 2024 ao longo do tempo
Analisar os dados de vendas de 2024 ao longo do tempo é crucial para entender tendências e padrões sazonais. Ao aproveitar as ferramentas de visualização robustas oferecidas pela Seaborn, você pode obter insights não apenas sobre os picos e vales do seu desempenho de vendas, mas também sobre os fatores que os impulsionam.
# Isso converte a coluna 'OrderDate' do DataFrame para um formato datetime. # Isso é importante para análise de séries temporais, pois permite indexação e plotagem adequadas baseadas em datas. merged_df['OrderDate'] = pd.to_datetime(merged_df['OrderDate']) # Filtragem dos dados apenas para o ano de 2024 merged_df_2024 = merged_df[merged_df['OrderDate'].dt.year == 2024] # Definindo 'OrderDate' como o índice do DataFrame. Assim podemos realizar operações e filtragens mais fáceis baseadas no tempo. serie_temporal = merged_df_2024.set_index('OrderDate') # Definir o tamanho da figura plt.figure(figsize=(14, 8)) # Você pode ajustar a largura e a altura conforme sua necessidade. # Escolher uma paleta de cores para o gráfico # 'flare' é uma paleta de cores sequencial. `as_cmap=True` é mais relevante no contexto de mapas de calor, # mas aqui está apenas definindo a paleta para o gráfico. sns.color_palette("flare", as_cmap=True) # Utilizando Seaborn para criar um gráfico de linha, com 'OrderDate' no eixo x e 'Preço' no eixo y. # 'data=serie_temporal' especifica nossa fonte de dados e colunas para plotagem. sns.lineplot(data=serie_temporal, x='OrderDate', y='Price') # Definir o título para o gráfico plt.title('Vendas de 2024 ao longo do tempo') # Rotacionar os rótulos x para melhor legibilidade plt.xticks(rotation=60) # Exibir o gráfico plt.show()
Vendas de 2024 ao longo do tempo.
Calcular receita total e média por cliente
Ao analisar vários tipos de receita, duas métricas principais se destacam: receitas totais e Receita Média por Usuário (ARPU).
A Receita Média por Usuário (ARPU) calcula a receita gerada de cada cliente em um período específico. Essa métrica é crucial para avaliar a lucratividade do cliente, avaliar o sucesso das estratégias de preços e entender a eficácia da segmentação de mercado.
# Passo 1: Calcular a receita total por cliente # Agrupar os dados por 'CustomerID' e somar o 'Price' para cada cliente # Redefinir o índice para transformar o objeto agrupado de volta em um DataFrame customer_revenue_df = merged_df.groupby('CustomerID')['Price'].sum().reset_index() # Passo 2: Calcular o valor médio do pedido por cliente # Agrupar os dados por 'CustomerID' e calcular a média de 'Price' para cada cliente # Redefinir o índice para transformar o objeto agrupado de volta em um DataFrame customer_avg_order_df = merged_df.groupby('CustomerID')['Price'].mean().reset_index() # Passo 3: Mesclar os dataframes de receita total e valor médio do pedido # Mesclar os dois DataFrames em 'CustomerID' para obter uma visão abrangente customer_lifetime_value_df = customer_revenue_df.merge(customer_avg_order_df, on='CustomerID') # Renomear as colunas para melhor legibilidade # 'TotalRevenue' representa a receita total por cliente # 'AvgOrderValue' representa o valor médio do pedido por cliente customer_lifetime_value_df.columns = ['CustomerID', 'TotalRevenue', 'AvgOrderValue'] # Exibir o DataFrame final customer_lifetime_value_df
Calcular receita total e média por cliente.
Explicação
Agrupamento e Agregação:
O código utiliza a função
groupby()
para agrupar os dados pela colunaCustomerID
.Duas métricas são calculadas para cada cliente:
Receita Total (
sum()
): O valor total gasto por cada cliente.Valor Médio do Pedido (
mean()
): O valor médio gasto por pedido por cada cliente.
Redefinindo Índice: A função
reset_index()
é usada para converter o objeto agrupado resultante de volta em um DataFrame regular que inclui oCustomerID
como uma coluna normal.Mesclando dados: A função
merge()
combina os dois DataFrames,customer_revenue_df
ecustomer_avg_order_df
, noCustomerID
. Isso cria um novo DataFrame com a receita total e o valor médio do pedido para cada cliente.Renomeando colunas: Os nomes das colunas são atualizados para serem mais descritivos, deixando claro o que cada coluna representa.
Saída final: O DataFrame
customer_lifetime_value_df
resultante fornece uma visão abrangente da receita total de cada cliente e do valor médio do pedido, o que pode ser útil para análises ou relatórios posteriores.
Plotando o histograma do Valor Médio do Pedido (AvgOrderValue
)
O monitoramento do Valor Médio do Pedido (AvgOrderValue
) é um KPI importante no comércio eletrônico e no varejo. Ele indica geralmente a atualização dos gastos dos consumidores por pedido em uma organização específica. Essa métrica é muito significativa na análise do comportamento de compra do cliente para que mudanças apropriadas nas estratégias de marketing e vendas de uma empresa possam ser feitas.
Ao criar um gráfico de histograma da coluna AvgOrderValue
, o que está envolvido é um arranjo de um gráfico que mostra a contagem dos valores médios do pedido. Esta visualização ajuda em:
Entendendo a Distribuição: Esta técnica de visualização é útil para ajudar a empresa a entender até que ponto os clientes diferem em seus padrões de gastos, conforme indicado por
AvgOrderValue
.Identificação de tendências: Os histogramas são ainda mais eficazes para isso, pois ajudarão a ver o intervalo
AvgOrderValue
mais frequente ou ver que muitos pedidos de baixo ou alto valor são feitos e etc. – tudo isso pode influenciar as decisões de marketing e vendas.Insights estratégicos: A distribuição visual pode permitir decisões gerenciais sobre descontos promocionais, estratégias de upselling e cross-sell, estratégias de preços e abordagem de marketing personalizada para melhorar o valor do cliente.
Plotando o histograma do Valor Médio do Pedido (AvgOrderValue
)
O monitoramento do Valor Médio do Pedido (AvgOrderValue
) é um KPI importante no comércio eletrônico e no varejo. Ele indica geralmente a atualização dos gastos dos consumidores por pedido em uma organização específica. Essa métrica é muito significativa na análise do comportamento de compra do cliente para que mudanças apropriadas nas estratégias de marketing e vendas de uma empresa possam ser feitas.
Ao criar um gráfico de histograma da coluna AvgOrderValue
, o que está envolvido é um arranjo de um gráfico que mostra a contagem dos valores médios do pedido. Esta visualização ajuda em:
Entendendo a Distribuição: Esta técnica de visualização é útil para ajudar a empresa a entender até que ponto os clientes diferem em seus padrões de gastos, conforme indicado por
AvgOrderValue
.Identificação de tendências: Os histogramas são ainda mais eficazes para isso, pois ajudarão a ver o intervalo
AvgOrderValue
mais frequente ou ver que muitos pedidos de baixo ou alto valor são feitos e etc. – tudo isso pode influenciar as decisões de marketing e vendas.Insights estratégicos: A distribuição visual pode permitir decisões gerenciais sobre descontos promocionais, estratégias de upselling e cross-sell, estratégias de preços e abordagem de marketing personalizada para melhorar o valor do cliente.
# O argumento kind='hist' especifica que queremos um histograma e bins=20 especifica o número de intervalos no histograma. # O argumento title fornece um título ao gráfico. customer_lifetime_value_df['AvgOrderValue'].plot(kind='hist', bins=20, title=' Valor Médio do Pedido') # plt.gca() obtém a instância atual de Axes, usada para modificar os componentes visuais do gráfico. # spines representam as espinhas do eixo, que são as linhas que conectam as marcações do eixo e delimitam a área de dados. # Definindo a visibilidade das espinhas 'top' e 'right' para False ('top', 'right',) -> Tupla com os elementos 'top' e 'right'. plt.gca().spines[['top', 'right']].set_visible(False) # Torna as espinhas superior e direita invisíveis para dar ao gráfico uma aparência mais limpa.
Plotando o histograma do Valor Médio do Pedido (AvgOrderValue).
Analisar a distribuição de quantidades de pedidos
Ao comparar quantidades de pedidos, um método de visualização que pode ser útil, que é o boxplot. Em geral, um boxplot ou um whisker plot é uma das formas padronizadas de exibir a distribuição de dados por meio da qual é possível compreender facilmente a dispersão e a assimetria de um determinado conjunto de dados.
Um boxplot é construído usando um resumo de cinco números:
Mínimo: O menor valor no conjunto ou dados observados que não é considerado um outlier.
Primeiro quartil (Q1): Este é o valor que separa o conjunto de dados em duas metades iguais; enquanto este é o ponto médio da metade inferior. Este identifica o 25º percentil, ou em outras palavras, 25% das pontuações estão abaixo desta marca.
Mediana: O valor localizado no meio do conjunto de dados quando os dados são organizados em ordem crescente ou decrescente. Mas se o conjunto de dados fornecido for ordenado, a mediana é o valor médio que divide o conjunto de dados em duas metades iguais.
Terceiro Quartil (Q3): Esta é a média de todos os valores na distribuição, para a qual metade dos dados constitui a maior metade do conjunto geral de dados. É o valor que descreve que 75% do conjunto de dados fornecido é pelo menos tão grande quanto este número, pois nesta posição a densidade de frequência começa a aumentar.
Máximo: Maior valor da observação em um grande conjunto de números; exclui qualquer observação periférica, se houver alguma.
# Criar uma nova figura com um tamanho específico (largura=10, altura=6) plt.figure(figsize=(10, 6)) # Gerar um boxplot para a coluna 'Quantity' no DataFrame pedidos_df # O boxplot ajudará a visualizar a distribuição, tendência central e dispersão dos dados de 'Quantidade' sns.boxplot(y='Quantity', data=pedidos_df) # Definir o título do gráfico para 'Distribuição das Quantidades de Pedidos' plt.title('Distribuição das Quantidades de Pedidos') # Definir o rótulo do eixo x para 'Quantidade de Pedido' plt.xlabel('Quantidade de Pedido') # Definir o rótulo do eixo y para 'Quantidade' plt.ylabel('Quantidade') # Exibir o gráfico plt.show()
Analisar a distribuição de quantidades de pedidos.
Resumindo dados de vendas
# Agrupar o DataFrame mesclado por 'CustomerID' e calcular a soma da coluna 'Total' para cada cliente # O resultado é um novo DataFrame com 'CustomerID' e sua respectiva receita total receita_cliente = merged_df.groupby('CustomerID')['Total'].sum().reset_index() # Mesclar o DataFrame de resumo da receita do cliente com o DataFrame original de clientes # Isso traz detalhes adicionais do cliente (por exemplo, nome, informações de contato) para o DataFrame resultante # A mesclagem é executada na coluna 'CustomerID'; 'how='inner'' garante que apenas clientes presentes em ambos DataFrames sejam incluídos receita_cliente_df = pd.merge(receita_cliente, clientes_df, on='CustomerID', how='inner') # Ordenar o DataFrame combinado pela coluna 'Total' em ordem decrescente # Isso significa que os clientes com a maior receita estarão no topo do DataFrame receita_cliente_df.sort_values(by=['Total'], ascending=False)
Resumindo dados de vendas.
Os 10 principais clientes com base em suas despesas totais
# Filtra o DataFrame `pedidos_df` para incluir apenas as linhas onde o 'CustomerID' # está presente na lista `top10_clientes_por_despesas_totais`. # O método .isin() verifica se cada 'CustomerID' em `pedidos_df` existe # dentro da lista `top10_clientes_por_despesas_totais` e retorna uma Série booleana. pedidos_dos_top10_clientes_por_despesas_totais_df = pedidos_df[pedidos_df['CustomerID'].isin(top10_clientes_por_despesas_totais)] # Exibe o DataFrame resultante que contém pedidos dos 10 melhores clientes # com base nas suas despesas totais. pedidos_dos_top10_clientes_por_despesas_totais_df
Pedidos dos 10 principais clientes com base em suas despesas totais.
Top 10 produtos com mais vendas
# Agrupar o DataFrame mesclado pela coluna 'Product' e agregar os dados. # Criar uma nova coluna 'contagem_coluna' que conta o número de ocorrências de cada produto. produto_receita_df = merged_df.groupby('Product').agg( total=pd.NamedAgg(column="Product", aggfunc="count") ).sort_values(by=['total'], ascending=False).reset_index() # Selecionar os 10 produtos com mais vendas com base na contagem_coluna. top10_produtos_com_mais_vendas = produto_receita_df[0:10] # Exibir o resultado: um DataFrame contendo os 10 produtos com maior contagem de vendas. top10_produtos_com_mais_vendas
Top 10 produtos com mais vendas.
Produtos com mais vendas
# Define o tamanho da figura do plot (largura, altura) em polegadas plt.figure(figsize=(10, 6)) # Cria o gráfico de barras usando o Seaborn # data: o DataFrame contendo os dados para plotar # x: o nome da coluna no DataFrame a ser usado para o eixo x # y: o nome da coluna no DataFrame a ser usado para o eixo y # hue: o nome da coluna para agrupar os dados por diferentes cores para cada valor único # palette: a paleta de cores a ser usada para as barras sns.barplot( data=top10_produtos_com_mais_vendas, x='Product', y='total', hue='Product', palette='viridis' ) # Define o rótulo do eixo x como 'Produto' plt.xlabel('Produto') # Define o rótulo do eixo y como 'Vendas' plt.ylabel('Vendas') # Define o título do gráfico plt.title('Produtos com Mais Vendas') # Rotaciona os rótulos do eixo x em 45 graus para melhor legibilidade plt.xticks(rotation=45) # Exibe o gráfico na tela plt.show()
Produtos com mais vendas.
Conclusão
Aqui, destacamos a importância de utilizar histogramas e boxplots para visualizar distribuições de dados. Além disso, este artigo se aprofundou na identificação dos principais clientes e produtos.
Ao aproveitar esses insights, você deve estar mais bem equipado para lidar com tarefas relacionadas ao desempenho de vendas. Aproveitar os dados coletados para análise tornará mais fácil identificar tendências, avaliar o valor do cliente e avaliar o desempenho do produto. Essa base é essencial para refinar estratégias de marketing, impulsionar táticas de vendas e aumentar a produtividade organizacional.
O uso eficaz dessas ferramentas e técnicas não apenas permite que você analise dados históricos, mas também prepara você e sua empresa para análises futuras, garantindo relevância contínua. Analise e processe continuamente seus conjuntos de dados e sinta-se à vontade para explorar e implementar várias funções das bibliotecas de análise de dados do Python.
Sinta-se à vontade para responder a esta postagem com quaisquer perguntas ou tópicos que você gostaria que abordássemos no futuro.
Se você gostou, não se esqueça de se inscrever para receber atualizações regulares. Compartilhe com seus amigos e colegas interessados em Python e vamos crescer juntos em nossa comunidade de programadores!
Lembre-se, a chave para a maestria é prática e persistência. Boa codificação! Até a próxima edição, continue programando! 👨💻
InfinitePy Newsletter - Sua fonte de aprendizado e inspiração em Python.