Como construir uma rosa dos ventos funcional para análise de dados
A rosa dos ventos é um gráfico polar que mostra a frequência com que os ventos sopra de diferentes direções. Parece simples, mas na prática você vai se deparar com problemas de discretização angular, vazios nos dados e interpretação errada. Vou explicar o processo direto, sem rodeios.
O problema da rosa dos ventos ou rosa dos ventos
Muita gente pega dados de estações meteorológicas e joga num plot sem ajustar nada. O resultado é um gráfico ilegível. A questão principal é como você discretiza os 360 graus em setores. Se você usar 8 setores (N, NE, E, SE, S, SO, O, NO), cada setor tem 45 graus. Mas ventos que entram exatamente na fronteira entre dois setores são classificados arbitrariamente de um lado, gerando ruído artificial nas bordas. Minha primeira implementação ruim foi com dados de uma estação anemométrica em Porto Alegre. A estação registrava direção a cada 5 minutos, mas os setores estavam mal definidos. O vento de nordeste aparecia como "variável" em cerca de 12% das medições porque a sensibilidade do sensor naquele quadrante era pior que nos outros. Eu passei duas semanas tentando limpar esses dados antes de perceber que o problema era, não software.
Passo a passo prático
Comece com dados brutos de direção (0 a 360 graus) e velocidade (m/s). A primeira coisa que você faz é filtrar valores de velocidade abaixo de um limiar mínimo, porque direção registrada com vento quase calmo é ruído puro. Em geral, velocidade abaixo de 0,5 m/s deve ser descartada da análise direcional. Em seguida, escolha o número de setores. Para uso geral, 16 setores (cada um com 22,5 graus) é um bom equilíbrio entre detalhe e clareza. Se precisar de mais precisão, use 32 setores, mas o gráfico fica visualmente poluído rápido.
Para cada setor, calcule a frequência relativa: quantas medições caíram naquele intervalo dividido pelo total de medições válidas. Depois, para cada setor, calcule a velocidade média dos ventos que cairam nele. Esses dois dados formam as duas camadas da rosa: a frequência (como o gráfico tradicional) e a velocidade média (que a maioria dos tutoriais ignora). No código, usando Python com matplotlib e numpy, o processo leva cerca de 10 a 15 minutos para um dataset de uma estação com registros diários. A parte que mais tempo consome não é o gráfico em si, mas a limpeza dos dados. Dados reais de estações meteorológicas têm gaps, outliers e eventos de calmaria que precisam ser tratados antes.
Implementação técnica
A estrutura básica do gráfico é um polar plot. Cada setor radial representa uma direção. O raio de cada fatia representa a frequência acumulada. A cor ou a altura da fatia pode representar a velocidade média naquele setor. O erro mais comum é inverter o eixo angular. Na convenção náutica, 0 graus é norte e o ângulo aumenta no sentido horário. Na convenção matemática padrão do matplotlib, 0 é leste e aumenta no sentido anti-horário. Você precisa usar o parâmetro theta_direction=-1 e theta_offset=pi/2 para alinhar com a convenção meteorológica. Sem isso, seu gráfico vai mostrar que o vento vem do leste quando na verdade ele vem do norte. Isso já custou um relatório errado para um colega meu que não verificou a convenção.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Outro ponto técnico importante: quando você tem setores com frequência zero, o matplotlib desenha uma linha reta até a origem, o que visualmente parece um vento fraco vindo daquela direção. A solução é simplesmente não plotar setores com zero ocorrências ou usar um valor mínimo artificial para fins de visualização.
Dados e download
Para rodar o código, você vai precisar de dados de direção e velocidade do vento. Fontes gratuitas incluem a rede de estações do INMET no Brasil, o projeto Wind Obs do NOAA, e datasets abertos da ANA. Um dataset de exemplo com 30 dias de medições horárias de uma estação fictícia está disponível para download. O arquivo CSV contém três colunas: data_hora, velocidade_ms e direcao_graus. O script completo gera a rosa dos ventos com 16 setores, aplica o filtro de velocidade mínima, corrige a convenção angular e salva um PNG em alta resolução. O tempo médio de execução em uma máquina comum é de 8 segundos para 720 horas de dados.
Limitações que ninguém conta
Rosa dos ventos——rose diagramstacked rose 100048
rosa dos ventos não captura mudança de direção ao longo do tempo. Para análise de ventos em turbinas eólicas, por exemplo, a direção média importa menos que a variabilidade direcional e a frequência de transições bruscas. Nesse caso, estatísticas de shear direcional e frequência de cambio de quadrante são mais relevantes.
Código de exemplo
Um exemplo funcional mínimo usa pandas para carregar os dados, numpy para discretização angular e matplotlib para o gráfico polar. A função principal de discretização converte ângulos contínuos em índices de setor usando numpy.digitize. O restante é cálculo de contagens e plotting. O código completo está estruturado em funções separadas para limpeza, discretização e plotting, facilitando a adaptação para diferentes datasets. A documentação inline explica cada parâmetro ajustável, incluindo limiar de velocidade mínima, número de setores e paleta de cores.