0

linguagem R

A
Alfredo Neto

Recentemente, a Microsoft adquiriu a fornecedora Revolution Analytics, que é líder de softwares e serviços para a linguagem de programação R de código aberto. O interesse da Microsoft em adquirir este serviço reflete o interesse da comunidade, de forma que a linguagem R tem sido popularizada com o passar dos anos. Além da Microsoft, houveram contribuições da Oracle, que tem contribuído com pacotes R, além de fornecer o Oracle R Enterprise como um componente da Oracle Advanced Analytics. Devido ao presente suporte oferecido por grandes corporações, temos que o R oferece um valor comercial significativo para o mercado.


Por quê devemos utilizar o R?

A linguagem R foi criada com base na linguagem de programação S, criada na década de 70. O R foi criado como uma alternativa de código aberto por volta dos anos 90, sendo utilizada por cientistas, estatísticos e, mais recentemente, cientistas de dados como um meio conveniente para a análise exploratória de dados interativos. Ao contrário do que se imagina sobre a linguagem R, ela não é limitada a apenas sessões iterativas, pois devido ao fato de ser uma linguagem de programação, os scripts podem ser criados e empacotados como bibliotecas. As soluções com base em scripts fornecem resultados mais consistentes e confiáveis do que os fluxos de trabalho tradicionais, que requerem uma grande quantidade de interações manuais com uma interface gráfica de usuário.

Essa linguagem, muitas vezes, não é considerada como uma linguagem de programação, sendo mais comparada a um produto estatístico especializado, como é o caso do SAS. Este é um tema amplamente discutido quando se considera a manipulação de dados usando planilhas do Excel ou um banco de dados relacional como o servidor SQL. A linguagem R é mais usada para manipulação de conjuntos de dados de tamanho médio, análises estatísticas e produção de documentos e apresentações centradas em dados. Além disso, nos fornece uma ampla variedade de modelagens lineares e não lineares, testes estatísticos clássicos, análise de séries temporais, clustering, além de ser altamente extensível. Um dos pontos fortes do R é a facilidade que podemos ter com uma melhor qualidade em relação a plotagens bem desenhadas, inclusão de símbolos matemáticos e de fórmulas, quando estas passam a ser necessárias, já que o R é um conjunto integrado de facilidades de software voltado para manipulação de dados e exibição gráfica. Duas das maiores empresas presentes no mercado, Facebook e FourSquare, utilizam a linguagem R tanto para recomendações quanto para modelagem de comportamentos dos usuários.

A linguagem R é uma linguagem de programação dinamicamente tipada, ou seja, podemos modificar os tipos de dados contidos em variáveis em programas que já estejam em execução, com isso, temos uma melhoria na hora de programarmos, pois não precisaremos realizar conversões dos tipos de dados.

Trabalhando com o R

Para que possamos trabalhar com o R, precisaremos inicialmente fazer o download do instalador, o qual podemos fazer a partir do site oficial (vide seção Links). No pacote principal são disponibilizadas versões de linha de comando baseadas em texto, que é o r.exe, e o Rscript.exe, que foi projetado para ser usado em scripts e arquivos de lote CMD. Além disso também é disponibilizado o RGui.exe, que nos fornece uma interface de comando e uma interface gráfica para um melhor aproveitamento. Para uma melhor experiência, baixaremos também o Rstudio, que é a IDE utilizada para a linguagem R. Para realizarmos o download basta acessarmos o site oficial (vide seção Links).

Com o intuito de um melhor aproveitamento em relação ao entendimento do funcionamento do R, trataremos aqui algumas de suas funções básicas, assim como, apresentar alguns de seus pacotes mais utilizados. O R já vem com uma grande quantidade de pacotes pré-instalados, mas ainda assim, muitas vezes, precisamos adicionar pacotes mais específicos, o que pode ser realizado de duas possíveis formas: que são através de linha de comando, ou acessando o link “pacotes” presente no menu superior e, em seguida, selecionando a opção de “instalar pacotes”.

Ao tentarmos instalar um novo pacote, antes é apresentada uma janela na qual temos os espelhos de onde podemos realizar o download. Basta selecionar o que melhor lhe convier, o que no nosso caso, foi entre as opções presentes no Brasil, como podemos ver na Figura 1.


