Qual o Caminho mais rápido com R? O Problema do Delivery de Sushi – Pizza. parte 1 de 3

November 23, 2016 no comments Posted in R para não Programadores

Iremos explorar um assunto interessante, como calcular o caminho que leva menos tempo saindo de local passando por outros e retornando ao local de origem.

Esse problema esta relacionado ao nosso capítulo sobre mapas de uma forma indireta, não só porque podemos representar rotas entre dois ou mais pontos em um mapa Leaflet, como podemos com R acessar serviços como o Google Maps ou OpenStreetMap e desenvolver uma aplicação “nossa” envolvendo caminhos, tempos e mapas.

Interessou?

Para ser didático o caminho será longo, talvez 3 publicações para não cansar os leitores.

Esse problema me ocorreu a pensar em estratégias para tentar reduzir o tempo de entrega em sistemas de delivery. Em geral as rotas são traçadas em conhecimento da região e muito sentimento, mas como seria um modo “algorítmico” de resolver o problema?

Aviso que esse é tema muito estudado por cientistas da computação e que envolve a busca de caminhos mínimos e otmização, mas como somos “não-programadores“, vamos nos permitir uma solução simples, usaremos de “força-bruta”.

Força-bruta

porque iremos coletar todas as rotas possíveis, somar os seus tempos, e escolher a que for menor. Existem soluções sofisticadas que estão no escopo da Teoria dos Grafos e envolvem os chamados Circuitos Hamiltonianos. Você verá que esse exercício irá oferecer oportunidades interessantes de aprendizado de R e estruturas básicas de programação.

Primeiro vamos explorar as rotas possíveis e relembrar  noções de permutação.

No caso mais simples um entregador sai da loja, vai apenas a um cliente e retorna a loja, certo?

Se usarmos letras para representar os pontos do trajeto podemos usar L(oja) > C(liente)  > L(oja) , ou L > C > L, ou um sistema numerado 1 > 2 > 1. Nesse caso fica claro que não existem variações possíveis, só existe essa sequência  1 > 2 > 1.

Adicionando 2 clientes agora temos mais de um rota possível, vejamos:

  • Rota 1 : Loja > Cliente 1 > Cliente 2 > Loja  ou
  • Rota 2: Loja > Cliente 2 > Cliente 1 > Loja

Supondo que eu sei o tempo de deslocamento entre Loja e Cliente 1 , Cliente 1 e Cliente 2, Cliente 2 e Loja, já podemos pensar em com contabilizar e escolher o que demora menos, mas precisamos organizar melhor esses conceitos para facilitar as nossas contas, uma tabela talvez?

Origem Destino Tempo (minutos)
Loja Cliente 1 10
Cliente 1 Cliente 2 5
Cliente 2 Loja 8

 

E como ficariam as nossas contas?

Tempo 100 + 50 + 80 = 23

Na forma como está colocado as 2 rotas são indiferentes porque assumimos silenciosamente que os tempos de ir de A para B é igual ao de B para A, algo que no trânsito não é verdade.

A nossa tabela deve ter tambem os tempos de volta em cada trecho possível.

Origem Destino Tempo
Loja Cliente 1 10
Cliente 1 Cliente 2 5
Cliente 2 Loja 8
Cliente 1 Loja 8
Cliente 2 Cliente 1 7
Loja Cliente 2 6

Uma situação que pode ser visualizada na figura a seguir.

Diagrama de Rotas Possíveis entre 3 locais

Opa

E agora temos algo mais realista e uma conta simples irá revelar qual a rota é a mais rápida, vejamos:

Rota 1 Tempo Rota 2 Tempo
Loja > Cliente 1 10 Loja > Cliente 2 6
Cliente 1 > Cliente 2 5 Cliente 2 > Cliente 1 7
Cliente 2 > Loja 8 Cliente 1 > Loja 8
23

21

Uma representação bem condensada para todas as distâncias possíveis entre um conjunto de locais quaisquer é uma matriz de adjacências, nela as linhas e colunas são os locais e nas células as distâncias, tempos ou outras grandezas que as relacionem.

Loja

Cliente 1

Cliente 2

Loja

10 8

Cliente 1

8

5

CLiente 2

8 7

A loja de onde partem as entregas é o nosso ponto fixo e as rotas possíveis são todas as permutações entres os destinos das entregas.

Para estimar as possibilidades de rotas em uma entrega para 4 clientes temos que calcular as permutações entre os 4, ou 4! = 4 x 3 x 2 x 1 -> 24 rotas possíveis. Duvida? Vamos verificar.

Análise Combinarória

Esse capítulo não é sobre contagens ou análise combinatória, estamos querendo resolver o problema de nossa loja de delivery, mas estamos vendo que quem odiou esse item na escola agora pode ver um exemplo real da sua utilidade. Outro detalhe importante é que mesmo que o R ou qualquer outro programa ou o Excel realize a conta, sem estudarmos os conceitos e analisar as possibilidades não saberíamos qual a formulação correta a aplicar. Logo se o assunto lhe está parecendo espinhoso ou esquecido nas brumas do passado, que tal recordar um pouqinho sobre análise combinatória?

Mas e o R?  Como ele pode nos ajudar, primeiro no pacote básico temos a função combm, que gera as combinações possíveis de M elementos N a N sem que esses r. Lembram?

Dados 4 elementos quantas combinações possíveis 2 a 2?

combn(1:4,2)
combn(c(“a”, “b”, “c”, “d”) , 2)
pessoas = c(“joão”, “maria”, “pedro”, “leonardo”)
combn( pessoas, 2)

Acima alguns exemplos de como podemos explorar combinações no R, uma sequência “1:4”, um vetor anônimo c(“a”, “b”, “c”, “d”) e um vetor chamado pessoas, o resultado é uma matriz com as combinações possíveis.

Teste no seu console. Eu espero. 🙂

Para mim o resultado é o que está na figura abaixo.

Screen Shot 2016-11-24 at 08.31.34.png

Felizmente, tudo de acordo com a Lei.  Combinações de M objetos N a N é calculado como M!/ ((M-N)! N!)  no caso acima 4! / 2! x 2! = ( 4 x 3 x 2 x 1) / (2 x 1) x (2x 1) = 6.

Se pretendemos usar esse resultado depois, precisamos armazenar o resultado em alguma varíavel, digamos “pares”, faremos assim

 

> pessoas = c(“joão”, “maria”, “pedro”, “leonardo”)
> pares = combn( pessoas, 2)
> pares
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] “joão” “joão” “joão” “maria” “maria” “pedro”
[2,] “maria” “pedro” “leonardo” “pedro” “leonardo” “leonardo”

e porque essa preocupação com variáveis?  

Bem o nome sugere, é algo que esperemos que possa ser utilizado com valores diferentes. Já logo imagino que o vetor “pessoas” não será digitado no meio do nosso script, mas lido de arquivo ou resultado de uma seleção do usário em uma aplicação R/Shiny.

Disse ante que combm retorna um objeto do tipo “matrix” e como podemos verificar o tipo ou a classe de um objeto?  “class”.  Teste.

class(pares)
[1] “matrix”

Esse comando é importante porque a medida que avançamos em R você verá que para cada Classe de objetos existem operações que só podem ser realizadas em um determinado tipo de objeto e que eventualmente teremos que converter um objeto em outro.

Um objeto matriz é acessado por referências as linhas e as colunas assim matriz [ linha, coluna ]. A seguir algumas possibilidades, teste no seu console.

pares[1,1]
[1] “joão”
> pares[1,2:3]
[1] “joão” “joão”
> pares[1,]
[1] “joão” “joão” “joão” “maria” “maria” “pedro”
> pares[,1]
[1] “joão” “maria”
> pares[]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] “joão” “joão” “joão” “maria” “maria” “pedro”
[2,] “maria” “pedro” “leonardo” “pedro” “leonardo” “leonardo”

