Ir para o conteúdo
IMAM Consultoria
IMAM Consultoria
  • ESTRATÉGIAS E OPERAÇÕES
  • Desenvolvimento Organizacional
  • SUPPLY CHAIN E LOGÍSTICA
  • Fale Conosco
  • Sites
    • IMAM Consultoria
    • Quem somos
    • HOME IMAM
  • Nossos treinamentos
IMAM Blog Estratégias e operações Mapa de demanda e centro de massa com Python: análise de dados passo a passo

Estratégias e operações

Mapa de demanda e centro de massa com Python: análise de dados passo a passo

DC
  • Por Danilo Carajiliascov
  • Publicado em 13/07/2023
  • Atualizado em 15/10/2026
  • 6 min de leitura
Digital Work
Conheça nossos cursos | IMAM
Sumário executivo

Mapa de demanda e centro de massa em resumo: O mapa de demanda e centro de massa é uma análise de dados que mostra a distribuição da demanda e o seu centro de massa, apoiando a estruturação da malha logística. Além disso, no exemplo do post, feito em Python, um centro de distribuição poderia ficar em Mogi Mirim, entre os centros de massa de vendedores e clientes.

Mapa de Demanda e Centro de Massa com Python

Os desafios da Supply Chain se iniciam no planejamento e, neste contexto, um dos projetos mais demandados é a estruturação de uma Malha Logística que maximiza o nível de serviço ao cliente e a produtividade operacional.

Uma das importantes análises de dados que desenvolvemos com o apoio da tecnologia (Big Data, Python etc.) é o mapa de demanda e centro de massa.

Veja uma síntese, do ponto de vista de programação, de como fazer a análise:

Objetivo: Gerar um mapa que mostre a distribuição da demanda e seu centro de massa com os dados da “Brazilian E-Commerce Public Dataset”. Acessível no site da Kaggle.

O dataset possui 8 tabelas com seguintes relacionamentos:

Diagrama das oito tabelas do dataset Olist ligadas por order_id, product_id, seller_id e zip_code_prefix
As oito tabelas do conjunto público de e-commerce se conectam a partir da tabela de pedidos, que é o centro do modelo.

As setas indicam o nome de coluna que faz o relacionamento entre as tabelas.

Por exemplo: a tabela “olist_orders_dataset”, que possui os dados da capa do pedido, se relaciona com a tabela “olist_order_itens_dataset”, que possui os dados dos itens do pedido, através da coluna “order_id”. Com os dados organizados assim, é possível até fazer um dashboard em Python para acompanhar os pedidos.

Para nosso projeto iremos utilizar as seguintes tabelas:

Recorte do diagrama com seis tabelas: pedidos, itens, produtos, vendedores, clientes e geolocalização
Do modelo completo, o projeto usa apenas as tabelas necessárias ao cálculo do mapa de demanda, deixando de fora avaliações e pagamentos.

Como todas as tabelas começam com “olist” e terminam com “dataset” iremos remover esses textos para deixar os nomes mais enxutos.

Bibliotecas utilizadas:

Célula de código Python importando as bibliotecas pandas e folium, com execução concluída em 2.7s
Duas bibliotecas sustentam todo o trabalho: pandas para manipular as tabelas e folium para desenhar o mapa.

Criamos uma variável “local_dados” com o local do computador onde estão as tabelas. Desta forma basta adicionar o nome do arquivo.

Carregamento das tabelas:

