LIVRO GRATUITO: ESTATÍSTICA PARA CIÊNCIA DE DADOS COM LINGUAGEM R

Listas

Uma lista é uma coleção ordenada de objetos conhecidos como os componentes da lista. Esses componentes não precisam ser do mesmo tipo, modo ou tamanho. Os componentes de uma lista em R são sempre numerados e podem também ter um nome associado a eles. Vejamos um pequeno exemplo de criação de uma lista em R (TORGO, 2006, tradução nossa).

> estudante <- list(nro = 34453, nome = “Carlos Silva”, notas = c(14.3, + 12, 15, 19))

O objeto estudante é uma lista formada por três componentes. Um é um número e tem o nome nro, outro é uma string e tem o nome nome, e o terceiro componente é um vetor de números com o nome notas. Podemos extrair componentes específicos de uma lista através da seguinte sintaxe (TORGO, 2006, tradução nossa):

> estudante[[1]]

[1] 34453

> estudante[[3]]

[1] 14.3 12.0 15.0 19.0

Listas possuem a peculiaridade de permitir dados de tipos distintos, ao contrário das estruturas anteriores. Isto torna este tipo de objeto mais interessante em situações onde é necessário manter uma estrutura de dados complexa que armazene vários tipos de dados.

Porém, ainda que a lista tenha utilidade em várias situações, o tipo de objeto que analistas utilizam com mais frequência é o que veremos a seguir.

Data Frames

“Um data frame é um objeto do R que é normalmente usado para guardar tabelas de dados de um problema qualquer. Na sua forma, um data frame, é muito semelhante a uma matriz, mas as suas colunas têm nomes e podem conter dados de tipo diferente, contrariamente a uma matriz. Um data frame pode ser visto como uma tabela de uma base de dados, em que cada linha corresponde a um registo (linha) da tabela. Cada coluna corresponde às propriedades (campos) a serem armazenadas para cada registo da tabela. Podemos criar um data frame da seguinte forma” (TORGO, 2006, tradução nossa):

>notas.inform <- data.frame(nros = c(2355, 3456, 2334, 5456), + turma = c(“tp1”, “tp1”, “tp2”, “tp3”), notas = c(10.3, 9.3, + 14.2, 15))

>notas.inform

nros turma notas

 1 2355 tp1 10.3

 2 3456 tp1 9.3

 3 2334 tp2 14.2

 4 5456 tp3 15.0

Os elementos de um data frame podem ser acessados como uma matriz:

>notas.inform[2, 2]

[1] tp1

Levels: tp1 tp2 tp3

Note que, além de fornecer o dado solicitado (o nome da 2ª turma), o interpretador R informa que há três “níveis” (levels). Isto ocorre em razão de o interpretador ter reconhecido que, na coluna “turma” do data frame, ocorrem somente três valores, “tp1”, “tp2” e “tp3”, de forma que este dado foi identificado como um dado categórico que classifica a informação. Esta “inteligência” é muito útil ao explorar dados desconhecidos a priori que precisam ser analisados, pois permite identificar rapidamente dados que refletem algum tipo de classificação como sexo, etnia, cidade, estado, país e outros dados comumente usados com este objetivo.

Perceba que o data frame foi criado a partir de vários vetores (nros, turma e notas). Poderíamos obter o mesmo resultado com as operações abaixo:

>nros = c(2355, 3456, 2334, 5456)

>turma = c(“tp1”, “tp1”, “tp2”, “tp3”)

>notas = c(10.3, 9.3, +14.2, 15)

>notas.inform <- data.frame()

>notas.inform<- cbind(notas.inform,nros)

>notas.inform<- cbind(notas.inform,turma)

>notas.inform<- cbind(notas.inform,notas)

A rigor, poderíamos simplificar as linhas que utilizam a função cbind() numa única linha de código:

>notas.inform <- data.frame(nros,turma,notas) 

A utilização da função cbind() serve para ilustrar a possibilidade de compor o data frame coluna a coluna, o que pode ser necessário em algumas situações. De forma semelhante, a função rbind() permite acrescentar linhas ao data frame.