O combn retorna os pares formados como colunas, um possiblidade para impressão do resultado.

for ( i in 1:6)
{
cat(i, pares[,i], “\n”)
}
1 joão maria
2 joão pedro
3 joão leonardo
4 maria pedro
5 maria leonardo
6 pedro leonardo
>

Epa!!  Uau!

Aqui esbarramos com a nossa primeira estrutura de loop e de controle de um programa. Falaremos muito mais sobre loops posteriormente, mas veja que é tranquilo.

O comando FOR é uma instrução que automatiza a geração de valores e a execução do que está entre os colchetes { } .

No caso acima o FOR irá gerar valores para variável  “i” como 1, 2,3, 4, 5, 6 e para cada valor gerado, o que está dentro dos colchetes é executado.

Dentro do colchetes um comando para imprimir no console os valores que estão dentro dos parentênsis   cat(i, pares[,i], “\n”), ou seja, o valor do “i”, mais o valor de “pares[,i]”  e uma instrução para pular de linha “\n”.  Experimente retirar o  “,”\n”” e terás algo assim:

for ( i in 1:6)
{
cat(i, pares[,i])
}
1 joão maria2 joão pedro3 joão leonardo4 maria pedro5 maria leonardo6 pedro leonardo

Bem já dispersamos bastante, mas estamos construindo conceitos para programas cada vez mais poderosos.

Retornando ao nosso problema do entregador de sushi, precisamos de uma forma rápida de calcular permutações e para isso recorrer a um pacote extra, o “combinat“.

Nessa altura instalar pacotes não deve ser mais um problema, no RStudio, menu, Tools > Install Packages.

Pacote instalado vamos explorar as permutações.

Outra coisa do base do R para ajudar em nossos exercícios é o que alguns vetores pré-instalados já estão disponíveis, um deles o  “letters”, veja

letters
[1] “a” “b” “c” “d” “e” “f” “g” “h” “i” “j” “k” “l” “m” “n” “o” “p” “q” “r” “s” “t” “u” “v” “w” “x”
[25] “y” “z”

é um vetor, logo podemos referenciar  assim letters[1:3]

letters[1:3]
[1] “a” “b” “c”

Logo,

library(combinat)
permn(letters[1:2])
[[1]]
[1] “a” “b”

[[2]]

[1] “b” “a”

Recordando que usamos o library() para carregar para a memória a biblioteca antes de usar as funções que ela implementa.

Com 3 elementos começa a ficar interessante.

permn(letters[1:3])
[[1]]
[1] “a” “b” “c”

[[2]]
[1] “a” “c” “b”

[[3]]
[1] “c” “a” “b”

[[4]]
[1] “c” “b” “a”

[[5]]
[1] “b” “c” “a”

[[6]]
[1] “b” “a” “c”

Listas?

Pena que o resultado de “permn” é do tipo “list”, assunto que não queria tratar agora, pois são estruturas mais complexas. Listas podem armazenar listas de objetos de qualquer tipo e dependendo da complexidade da lista navegar por elas pode as vezes ser doloroso. 🙂  Sempre prefiro os data frames por sua equivalência com planilhas do Excel.

Ok, mas não precisamos arrancar os cabelos agora. A lista aqui é simples e podemos acessar os valores usando a notação dos colchetes duplos [[ ]] .

Vamos lá. Direto no console do RStudio.

Screen Shot 2016-11-24 at 09.26.58.png

Legal, não?

Usamos a função permn para gerar todas as permutações possíveis de 3 letras, armazenamos os resultados em uma lista chamada “p” e usamos os [[]] para extrair os resultados.

Mas quantas são as permutações possíveis?  Se você reviu a matéria, ja sabem que o número de permutações de 3 elementos é igual ao fatorial de 3, ou 3!, ou 3 x 2 x 1 = 6, mas temos outro meio de saber isso sem ter que fazer essa conta, basta verificar qual é o “tamanho” da lista “p”.

Se lá estão todas as combinações, logo está resolvido. E ai entra em jogo um eterno aliado em nossos scripts, a função “length”, de length em inglês, o comprimento ou tamanho.

Os exemplos abaixo deixam claro.

length(pessoas)
[1] 4
> length(1:5)
[1] 5
> length(letters[1:7])
[1] 7
> pessoas = c(“joão”, “maria”, “pedro”, “leonardo”)
> length(pessoas)
[1] 4

no caso das nossas permutações, quantas podem existir entre 3,4,5 elementos?

length(permn(3))
[1] 6
> length(permn(4))
[1] 24
> length(permn(5))
[1] 120

Em cima outro detalhe interessante, o uso de função dentro de função length( permn())  e podemos ir longe, como em length(permn(c(“joão”, “maria”, “pedro”, “leonardo”))).

Atenção, a função permn gera as combinações possíveis e a length conta o resultado, logo pode ser lenta para se o número de elementos for alto.

Se quiser apenas calcular o fatorial de um número use a função “factorial”, por exemplo para 10 elementos vemos rapidamente que existem 3.628.800 permutações possíveis.

factorial(10)
[1] 3628800

Pronto agora podemos finalmente retornar ao nosso problema original,

uma loja, x clientes, quantas rotas?

clientes <- c(“c1”, “c2”, “c3”)
rotas <- permn(clientes)
length(rotas)
rotas
“c1” “c2” “c3”
“c1” “c3” “c2”
“c3” “c1” “c2”
“c3” “c2” “c1”
“c2” “c3” “c1”
“c2” “c1” “c3”

mas falta ainda componente essencial, para determinar a rota mais rápida precisamos dos tempos de ida e de volta entre as lojas e os clientes. Ou seja as combinações 2 a 2 entre 4 locais, a loja e os 3 clientes.

> locais <- c(“loja”, “c1”, “c2”, “c3”)
> trechos <- combn(locais,2)
> trechos
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] “loja” “loja” “loja” “c1” “c1” “c2”
[2,] “c1” “c2” “c3” “c2” “c3” “c3”

e claro as rotas opostas,

trechos[1:2,]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] “loja” “loja” “loja” “c1” “c1” “c2”
[2,] “c1” “c2” “c3” “c2” “c3” “c3”
> trechos[2:1,]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] “c1” “c2” “c3” “c2” “c3” “c3”
[2,] “loja” “loja” “loja” “c1” “c1” “c2”

Observe os índices da matriz trechos.

Nossa, avançamos bastante.

Agora já temos um modelo para trabalhar. Dado uma loja e N clientes, sabemos como calcular de forma genérica todas as rotas possíveis e temos um método de explicitar todas as distâncias que precisamos calcular para estimar a rota mais rápida.

Próximos passos?

  1. Usar a API do Google para obter os tempos em todos os trechos;
  2. Calcular a rota ótima;
  3. Exibir no mapa.

Vamos nessa?

Bye, não deixe de enviar o seu comentário em caso de dúvidas.

João Carlos

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R para não Programadores – [6] Finalmente gerando uma página HTML

November 22, 2016 no comments Posted in R para não Programadores

Após longo e tenebroso inverno aqui estamos!.

O que falta para fechar esse pequeno ciclo de nossa aplicação de mapas é passear um pouco pelas possibilidades de exportar o que foi produzido enquanto um página na web.

A página será estática, mas o mapa graças aos recursos do “leaflet” não.

O passo é pequeno em termos de linhas de código, mas tem grandes implicações e algumas barreiras a serem vencidas se realmente pretendermos publicar na web.

Recapitulando rapidamente