Tabela de geolocalização com CEP, latitude, longitude, cidade e estado, somando 1000163 linhas e 5 colunas
A base de geolocalização é a maior do conjunto, com mais de um milhão de registros de CEP e coordenadas.
Tabela de clientes com identificador, CEP, cidade e estado, totalizando 99441 linhas e 5 colunas
A base de clientes traz quase cem mil registros, cada um com o CEP que servirá de ponte para as coordenadas.
Tabela de itens de pedido com produto, vendedor, preço e frete, somando 112650 linhas e 7 colunas
Cada linha corresponde a um item vendido, com preço e valor de frete próprios, o que explica haver mais itens do que pedidos.
Tabela de pedidos com datas de compra, aprovação e entrega convertidas, com 99441 linhas e 8 colunas
As cinco colunas de data são convertidas para o tipo datetime já no carregamento, condição para filtrar depois o período de um ano.
Tabela de produtos com categoria, peso em gramas e dimensões, totalizando 32951 linhas e 9 colunas
O peso vem em gramas e as medidas em centímetros, formatos que serão convertidos antes de entrar no cálculo do centro de massa.
Tabela de vendedores com identificador, CEP, cidade e estado, somando 3095 linhas e 4 colunas
Os vendedores são pouco mais de três mil, número muito menor que o de clientes, o que antecipa uma origem mais concentrada que o destino.

Montar tabela de vendas completa.

Com os dados de pedidos, clientes, vendedores, produtos e geolocalização

Geolocalização por cidade:

Geolocalização agrupada por estado e cidade com média de latitude e longitude, resultando em 8463 linhas
Agrupar por estado e cidade reduz mais de um milhão de CEPs a 8463 pontos, um par de coordenadas médio para cada município.

Adicionar geolocalização aos vendedores e deixar somente as colunas necessárias:

Vendedores com latitude e longitude anexadas por estado e cidade; a primeira linha é SP_campinas
Um merge pela chave estado_cidade traz as coordenadas médias do município para cada vendedor e descarta as colunas que deixaram de ser necessárias.

A mesma coisa para os clientes:

Clientes com coordenadas anexadas; a primeira linha é SP_franca em -20.534057 e -47.398437
O mesmo cruzamento aplicado aos vendedores é repetido para os clientes, agora com as colunas nomeadas customers_lat e customers_lng.

Juntar dados de clientes com os dados de pedidos:

Pedidos unidos aos clientes, mantendo data de entrega, estado, cidade e coordenadas do destino
O merge por customer_id reduz a tabela de pedidos ao essencial: identificador, data de entrega ao cliente e localização do destino.

Arrumar os dados de produtos: converter gramas para quilogramas e dimensões do produto para volume em m³.

Produtos com peso convertido para quilogramas e as três dimensões transformadas em volume em metros cúbicos
O peso em gramas é dividido por mil e o produto das três medidas em centímetros é dividido por um milhão, padronizando as unidades da análise.

Formar a base completa juntando os dados de itens de pedido com dados de produtos, pedidos e vendedores:

Base completa de itens de pedido unida a produtos, pedidos e vendedores, com 112650 linhas e 20 colunas
Três merges encadeados reúnem em uma só tabela o item vendido, o produto, o pedido e o vendedor, chegando a vinte colunas.

Preparar dados para o Mapa

Tabela com total do peso do último ano por cidade de destino (mantendo cidades com peso total maior que 10 kg):

Peso somado por cidade de destino em um ano: SP_sao paulo lidera com 24498,399 kg, em 1392 linhas
Filtradas as entregas entre outubro de 2017 e setembro de 2018 e mantidas apenas as cidades acima de 10 kg, restam 1392 destinos, encabeçados por São Paulo.

O mesmo com as cidades de origem (as cidades dos vendedores):

Peso somado por cidade de origem: SP_sao paulo com 32939,323 kg encabeça uma lista de 330 linhas
Do lado dos vendedores, o mesmo recorte de um ano produz apenas 330 cidades, contra as 1392 de destino, o que mostra origem bem mais concentrada.

Gerar os centros de massa dos clientes e dos vendedores:

Centro de massa dos clientes calculado por média ponderada pelo peso: -21.368160313608872 e -46.21755572754099
A média das coordenadas ponderada pelo peso transportado resume toda a demanda em um único ponto geográfico.
Centro de massa dos vendedores calculado por média ponderada: -22.92338845189827 e -47.19843248231834
O mesmo cálculo aplicado às cidades de origem devolve um ponto mais ao sul e a oeste que o dos clientes, distância que revela um desalinhamento entre oferta e demanda.