Observe que, ainda que exija mais linhas de código para chegar ao mesmo resultado, a abordagem acima é mais legível para quem analisa o código, e pode ser mais interessante nos casos em que os dados que venham a compor o data frame precisem ser obtidos de fontes distintas (arquivos ou tabelas de bancos de dados diferentes, por exemplo).

Data frame é provavelmente o tipo de dado mais usado para análises de dados utilizando a linguagem R, pois permite uma analogia praticamente perfeita com os conjuntos de dados comumente encontrados nas empresas. Em geral estes dados estão em tabelas de bancos de dados, ou arquivos, ou ainda são coletados de fontes externas de outras empresas, da Internet, enfim. Em todos os casos, frequentemente é possível organizar estes dados em uma tabela que inclui dados de vários tipos, e neste tipo de situação o data frame é a escolha mais adequada para facilitar o tratamento e análise dos dados.

Data frames são tipos de dados que oferecem uma infinidade de recursos para facilitar o seu manuseio, desde filtros, “fatiamento” (slicing) e outros recursos muito interessantes que abordaremos gradativamente.

Além disso, a linguagem R traz um conjunto de dados de exemplos (os chamados datasets) que permitem explorar um universo muito interessante de dados e possibilidades de análise, desde informações sobre veículos automotivos (dataset mtcars) até informações sobre os passageiros do Titanic (dataset Titanic).

Vamos explorar um pouco o conjunto de dados sobre os passageiros do Titanic?

>?Titanic

This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

(…)

No  Name      Levels              

1  Class     1st, 2nd, 3rd, Crew

2  Sex       Male, Female        

3  Age       Child, Adult        

4  Survived  No, Yes

Como você pode observar acima, ao pedir a ajuda sobre o dataset Titanic, são fornecidas informações que explicam se tratar de um conjunto de dados sobre o fatídico acidente com o famoso navio, e que o conjunto de dados inclui informações sobre a classe dos passageiros (1ª, 2ª, 3ª classe e tripulação), sexo (masculino ou feminino), idade (criança ou adulto) e sobrevivente (sim ou não).

>df = as.data.frame(Titanic)

>df

Class Sex Age Survived Freq

1st Male Child No 0

2nd Male Child No 0

3rd Male Child No 35

Crew Male Child No 0

1st Female Child No 0

2nd Female Child No 0

3rd Female Child No 17

Crew Female Child No 0

1st Male Adult No 118

2nd Male Adult No 154

3rd Male Adult No 387

Crew Male Adult No 670

(…)

Observe que o conjunto de dados está organizado de modo a exibir a situação de cada “tipo” de passageiro. A primeira linha, por exemplo, indica que nenhuma criança do sexo masculino que viajava na primeira classe morreu (Class=1st, Sex=Male, Age=Child, Survived=No, Freq=0). Perceba que o campo “Freq” é um contador de frequência, ou seja, indica quantas vezes ocorreu aquele conjunto de condições. Este campo serve, neste exemplo, para demonstrar o quantitativo de passageiros sobreviventes ou não de maneira estratificada a partir de suas  características.

Para verificar o entendimento, observe a amostra do dataset acima e identifique quantas crianças do sexo masculino, que viajavam na terceira classe, não sobreviveram.

Observe agora que o dataset foi armazenado num objeto data frame (“df”) para que pudéssemos manipular o conjunto de dados e fazer algumas verificações, aproveitando as facilidades do objeto do tipo data frame.

>df$Freq

0

0

35

0

(…)

Veja que é possível fazer referência a qualquer coluna do data frame a partir do seu nome. Neste caso foi exibido o conteúdo da coluna “Freq”. Isto ocorre porque, no dataset Titanic, as coluna foram nomeadas. Caso contrário seria necessário fazer referência aos números que identificam cada uma das colunas, usando a notação df[,5] para obter o mesmo resultado (todos os elementos da coluna 5, que corresponde à coluna Freq).