estamos agora no estágio de termos uma pequena aplicação que lê dados sobre as capitais do Brasil, filtra aquelas com altitude superior a 200 metros e as exibe em um mapa. Vide aqui.

img_582e0b79ca322

O script e os arquivos de dados podem ser baixados aqui.

O mapa leaflet pertence a uma categoria especial de aplicativos autônomos que podem ser incorporados em páginas web denominados “widgets”. Os mais conhecidos são os aplicativos em Flash, mas que são cada vez menos usados e sendo substituídos por soluções que empregam html5, css e javascript.

htmlwidgets

O time do RStudio desenvolveu um pacote de widgets html que facilita a inserção de código R em páginas da web, os chamados htmlwidgets. Os “htmlwidgets” são blocos de código cujo principal objetivo é trazer para o R alguns dos avanços alcançados em bibliotecas de visualização empregando html5, css e javascript.

O showcase é impressionante. http://www.htmlwidgets.org/showcase_leaflet.html

e vai de facilidades de representação de dados em tabela, passando por mapas 3D, séries históricas

 , diagramas e fluxogramas.

e o mais interessante, são funcionalidades interativas. O usuário da sua aplicação pode alterar as visualizações dentro de certos parâmetros.

E será justamente um dos recursos da biblioteca “htmlwidgets” que usaremos para exportar o nosso mapa e faremos isso tudo com apenas 1 linha de código.

que por sua vez auto explicativa, “savewidget”. Salvar o widget em um arquivo. Aquichamado mapaMetrico.html.

Se temos algo de mais complicado para explicar é sobre o tratamento dado para especificar o caminho do arquivo e o comando paste0.

Vamos lá.

Primeiro não esqueça de rever a publicação onde falamos sobre referências relativas no sistema de arquivos quando estamos executando um script em R. Referências relativas a pastas e arquivos no RStudio.

O seu script/programa em R assim como qualquer outro arquivo existe fisicamente dentro do sistema de pastas do sistema operacional.

Quando fazemos referência a outros “locais” no sistema de arquivos é necessário ou que saibamos o caminho físico exato do arquivo, ou que adotemos uma referência relativa. As referências relativas são as mais recomendadas pois permitem que o script possa ser re-utilizado ou movido sem maiores consequências.

Veja que lá no início usamos um comando para que scripts que rodem a partir do RStudio “saibam” aonde estão.

Após executar comando setwd(), o diretório de trabalho é definido como sendo aquele aonde o seu script está.

Agora no momento de salvarmos a nossa página desejamos faze-lo em uma sub-pasta chamada html. A decisão é minha aqui, você pode alterar a gosto.

O importante é que preciso dizer para o comando savewidget o nome e o endereço do arquivo por meio do parâmetro “file” em