Espelhos de download de pacotes

Figura 1. Espelhos de download de pacotes.

Após instalarmos os pacotes, precisamos carregar os pacotes para trabalhamos com eles. Ao carregá-los, caso estes tenham dependências, estas serão carregadas sem que precisemos nos preocupar com sua instalação. Para que possamos instalar os pacotes através de linha de comando, fazemos isso da seguinte forma:

library(nome do pacote)

Ao criarmos uma variável, esta será seguida do símbolo “<-”, que indica que as informações passadas no lado direito do símbolo serão gravadas para esta variável. Um exemplo simples, seria a criação de um vetor no qual utilizaremos a função c() para indicar que será realizado um agrupamento de dados em forma de vetor, como podemos ver a seguir:

vetor<-c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

Claro que muitas outras funções são fornecidas, como é o caso da função sd(x), Range(x), rm(objeto), mas não as veremos nesse artigo.

Seguiremos agora com a instalação dos pacotes que serão necessários para o decorrer do nosso artigo, que serão os pacotes ggplot2 e o dply. O ggplot2 é uma implementação da gramática de gráficos para a linguagem R, que implementa um sistema de condicionamento multidimensional e uma interface consistente para o mapeamento dos dados a atributos estéticos. Já o dply é utilizado como uma ferramenta rápida e consistente para trabalharmos com conjuntos de dados como objetos. Para instalarmos os pacotes utilizaremos funções do próprio R, utilizando as linhas de comando. Podemos fazer da seguinte forma:

install.packages("dplyr")
  install.packages("ggplot2")

Com estes pacotes instalados precisaremos agora referenciá-los dentro do script no qual eles serão utilizados. As expressões R podem ser inseridas em um interpretador de linha de comando, de forma que já obtemos uma resposta imediata, como podemos observar no exemplo a seguir;

mean(c(8, 9, 3, 4))

Neste nosso primeiro exemplo temos a utilização de duas funções: c() e mean().

A função c() combina todos os seus argumentos num só vetor R, que é parecido a uma matriz em linguagens de programação. Já a função mean() retorna a média aritmética dos valores presentes no vetor, o que no nosso caso seria retornado o valor 6.

Para que possamos ver alguns dos recursos presentes nos pacotes que instalamos podemos utilizar o seguinte comando:

data(package='ggplot2')

Para que possamos ver os conjuntos de dados presentes no pacote, devemos utilizar a função head(), como podemos ver a seguir, onde primeiro especificamos o pacote e em seguida, a função desejada:

library(ggplot2)
  head(mpg)

Temos vários conjuntos de dados disponíveis, onde um deles é o movies, que contém dados referentes a filmes, como o título, ano, categoria, dentre outras informações. Outro conjunto de dados é o mpg, que apresenta a economia de combustível para 38 modelos de carros. Um outro exemplo simples que podemos ver seria a execução de uma regressão linear, de forma que precisaríamos especificar apenas as colunas x e y como argumentos da nossa função plot(), como mostra o seguinte exemplo onde utilizamos o conjunto de dados do mpg:

plot(mpg$displ, mpg$hwy)

Ao executarmos a função plot() uma nova tela é apresentada contendo o gráfico linear referente ao efeito do deslocamento do motor (displ) por milhagem de gás (hwy), como podemos ver apresentado na Figura 2.


Gráfico
demonstrativo dspl/hwy

Figura 2. Gráfico demonstrativo dspl/hwy.

Para expressarmos o modelo linear, podemos fazer isso com apenas duas linhas de código, como podemos ver a seguir:

mediaLinear<-lm(hwy ~ displ, mpg)
  summary(mediaLinear)

A função lm() é uma função de modelo linear, assim como análise de regressão linear. Já a função summary é utilizada para apresentar os resultados da operação, como podemos ver de acordo com a Figura 3.


Dados
apresentados com a função summary

Figura 3. Dados apresentados com a função summary.