Para atribuir nomes às colunas de um data frame, deve ser usada a função names():

>names(df) = c(“Class”, “Sex”, “Age”, “Survived”, “Freq”)

Também é possível usar as funções colnames() e rownames() para atribuir nomes às colunas e linhas, respectivamente, do data frame.

Na linguagem R, utiliza-se a denominação de observações e variáveis para o que comumente se chama de linhas e colunas em tabelas de bancos de dados. É muito importante entender esta nomenclatura, pois ela reflete bem o propósito analítico e estatístico da linguagem, em que cada conjunto de dados representa uma série de observações (linhas) sobre o comportamento de variáveis (campos ou colunas).

>dim(df)

1.32

2.5

A função dim() fornece as dimensões de um data frame, expressas em termos de observações (32) e variáveis (5). Esta função pode ser muito útil para dar uma ideia de volume e complexidade dos dados.

Além da função dim(), há várias outras funções bastante úteis para entender, explorar e analisar conjuntos de dados usando data frames.

>nrow(df)

32

>ncol(df)

5

>head(df)

Class Sex Age Survived Freq

1st Male Child No 0

2nd Male Child No 0

3rd Male Child No 35

Crew Male Child No 0

1st Female Child No 0

2nd Female Child No 0

>tail(df)

Class Sex Age Survived Freq

27 3rd Male Adult Yes 75

28 Crew Male Adult Yes 192

29 1st Female Adult Yes 140

30 2nd Female Adult Yes 80

31 3rd Female Adult Yes 76

32 Crew Female Adult Yes 20

>sum(df$Freq)

2201

Acima você pode notar que é possível obter o número de linhas (nrow()) e colunas (ncol()) do data frame, além de obter as primeiras (head()) ou as últimas (tail()) linhas do data frame. Além disso, a função sum() permite utilizar a coluna Freq do data frame para calcular a quantidade de passageiros do Titanic.

Por fim, temos as funções que permitem importar dados de arquivos e armazená-los em objetos data frame. Há suporte para arquivos do Microsoft Excel (read.xls()), SPSS (read.spss()), arquivos txt (read.table()), arquivos csv (read.csv()), arquivos com delimitadores (read.delim()), dentre outros.

Funções

Funções são trechos de código que são agrupados e recebem um nome para que possam ser executados com maior facilidade, especialmente nos casos em que aquele trecho de código é utilizado com muita frequência. Uma função tem um nome e pode receber parâmetros em R, sendo considerado também um objeto. Isso significa, entre outras coisas, que uma função pode ser passada como parâmetro para outra, um recurso muito útil em algumas situações de análise de dados.

quadrado <- function(x) {

  quad <- x * x

  return(quad)

}

quadrado(5)

Estruturas de Controle

A linguagem R fornece diversas estruturas que permitem controlar o fluxo de execução do código. Vejamos quais são elas.

x = 25

if (x < 10) {

  print(“Este número é menor que 10”)

} else {

  print(“Este número é maior ou igual a 10”)

}

A estrutura condicional if é muito usada em diversas linguagens de programação, e também está disponível em R.

x = 1

repeat {

  x = x + 3

  if (x > 99)

    break

  print(x)

}

A estrutura repeat também é muito comum em várias linguagens de programação, e permite repetir a execução de um trecho de código.

for (i in 1:20) {

  print(i)

}

for (q in c(10,20,30,40,50)) {

  print(q)

 }

A estrutura for também permite repetir a execução de um trecho de código, porém é uma estrutura mais controlada no sentido de que facilita a execução de uma quantidade determinada de repetições. Nos exemplos acima observamos que o uso da estrutura for é recomendado para situações em que desejamos repetir a execução do código enquanto uma variável muda de valor a cada iteração. Esta mudança de valor pode ser dentro de uma faixa de valores determinada ou variável, baseada numa lista resultante da execução de uma função, por exemplo.

x = 1

while(x < 5){

  x = x + 1

  print(x)

}