Gerar o mapa com os dados de vendas, centro de massa dos clientes e centro de massa dos vendedores

Mapa inicial:

Código folium criando o mapa base centrado em -16 e -50, com tiles OpenStreetMap e zoom inicial 5
O mapa é iniciado no centro do Brasil, com zoom que enquadra o país inteiro, antes de receber as camadas de vendas e de centros de massa.

Camada de clientes:

Código Python com folium.CircleMarker gerando círculos vermelhos por cliente com raio ligado ao peso
O laço percorre a base de pedidos e cria um círculo por cliente, com raio calculado a partir da raiz quadrada do peso do produto dividida por 4.

Camadas de Centro de Massa:

Código Python com dois folium.Marker, um para o centro de massa dos clientes e outro dos vendedores
Cada marcador usa as médias de latitude e longitude calculadas separadamente para clientes e para vendedores.

Visualização do Resultado!

Mapa do Brasil com círculos vermelhos de tamanhos variados e dois marcadores azuis no Sudeste
Os círculos maiores concentram-se no litoral Sudeste e Sul, e os dois marcadores azuis caem na mesma região.
Aproximação do mapa nas regiões Sudeste, Sul e Centro-Oeste com círculos vermelhos de demanda
A aproximação separa os grandes círculos de São Paulo, Rio de Janeiro, Belo Horizonte, Curitiba, Brasília e Porto Alegre.
Mapa aproximado com balão aberto identificando o marcador Centro de Massa dos Clientes
O balão aberto confirma qual dos dois marcadores corresponde ao centro de massa dos clientes.
Mapa aproximado com balão aberto identificando o marcador Centro de Massa dos Vendedores
O centro de massa dos vendedores fica mais próximo da grande concentração de demanda paulista do que o dos clientes.

Podemos ainda explorar mais um recurso deste mapa: adicionar linhas!

Vamos imaginar que estes dados são de uma empresa que adquire as mercadorias, armazena em um Centro de Distribuição e, a partir deste, entrega para os clientes.

Um possível local para se instalar um centro de distribuição seria a cidade de Mogi Mirim, que fica entre o centro de massa dos vendedores (neste cenário poderíamos chamar de fornecedores) e o centro de massa dos clientes.

Camada de linhas:

Código Python com folium.PolyLine em laço de 400 iterações partindo do ponto -22.43194, -46.95778
As 400 linhas partem sempre da mesma coordenada, que recebe o marcador 'Centro de Distribuição'.

Visualização do Resultado!

Mapa do Brasil com linhas azuis irradiando de um ponto no Sudeste até clientes de todas as regiões
As linhas alcançam de Porto Alegre a Belém, o que evidencia o raio de atendimento a partir de um único ponto.
Zoom do mapa de linhas com o balão Centro de Distribuição aberto sobre o ponto de convergência
A aproximação mostra que o ponto de convergência das linhas é o mesmo marcado como centro de distribuição.

Muito obrigado por ler o artigo. Espero que tenham gostado!

Até o próximo!

Etapas da análise no Python

Em resumo, o roteiro de programação descrito no post:

EtapaO que é feito
Carregar os dadosTabelas do Brazilian E-Commerce Public Dataset, com os nomes encurtados
Montar a base de vendasJuntar pedidos, clientes, vendedores, produtos e geolocalização por cidade
Preparar para o mapaPeso total do último ano por cidade de destino e de origem, acima de 10 kg
Gerar o mapaCamadas de clientes e dos centros de massa de clientes e de vendedores
Adicionar linhasSimular um centro de distribuição entre os dois centros de massa

Perguntas frequentes sobre mapa de demanda e centro de massa

Para que serve o mapa de demanda e centro de massa?

Serve ao planejamento da supply chain, em especial à estruturação de uma malha logística que maximize o nível de serviço ao cliente e a produtividade operacional. O mapa mostra onde está a demanda e onde ficam os centros de massa dos clientes e dos vendedores.

O que é o centro de massa na análise logística?