Por último, para adicionarmos uma linha, apresentando o declínio gradual realizado pela função, utilizamos a função abline(), que pode aplicar uma ou mais linhas sobre a plotagem. Para isso passamos para ela três parâmetros, que são a fórmula utilizada - no nosso caso, mediaLinear -, uma cor para a linha, e por fim, a espessura, como podemos ver um exemplo a seguir:

abline(medialinear, col=’blue’, lwd=’6’)

Muitas vezes com a linguagem R podemos realizar a mesma tarefa de maneiras diferentes, como ao usar o pacote gráfico do ggplot2 para criar um estilo diferente do apresentado anteriormente. Dito isso, criaremos um novo exemplo utilizando o método geom_smooth que faz o cálculo de regressão linear internamente, como podemos ver na Listagem 1.

Listagem 1. Exemplo de dispersão dos pontos com o método stat_smooth().

library(ggplot2)
  ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_smooth(method="medialinear")

Claro que estamos apresentando os recursos apenas com a aplicação principal do R, mas se começarmos a utilizar o R em conjunto com R Studio teremos muito mais interação no desenvolvimento. O R Studio torna o trabalho com R ainda mais fácil, de forma a nos oferecer teclas de atalho, conclusões de código, gerenciamento de janelas, e interações gráficas que podem ser utilizadas ao invés das chamadas de funções complexas. A seguir, veremos um exemplo que mostra como podemos criar um histograma com um gradiente de cor com apenas quatro linhas de código. A plotagem gerada é um histograma que indica o número de classificações que aparecem no conjunto de dados.

Muito poucos estão a zero ou 10, enquanto que a maioria está em torno dos 5,9. Dessa forma, podemos ver que há um número maior de valores próximos à média, que aparece em vermelho, enquanto a cor varia gradualmente para verde nas extremidades inferior e superior do intervalo, onde há menos classificações. Para que possamos apresentar este exemplo precisamos que o nosso código seja parecido com o apresentado pela Listagem 2. O resultado do exemplo pode ser visto na Figura 4.

Listagem 2. Criando um exemplo de histograma para classificação de filmes.

library(ggplot2)
  ggplot(movies, aes(x=rating)) + geom_histogram(aes(fill = ..count..)) +
  scale_fill_gradient("quantidade", low = "green", high = "blue")

Histograma de classificação de filmes

Figura 4. Histograma de classificação de filmes.

O Rstudio também pode ser utilizado para criar documentos HTML ou mesmo PDF’s e apresentar templates HTML. Ele simplifica processos comuns como a exportação de imagens e a importação e exportação de arquivos de dados. Ele fornece visibilidade para uma grande quantidade de informações sobre o ambiente e os comandos executados do R de forma bastante interativa durante uma sessão. Como podemos observar, o rstudio possibilita um aumento ainda mais expressivo do R como um ambiente interativo para análises estatísticas, além de também aumentar a capacidade do R para apresentar, de forma mais simples, os conceitos complexos usando expressões simples ou mesmo interações.

Trabalhando com o R em lotes

Como bem sabemos, o R não está limitado a apenas execução interativa. Podemos ver que Scripts que envolvem uma série de chamadas de função também podem ser executados com ele, onde estes scripts são salvos com uma extensão do tipo ".R" por convenção. Na Figura 4, apresentada acima, pode ser gerada através da criação de um script, que podemos chamar de filmesTeste.R, contendo o código como podemos ver de acordo com a Listagem 3.

Listagem 3. Criando pacote com o R Studio.

library(ggplot2)
  ggplot(movies, aes(x=rating)) +
  geom_histogram(aes(fill = ..Quantidade..)) +
  scale_fill_gradient("Quantidade", low = "green", high = "blue")
  ggsave('filmes.png')

Como podemos observar, temos o mesmo código apresentado na Listagem 2, com a diferença de que temos aqui a introdução do método ggsave(), o qual é utilizado para que possamos salvar a imagem em um arquivo que chamamos de filmes.png. Esta imagem é criada ao chamarmos o script usando o Rscript.exe, em ambiente Windows. Uma observação a ser feita aqui é que dependendo do ambiente que esteja sendo utilizado, precisaremos especificar o caminho que contenha o executável do Rscript. O comando a ser utilizado é apresentado a seguir:

Rscript.exe filmes.R