A estrutura while repete a execução de um trecho de código enquanto uma determinada condição for verdadeira, permitindo que a repetição seja feita uma quantidade indeterminada de vezes, conforme a condição permanecer válida.

Sintetizando

 

Neste capítulo pudemos obter conhecimento sobre plataformas de análise estatística de dados, além de permitir o primeiro contato com a linguagem R e suas ferramentas, em especial o RStudio.

 

Tivemos informações sobre plataformas de análise estatística de dados como SAS, Stata, SPSS, Orange, PSPP e R, as três primeiras softwares proprietários e as três últimas software livre.

 

Aprendemos que R é mais que uma linguagem de programação, graças ao conjunto de ferramentas desenvolvidas em torno da linguagem pela ativa comunidade de desenvolvedores e usuários da plataforma.

 

Vimos que R pode ser usada através da linha de comando, mas o RStudio é uma das melhores ferramentas para criar soluções de análise de dados, pois oferece um grande conjunto de recursos que facilitam e aceleram o processo de desenvolvimento de software com a linguagem R.

 

Exploramos, através de exemplos, os mais diversos recursos da linguagem R: operadores, variáveis, tipos de dados, objetos tais como vetores, matrizes, arrays, listas, data frames, além de funções e estruturas de controle.

 

Agora você tem um conhecimento acerca dos fundamentos da linguagem R e suas ferramentas que permitirá avançar com segurança para aprender sobre aspectos mais avançados da linguagem.

Tabela de Conteúdo

  • estatistica-para-ciencia-de-dados-com-linguagem-r
    • Apresentação
    • Dedicação
    • Autor
    • resumo
  • plataformas-análise-dados-estatísticas
    • Plataformas de análise estatística de dados
  • plataforma-linguagem-r
    • A plataforma R
    • Linha de comando
    • RStudio
    • Conseguindo ajuda
    • Explorando o
    • RStudio
    • Operadores
    • Variáveis e tipos de
    • Dados
    • Objetos
    • Vetor
    • Matrizes
    • Matrizes
    • Listas
    • Quadros de dados
    • Funções
    • Estruturas de controle
  • estatística para ciência de dados
    • Introdução à Estatística para Análise de Dados
    • Visualizando e descrevendo dados quantitativos
    • Estatística Descritiva x
    • Estatística Inferencial
  • medidas-dispersão-tendência-central
    • Visualização e
      Descrição de dados quantitativos
    • Definindo variáveis quantitativas discretas e contínuas
    • Medidas de tendência central – média
    • Medidas de Tendência Central – Mediana
    • Medidas de Tendência Central – Moda
    • Outras medidas de tendência central
    • Medidas de dispersão
    • Medidas de posição relativa – quartis e percentis
    • Gráficos para variáveis quantitativas
  • associações-correlação-causalidade
    • Análise bidimensional
      Associação entre
    • variáveis qualitativas
    • Medidas de associação entre variáveis qualitativas
    • Associação entre variáveis quantitativas
    • Medidas de associação entre variáveis quantitativas
    • Associação entre variáveis qualitativas e quantitativas
    • Analisando e interpretando gráficos de dispersão
      Atribuindo funções a variáveis de plotagem de dispersão
    • Noções básicas sobre correlação
    • Condições para análise de correlação
    • Correlação e Causalidade
  • probabilidade
    • Probabilidade conjunta
    • Probabilidade
    • Condicional e Independência
    • Tabelas de contingência
    • Árvores de probabilidade
  • regra-de-bayes-distribuições-probabilidade
    • Variáveis aleatórias e
    • Distribuições de probabilidade
    • Distribuição uniforme
    • Distribuição normal
    • Teorema do limite central
    • Distribuição Exponencial
    • Distribuição Qui-Quadrado
    • Distribuição t de student
    • Distribuição F
  • testes-hipótese-análise-variância-anova
    • Introdução à Inferência Estatística
    • Distribuições e proporções de amostragem
    • Testes de Hipóteses
    • Projeto de Experimentos e Análise de Variância (ANOVA)