S.O.T: Como encontrar uma pizzaria usando o R

Fim de noite, preguiça acumula com o cansaço do trabalho/faculdade e você está com aquela vontade irredutível de comer pizza. <PÂNICO> A sua pizzaria do coração por algum motivo não está funcionando hoje </PÂNICO>. Esse é o momento em que você tem que ficar procurando uma pizzaria que entregue na sua região. É uma tarefa bem complicada que foi facilitada pelos apps (#TeAmo, iFood). Mas vamos imaginar que a não tenhamos essa facilidade e se ~ deliciar ~ com esse tutorial de como encontrar uma pizzaria na sua região usando o R.

Passo 1: configurar a API do Google Places

A API que vamos utilizar para acessar os dados do Google Maps é a Google Places. Sendo assim, precisamos criar uma autorização para essa extração. Pode parecer um bicho de 7 cabeças mas é bem tranquilo. Para configurá-la, você precisa fazer o seguinte:

  1. criar um projeto no Google APIs;
  2. adicionar a Google Places API Web Service à sua biblioteca de APIs;
  3. obter uma chave de API; e
  4. enviar uma requisição.

Para mais informações sobre os itens 1, 2 e 3, bastar acessar os links acima. Aqui, vamos focar em como fazer o item 4.

Passo 2: baixar os dados da API

Como dito pelo William, criador desse tutorial, a API do Google Places permite fazer alguns tipos de buscas, como estabelecimentos específicos próximos a um local ou dentro de uma região pré-delimitada. O objetivo aqui é requisitar os dados de todos os estabelecimentos, como pizzarias, restaurantes, supermercados, escolas etc, dentro de um raio de busca em torno de um ponto específico. Neste contexto, a requisição deve ser feita a partir de um link da forma

https://maps.googleapis.com/maps/api/place/radarsearch/output?parameters

substituindo output pelo formato da saída, xml ou json, e parameters pelos parâmetros de busca. Utilizaremos aqui o formato jsonJavascript Object Notation. Para mais informações sobre JSON, consulte este link.

O que precisamos fazer é criar a url de requisição, acessá-la, guardar os dados no formato json em um objeto e convertê-lo para um data frame. A função get_googlemaps_data() abaixo faz exatamente isso. Mais especificamente, ela recebe os parâmetros de busca, uma chave de API e retorna um data frame com os dados de geolocalização (latitude e longitude) dos resultados encontrados.

  • O argumento keyword=  recebe o termo a ser pesquisado, isto é, se estivermos pesquisando por escolas, esse argumento receberá a string 'escola'.
  • O argumento type=  recebe um termo para filtrar os estabelecimentos pesquisados. Por exemplo: keyword = 'restaurante' e type = 'vegetariano'. (Vamos falar desse caso mais ao final)
  • Os argumentos central_lat= e central_log= representam, respectivamente, a latitude e a longitude do ponto central da busca. Os valores default são os do bairro da Lapa, no Rio de Janeiro.
  • O argumento radius= indica o raio máximo de busca. O default é 15 Km.
  • O argumento key= deve receber a sua chave de API.

Com a função get_googlemaps_data() em mão, basta rodar o código get_googlemaps_data("pizzaria",key = sua_API_key) para obter a geolocalização de até 200 pizzarias em um raio de até 15 Km do bairro da Lapa. O William diz que o limite é de 200 e que não conseguiu uma forma de aumentar esse limite. ☹

Também podemos utilizar a função purrr:map_df() para gerar um data frame com várias buscas. A função map mapeia uma determinada função em cada elemento de um vetor/lista, retornando um data frame. Neste caso, preferi usar a segunda solução e buscar por restaurante de comida japonesa e italiana também. Vale lembrar que ainda não estamos construindo os mapas.

Às vezes, a requisição pode retornar com algum erro (aqui deu erro umas 3 vezes).  Eu não consegui descobrir e o criador do tutorial também não. Nestes casos, a função get_googlemaps_data() também retornará um erro, provavelmente na construção do data frame. Se isso acontecer, é só rodar a função novamente, gerando uma nova requisição.

Passo 3: construindo os mapas

Para construir os mapas, vamos utilizar a função leaflet::leaflet(). A ideia é, para cada ponto da pesquisa, adicionar um círculo de raio igual a 100m, ou o raio que você achar mais interessante. Dessa forma, se você estiver fora desses círculos, quer dizer que você estará a mais de cem metros de um dos estabelecimentos pesquisados.

Escolhi uma cor para cada tipo de estabelecimento. Se você quiser os dados de apenas um tipo é só excluir os que não deseja na linha 3 do código acima. Esse é o mapa gerado com os 3 tipos de estabelecimentos:

Legenda: Vermelho = Restaurantes Italianos, Laranja = Restaurantes Japoneses e Azul = Pizzarias

 

O mapa gerado foi colocado online usando o RPubs, um serviço de compartilhamento de documentos na web dentro do próprio ambiente do R, na parte superior da área de observação do mapa assinalado com “Publish”.

Notas importantes:

  • A busca utilizando o argumento  type= na função está retornando os mesmos dados que a busca pura. Deixei aqui o código para vocês testaram e ver se é só comigo que isso está dando errado.

 

 

  • Inicialmente usei como raio a distância de uma milha, ou 1,6km, que é comumente usado como raio de entrega em delivery, mas o mapa ficou muito lotado. 

 

O “Seguindo O Tutorial (S.O.T.)” é uma categoria de post no Data7 que tem como objetivo refazer tutoriais disponibilizados em outros blogs com algumas modificações. Esse tutorial foi feito pelo William, no post Você está a menos de 1 km de um hambúrguer? do Curso-R.

PS: Estou usando o plugin Crayon Syntax Highlighter para a exibição do código no modelo do Sublime Text mas não sei se está ideal. Aceitos sugestões, é só colocar nos comentários!

Escrito por Janderson Toth

Meu nome é Janderson, tenho 24 anos e sou graduando em Estudos de Mídia/UFF. Vivo fazendo tutorias, me perco nos animes e meu super-herói favorito é o John Constantine. Escrevo para aprender a escrever(?) e para desenvolver meus estudos em análise de redes sociais e programação em R.