Ao utilizarmos a linguagem R, podemos muitas vezes nos sentirmos frustrados, como programadores, devido a simplicidade que o R oferece em muitas das situações, como por exemplo, ao utilizarmos a função c(), que além de ser curta e não descritiva, apresenta resultados consistentes, de forma que este é apresentado ao lado de um array, [1], devido ao fato de seu resultado ser também um vetor de comprimento e o numeral 1 indica que o índice de valor é exibido. A linguagem R não tem, no entanto, noção de valores primitivos independentes, de forma que um valor em particular é um único elemento contido dentro de um vetor. Com relação aos tipos de dados utilizados, estes são importantes, mas não explicitamente chamados como em linguagens de tipagem estática. As conversões de tipo de dados ocorrem de forma automática. Isso ocorre, devido ao fato disso poder ser extremamente útil, mas também confuso. No nosso próximo exemplo, utilizaremos o booleano True, de forma a avaliarmos se a informação é 1 ou não, sendo que estaremos incluindo tantos valores inteiros quanto decimais, como podemos ver a seguir:

mean(c(9.0, 9, 8, TRUE))

O que nos retorna um valor de 6.75. Como podemos perceber, o R faz necessariamente o que queremos que ele faça, contanto que tenhamos um código bem escrito. Além disso, o R é utilizado de forma interativa envolvendo o cruzamento de dados que nos ajuda a identificar o código problemático. Além disso, as bibliotecas de terceiros podem esconder muitos detalhes de baixo nível da linguagem. A biblioteca dplyr utiliza um operador (%>%) para transmitir os resultados de uma função, como podemos ver no exemplo a seguir, onde o conjunto de dados de filmes é filtrado para selecionar apenas filmes de comédia com mais de 120 minutos de duração e que foram lançados no ano de 2005. O título e a classificação desses filmes serão exibidos, como podemos ver de acordo com a Listagem 4.

Listagem 4. Exemplo de filtro de filmes.

library(dplyr)
  movies %>%
  filter(year == 2005 & Comedy == 1 & length > 115) %>%
  select(title, rating)

Como podemos ver, temos que os dados foram apresentados no formato de linhas e colunas, de forma que podemos utilizar a sintaxe do dplyr para mapas utilizando conceitos do SQL, além de podermos utilizar essa biblioteca com base em dados relacionais baseado em dados do SQL Server. Hoje, temos que a linguagem R conta com mais de 5000 pacotes disponíveis para utilização de forma gratuita no CRAN, além de vários outros pacotes disponibilizados através do GitHub. Estes pacotes geralmente oferecem APIs simplificadas que funcionam como linguagens de domínio especificas para especialistas que trabalham em determinadas áreas. Devido à flexibilidade de trabalharmos com o R, e a natureza da língua, podem ser encontrados pacotes inconsistentes e mal estruturados. Mas o que importa é que grande parte dos pacotes disponibilizados estão se tornando mais consistentes em sua estrutura e função. Um dos criadores, Hadley Wickham, disponibilizou uma série de pacotes relacionados a manipulação de dados, plotagem e criação de pacotes para a linguagem R. As bibliotecas ggplot2 e dplyr, que tratamos no decorrer do artigo foram bons exemplos da qualidade oferecida nas bibliotecas.

A linguagem R é uma linguagem bastante peculiar, porém, poderosa e propícia a ambientes estatísticos que estão realizando incursões em locais onde o processamento de dados se torna cada vez mais sofisticado. Podemos realizar tarefas simples com a passagem de uma função, ou mesmo, duas, de forma a suprir necessidades matemáticas e processamentos de dados mais rebuscados. Contudo, o R continuará crescendo no quesito popularidade entre os profissionais de TI, desde que haja uma necessidade referente a produção de informações, sendo apresentadas de forma confiável e também eficiente, o que será dado a partir de uma quantidade enorme de informações a serem processadas. Com isso, finalizamos mais este artigo, onde além de introduzirmos uma parte conceitual sobre a linguagem R, apresentamos esses conceitos através de alguns exemplos simples, oferecidos pelo próprio R como pacotes de exemplos. Esperamos que tenham gostado. Até a próxima!

0
0

Comentários (0)

alfredo gelk neto

Brasil