Data Frames (tabelas) e Matrizes
May 2010
Informática Aplicada
Faculdade de Economia do Porto
1
Sumário
• Data Frames (tabelas)
• Matrizes
• Importar dados para R
Informática Aplicada
Faculdade de Economia do Porto
2
Criação de um Data Frame
Primeiro preparamos os vectores com os dados:
> alunos <- c('zé','ana','zé','zé','mi','ana')
> discs <- c('mat','inf','micro','inf','mat','mat')
> notas <- c(12,15,10,11,17,10)
Depois criamos o data frame, indicando nomes de colunas e os valores:
> notas <- data.frame(aluno=alunos, disc=discs, nota=notas)
> notas
aluno disc nota
aluno
disc
nota
1
zé
mat
12
zé
mat
12
2
ana
inf
15
3
zé micro
10
ana
inf
15
4
zé
inf
11
zé
micro
10
5
mi
mat
17
zé
inf
11
6
ana
mat
10
As colunas com valores categóricos
foram convertidas em “factores”
Informática Aplicada
Faculdade de Economia do Porto
mi
mat
17
ana
mat
10
3
Preparação fácil de Data Frame
Primeiro preparamos um data frame vazio:
> notas1 <- data.frame()
Depois chamamos a função edit(..) para inserir os valores (maneira
interactiva):
notas1 <- edit(notas1)
Se os valores estiver bem digitados, teremos:
> notas1
aluno
1
2
3
4
5
6
aluno disc nota
zé
mat
12
ana
inf
15
zé micro
10
zé
inf
11
mi
mat
17
ana
mat
10
Informática Aplicada
disc
nota
zé
mat
12
ana
inf
15
zé
micro
10
zé
inf
11
mi
mat
17
ana
mat
10
Faculdade de Economia do Porto
4
Data frames e matrizes
• Data frames
– cada coluna pode ser vector ou factor
• Matrizes
– todos os elementos são do mesmo tipo
• Indexação
– idêntica em data frames e matrizes
– mas nos data frames podemos usar ainda $
Informática Aplicada
Faculdade de Economia do Porto
5
Selecção de Elementos de Data Frames
> notas$aluno
[1] zé ana zé zé
Levels: ana mi zé
mi
ana
> notas$aluno[1]
[1] zé
> notas$notas
[1] 12,15,10,11,17,10
> notas$nota[1]
[1] 12
> notas$nota > 12
[1] FALSE TRUE FALSE FALSE
TRUE FALSE
Quem tirou notas acima de 12?
> notas$aluno[notas$nota>12]
[1] ana mi
Levels: ana mi zé
Informática Aplicada
Faculdade de Economia do Porto
6
Alterar elementos de data frames
> notas[4,3]
[1] 11
Muda a nota do zé da informática para 18
> notas[4,3] <- 18
ou
> notas$nota[4] <- 18
ou
> notas$nota[notas$aluno=='zé'& notas$disc=='inf'] <18
mas há uma função com um interface simpático…
> notas <- edit(notas)
Informática Aplicada
Faculdade de Economia do Porto
7
Algumas funções úteis
> nrow(notas)
[1] 6
> ncol(notas)
[1] 3
> colnames(notas)
[1] "aluno" "disc" "nota"
> rownames(notas)
[1] "1" "2" "3" "4" "5" "6" "7"
> mode(notas)
[1] "list"
> class(notas)
[1] "data.frame“
> summary(notas)
aluno
ana:2
mi :1
zé :3
disc
inf :2
mat :3
micro:1
Informática Aplicada
nota
10:2
12:1
15:1
17:1
18:1
Faculdade de Economia do Porto
aluno
disc
nota
zé
mat
12
ana
inf
15
zé
micro
10
zé
inf
11
mi
mat
17
ana
mat
10
8
Exercícios
1. Veja as notas de informática
2. Quais os alunos que tiraram notas maiores do que
12 e a que disciplinas?
3. Calcule a média das notas
4. Calcule a média das notas de informática
5. Quantas notas maiores do que 12 houve a
informática?
6. Qual a nota mais alta a matemática?
7. Quem tirou notas entre 12 e 16?
Informática Aplicada
Faculdade de Economia do Porto
9
Matrizes
•
•
Servem para guardar dados em duas dimensões.
Exemplo: guardar vendas de 4 produtos (p1, p2, p3, p4) em 2 lojas
diferentes (loja1, loja2)
– matriz de 2 linhas (lojas) e 4 colunas (produtos)
> m <- matrix(c(23,54,12,56,76,23,34,15), 2, 4)
> m
[,1] [,2] [,3] [,4]
[1,]
23
12
76
34
[2,]
54
56
23
15
•
Os elementos do vector c(…) são dispostos por coluna.
– podem ser dispostos por linha opcionalmente (fazer help(matrix))
•
•
Todos os elementos da matriz são do mesmo tipo
Uma matriz pode ser vista como um vector com duas dimensões.
Informática Aplicada
Faculdade de Economia do Porto
10
Matrizes
Se quiser preencher os valores em linha, pode acrescentar byrow=T:
m <- matrix(c(23,12,76,34, 54,56,23,15), 2, 4, byrow=T)
> m
[,1] [,2] [,3] [,4]
[1,]
23
12
76
34
[2,]
54
56
23
15
Existe uma maneira fácil de introduzir os dados de uma matriz:
m1 <- matrix(,2,4)
data.entry(m1)
Note que a função data.entry já faz a atribuição de valores à matriz m1)
Informática Aplicada
Faculdade de Economia do Porto
11
Matrizes
•
•
Usamos índices de forma semelhante aos vectores.
Exemplo: quais foram as vendas na loja2, produto p3?
– queremos o elemento da matriz na linha 2, coluna 3
> m[2,3]
[1] 23
• Todas as vendas da loja1 (o resultado é um vector)
> m[1, ]
[1] 23 12 76 34
• Todas as vendas do produto p3 (o resultado é um vector)
> m[ ,3]
[1] 76 23
Informática Aplicada
Faculdade de Economia do Porto
12
Nomes de linhas e colunas
•
>
>
>
Podemos dar nomes às linhas e às colunas.
colnames(m) <- c('p1','p2','p3','p4')
rownames(m) <- c('loja1','loja2')
m
p1 p2 p3 p4
loja1 23 12 76 34
loja2 54 56 23 15
• E usar os nomes nos índices.
> m['loja2','p3']
[1] 23
Informática Aplicada
Faculdade de Economia do Porto
13
Multiplicação de Matrizes
Operação rep(1, 6) gera uma sequência de 1’s (repetição 6 vezes)
> rep(1, 6)
1 1 1 1 1 1
• Para obtermos a multiplicação de matrizes, usamos %*%:
Exemplo:
> m1 <- matrix(rep(1,6), 2,3)
> m1
[,1] [,2] [,3]
[1,]
1
1
1
[2,]
1
1
1
> m2 <- matrix(rep(1,6), 3,2)
> m2
[,1] [,2]
[1,]
1
1
[2,]
1
1
[3,]
1
1
m1 %*% m2
[,1] [,2]
[1,]
3
[2,]
3
% multiplicação de matrizes,
3
3
Informática Aplicada
Faculdade de Economia do Porto
14
Outras operações com matrizes
> m1
[,1] [,2] [,3]
[1,]
1
1
1
[2,]
1
1
1
Transposição da matriz m1
> t(m1)
[,1] [,2]
[1,]
1
1
[2,]
1
1
[3,]
1
1
Determinante
> m3 <- martix(c(34,-23,43,5),2,2)
> det(m3)
> 1159
Matriz inversa de uma matriz quadrada
> solve(m3)
[,1]
[,2]
[1,]
0.004314064
-0.03710096
[2,]
0.019844694
0.02933563
Informática Aplicada
Faculdade de Economia do Porto
15
Exemplo: sistemas de equações lineares
• A função solve() também pode ser usada para resolver
sistemas de equações lineares:
• Exemplo:
>
>
>
>
coefs <- matrix(c(-4,54.3,0.3,-4),2,2)
colnames(coefs) <- c('x','y')
rownames(coefs) <- c('eq1','eq2')
coefs
x
y
eq1 -4.0 0.3
eq2 54.3 -4.0
> ys <- c(12.3,45)
> solve(coefs,ys)
x
y
216.2069 2923.7586
Informática Aplicada
Faculdade de Economia do Porto
 4 x  0.3 y  12.3

 54.3 x  4 y  45
