sexta, 16 novembro 2018

Como fazer uma previsão do tempo com o Power BI?

Escrito por 

Numa das nossas ações de formação em Power BI aplicado a gestão e finanças, fui confrontado com uma questão interessante: um dos formandos, o responsável financeiro de uma grande empresa de prestação de serviços de catering, pretendia uma previsão da procura de refeições servidas em cantinas que dependesse, entre diversos outros fatores, do tempo. Pela experiência dele no setor, quanto melhor estiver o tempo, menos as pessoas recorrem às cantinas e mais aproveitam para fazer as refeições fora. 

Como construir a previsão do tempo para um conjunto de cidades de forma automática e que sustente um modelo de previsão da procura em Power BI?

Como é natural, a procura de refeições nas cantinas não depende apenas do tempo, embora o enfoque deste formando no tempo sugira que esta variável seja mesmo importante (o que também nos deixa a pensar que os consumidores aproveitem uma pequena brecha no céu para fugir das cantinas, o que é outro assunto…).

O primeiro passo para o ajudar passou por encontrar um fornecedor de dados meteorológicos. Onde obter as temperaturas mínimas e máximas, a precipitação, humidade, entre outros? Após uma breve pesquisa, encontrámos um serviço API bastante fácil de utilizar e com dados que nos pareceram fiáveis e relevantes para o problema em mãos: o OpenWeatherMap que, além destes benefícios, nos permite também testar gratuitamente a funcionalidade até um determinado limite.

Assim, após registo no website e obtenção das chaves de autenticação, fizemos um pequeno teste para a cidade do Porto e o resultado no Power BI Desktop foi o seguinte:

PrevisaoTempo1

A API que usámos para obter estes dados foi a “Call 5 day / 3 hour forecast data” que nos dá a previsão do tempo para os próximos 5 dias a intervalos de 3 horas. No editor do Power Query foi necessário proceder-se a uma série de trabalhos de edição e limpeza dos dados. Alguns dados não têm o mesmo interesse e foram dispensados, enquanto outros foram convertidos em tipos de dados que nos interessam analisar.

Como se pode ver nos detalhes da qualidade da coluna, uma das novas funcionalidades do Power BI Desktop mais interessantes, não existem erros e estamos preparados para construir visualizações que sustentem o modelo de previsão da procura.

PrevisaoTempo2

Com estes dados construímos um gráfico e uma tabela com os principais indicadores:

PrevisaoTempo3

PrevisaoTempo4

Como se pode ver, os dados são bastante detalhados e servem perfeitamente para alimentar um modelo de regressão que estime a procura. Para esta empresa, ser capaz de estimar a procura de refeições em cantinas representa uma vantagem competitiva poderosa. Tal significa que a empresa vai otimizar a sua gestão de inventários de produtos perecíveis, como é o caso dos alimentos, e, ao mesmo tempo, planear as operações de modo a servir o número exato de refeições (ou o mais aproximado possível) minimizando a rutura de stocks.

Enquanto o modelo de regressão para a previsão da procura é um assunto a ser analisado numa outra altura, talvez num outro artigo, nesta fase, subsiste ainda a questão de saber como replicar a previsão do tempo para outras cidades.

Da leitura da documentação desta API do OpenWeatherMap verificámos que a previsão do tempo é feita por cidade tendo cada cidade um código. No caso do Porto, no exemplo acima, esse código é o 2735941. Ora, se o objetivo é replicar a importação destes dados para outras cidades, o primeiro passo será identificar os respetivos códigos.

Avançámos com os seguintes:

  • Porto: 2735941
  • Lisboa: 2267057
  • Paris: 6942553
  • Amesterdão: 2759794

Aqui está uma boa oportunidade para converter uma “query” numa função, ou seja, reutilizar os passos de importação dos dados da cidade do Porto para os das restantes cidades sem ter de repetir todo o processo. Fazendo alterar apenas o código da cidade, será possível automatizar completamente este processo.

Pensando um pouco mais à frente, o relatório pode conter um “slicer”, isto é, um “segmentador de dados”, que deixe o utilizador escolher para que cidade pretende a previsão do tempo, tornando assim a sua experiência interativa.

Assim, criámos o parâmetro “CodCidade” para que o utilizador escolha a cidade para qual será feita a previsão do tempo e alterámos a origem de dados para:

Origem = Json.Document(Web.Contents("http://api.openweathermap.org/data/2.5/forecast?id=" & CodCidade & "&mode=json&appid=xxx&units=metric"))

Por outro lado, e para facilitar a importação dos dados, vamos criar uma tabela no Excel onde se listam as cidades e os respetivos códigos. A utilização da tabela com os parâmetros da função em coluna será particularmente útil quando temos muitas linhas, neste caso, cidades e o trabalho de alterar o parâmetro com o código manualmente se torna moroso.

PrevisaoTempo5

Testando a função para uma cidade específica, por exemplo, Amesterdão, é possível criar-se uma tabela idêntica à anterior em poucos segundos, bastando invocar manualmente a execução da função com o código:

PrevisaoTempo6
E também é possível invocar a mesma função para todas as cidades simultaneamente após importação da tabela do Excel acrescentando uma coluna à direita de cada uma delas com uma tabela em cada célula:

PrevisaoTempo8
Nesta fase, para concluirmos este breve exemplo de automação de importação de dados a partir de uma API externa, resta-nos atualizar o gráfico e inserir um slicer para cada uma das quatro cidades.

Como se pode verificar, em Amesterdão vai estar muito frio nos próximos dias!

PrevisaoTempo7

Nuno Nogueira

Nuno Nogueira é gestor e administrador do Portal Gestão. Tem 20 anos de experiência na área financeira, no empreendedorismo e desenvolvimento de aplicações. É autor do livro "Power BI para gestão e finanças" da FCA Editora e formador do curso Power BI aplicado a gestão e finanças.

  1. Comentários (0)

  2. Faça o seu comentário

Comentários (0)

Ainda não existem comentários a este artigo

Deixe os seus comentários

  1. A comentar como convidado. Registe-se ou faça login para aceder à sua conta.
Anexos (0 / 3)
Share Your Location