file=paste0(getwd(),”html/mapa.html”

e aqui 2 novidades, o comando paste0 e o getwd().

O getwd() recupera o caminho fisico do diretório de trabalho corrente, não importa qual seja. Fazendo assim nós, os programadores, ficamos livres para não nos preocupar o caminho exato, se o script movido, o comando simplesmente recupera e pronto.

E o paste0 ?  O paste0 é combinador de strings de caracteres. Para os usuários do Excel é o CONCATENAR.

Faça um teste no seu console.

paste0( “Curso de R”, “Salvando Mapas”)

Observe que o R e Salvando ficaram unidos sem qualquer espaço, vem daí o Zero, zero espaço.

O irmão do paste0 é o paste e esse inclui por padrão 1 espaço em branco, mas com a opção “sep” podemos especificar outros separadores.

pronto o que faz então o comando

file=paste0(getwd(),”html/mapa.html”  ?

Concatena o nome do diretório corrente na minha máquina com a sub pasta “html/”  mais  o nome do arquivo  “mapaMetrico.html”

 “/Volumes/APPLEHDD/wordpress metrico/scripts R metrico/leaflet/html/mapaMetrico.html”

No seu computador será diferente dado que irá corresponder aos nomes de pastas onde salvou o seu script.

Pronto.

Ao final o que temos?  Vamos o painel Files do Rstudio.

O diretório e a pasta html/

e dentro da pasta html, o arquivo html como o nome que propusemos e uma pasta com arquivos de apoio. Clique no arquivo .html.

Duas opções, abrir no editor ou no browser.

No editor o cenário não é bonito, pois o que estamos vendo é o código de parte do widget.

mas no browser é o que esperávamos.

Eu coloque o resultado no meu servidor web e pode ser visualizado aqui http://metrico.statanything.com/html/mapaMetrico.html

Ainda não é um programa interativo, mas o mapa é.  É possível deslocar, aproximar, afastar, clicar sobre os marcadores etc.

Gostou?  Avise aos colegas e amigos. 🙂

Bye

João Carlos

Curso R para não Programadores

November 18, 2016 2 comments Posted in R para não Programadores

A nossa idéia e desconstruir o formato tradicional de cursos de linguagens de programação no estilo bottom up, onde todos os conhecimentos básicos e estruturas precisam estar dominadas antes de se pensar em produzir soluções interessantes.

O público alvo é o “common man/woman”,  termo na moda em 2016, daí “R para Não Programadores”, mas a pergunta que não quer se calar  “Porque aprender sobre Programação?

Porquê?

Um dos argumentos é o crescimento pessoal, aprender coisas novas, quebrar paradigmas, ou algo mais pragmático, como  automatizar tarefas repetitivas e economizar seu tempo para tarefas mais nobres. Ao longo de minha carreira pude observar times inteiros operando manualmente sobre listas de dados, planilhas, coletas de dados na internet manualmente.  Dezenas, centenas de homens-hora despendidas em tarefas que poderiam ser resolvidas semi automaticamente e reservando o tempo nobre para analisar e filtrar a informação coletada.

Outro argumento forte é que saber programar, nem que seja um pouco, pode ser um diferencial em sua carreira.

Inúmeros artigos na mídia tem apontado o impacto positivo sobre o seu currículo, tornando você um profissional diferenciado. ( Learn These 4 Skills to Boost Your CareerLearn These 4 Skills to Boost Your Career, Why computer code is the new language to learn).

Há inclusive um debate sobre se “todo mundo” deveria aprender a programar como apregoado por figuras como Bill Gates or Mark Zuckerberg, ou se a questão é mais profunda, estaria mais ligada ao conjunto de conceitos apreendidos ao longo de cursos de Ciência da Computação (Don’t learn to code. Learn to think), onde se aprende a “pensar” de um certo modo.

Ao meu ver algo entre os dois extremos!

Inevitavelmente ao seu aprofundar em desenvolver programas, será necessário estudar estruturas lógicas usadas em algoritmos que acabam impactando o modo como percebemos e realizamos o mundo a nossa volta.

Impacto similar acontece quando vencemos a resistência a Estatística e Probabilidades e passamos a observar o que nos cerca ante o esperado e o inesperado, o determinístico e o aleatório. Recomendo a leitura de “O andar do bêbado: Como o acaso determina nossas vidas” do Mlodinow.

Voltando ao nosso tema! Se você já possui alguma afinidade com tratamento de dados em planilhas de Excel, quem sabe o Access, verá como o R pode complementar e muito o que pode ser feito com essas ferramentas. Não são excludentes, mas complementares. A todo momento estaremos importando e exportando dados entre Excel e o R.

Se você já sofreu com grandes tabelas dinâmicas em Excel ou PROCVs extremamente demoradas, verá como o R resolve problemas similares com extrema rapidez.  Temos um exemplo aqui.

adobestock_103722840_lowSe está apenas curioso e que gostaria de visualizar seus dados livre das limitações das ferramentas tradicionais, comparar indicadores, capturar dados na web, etc. sinta-se bem-vindo. Não precisa ser Matemático, Estatístico ou Mestre ou Engenheiro, por sinal o R é usado há muito tempo na área das Ciências Sociais. Vamos brincar com alguns números e no durante o processo procurar aprender e nos divertir, acreditem se quiserem, Programando.

Para quem já usa o R e já tempos não tem olhado para as últimas novidades, pode ter aqui uma oportunidade para acompanhar algumas. Uma leitura transversal pode ser o suficiente para motivar uma busca mais detalhada.

O R, em inúmeras aplicações, tem o Poder de Resolver problemas bem interessantes, mesmo para quem ainda dá os seus primeiros passos em estruturas de lógica de programação.

Nosso papel aqui é de tentar disparar essa centelha, motivar.  Ao longo das lições inúmeras referências e citações irão indicar como estender o que aqui aprender.

Formato

Problema > Solução > Detalhamento.

A nossa proposta é oferecer desde o início desafios,  problemas que façam sentido  como aplicações práticas e que possam ser resolvidos em partes menores, progressivamente.

Entre essas partes, pausas.

Pausas de Detalhamento, onde se procura explicar com um pouco mais de detalhe algo que foi usado de modo semi-mecânico nas unidades anteriores, mas evitando sempre o estilo manual de referência.

Shiny

Shiny é para mim a maior novidade no mundo R dos últimos anos.

O Shiny é um “framework” para o desenvolvimento de aplicações interativas para a web em R.

Hã ????

Sim, sem que você tenha que aprender técnicas de produção de sites para web, sem a necessidade de aprender HTML, CSS e Javascript, o seu pequenino programa R, por menor que seja, pode ser tornar com relativo pouco esforço em um aplicativo na internet ou na rede da sua empresa*.

Veja por exemplo a aplicação a seguir. Não é uma imagem estática, é uma aplicação real e interativa. Experimente os controles e observe os resultados.

O objetivo é simples e interessante, contar as palavras que ocorrem em 3 livros de Shakeaspere e filtrar número máximo de palavras (Maximum Number of Words) que serão exibidas acima de uma determinada frequência (Minimum Frequency).

As nossos exemplos de aplicações sempre irão culminar em uma versão Shiny. Na altura apropriada falaremos  sobre algumas opções de como publicar as suas aplicações para o Mundo.

Conteúdo e Aplicações

Feito esse prefácio, fique atento, o nosso objetivo é apresentar coisas realmente “legais”, ” como :

  1. Representação de Dados em Mapas;
  2. Captura e Análise de Dados em Redes Sociais;
  3. Captura e Análise de Textos de Páginas da Web, entre outras e é claro,
  4. Análise Exploratória de Dados.

Aplicações mais especializadas estarão fora do nosso escopo, mas se formos bem sucedidos, você já terá mordido a isca e poderá seguir por conta própria.

Estatística?

Um Pouco, mas aprimorar o nosso ‘paladar’ pela Estatística em várias aplicações e oportunidades de trabalho é simplesmente Fundamental.

Se você tem trauma com Estatística, respire fundo, ela virá, mas virá mais tarde, em doses homeopáticas. Não faltam excelentes obras e publicações que apresentam os conceitos estatísticos dentro do formalismo e precisão teórica requeridos para pesquisas científicas e aplicações profissionais.

Não será esse o nosso objetivo, mas com certeza o material aqui apresentado poderá trazer insigths aos mais preparados, assim como poderá servir aos que não tiveram a oportunidade ou tempo para acompanhar os recentes avanços do mundo R/RStudio.

A nossa primeira aplicação será um site interativo feito em Shiny/R que exibirá dados sobre capitais do  brasil e representará os mesmos sobre um Mapa.

img_5820864400d8e

 

A complexidade será apresentada de forma progressiva, começando com scripts em R de exibição de mapas, passando por leitura de arquivos em Excel, manipulação de dados no formato de data frames e por fim tudo junto em uma aplicação web.

No forno outra atividade com um tópico já desenvolvido será em torno de cotações da bolsa de valores.

img_581c5206b2bf9

 

Programar bem não é fácil e a curva de aprendizado pode ser longa, mas o retorno é bastante recompensador e o R pode ser uma porta interessante para esse admirável mundo novo.

Apertem os cintos.

João Carlos

Tópicos já publicados em sua ordem inversa por data de publicação:

[Projeto Capitais do Brasil]

Um conjunto de lições que giram em torno de um projeto de exibir dados de cidades do brasil. Em seu estágio final teremos um “site”, uma aplicação web, interativa, onde o usuário poderá fazer escolhas e a aplicação irá exibir em reposta: mapas, locais, dados, e sumários estatísticos simples.

Fique Atento.  Siga-nos aqui! https://twitter.com/metrico_  Em breve uma página no Facebook.

Agradeço por comentários construtivos. Seu retorno é crítico para que aprimoramento do conteúdo!

Conteúdo até o momento. 

[1] Um Mapa de sua cidade.

O primeiro mapa rápido com apenas 5 linhas de código. Iniciando com o Leaflet no R.

[2] Um Mapa de sua cidade e várias opções de visualização – R e Leaflet

Aprimorando o visual do mapa anterior com provedores de mapas de imagens.

[3]Um Mapa de sua cidade e alguns pontos turísticos – R e Leaflet

Transformando endereços em coordenadas e exibindo no mapa, por exemplo, alguns pontos turísticos de sua cidade.

[4] Um Mapa e Dados das Capitais do Brasil – Norte e Nordeste – R e Leaflet

Como ler dados do Excel, filtrar e exibir em um Mapa. Exemplo capitas do Norte e do Nordeste.

[5]  Um Mapa e Dados das Capitais do Brasil com Altitude Superior a 200 metros –  R e Leaflet

Mais sobre como filtrar dados em data frames e facilidades do RStudio.

[6] Convertendo um mapa Leaflet em um página web.

[/Projeto Capitais do Brasil]

R para Não Programadores – Conteúdo – Curso Prático

November 18, 2016 no comments Posted in Análise de Dados, R para não Programadores

Índice de conteúdos do – Curso Tutorial  – R para Não Programadores e Usuários de Excel

R e Shiny para não Programadores e usuários de Excel – [1] Um Mapa e Dados das Capitais do Brasil R

R e Shiny para não Programadores e usuários de Excel – [2] Um Mapa e Dados das Capitais do Brasil R

R e Shiny para não Programadores e usuários de Excel – [3] Um Mapa e Dados das Capitais do Brasil R

R e Shiny para não Programadores e usuários de Excel – [4] Um Mapa e Dados das Capitais do Brasil – Norte e Nordeste em R e Leaflet

R e Shiny para não Programadores e usuários de Excel – [5] Pausa para falar de filtros em data frames, mapas e outros – R

R e Shiny para não Programadores – [6] Finalmente gerando uma página HTMLDownloads

R e Shiny para não Programadores – [7]  Qual o Caminho mais rápido com R? O Problema do Delivery de Sushi – Pizza. parte 1 de 3

Anexos – Curso Tutorial – R para Não Programadores

R para Não Programadores – Anexos – Curso Prático

November 18, 2016 no comments Posted in R para não Programadores

Trechos de soluções que podem ser adotados em projetos de scripts em R e que complementam materiais publicados no Curso Tutorial de R para Não Programadores e Usuários de Excel.

 

R para Não Programadores – [5] Pausa para falar de filtros em data frames, mapas e outros – Curso Prático

November 17, 2016 no comments Posted in R para não Programadores

No módulo anterior, paramos no código abaixo e ele inclui a seguintes funcionalidades:

  1. le um arquivo excel com dados de capitais do brasil;
  2. filtra as capitais que estão na região norte e nordeste;
  3. gera um mapa com 2 camadas de “tiles” e
  4. plota marcadores sobre essas cidades que respondem ao clique exibindo os respectivos nomes.

Antes de prosseguir, vamos fazer uma pausa, e falar um pouco mais sobre o ambiente do RStudio e de como explorar os valores dos nossos dados.

Um bom exercício para o Leitor seria a modificação dos estilos dos mapas alterando os provedores de mapas.

Percorra a lista de publicações e você irá encontrar aqui, indicações de alguns valores possíveis com visuais alternativos.

A função addProviderTiles, usada para adicionar camadas de representação de blocos de imagens, tem como primeiro parâmetro o nome do provedor e o estilo em particular.

Outro pequeno exercício que o leitor deve se permitir é explorar os dados das capitais e procurar criar outros sub-conjuntos de dados, por exemplo quais a capitais que estão acima de uma determinada altitude?

Sabendo que o data frame contem os dados das capitais e que uma de suas colunas, a ALT, representa a altitude da cidade, primeiro passo deveria ser explorar esses dados, explorar os seus valores.

Um detalhe importante a registrar é que no ambiente R, após execução de um script que cria variáveis como o data frame capitaisMetrico, os seus valores lá ficam até que sejam removidos ou substituídos por outros de mesmo nome.

Execute o script acima e logo depois inspecione as variáveis do seu ambiente no painel “Environment” do RStudio, mas antes vamos apagar tudo, remover todas as variáveis que estão na memória. Clique no ícone da vassorinha amarela.

 

Observe o resultado logo após clicar no ícone.

Verifique o resultado caso peça no console, a listagem do data frame capitaisMetrico:

Erro, capitaisMetrico not found.

Um detalhe, se quiser limpar todas as mensagens da área de console experimente CTRL + L e observe todas as mensagens anteriores serem removidas.

A partir desse ponto vamos seguir uma pequena seção interativa com o R no Rstudio.  Vamos executar trechos do script e observar como o ambiente responde aos nossos comandos.

Abaixo a imagem do status atual do ambiente antes da execução do script.

Podemos executar o script via o ícone SOURCE, no canto superior direito, mas isso vocês já sabem. Outra alternativa é selecionar um trecho do script e digitar CTRL + ENTER. Isso é legal porque podemos testar trechos de nossos programinhas. Ao invés de executar tudo de uma só vez, vamos testando pequenos trechos e observando os efeitos.

Abaixo foram selecionadas com o mouse as linhas 1 a linha 20. Nessas linhas os comandos que lá estão fazem o seguinte: 1) invocam os pacotes que iremos usar, leaflet, readxml e htmlwidgts, 2) o diretório de trabalho será ajustado para a pasta a onde está o script e 3) por fim o arquivo  é lido e conteúdo da aba número 1 da planilha é armazenada em um data frame que chamei de capitaisMetrico. O nome é irrelevante, poderia ser outro qualquer (meia verdade, existem regras de formação de nomes de variáveis), desde que ao longo do programa seu uso seja consistente com o que pretendemos realizar.

