230 likes | 386 Views
Data Frames ( tabelas ) e Matrizes. May 2010. Sumário. Data Frames ( tabelas ) Matrizes Importar dados para R. Criação de um Data Frame. Primeiro preparamos os vectores com os dados: > alunos <- c(' zé','ana','zé','zé','mi','ana ')
E N D
Data Frames (tabelas) e Matrizes May2010 Faculdade de Economia do Porto
Sumário • Data Frames (tabelas) • Matrizes • Importar dados para R Faculdade de Economia do Porto
Criação de um Data Frame Primeiropreparamososvectores 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) Depoiscriamos o data frame, indicandonomes de colunas e osvalores: > notas <- data.frame(aluno=alunos, disc=discs, nota=notas) > notas aluno disc nota 1 zé mat 12 2 anainf 15 3 zé micro 10 4 zéinf 11 5 mi mat 17 6 ana mat 10 As colunas com valorescategóricos foramconvertidasem“factores” Faculdade de Economia do Porto
Preparação fácil de Data Frame Primeiropreparamos um data frame vazio: > notas1 <- data.frame() Depoischamamos a função edit(..) parainserirosvalores (maneirainteractiva): notas1 <- edit(notas1) Se osvaloresestiverbemdigitados, teremos: > notas1 aluno disc nota 1 zé mat 12 2 anainf 15 3 zé micro 10 4 zéinf 11 5 mi mat 17 6 ana mat 10 Faculdade de Economia do Porto
Data frames e matrizes • Data frames • cadacolunapode ser vector ou factor • Matrizes • todososelementossão do mesmotipo • Indexação • idênticaem data frames e matrizes • masnos data frames podemosusarainda $ Faculdade de Economia do Porto
Selecção de Elementos de Data Frames > notas$aluno [1] zéanazézé mi ana Levels: 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 Quemtirounotasacima de 12? > notas$aluno[notas$nota>12] [1] ana mi Levels: ana mi zé Faculdade de Economia do Porto
Alterar elementos de data frames > notas[4,3] [1] 11 Mudaa nota do zédainformáticapara 18 > notas[4,3] <- 18 ou > notas$nota[4] <- 18 ou > notas$nota[notas$aluno=='zé'& notas$disc=='inf'] <- 18 masháumafunção com um interface simpático… > notas <- edit(notas) Faculdade de Economia do Porto
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 Faculdade de Economia do Porto
Exercícios • Veja as notas de informática • Quais os alunos que tiraram notas maiores do que 12 e a que disciplinas? • Calcule a média das notas • Calcule a média das notas de informática • Quantas notas maiores do que 12 houve a informática? • Qual a nota mais alta a matemática? • Quem tirou notas entre 12 e 16? Faculdade de Economia do Porto
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. Faculdade de Economia do Porto
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) Faculdade de Economia do Porto
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 Faculdade de Economia do Porto
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 Faculdade de Economia do Porto
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 Faculdade de Economia do Porto
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 Faculdade de Economia do Porto
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 Faculdade de Economia do Porto
Exercícios sobre matrizes • 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. Faculdade de Economia do Porto
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') Faculdade de Economia do Porto
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 indicar ao R qual é a pasta (directório) de trabalho. pais,servico,ano,subscritores 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 .... Faculdade de Economia do Porto
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 Faculdade de Economia do Porto
Exercícios • 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? Faculdade de Economia do Porto
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. Faculdade de Economia do Porto
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” Faculdade de Economia do Porto