16
Exercícios sobre matrizes
1.
2.
3.
2.
3.
4.
Suponha que pretende guardar as vendas nos 12 meses do último
ano das 2 sucursais de uma empresa. Escolha o objecto do R
apropriado e tire partido das potencialidades do R para facilitar o
acesso a esta informação.
Qual o total global das vendas?
Qual o valor médio de vendas por cada mês e cada loja?
Como saber qual o volume de vendas médio de cada sucursal ao
longo do ano? (use apply)
Construa um gráfico de barras com as vendas de uma das
sucursais ao longo do ano.
A função cbind(matriz, coluna) permite acrescentar colunas a uma
matriz, desde que tenham o número certo de elementos. Acrescente
à matriz que criou os dados de vendas de uma terceira sucursal.
Informática Aplicada
Faculdade de Economia do Porto
17
Respostas
Suponha que pretende guardar as vendas nos meses do último ano das 2
sucursais de uma empresa. Escolha o objecto do R apropriado e tire partido
das potencialidades do R para facilitar o acesso a esta informação.
> vendas <matrix(c(23,43,54,23,53,43,54,65,76,34,65,34,546,67,
+
35,45,56,57,34,34,46,56,57,678),2,12)
> colnames(vendas) <c('Jan','Fev','Mar','Abr','Mai','Jun','Jul',
+
'Ago','Set','Out','Nov','Dez')
> rownames(vendas) <- c('Braga','Faro')
Qual o total global de vendas?
> sum(vendas)
Como saber qual o volume de vendas médio de cada loja ao longo do ano?
> mean(vendas['Braga',])
> mean(vendas['Faro',])
Experimente esta alternativa:
> apply(vendas,1,mean)
tente também
>
apply(vendas,2,mean)
Construa um gráfico de barras com as vendas de uma das sucursais ao longo do
ano.
> barplot(vendas['Braga',],main='Vendas em Braga',
+
ylab='Volume de Vendas')
Informática Aplicada
Faculdade de Economia do Porto
18
Importar conjuntos de dados
• R lê o formato “universal” csv (comma separated
values)
pais,servico,ano,subscritores
> d <- read.csv('internet.txt')
Antes de usarmos o read.csv, devemos indicar
ao R qual é a pasta (directório) de trabalho.
Informática Aplicada
Faculdade de Economia do Porto
Bélgica,ADSL,1999,1000
Dinamarca,ADSL,1999,800
Suécia,ADSL,1999,0
P. Baixos,ADSL,1999,0
Áustria,ADSL,1999,900
Finlândia,ADSL,1999,0
Alemanha,ADSL,1999,5000
Espanha,ADSL,1999,1848
....
19
Exportar dados …
• do Excel
– save as csv
• alguns problemas: separador (;), caracteres com acentos…
– para o Access
• criar tabela com importação de dados (insert table)
• do Access
– export table (menu File)
– ODBC (Open DB Connectivity)
• standard que permite ligar “qualquer” programa a “qualquer” BD
relacional.
• O R tem um package ROBDC
Informática Aplicada
Faculdade de Economia do Porto
20
Exercícios
1.
2.
3.
4.
5.
6.
7.
8.
9.
Obtenha os dados sobre a subscrição de banda larga na UE.
Utilize a função summary sobre o data frame correspondente.
Qual o número de subscritores de banda larga da UE em 2002?
E qual é esse número apenas para o serviço “ADSL”? (sugestão: use
attach(dataframe) para poder referir-se às colunas de forma mais sucinta.
Em que país, em que serviço e em que ano se registou o valor mais alto de
subscritores? (use which.max)
Qual a evolução do serviço “CABO” em Portugal nos anos em estudo? (filtre
o dataset para as condições indicadas, faça um barplot)
Estude a evolução relativa dos dois serviços em Portugal, de 1999 a 2002,
construindo um gráfico (com plot), com um dos serviços no eixo do x e o
outro no eixo dos y.
Em que país houve o maior crescimento relativo em 2002, para o serviço
“ADSL”? E para o serviço CABO? sugestão: calcule o quociente entre dois
vectores com o número de subscritores, veja qual o índice do máximo, e
obtenha o nome do país com esse índice.
Qual o país onde houve um maior crescimento relativo global em 2002?
Informática Aplicada
Faculdade de Economia do Porto
21
Importação de dados Excel
Exercício com dados de investimento
Buscar a folha de Excel “Investimento_em_Portugal.xls” no
Moodle
Usar Excel para gerar um ficheiro
“Investimento_em_Portugal.csv”
No R, buscar os dados usando
invest.port <read.csv(“Investimento_em_Portugal.csv”,sep=“;”)
1. Calcular as médias dos investimentos para cada país e para os
anos 2001 e 2002.
2. Calcular as médias de investimento para Alemanha e Espanha
para 2002 e decidir qual era maior.
3. Elaborar um gráfico que mostra a evolução mensal de
investimento para Alemanha.
Informática Aplicada
Faculdade de Economia do Porto
22
Importação de dados de Access
Exercício com dados sobre notas
Buscar a base de dados do Access “Alunos.mdb” no Moodle
Construir no Access um consulta que una os dados das tabelas
Alunos, Notas e Disciplinas e que mostre os campos
cod_aluno, nome, disciplina e nota
Exportar a consulta para um ficheiro com o nome
“notas_de_alunos.csv”
(não esquecer de indicar include field names on first row)
No R, buscar os dados usando
notas <- read.csv(“notas_de_alunos.csv”,sep=“;”)
1. Calcular a média da disciplina “Microeconomia”
2. Calcular as médias do aluno “Artur Filipe Barroso” e da “Sofia
Marta Carvalho” e decidir sobre qual o melhor.
3. Elaborar um histograma que reflita a distribuição das notas da
disciplina de “Microeconomia”
Informática Aplicada
Faculdade de Economia do Porto
23
Download

Informática Aplicada