Ao digitar CTRL + ENTER apenas a parte em azul será executada.

E os efeitos?

Diferentemente de quando usamos o ícone “source”, agora no console os comandos são exibidos como se fossem digitados por nós, um a um, é isso que o RStudio está fazendo por nós, apresentando ao interpretador R os comandos que estão no script, um a um. Em caso de algum comando com erro, a sequência é interrompida e uma mensagem de erro exibida.

Interpretadores são muito “exigentes”, os comandos devem seguir regras restritas e qualquer falha, como o esquecimento de uma vírgula, pode ser fatal, mas não mortífero :).

Voltando, veja no Environment

Temos um data framede nome capitaisMetrico com 27 observações  ou linhas e 13 variáveis ou colunas. Clique no nome “capitaisMetrico” e observe que uma nova aba surgiu, como em uma aba de planilha de Excel.

Uma novidade hiper cool dessa nova versão do RStudio é que a aba é destacável. Clique no nome da aba e arraste para fora da área do RStudio e veja o efeito. Se você tem 2 monitores, já viu como isso vai ajudar em suas análises de dados.

Voltando agora aos dados!

O que temos na coluna ou campo ALT?  Podemos olhar diretamente na planilha,

o que até ajuda para se ter uma noção se os dados foram importados corretamente, mas que não será de muita utilidade para uma lista grandes de números.

Ainda que …, existe 1 pequeno ícone de meia seta ao lado de cada nome de campo, ícone esse  que permite ordenar o todo o data frame de acordo com os valores da coluna selecionada, seguindo do maior para o menor ou na ordem inversa, ou a ordem alfabética se a coluna for de dados do tipo caracter.

Observe que os dados estão fora de ordem, mesmo clicando no ícone e a razão é simples, nós não executamos o script todo e você deve se lembrar da lição anterior que a função read_xls “leu” esses dados como caracteres e não como números.

Logo após no script, temos o  trecho a seguir que converte os caracteres em números via a função “as.numeric”.

Fique atento pois existem várias as.<AlgumaCoisa>  ao seu dispor. Podemos ter um vislumbre no console, digite “as.” e aguarda um pouquito, e veja,

que o RStudio lhe apresenta um menu de comandos que se iniciam com “as.”  e ainda oferece um “ajuda” mínima e indicação para se clicar em F1, para um Help mais completo.

 

Sem mais delongas vamos executar todo script e voltar ao ponto que paramos no lição anterior.

Após clicar em SOURCE, o programa de executar graciosamente e para com apenas uma mensagem.

Nenhum mapa!  ???   Pq?

No modo SOURCE o mapa não é gerado no painel a não ser que seja envolvido pelo comando PRINT. Como aqui

Outra alternativa seria retornar ao script, selecionar a variável “mapa” e CTRL + ENTER

Ok, falei, falei, e onde está a famosa altitude das cidades?

Vá ao console e digite  capitaisMetrico$ALT ou comece a digitar e espere pelas opções

o retorno é o conjunto de valores existentes

Qual a menor altitude (min), a maior (max), a média (mean), mediana (median)?

E ai começamos a ter contato com a extensa lista de funções matemáticas e estatísticas ao nosso dispor.

Quem sabe um gráfico rápido, sem qualquer sofisticação? “plot”

Um histograma para se ter uma primeira impressão como essas altitudes se distribuem?

 

Os gráficos acima são produzidos pelo pacote base do R, mas a vedete na área gráfica é a biblioteca “ggplot” que veremos em outro momento e que produz gráficos com um look and feel profissionais.

O histograma indicou que a  grande maioria das capitais estão em altitudes de 0 a 200 metros, mas podemos ter um retrato mais preciso com um sumário estatístico dos dados. E entre as dezenas de opções de sumários, ficaremos com a mais simples, a “summary”.

 

Esse sumário ficou poluído pelos campos do tipo caracter. A informação de que aquelas colunas possuem 27 linas não acrescenta muito a nosso conhecimento sobre os dados, mas saber os limites e intervalos dos numéricos  é de fundamental importância.

Uma segunda versão comando a seguir exemplifica como podemos exibir os dados de apenas 2 colunas, AreaUF, a área do município, e ALT a altitude do mesmo.

