Introdução ao Data Mining
Instituto Nacional de Estatística 21-24 de Abril de 2009
André Falcão (afalcao@di.fc.ul.pt) Graça Gaspar (gg@di.fc.ul.pt)
Módulo 1 (p)
Introdução ao R
-Sumário
• História do S e do R
• Princípios básicos
• Manipulação de dados
• Operações estatísticas básicas
– Estatísticas essenciais
– Gráficos
© DI/FCUL
3
História do S e do R
• A linguagem S foi desenvolvida nos Bell Labs por John Chambers et al.
• O S é um ambiente e linguagem de alto nível para análise de dados e produção de gráficos
– O S existe como um sistema comercial (S-PLUS) (http://www.insightful.com)
• O R (http://www.r-project.org) é uma implementação livre da linguagem S (versão 4) com um ambiente gráfico de trabalho.
– Criado em 1997 na Universidade de Auckland (NZ) mas tem contribuições de muitas pessoas e organizações
– Grande parte dos módulos criados para o S e S-PLUS correm sem grandes modificações em R
– Quase todos os módulos e bibliotecas do R foram escritos em R!
O R é open source
• O que significa código aberto?
– Acesso completo aos algoritmos e ás implementações dos mesmos
– Liberdade total para correção de erros e estender o sistema com novas funcionalidades
• Sistema muito estável, robusto e com enorme precisão
– Resultados reproduciveis, uma vez que todos têm acesso ao software
© DI/FCUL
5
Vantagens e Desvantagens
• Rápdo e aberto
• Contém o estado da arte em estatística e data-mining (grande input por parte dos investigadores na área)
• Gráficamente excelente • Continuamente em
desenvolvimento (+de 800
packages)
• Dados têm que caber todos na RAM do computador
• É mais complicado
preparar e limpar os dados para análise
• Não é muito user friendly (se bem que o rattle e outros são um enorme passo em frente) • Não tem suporte
comercial
Como funciona o R...
• Pode ser iniciado como qualquer programa através do sistema operativo apropriado
• O R funciona através de instruções que são escritas em linha de comandos:
– Podem-se criar dados ou objectos e usar funções > a<-5
> b<-sqrt(a) > x<-c(1,2,3,4,5) > y<-sqrt(x)
• Tem um sistema de ajuda muito completo:
> help(função) > ?função
© DI/FCUL
7
Tipos de dados essenciais (I)
• Escalares > valor <- 42 > codigo<-"E325" • Vectores > serie<-c(1.0, 1.2, 1,5, 1.8, 2.1) • Listas
> prod1<-list(codigo="E325", nome="lapis", valor=42)
Tipos de dados essenciais (II)
• Matrizes e arrays
> mat<-matrix(1:12, 3, 4) > arr<-array(1:12, c(2,3,2))
• Data frames
> letras <- c("aleph", "beth", "guimel") > valores<-c(1,2,3)
© DI/FCUL
9
Entrada directa de dados
Entrada de dados para uma matriz
> mmat <- matrix(c(1, 0, 1, 4, 5, 6, 0, 2, 2), 3,3) > mmat <- t(mmat) #transposta
> inv.mmat<-solve(mmat) #inversa
Leitura directa
> y <- scan(what="") #vector de caracteres
Ambiente visual para inserção e manipulação
> dat <- data.frame(x=0., y=0., z=0.) > fix(dat)
Uso de dados de teste
O R tem disponível um conjunto de dados de teste:
> data() # lista todos os dados de teste disponíveis no R
> ?iris # descreve as características do conjunto de dados
> data(iris) #selecciona um determinado conjunto de dados
> attach(iris) # as variáveis passam a pertencer ao espaço de trabalho
> detach(iris) # remove as variáveis do espaço de trabalho
© DI/FCUL
11
Importação de dados
• Leitura de ficheiros de texto:
– mydat <- read.table("myfile")
– A primeira linha deve ter um nome para cada coluna. – Cada linha subsequente tem uma etiqueta a identificar cada
linha
• Importação directa do Excel
– Converter tabela para CSV e ler a data frame com
mydat <- read.csv("ficheiro.csv")
– Usar read.xls("ficheiro.xls")
> install.packages(xlsReadWrite) > library(xlsReadWrite)
> dat <-read.xls("ficheiro.xls")
Importação de Base de Dados
• Biblioteca RODBC – permite ligação a bases de dados
locais ou remotas através de ODBC
• Exemplo:
library(RODBC)
> #abrir a ligação odbc
> channel <- odbcConnect(dsn="BD_ORACLE", uid="utilizador", pwd="secreta", case = "oracle")
> #executar a interrogação > dat<- sqlQuery(channel,
© DI/FCUL
13
Manipulação de dados
A leitura de um ficheiro excel cria sempre um data frame (um conjunto de colunas com nomes
> dat <- read.csv("teste.csv")
Para aceder à informação de cada variável do data frame pode-se usar o '$':
> dat$x
Os dados podem ser manipulados em bloco.
> sq_x <- sqrt(dat$x) #vector com raízes quadradas > m.x <- mean(dat$x) # escalar com a média de x
Manipulação de dados (II)
Selecções dos dados podem ser feitas utilizando '[ ]'' Exemplos:
> dat<- data.frame(x,y,z) quais as linhas com y>0.5
> dat_best<- dat[dat$y>0.5,] só os xx cujo y correspondente é >0.5 > x_best<- dat[dat$y>0.5,]$x fazer a média dos valores de 'x' com tipo = 'A' > mean(dat[dat$tipo=='A',1])
© DI/FCUL
15
Função plot()
• a função plot é genérica e pode ser usada numa enorme variedade de contextos. Por exemplo:
> plot(iris[1:4], main="Dados da Iris", pch=21)
• O plot de vários objectos pode comportamentos específicos
Função plot()
> plot(iris[1:4], main="Dados da Iris", pch=21, bg = c("red", "green3", "blue") [unclass(iris$Species)])
© DI/FCUL
17
Gráficos
(todas as imagens provenientes de http://www.r-project.org)
Exemplo de sessão em R (I)
Teste de amostras > A<-c(5.3, 6.8, 8.1, 5.9, 7.3, 6.5) > B<-c(5.1, 6.3, 5.8, 4.9, 5.2, 5.1, 5.4) > boxplot(A,B) > t.test(A,B) > var.test(A,B) > wilcox.test(A,B) (Venables et al. 2004) Funções Utilizadas: • c() – concatenação de valores
• boxplot() – faz diagrama de "caixas de bigodes" • t.test() executa o teste t para comparação de amostras • var.test() - teste F para comparação de variâncias
© DI/FCUL
19
Exemplo de sessão em R (II)
> library(MASS) > x<-rnorm(500) > y<-rnorm(500) > truehist(c(1.5*y+3),nbins=25) > contour(dd<-kde2d(x,y)) > persp(dd, theta= 120, phi=35, expand=0.5)De Venables and Ripley(2000)
Funções Utilizadas:
• rnorm() cria um vector de dados aleatórios com distribuição normal • truehist() - faz histograma com área =1
• kde2d() faz estimação das densidades em 2D (gera uma superfície) • contour() - define um mapa de contornos para a superfície gerada • persp() - permite a visualização em 3D das densidades
Estatística univariada (I)
> data(airquality) > attach(airquality)
> hist(Wind,seq(0,22,3),prob=TRUE, main="Vento")
> rug(Wind)
Exemplo de uso de histogramas
Funções Utilizadas:
• hist() – faz um histograma, podendo receber uma sequência que define os intervalos
• seq(a,b,s) – faz uma sequência de 'a' a 'b', com passo 's' • rug – representa o 'tapete dos dados' na base do
© DI/FCUL
21
Estatística univariada (II)
plot(ecdf(Wind),do.points=FALSE, verticals=TRUE) x<-seq(0,22,0.1) lines(x,pnorm(x, mean=mean(Wind), sd=sqrt(var(Wind)))) ks.test(Wind,"pnorm",mean=mean(Wind), sd=sqrt(var(Wind))) Funções Utilizadas:
• ecdf() – gera uma função de distribuição cumulativa • seq(a,b,s) – faz uma sequência de 'a' a 'b', com passo 's' • lines() – junta pontos com linhas
• ks.test() – teste Kolmogorov-Smirnov
Exemplo de uso de Funçoes de distribuição
Interrogações OLAP em R
Matrizes de contingência (contagens por classe) são executadas através da função table)
> dat <-read.xls("adult.data.xls") > table(dat$race, dat$sex) Female Male Amer-Indian-Eskimo 119 192 Asian-Pac-Islander 346 693 Black 1555 1569 Other 109 162 White 8642 19174
© DI/FCUL
23
Interrogações OLAP em R (II)
Para utilizar outras funções (max, min, soma ou média) pode-se usar o tapply que aplica uma função a uma lista de dados
:
> tapply(dat$age, list(dat$race, dat$sex), mean) Female Male Amer-Indian-Eskimo 37.11765 37.20833 Asian-Pac-Islander 35.08960 39.07359 Black 37.85402 37.68260 Other 31.67890 34.65432 White 36.81162 39.65250
Interrogações OLAP em R (III)
Para fazer drill-down sobre os dados, uma solução é executar selecções prévias e depois fazer table ou tapply:
> datp <- dat[dat$Rend==" <=50K",] > datr <- dat[dat$Rend==" >50K",] > table(datp$race, datp$sex) > table(datr$race, datr$sex) Female Male Amer-Indian-Eskimo 107 168 Asian-Pac-Islander 303 460 Black 1465 1272 Other 103 143 White 7614 13085 Female Male Amer-Indian-Eskimo 12 24 Asian-Pac-Islander 43 233 Black 90 297 Other 6 19 White 1028 6089
© DI/FCUL
25
Bibliografia
• Venables, WN, Ripley DM (2002) Modern Applied
Statistics with S. Springer Verlag. New York
• R Development Core Team (2005) R Users Manual -http://www.r-project.org
• Venables, WN, Smith, Ripley DM and the R Development Core Team (2004). An introduction to R