Introdução ao R

O QUE É R?

É um software livre para gráficos e computação estatística. Usa command-line scripting, podendo armazenar uma série de passos de análise de dados complexos, e que possibilita reuso do seu trabalho de análise.

Instalando R e RStudio

Para instalar o R e o RStudio, basta seguir este guia da UFPR

TIPOS DE DADOS

R é uma linguagem fracamente tipada e nela existem 5 tipos de dados: integer, numeric,character,logical e factor.

  • Integer, como o próprio nome já diz, é o tipo de dado em que se armazena números inteiros;
  • Numeric é onde se armazena valores numéricos de precisão (o famoso float);
  • Character é onde se armazena strings e caracteres;
  • Logical são para representação de valores booleanos;
  • Factor são usados para representar categorias.

Para guardar valores em uma variável no R, utilizamos <-, com a seta apontando para o nome da variável.

var1 <- “Guardians”

var2 <- 3

Para verificar a classe de uma determinada variável, é usada a função class() e para realizar comentários no código é utilizada a cerquilha.

class(3) # Retornará numeric

class(“abc”) # Retornará character

Importante: variáveis com números inteiros não são iniciados com o tipo integer, e sim com o tipo numeric ! Para que a variável seja inicializada já com o tipo integer, deve-se fazer:

inteiro <- 3L # Este L serve para mostrar para o R que este é um número do tipo inteiro

E para conversão de dados, utilizam-se as funções as.tipododado().

as.integer(3.0)

as.character(4)

as.integer(“oi”) # Não pode ser feito, retornará um erro.

Curiosidade: ao tentar realizar a operação as.logical(3) a função retornará true, assim como com outros números, porém se for feita a operação as.logical(0), a função retornará false.

OPERAÇÕES BÁSICAS

Estas são algumas das operações básicas que se tem no R:

Sinal Operação
+ Soma
Subtração
/ Divisão
^ Potenciação
* Multiplicação
sqrt() Raiz Quadrada
sd() Desvio Padrão
%>% Passa um data frame para uma função

ESTRUTURAS DE DADOS

1. Vetores: vetores são uma sequência simples de elementos do mesmo tipo. Quando definimos uma variável, é criado um vetor de um elemento.

var1 <- 3

is.vector(var1) # Retornará true

Para criarmos vetores com mais de um elemento, colocaremos os valores desejados dentro de um c()

var1 <- c(1,2,3,4)

Obs. Caso você tente misturar os tipos, o R forçará que todos os elementos sejam do mesmo tipo

var <- c(1,2,3,4,”batata”)

# Se você for visualizar a variável, o R terá convertido tudo para character

#[1] “1”      “2” “3”    “4” “batata”

2. Matrizes: correspondem às matrizes matemáticas, com linhas e colunas. Semelhante aos vetores, só podem ser de um tipo de dado.

mat <- matrix(c(1,2,3,4,5,6),nrow=3,ncol=2,byrow=TRUE)

Com esta linha de código acima, é possível criar uma matriz de 3 linhas e duas colunas, organizadas por linha e contendo números de 1 a 6.

var1 <- c(1,2,3)

var2 <- c(4,5,6)

mat <- rbind(var1,var2)

Com esta outra linha também é possível criar uma matriz, só que diferente da implementação anterior, estamos combinando dois vetores por linhas.

Obs. Não é possível combinar vetores de tamanhos diferentes e na primeira implementação, não é possível definir um números de linhas e colunas que não sejam múltiplos do tamanho do vetor passado no parâmetro.

Para acessar elementos em uma matriz, deve-se utilizar colchetes, informando primeiro a linha e depois a coluna.

m[1,2]

3. Listas: são um tipo especial de vetores, no qual pode-se colocar elementos de tipos diferentes, incluindo os próprios vetores.

lista <- list(c(1,2,3,4),c(T,F),c(“Guardians”,”>”,”Pet”))

Pode-se acessar um pedaço da lista indicando o índice dele

lista[1] # Irá retornar o pedaço da lista contendo o   primeiro vetor

Para acessar o elemento em si, deve-se acessar utilizando colchetes duplos

lista[[1]] # Retorna o primeiro elemento da lista em si

Para acessar um elemento dentro de um vetor contido na lista, deve-se usar colchetes duplos (para sinalizar qual o vetor desejado) seguido do índice do elemento procurado, também entre colchetes.

lista[[1]][2] # Retorna o segundo elemento do primeiro vetor da lista