Um olhar de lupa sobre o comando revela detalhes importantes. Primeiro capitaisMetrico é seguido de “[,” e essa “,” separa a referência a linhas e colunas de um data frame. Se nada é explicitado antes da vírgula então todas as linhas serão exibidas. Logo depois da vírgula é reservado para a representação das colunas. Nada após a vírgula, representa todas as colunas. No caso aqui o que temos depois da vírgula é  c(“AreaUF”,”ALT”), e o “c” antes do parêntesis indica um vetor e com valores entre aspas, um vetor de caracteres, os nomes entre aspas devem corresponder aos nomes das colunas ou campos do data frame. Caso os nomes sejam digitados de modo a não corresponderem exatamente ao nome de qualquer atributo, mensagens de erro serão exibidas e nosso script não prosseguirá.

Experimente no console apenas listar esse trecho do data frame,

e lá estão, todas as linhas de apenas 2 colunas.

E podemos listar apenas algumas linhas? As cinco primeiras?

Lá está. Antes da vírgula  1:5.

Bom momento para perceber que o R gera sequências com o uso do operador “:”.  Digite no console 1:5,

Voltando ao sumário apenas dessas 2 colunas numéricas. Temos o valor mínimo, máximo, média, mediana, e o primeiro e terceiro quartil. Não conhece os quartis?  Ok, leia aqui, ou aguarde uma outra ocasião mais a frente.

Bem, agora estamos prontos para uma variante do nosso mapa anterior, ao invés de capitas do Norte Nordeste, quais seriam as capitais cuja altitude é superior a 200 metros?

Como não queremos destruir o conjunto de dados original vamos usar um data frame de apoio e  que irá receber as linhas que irão passar no nosso teste de altitude.

Usarei o nome  capitaisALT, apenas para lembrar “por alto” qual é o nosso objetivo, mas um bom programa deve sempre ser comentado de forma equilibrada. Nem comentários de menos, de modo a não se reconhecer um que script faz, nem comentários em excesso que tornem a leitura pesada. O símbolo “#” em qualquer ponto de uma linha faz com que a partir daquele ponto todo o resto do texto seja desconsiderado e tratado com um um comentário.

Aqui vai

Detalhes para ficar atento, “capitaisMetrico$ALT > 200”  antes da vírgula é o nosso FILTRO ou SELETOR de linhas de nossa tabela. Após a vírgula está em branco, indicando que desejamos todas as colunas.

No environment, lá estão elas.

Então podemos voltar ao nosso script original e substituir as referencias ao data frame capitaisMetrico por capitaisALT e visualizar o resultado.

Observe para reflexão que fizemos aqui algo que não é recomendável em programação: copiamos e colamos um trecho de programa apenas para poder fazer a mesma coisa, no caso plotar o mapa.

Extrapolando, você pode imaginar um caso em que houvesse a necessidade de se produzir 10 mapas diferentes, cada qual com um filtro diferente, teríamos então que reproduzir o mapa 10x com as alterações, o que não é razoável.

Solução existe, são as “funções” que veremos em outro momento. De fato já usamos várias até aqui, mas iremos estudar como criar as nossas próprias funções e tirar partido da simplificação que elas nos oferecem.

Bem, ao meu ver essa seção foi produtiva. Avançamos em manipulação de data frames, algumas funções básicas para sumários estatísticos de dados e principalmente já sabemos quais são e onde estão as capitais do Brasil com mais de 200 metros de altitude.

Gostou?  Compartilhe, please!

Arquivos para download, apenas após registro. (sem estresse, estou usando apenas para fins estatísticos)

Downloads

João Carlos

 

R para Não Programadores – [4] Um Mapa e Dados das Capitais do Brasil – Norte e Nordeste – Curso Prático

November 15, 2016 no comments Posted in R para não Programadores

Seguindo com o nosso projeto de uma aplicação web que exibe mapas e marca localizações específicas, aqui mais um trecho.

Prefiro seguir em doses homeopáticas uma vez que esse conteúdo é voltado principalmente para interessados de outras áreas que não as ligadas a Computação e sem prévia experiência com programação.

Chegou aqui direto e não sabe do que estou falando, venha primeiro aqui. Curso R para Todos.

Nesse módulo o que fizemos de diferente em relação aos anteriores é que os nossos dados tem como origem uma arquivo externo e não está mais codificados no corpo do programa. Isso é super interessante porque uma vez satisfeitos com o produto final, podemos exibir dados de qualquer lugar do planeta apenas alterando o arquivo de dados e não mais o programa em isso. Assim um “usuário” do nosso programa não precisa saber como o mesmo funciona, ampliando o alcance da nossa aplicação. Ao chegar nesse estágio amigo, você agora também é um “desenvolvedor”, meus parabéns.

Já instalou o R e o RStudio, precisa de ajuda?  É só perguntar nos comentários abaixo.

Já antecipo que ao final desse pequeno programa o seu ambiente de trabalho no RStudio, a sua área de trabalho deve ser semelhante a essa aqui.

Então vamos lá

Primeiro, preciso realçar o fato de como o código é conciso. Graças as bibliotecas existentes, muito é possível realizar com praticamente zero esforço de programação. Estamos no plano de aprender como usar “controles” que controlam rotinas que produzem determinados resultados. Tudo dentro do nosso plano de vôo! 🙂

Bibliotecas necessárias? Apenas duas,

Já instalou?  Esqueceu como se faz?  Fácil, no RStudio vá o menu Tools > Install Packages

Observe que posso instalar + de um pacote de cada vez, separados por vírgulas.

Que deve produzir uma saída similar a exibida a seguir em seu console.

Os nossos dados de exemplo são em grande parte oriundos da base de municípios do IBGE, levemente adaptados e estão em um subdiretório  dados/ > Veja como ficam no painel de arquivos do RStudio.

 

O arquivo disponibilizo ao final.  Ao clicar sobre o arquivo dentro da pasta de dados podemos importá-lo, ou chamar o Excel ou outro aplicativo padrão em sua máquina para abrir arquivos terminados em .xls ou .xlsx.

É uma boa coleção de dados para o nosso aprendizado.

Além dos dados que identificam cada capital, temos a Latitude, Longitude, Altitude e Área do Município.

O pacote read_xls facilita a nossa vida, ainda que preciso adiantar que dependendo da origem do arquivo, windows/mac/linux, sistema americano ou nacional, podemos as vezes encontrar dificuldades com acentos e separação das colunas. Assunto para outro dia.

ao final dessas duas linhas e sem erros, teremos um “data frame” chamado capitaisMetrico com todos os dados da planilha anterior. Um data frame é uma estrutura de dados que representa e armazena o nosso “banco de dados” e com ele podemos realizar coisas realmente poderosas em R.

>>>  PAUSA para falar de data frames e do console

Quando importamos um data frame, nada mais prudente que no modo console, verificar o que foi lido, nomes das colunas, principais grandezas. Aqui uma dicas básicas.

Quais são os nomes das colunas/campos do data frame?  Basta digitar o comando abaixo no painel “console” do RStudio.

Para que saber o nome?  Pois precisaremos fazer referências as essas colunas quando quisermos acessar os dados que lá estão. Veja esse caso, digitando  capitaisMetrico$NM_MUNICIPIO no console recebo de volta todas as capitais que foram importadas do arquivo Excel.

Percebam o “mole” que o RStudio nos oferece, começamos a digitar o nome do data frame e ele se oferece para completar o nome. Digitamos o “$”e ele lista todos campos/colunas que existem no data frame, daqui para frame apelidado de “df”, ok?

Pronto lá estão elas.

>>  FIM da PAUSA para falar de data frames e do console

Voltando ao nosso código.

Precisamos contornar uma pequena dificuldade. O read_xls importou os dados  de colunas numéricas como latitude, longitude, etc, como “texto”, e desse modo não poderemos fazer contas, filtrar etc como números, dái esse trecho a seguir, onde valores são convertidos.

Observem 2 coisas: o uso do “$” para separar o nome do df do nome da coluna e uma função do R, “as.numeric” que converte, quando possível, uma sequência de texto em números. O quando possível é por que a sequência texto precisa “fazer sentido” enquanto um número. Se você tentar transformar  “%ˆ$ABCS” irá obter um NA, representando que não foi possível converter.

Tente no console

Entre os campos do nosso df, capitaisMetrico, uma delas informa a Região a qual pertence a capital.

Ora, o  que que o nosso código faz é justamente isso, um filtro no data frame, para depois exibir no mapa os dados filtrados.

O que fizemos ai acima foi criar um novo df, “regiaoNNE” que é o resultado de filtro em nosso df original.

O filtro é simples, ele retorna todas as linhas nas quais na coluna “Região” temos o valor “Norte”ou “Nordeste”.

com 2 “pegadinhas”:

  • em R o teste de igualdade é um duplo “=”  e,
  • o teste de OU usa o operador “|”

Uma variante usada frequentemente é quando não só queremos filtrar as linhas mas apenas mostrar algumas colunas do nosso df. Por exemplo apenas o nome do municipio, região e altitude seria assim:

Depois do filtro de região, enumeramos as colunas desejadas com

Resultado:

Então é isso. Filtrado o nosso df para conter apenas as capitais do Norte e do Nordeste, voltamos ao nosso Leaflet, ja usado nas etapas anteriores, alterando a origem dos dados e nomes dos campos de acordo com o nosso df atual.

é comando addMarkers do pacote leaflet que informa ao leaflet os limites do nosso mapa e faz o enquadramento adequado. Os nomes das capitais ao se clicar em cada marcador são fornecidos pela coluna NM_MUNICIPIO , em

e mágica está feita.

 

Na próxima, finalmente teremos uma página html para mostrar para os amigos.

Dúvidas?  Use os comentários.

João Carlos

R para não Programadores – Importação de arquivos EXCEL, SPSS, STATA e SAS – Curso Prático

November 10, 2016 no comments Posted in R, R para não Programadores, RStudio

Esse post está sendo escrito após o lançamento da versão 1.0 do RStudio em 2016, que tornou a importação de arquivos e a publicação de resultados bem mais agradável. Se ainda não tem o RStudio, trate de instalar a versão desktop [1].

Se você tem recursos para instalar a versão servidor na intranet da sua empresa, melhor ainda, pois todos os interessados dentro do seu espaço de trabalho podem se beneficiar.

Em outro momento posso falar sobre a instalação RStudio Server em ambiente Linux.

Aqui a parte super “cool” do novo RStudio, as telas falam tudo, veja:

Aba Environment, Import Excel. Aproveite e perceba logo as opções de importação SAS, STATA, SPSS.

Screen Shot 2016-11-10 at 10.21.03.png

Se estiver conectado a internet o RStudio vai verificar a necessidade de instalação de pacotes adicionais para a tarefa e irá emitir um alerta. Aceite.

screen-shot-2016-11-10-at-10-23-53

Uma janela se abre,

screen-shot-2016-11-10-at-10-25-00

selecione o arquivo a ser importado,

screen-shot-2016-11-10-at-10-25-28

um preview dos dados são apresentados,

screen-shot-2016-11-10-at-10-25-50

Primeira linha tem nomes das colunas?

screen-shot-2016-11-10-at-10-26-17

o código que gerou o preview e que iremos inserir em nosso script

screen-shot-2016-11-10-at-10-26-04

aceite e pronto os dados já importados para um data frame com o mesmo nome do arquivo sem a extensão .xlsx.

O arquivo era “capitasMetrico.xlsx”, agora temos um data frame capitaisMetrico para trabalhar.

screen-shot-2016-11-10-at-10-26-35

Aqui o código ja inserido no script.

E aqui uma pausa para falar em Diretórios e Referências dentro dos códigos em R. O código gerado faz uma apontamento ao caminho físico completo onde está o nosso script, o que é problema, toda vez que movermos esse script teremos que alterar o código.

Se você pretende que o script seja executado no próprio RStudio, mas eventualmente em em outra pasta, o próprio RStudio facilita a nossa vida,  vá no menu SESSION > To Source File Location. Pronto ele ajustará o diretório de trabalho para a pasta aonde está o seu script.

Screen Shot 2016-11-10 at 10.41.52.png

Mas é possível automatizar ainda mais e evitar essa ida ao meu Session. Basta inserir o comando abaixo logo

em uma linha que anteceda a qualquer comando que pretenda referenciar arquivos externos.

Feito isso agora o nosso script pode fazer referências relativas a diretórios que estão dentro da pasta do script.

Agora podemos mover a vontade toda a pasta para outros locais sabendo que as referências não serão afetadas.

Um tópico a parte face a enorme quantidade de opções é sobre “como” os dados são importados, codificações diferentes entre países e caracteres especiais.

No exemplo anterior os dados estavam em um formato apropriado para o sistema brasileiro, casas decimais como “,” e pontos como separado de milhares. A rotina read_excel não oferece recursos maiores para alteração do formato quanto a origem da planilha, então adotamos a solução temporária, feia :).