É o ponto geográfico que equilibra os locais de demanda ou de origem ponderados pelo volume de cada um, como uma média das coordenadas pesada pelo peso movimentado. No post, ele é calculado com o peso total do último ano por cidade, separadamente para clientes e para vendedores.

Qual dataset foi usado na análise?

O Brazilian E-Commerce Public Dataset, disponível no site da Kaggle. Ele tem 8 tabelas relacionadas por colunas, como a tabela de pedidos, que se liga à de itens do pedido pela coluna order_id. Para o projeto, foram usadas parte dessas tabelas, com os nomes encurtados.

Quais são as etapas para gerar o mapa em Python?

Carregar as tabelas, montar a base de vendas com pedidos, clientes, vendedores, produtos e geolocalização por cidade, converter gramas em quilos e dimensões em m³, somar o peso do último ano por cidade de destino e de origem, mantendo as cidades com mais de 10 kg, calcular os centros de massa e gerar o mapa em camadas.

Como o mapa ajuda a escolher a localização de um CD?

No cenário do post, uma empresa compra as mercadorias, armazena em um centro de distribuição e entrega aos clientes. Com uma camada de linhas no mapa, o autor sugere Mogi Mirim como possível local, por ficar entre o centro de massa dos vendedores, ou fornecedores, e o dos clientes.

Conteúdos complementares recomendados

  • Como fazer um dashboard em Python: Além disso, o dashboard citado pelo autor.
  • Estudo de malha logística: Ou seja, o projeto que a análise apoia.
  • Como escolher a localização do centro de distribuição: Por fim, o próximo passo depois do mapa.
DC

Por

Danilo Carajiliascov

No Blog IMAM, Danilo Carajiliascov escreve sobre análise de dados aplicada à gestão: tratamento de dados com Power Query, dashboards em Power BI e Python, automação de relatórios e projeção de vendas no S&OP, sempre com casos práticos.

61 visualizações
Tags: análise de dados, centro de massa, mapa de demanda, python

Leia também

Capa do artigo do acervo técnico da IMAM sobre princípios ergonômicos

Engenharia de Produção e Operações

Princípios ergonômicos para a movimentação manual de materiais

Por IMAM · 14/10/2026

Capa do artigo do acervo técnico da IMAM sobre contentor colapsível

Engenharia de Produção e Operações

Contentor colapsível: o caso que reduziu custos com segurança

Por IMAM · 14/10/2026

Capa do artigo do acervo técnico da IMAM sobre uso de talhas

Engenharia de Produção e Operações

Uso de talhas: o que fazer e o que evitar na operação

Por IMAM · 14/10/2026

Deixe um comentário Cancelar resposta

Buscar no blog

E-book Grátis

automacao_na_intralogistica
gestao_competitiva
customer_service
entendendo_a_logistica
cta_guia-para-treinar-e-desenvolver-equipe-de-logistica_01-1


ctas_300x300_azul_foto-9

Posts populares

  • Alta Performance x Sobrevivência Operacional
    Alta Performance x Sobrevivência Operacional
  • Os Heróis da Supply Chain que Ninguém Vê
    Heróis da logística: os profissionais da supply chain que ninguém vê
  • Engenharia logistica: Engenheiro logistico em armazem
    Engenharia Logística: O Que Faz, Áreas de Atuação E Salário

Sobre o blog

O IMAM leva você mais longe!
Acompanhe aqui as principais tendências da área de capacitação profissional, logística e supply chain.

Categorias

  • Desenvolvimento Organizacional
  • Embalagem
  • Engenharia de Produção e Operações
  • Estratégias e operações
  • Estratégias e Performance (Lean, Toc, 6 Sigma)
  • Série Armazenagem
  • Supply Chain e Logística

Entre em contato

  • Rua Machado Bitencourt, 190 Conj 606/607 Metrô Sta. Cruz, Vila Mariana, 04044-000, São Paulo/SP

  • (11) 5575-1400

  • imam@imam.com.br

  •  (11) 97550-8384

Autores do Blog IMAM

Nossos treinamentos