informática aplicada faculdade de economia do porto1 data frames (tabelas) e matrizes may 2010

23
Informática Aplicada Faculdade de Economia do Porto 1 Data Frames (tabelas) e Matrizes May 2010

Upload: internet

Post on 21-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 1Informática Aplicada

Data Frames (tabelas) e Matrizes

May 2010

Page 2: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 2

Sumário

• Data Frames (tabelas)• Matrizes• Importar dados para R

Page 3: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 3Informática Aplicada

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 nota1 zé mat 122 ana inf 153 zé micro 104 zé inf 115 mi mat 176 ana mat 10

As colunas com valores categóricos foram convertidas em “factores”

aluno disc nota

zé mat 12

ana inf 15

zé micro 10

zé inf 11

mi mat 17

ana mat 10

Page 4: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 4Informática Aplicada

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 disc nota1 zé mat 122 ana inf 153 zé micro 104 zé inf 115 mi mat 176 ana mat 10

aluno disc nota

zé mat 12

ana inf 15

zé micro 10

zé inf 11

mi mat 17

ana mat 10

Page 5: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 5Informática Aplicada

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 $

Page 6: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 6Informática Aplicada

Selecção de Elementos de Data Frames

> notas$aluno[1] zé ana zé zé mi anaLevels: ana mi zé

> 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é

Page 7: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 7Informática Aplicada

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)

Page 8: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 8Informática Aplicada

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 disc nota ana:2 inf :2 10:2 mi :1 mat :3 12:1 zé :3 micro:1 15:1 17:1 18:1

aluno disc nota

zé mat 12

ana inf 15

zé micro 10

zé inf 11

mi mat 17

ana mat 10

Page 9: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 9Informática Aplicada

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?

Page 10: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 10

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.

Page 11: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 11

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)

Page 12: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 12

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

Page 13: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 13

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 p4loja1 23 12 76 34loja2 54 56 23 15

• E usar os nomes nos índices.

> m['loja2','p3'][1] 23

Page 14: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 14

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 % multiplicação de matrizes, [,1] [,2] [1,] 3 3 [2,] 3 3

Page 15: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 15

Outras operações com matrizes

> m1 [,1] [,2] [,3][1,] 1 1 1 [2,] 1 1 1Transposiçã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)> 1159Matriz inversa de uma matriz quadrada> solve(m3) [,1] [,2] [1,] 0.004314064 -0.03710096[2,] 0.019844694 0.02933563

Page 16: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 16

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 yeq1 -4.0 0.3eq2 54.3 -4.0> ys <- c(12.3,45)> solve(coefs,ys) x y 216.2069 2923.7586

4543.54

3.123.04

yx

yx

Page 17: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 17

Exercícios sobre matrizes

1. 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.

2. Qual o total global das vendas?

3. Qual o valor médio de vendas por cada mês e cada loja?

2. Como saber qual o volume de vendas médio de cada sucursal ao longo do ano? (use apply)

3. Construa um gráfico de barras com as vendas de uma das sucursais ao longo do ano.

4. 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.

Page 18: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Informática Aplicada Faculdade de Economia do Porto 18

RespostasSuponha 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')

Page 19: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 19Informática Aplicada

Importar conjuntos de dados

• R lê o formato “universal” csv (comma separated values)

> d <- read.csv('internet.txt')

Antes de usarmos o read.csv, devemos indicarao R qual é a pasta (directório) de trabalho.

pais,servico,ano,subscritoresBélgica,ADSL,1999,1000Dinamarca,ADSL,1999,800Suécia,ADSL,1999,0P. Baixos,ADSL,1999,0Áustria,ADSL,1999,900Finlândia,ADSL,1999,0Alemanha,ADSL,1999,5000Espanha,ADSL,1999,1848....

Page 20: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 20Informática Aplicada

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

Page 21: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 21Informática Aplicada

Exercícios

1. Obtenha os dados sobre a subscrição de banda larga na UE.

2. Utilize a função summary sobre o data frame correspondente.

3. Qual o número de subscritores de banda larga da UE em 2002?

4. 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.

5. Em que país, em que serviço e em que ano se registou o valor mais alto de subscritores? (use which.max)

6. 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)

7. 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.

8. 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.

9. Qual o país onde houve um maior crescimento relativo global em 2002?

Page 22: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 22Informática Aplicada

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.

Page 23: Informática Aplicada Faculdade de Economia do Porto1 Data Frames (tabelas) e Matrizes May 2010

Faculdade de Economia do Porto 23Informática Aplicada

Importação de dados de Access Exercício com dados sobre notas

Buscar a base de dados do Access “Alunos.mdb” no MoodleConstruir 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 usandonotas <- 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”