Alteramos no Excel as virgulas por pontos e importamos novamente, mais a frente iremos explorar alternativas mais estruturadas para extração de dados.

Outro detalhe importante, se não especificamos no read_excel quais colunas são numéricas, todas são importadas como “Texto”, logo não poderemos operar como números.

Duas soluções possíveis, especificar o tipo de dados com atributo “col_types” no read_excel, ou alterar o tipo depois.

A segunda opção aqui é mais didática pois exemplifica como operar sobre colunas de um data frame.

Referências

Choose Your Version of RStudio – RStudio Desktop  https://www.rstudio.com/products/rstudio/download3/

“RStudio and Shiny are trademarks of RStudio, Inc.”

R para não Programadores – [3] Um Mapa e Dados das Capitais do Brasil – Curso Prático

November 8, 2016 2 comments Posted in R para não Programadores

Continuando a nossa pequena série R para Todos ainda no tópico sobre “mapas” dinâmicos em interativos, avançaremos um pouco mais.

Nesse publicação iremos apresentar:

  1. o processo de transformar um endereço em coordenadas geográficas,
  2. representar esses endereços em um mapa e
  3. por fim salvar o resultado em uma página html que pode ser usado em qualquer site na sua escola, empresa etc.

Recordar é viver. 🙂 Anteriormente vimos de forma simplificada como é fácil produzir um mapa usando o pacote LeafLet. O mínimo necessário é uma chamada a rotina base com a latitude e a longitude de um ponto específico. O R se encarrega de produzir o resto.

logo depois acrescentamos uns poucos detalhes, mas essencialmente é isso. Definir que precisamos da biblioteca,

e depois a sequência  leaflet() -> addTiles()  -> addMarkers(), onde nos marcadores definimos as coordenadas e a existência de pop up com o nome da cidade, Niterói.

No post seguinte da série, falamos some os provedores de “tiles” de mapas, os blocos de imagens de mapa, que oferecem recursos excelentes de sofisticação aos mapas.

Onde os nomes entre aspas referenciam a modelos de servidores de imagens, que são carregados automáticamente pelo pacote Leaflet.

Mas para uma aplicação realmente interessante, precisamos de algo mais ágil do que enumeração de coordenadas, precisamos da possibilidade de poder inserir blocos de marcadores, melhor ainda de apenas citar os endereços dos locais pelos respectivos nomes.

Sim, é bem + interessante e relativamente fácil, mas para tanto iremos convocar + um pacote feito para o R, o “GGMAP”, que pelo nome já sugere a sua ligação com o Mapas do Google.

O GGMAP implementa vários recursos disponíveis na API do Google, em outro momentos falaremos sobre APIs, agora o que importa é que com uma simples chamada a uma função do ggmap podemos converter endereços em coordenadas e de posse das coordenadas, lançar os marcadores nos mapas. Cool não?