Por último, nas listas é possível referenciar os elementos por nomes ao invés dos índices.

lista <- list(coiso1 = c(1,2,3), coiso2 = c(T,F,T))

lista[“coiso1”] # Retorna pedaço da lista que contém o vetor coiso1

Ou ainda referenciar utilizando o $

lista$coiso2 # Retornará o elemento referente ao vetor coiso2

Porém, mesmo nomeando os itens, ainda é possível acessá-los pelos índices normalmente.

4. Data Frames: é a estrutura do R utilizada para armazenar dados em forma de tabela, organizados por linha e colunas. (Agora que vai ficar legal)

Para criar um data frame, é necessário utilizar a função data.frame.

df <- data.frame(c(1,2,3),c(T,F,T))

Percebeu que os nomes das colunas ficaram estranhos? Para dar nomes às colunas do data frame pode-se usar a função names().

names(df) <- c(“numeric”,”logical”)

O R possui nativo vários data frames, que possuem como maior finalidade aprendizado e realização de testes, entre eles o há o mtcars.

data(mtcars) # Carrega o data frame

mtcars # Printa o df

names(mtcars) # Printa os nomes das colunas

str(mtcars) # Nos retorna a estrutura do df

head(mtcars) # Retorna os primeiros elementos

tail(mtcars) # Retorna os últimos elementos

mtcars$mpg # Retorna apenas os valores da coluna mpg

mean(mtcars$mpg) # Retorna a média dos valores desta coluna  

summary(mtcars) # Retorna a média, mediana, máximos, mínimos e quartis

Para selecionar dados no data frame também é utilizado colchetes, informando a linha e a coluna referente ao que é procurado. Pode-se selecionar também utilizando os nomes.

mtcars[1,2]

mtcars[“Lotus Europa”,”gear”]

mtcars[“Mazda RX4”,2]

INSTALAÇÃO DE PACOTES

O R, por ser open source, possui milhares de pacotes com diferentes funções. Para instalar um pacote, basta utilizar o comando install.packages(“nome do pacote”).

install.packages(“swirl”)

Para carregar um pacote, deve-se utilizar o comando library(pacote)

library(swirl)

Importante: como R é uma linguagem de linha de comando, sempre que você for precisar de um pacote para sua implementação, deve utilizar o library() com o pacote que você deseja, do contrário, não poderá acessar as funções da biblioteca. O mesmo acontece com tudo que já foi implementado no R script.

Uma boa prática de programação é declarar todos os pacotes utilizados em cada arquivo .R logo nas primeiras linhas do código.

Sugestão: execute os comandos acima, depois digite swirl() no console e veja a magia acontecer.

DPLYR E GGPLOT2

DLPYR

Em análise de dados, as bibliotecas dplyr e ggplot2 são indispensáveis. Para instalá-las, execute os seguintes comandos:

install.packages(dplyr)

install.packages(ggplot2)

O dplyr é uma biblioteca de manipulação de dados, com ela você pode realizar várias operações de manipulação, tais como: filtrar dados, sumarizar, selecionar,agrupar, entre outras coisas, já o ggplot2 é para visualização de dados, com ele pode-se montar vários tipos de gráficos com facilidade.

O dplyr possui alguns comandos básicos, tais como:

  • select()
  • filter()
  • mutate()
  • group_by()
  • summarise()

I) Operador %>%

Este operador encadeia as funções de modo que o programador   não precise ficar chamando uma função dentro da outra como em outras linguagens, tal como dados.getCarros().

Neste caso, o operador cria um fluxo sequencial de operações, tal que a chamada anterior irá gerar um resultado que será utilizado na operação seguinte.

mtcars %>% select(c(“mpg”,”cyl”)) %>% filter(cyl > 4)

Nesta linha, temos que o data frame mtcars será manipulado, e que nele serão feitas duas operações, uma seleção e uma filtragem. Na função select iremos selecionar apenas as colunas mpg e cyl e na função filter, filtramos os dados que possuam cyl > 4.

II) Select

A função select é utilizada para selecionar colunas em um data frame, por exemplo, se no data frame mtcars, quisermos apenas as colunas gear e carb, faremos:

mtcars %>% select(c(“gear”,”carb”))

Caso o objetivo seja excluir uma coluna do data frame, por exemplo a coluna gear de mtcars, basta fazer

mtcars %>% select(-gear)

III) Filter

A função filter é utilizada para filtrar as linhas que o programador deseja, por exemplo, caso o programador queira apenas os carros cujo cyl é maior do que 4, faríamos:

mtcars %>% filter(cyl > 4)

IV) Mutate

O mutate é uma função usada para criar novas colunas no data frame que você está manipulando, caso quiséssemos adicionar uma nova coluna em mtcars que seja o resultado da divisão entre mpg e cyl, faríamos:

mtcars <- mtcars %>% mutate(coluna = mpg/cyl)

V) Group by e Summarise

O group_by separa seus dados nos grupos que você selecionar, o summarise faz operações de agregação de linhas limitadas a esse grupo, por exemplo, se quiséssemos agrupar os dados por mpg e agregar a soma destes mesmos mpg, faríamos:

mtcars <- mtcars %>% group_by(mpg) %>% summarise(somas = sum(mpg))

Dica: O site do RStudio possui vários cheat sheets que facilitam o aprendizado, incluindo de dplyr e ggplot2, veja aqui.

Também tem alguns exemplos simples no github

Anúncios

Solução URI 1168 – Leds – C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char x[1110];
    int n,soma=0,i,j;
    scanf("%d", &n);
        for(i=0 ; i < n ; i++){
            scanf("%s", x);
                for( j=0 ; j < strlen(x) ; j++){
        if(x[j] == '1'){
            soma+=2;
        }
        else if(x[j] == '2'){
            soma+=5;
        }
        else if(x[j] == '3'){
            soma+=5;
        }
        else if(x[j] == '4'){
            soma+=4;
        }
        else if(x[j] == '5'){
            soma+=5;
        }
        else if(x[j] == '6'){
            soma+=6;
        }
        else if(x[j]== '7'){
            soma+=3;
        }
        else if(x[j] == '8'){
            soma+=7;
        }
        else if(x[j] == '9'){
            soma+=6;
        }
        else if(x[j] == '0'){
            soma+=6;
        }
                }
        printf("%d leds\n",soma);
            soma = 0;
        }
    return 0;
}

Solução URI 1555 – Funções #C

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n,x,y,r,b,c,i;
        scanf("%d",&n);
    for(i = 0 ; i < n ; i++){
        scanf("%d %d", &x, &y);
    r = (3*x) * (3*x) + y*y;
    b = 2*(x*x) + (5*y) * (5*y);
    c = -100*x + y*y*y;
    if(r > b && r > c){
        printf("Rafael ganhou\n");
    }
    else if(b > r && b > c){
        printf("Beto ganhou\n");
    }
    else if(c > r && c > b){
        printf("Carlos ganhou\n");
      }
    }
    return 0;
}

Solução URI 1051 – Imposto de Renda #C

#include <stdio.h>
#include <stdlib.h>
int main()
{
    float salario,x;
    scanf("%f", &salario);
    if(salario <= 2000.0) {
        printf("Isento\n");
    }
    else if(salario <= 3000.0 ){
        x = (salario - 2000.0)*0.08;
        printf("R$ %.2f\n", x);
    }
    else if( salario <= 4500.0){
        x = (salario - 3000.0)*0.18 + (1000*0.08);
        printf("R$ %.2f\n", x);
    }
    else {
        x = (salario - 4500)*0.28 + (1500*0.18) + (1000*0.08);
        printf("R$ %.2f\n", x);
    }
    return 0;
}

Solução URI 1129 – Leitura Ótica #C

O “for(j=0 ; j < 100 ; j++)” pode ser subtituído por um “while(1)” ou “while(true)”

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int j,i,n,a,b,c,d,e;
   /*menor ou igual a 127 =  preto;
     maior que 127 = branco */
    for(j = 0 ; j < 100 ; j++){
     scanf("%d", &n);
     if (n == 0){
        break;
     }
     else {
  for(i = 0 ; i < n ; i++){
   scanf("%d %d %d %d %d", &a,&b,&c,&d,&e);
   if(a <= 127 && b > 127 && c > 127 && d > 127 && e > 127 ){
    printf("A\n");
   }
   else if(a > 127 && b <= 127 && c >127 && d > 127 && e > 127){
    printf("B\n");
   }
   else if(a > 127 && b > 127 && c <= 127 && d > 127 && e > 127){
    printf("C\n");
   }
    else if(a > 127 && b > 127 && c > 127 && d <= 127 && e > 127){
    printf("D\n");
   }
   else if(a > 127 && b > 127 && c > 127 && d > 127 && e <= 127){
    printf("E\n");
   }
   else{
    printf("*\n");
   }
   }
     }
    }
    return 0;
}