Antes de tudo, precisamos instalar o pacote ggmap.

Como visto, basta ir ao menu Tools >> Install Packages

As mensagens do processo de instalação, servem de guia para saber se tudo ocorreu ok:

e pronto, ja temos o pacote instalado. Prosseguindo.

O nosso exercício será exibir em um mapa um grupo de pontos turísticos de uma cidade. Aqui continuo a mostrar a minha, Niterói, mas você poderá em minutos alterar de acordo com a sua localidade.

Vamos visitar a solução de trás para a frente, primeiro o resultado final, ou seja, o mapa pronto.

 

Aqui o código para produzir o resultado acima:

A princípio basta copiar e colar o código acima em um script em branco no RStudio e logo depois em Source.  Veja aqui como Executar!

E agora as explicações, e parafraseando a citação, para bom entendedor 2 linhas de código bastam.

no início, o óbvio, temos que incluir a referência as pacotes que vamos referenciar.

logo depois, e aqui a parte elegante do processo, graças ao trabalho maravilhoso do Google e de outros gigantes, os endereços são fornecidos na forma de um vetor de cadeias de caracteres, ou “strings”.

Uma pausa!

No R podemos criar vetores com com o coma “c()”.

Um vetor de números de nome “v”pode ser criado, por exemplo, com  o comando

A visão vetorial do R pode ser então facilmente demonstrada com um exemplo onde multiplicamos o conteúdo de um vetor com um comando muito simples:

Fim da pausa!

Voltando ao nosso caso.

Aqui, criamos um vetor, onde cada elemento é um dos endereços de ponto turístico.

Logo depois “chamamos” uma função do pacote ggmap, a geocode(). “Geocode” é o termo em inglês para geocodificação,  e representa a conversão de uma referência genérica em uma coordenada geográfica.  Referências ao final, como usual.

No comando abaixo, a geocode acessa os servidores do Google em busca de uma tradução dos endereços, se houver correspondência as coordenadas são retornadas.

No modo console do RStudio é possível testar se está tudo ok.

Veja na figura anterior que 5 coordenadas foram retornadas! Fica um alerta, nem sempre a forma como entendemos os endereços retorna os resultados esperados, é bom sempre revisar, e em caso de endereços inválidos teremos um retorno do tipo:

onde NA NA , indica não foi possível geocodificar o endereço informado.

E o grande finalle, é entender como o R trata de forma vetorial os resultados obtidos.

Observe que as longitudes, latitudes e os endereços não são enumerados um a um.  A rotina do Leaflet percorre para nós todas as respostas retornadas pelo geocode().

Outro detalhe a destacar é a função retorna um data.frame, um tipo especial de estrutura de dados muito particular do R e que vem sendo copiado em outras linguagens de programação.

Um data.frame é essencialmente um tipo especial de matriz capaz de armazenar tipos de diferentes de dados em suas colunas.

Outra Pausa!

O RStudio oferece facilidades para visualização de data.frames. Ao clicarmos no nome do data.frame no painel Environment podemos visualizar o conteúdo dos mesmos como uma tabela de dados.

Fim da “Outra” Pausa !

O data.frame retornado pela função geocode possui apenas 2 colunas e cada um tem um nome, ou “colname”. Como exercício veja como você pode primeiro investigar que tipo de objeto uma função retorna e depois o que ela contem.

class(nome do objeto)

str( nome do objeto )

Essa viagem toda foi apenas o preâmbulo para explicar aos iniciantes o uso de “locacoes$lon” e “locacoes$lat” em nosso código na linha:

O data.frame locacoes tem 2 colunas, uma se chama lon e outra lat, a referencia ao nome do data.frame seguida de “$” e nome da coluna retorna dos elementos daquela coluna.  Você pode verificar executando o comando no console:

Concluindo o comando addMarkers recebe 5 longitudes e 5 latitudes e 5 endereços e os processa automaticamente de forma transpararente.

Acabou ficando maior do que o esperado.

Exportar esse resultado como uma página html fica para o próximo post!

[R para Todos] é uma proposta didática de atrair progressivamente interessados a aprender a programar em R fora do contexto clássico da Estatística. A Estatística é claro estará sempre por perto nos guiando, mas a abordagem principal aqui será em aplicações menos orientada a matemática e mais a representação da informação. A tarefa é complicada, iremos tentar aos poucos. Entre em contato, deixe a sua sugestão.

Alguns conceitos abordados de modo introdutório:  vetores, funções leaflet e ggmap, data.frame, geocodificação de endereços, class, str.

Artigo anterior : Leaflets, mapas com um novo visual em R

Artigo de apoio: Executando scripts no RStudio. Método Copia e Cola.

Gostou?  Espalhe a notícia! Compartilhe esse link.

O que é a Geocodificação ?

 

 

 

Um Mapa e Dados das Capitais do Brasil – Provedores de “Tiles” para Mapas – R para não Programadores – [2]

November 7, 2016 no comments Posted in R para não Programadores

No artigo anterior (Leaflets, mapas com um novo visual em R) de nosso modesto tutorial “R para Todos”,  mostramos como rapidamente podemos ter uma bela representação de mapas e localidade usando o pacote Leaflet para o R.

Aqui vamos apresentar que existe um universo de provedores de blocos de desenho de mapa. Perdoem a tradução, mas não encontrei nada melhor até agora para “TILES”.  O wiki do OpenStreetMaps fala em “Graphical Map Tiles”, que são tipicamente imagens de  256×256 pixels convertidas a partir de informações vetorizadas dos mapas. 

A criação desses “azulejos”é um processo trabalhoso que demanda softwares específicos que convertem os mapas base que são desenho em imagens, em geral mais graciosas. Observe na figura abaixo, o mapa da esquerda em sua versão vetorial e no na direita transformado via os tiles.

 

E vários desenvolvedores criaram versão variadas de tiles e se tornaram ‘servidores’ ou ‘provedores’de ’tiles’.

Do nosso ponto de vista, enquanto usuário final, o que nos interessa é saber onde procurar por novos provedores e como aplicar em nosso leaflet. Aqui uma lista de alguns http://wiki.openstreetmap.org/wiki/Tile_servers

e como usá-los?

Basta acrescentar a camada correspondente em nosso código anterior,

e nomo do provedor e modelo desejado. Nesse exemplo estamos usando uma mapa forte preto e branco, desenvolvido por Stamen (referências ao final).

e o resultado é impactante:

 

Um recurso poderoso é sobreposição de camadas, assim podemos realçar aspectos que não seriam percebidos com apenas um único esquema de visualização.

Vamos sobre uma mapa só de linhas ao padrão do addTiles:

 

 

e por fim um exemplo de como podemos controlar parâmetros extra como opacidade.

Duas camadas, uma no estilo aquarela e outra o mapa de linhas pretas que com opacidade de 50%, absorve os tons do mapa abaixo.

o código correspondente:

[R para Todos] é uma proposta didática de atrair progressivamente interessados a aprender a programar em R fora do contexto clássico da Estatística. A Estatística é claro estará sempre por perto nos guiando, mas a abordagem principal aqui será em aplicações menos orientada a matemática e mais a representação da informação. A tarefa é complicada, iremos tentar aos poucos. Entre em contato, deixe a sua sugestão ou dificuldade encontrada em reproduzir os exemplos.

Artigo anterior : Leaflets, mapas com um novo visual em R

 

Gostou?  Espalhe a notícia! Compartilhe esse link.

http://leafletjs.com/

https://rstudio.github.io/leaflet/

https://leaflet-extras.github.io/leaflet-providers/preview/

http://maps.stamen.com/#watercolor/12/37.7706/-122.3782

http://wiki.openstreetmap.org/wiki/Tile_servers