#install.packages("xlsx)
library(xlsx)
getwd()
[1] "C:/Users/Usuario/R_dados"
setwd("C:/Users/Usuario/R_dados")
Texto
x=read.csv(file.choose(),header = TRUE,sep=",")
x
x=read.csv("Credit.csv",header=TRUE,sep=",")
x
Excel
dados=read.xlsx("Credit.xlsx",sheetIndex=1)
dados
dados
Formação Cientista de Dados Limpeza e Tratamento de Dados
#importa dados, string vazio como NA, string como fatores...
dados=read.csv("Churn.csv",sep=";",na.strings = "",stringsAsFactors = T)
head(dados)
summary(dados)
X0 X1 X2 X3 X4 X4.1 X6 X7
Min. : 1.0 Min. :376.0 PR:257 F : 2 Min. :-20.0 Min. : 0.000 Min. : 0 Min. :1.000
1st Qu.: 251.5 1st Qu.:580.0 RP: 1 Fem : 1 1st Qu.: 32.0 1st Qu.: 2.000 1st Qu.: 0 1st Qu.:1.000
Median : 501.0 Median :653.0 RS:478 Feminino :461 Median : 37.0 Median : 5.000 Median : 8958835 Median :1.000
Mean : 500.9 Mean :648.6 SC:258 M : 6 Mean : 38.9 Mean : 5.069 Mean : 7164928 Mean :1.527
3rd Qu.: 750.5 3rd Qu.:721.0 SP: 4 Masculino:521 3rd Qu.: 44.0 3rd Qu.: 8.000 3rd Qu.:12586844 3rd Qu.:2.000
Max. :1000.0 Max. :850.0 TD: 1 NA's : 8 Max. :140.0 Max. :10.000 Max. :21177431 Max. :4.000
X8 X9 X10 X11
Min. :0.0000 Min. :0.0000 Min. :9.677e+03 Min. :0.0000
1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.029e+06 1st Qu.:0.0000
Median :1.0000 Median :1.0000 Median :8.703e+06 Median :0.0000
Mean :0.7027 Mean :0.5095 Mean :3.529e+07 Mean :0.2032
3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:1.405e+07 3rd Qu.:0.0000
Max. :1.0000 Max. :1.0000 Max. :1.193e+10 Max. :1.0000
NA's :7
#nomeando de forma correta os dados
colnames(dados)=c("Id","Score","Estado","Genero","Idade","Patrimonio","Saldo","Produtos","TemCartCredito","Ativo","Salario","Saiu")
head(dados)
Explorar Dados, colunas categóricas
#Estados
counts=table(dados$Estado)
barplot(counts,main="Estados",xlab="Estados")
#Gênero
counts=table(dados$Genero)
barplot(counts,main="Gêneros",xlab="Gêneros")
Explorar, colunas numéricas
#Score
summary(dados$Score)
Min. 1st Qu. Median Mean 3rd Qu. Max.
376.0 580.0 653.0 648.6 721.0 850.0
boxplot(dados$Score)
hist(dados$Score)
#Idade
summary(dados$Idade)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-20.0 32.0 37.0 38.9 44.0 140.0
boxplot(dados$Idade)
hist(dados$Idade)
summary(dados$Saldo)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 0 8958835 7164928 12586844 21177431
boxplot(dados$Saldo)
hist(dados$Saldo)
#dados faltantes - NAs
dados[!complete.cases(dados),]
summary(dados$Salario)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
9.677e+03 3.029e+06 8.703e+06 3.529e+07 1.405e+07 1.193e+10 7
median(dados$salario,na.rm=T)
NULL
dados[is.na(dados$Salario),]$Salario = median(dados$Salario,na.rm = T)
dados[!complete.cases(dados$Salario),]
NA
Falta de padronização em gênero
#ver resultado
summary(dados$Genero)
Feminino Masculino
464 535
Idades fora do domínio
summary(dados$Idade)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-20.0 32.0 37.0 38.9 44.0 140.0
#fora do domínio, numérico - ver idades anormais
dados[dados$Idade<0 | dados$Idade>110,]$Idade
[1] -10 -20 140
#não temos idade NAs
dados[is.na(dados$Idade),]
#preencher com a mediana
median(dados$Idade)
[1] 37
dados[dados$Idade<0 | dados$Idade>110,]$Idade=median(dados$Idade)
#buscamos novamente idades anormais
dados[dados$Idade<0 | dados$Idade>110,]
summary(dados$Idade)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0 32.0 37.0 38.9 44.0 82.0
Dados duplicados
#buscar duplicados pelo ID
x=dados[duplicated(dados$Id),]
x
#verificamos que o ID 81 está duplicado
#vamos excluir pelo ID não pelo indice
dados=dados[-c(82),]
dados=dados[!dados$Id %in% c(x$Id),]
#buscamos a linha que estava duplicada
dados[dados$Id==x$Id,]
#verificamos novemente os dados duplicados
x = dados[duplicated(dados$Id),]
x
NA
Estado fora do domínio
#fora do dominio - categorico
unique(dados$Estado)
[1] RS SC PR RP SP TD
Levels: PR RP RS SC SP TD
summary(dados$Estado)
PR RP RS SC SP TD
257 1 476 258 4 1
#preencher com a moda, RS
dados[!dados$Estado %in% c("RS","SC","PR"),]$Estado = "RS"
summary(dados$Estado)
PR RP RS SC SP TD
257 0 482 258 0 0
#removemos fatores não usados
dados$Estado = factor(dados$Estado)
#visualizar novamente
summary(dados$Estado)
PR RS SC
257 482 258
OUTLIERS XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#outliers, criando um parametro com desvio padrão
desv = sd(dados$Salario, na.rm = T)
desv
[1] 529250582
dados[dados$Salario >= 2 *desv , ]$Salario
[1] 11934688000 11563829000 1640178900 1119811900
#outra forma, resultado semelhante, mas sem os NAs
boxplot(dados$Salario)
boxplot(dados$Salario, outline = F)
x = boxplot(dados$Salario)$out
x
[1] 11934688000 11563829000 1640178900 1119811900
#atualizamos todos para mediana
median(dados$Salario)
[1] 8703250
dados[dados$Salario >= 2 *desv , ]$Salario = median(dados$Salario)
#checamos se sairam os outliers
dados[dados$Salario >= 2 *desv , ]$Salario
numeric(0)
summary(dados$Salario)
Min. 1st Qu. Median Mean 3rd Qu. Max.
9677 3073095 8703250 8834769 13909373 19972539
OUTLIERS XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
GRÁFICOS BÁSICOS
HISTOGRAMAS: Uma excelente forma de visualizar a distribuição dos dados, ou seja em quais intervalos existe maior ou menor ocorrência ou frequência de dados. No histograma na sua forma tradicional serve para mostrar apenas uma variável numérica de cada vez. Um histograma é uma espécie de gráfico de barras que demonstra uma distribuição de frequências. No histograma, a base de cada uma das barras representa uma classe e a altura representa a quantidade ou frequência absoluta com que o valor de cada classe ocorre.
trees
hist( trees$Height)
hist( trees$Height, main="Árvores", ylab="Frequência",xlab="Altura", col="blue")
hist( trees$Height, main="Árvores", ylab="Frequência",xlab="Altura", col="blue",
density=20, breaks=20 )
Densidade: Ao invés de ver a distribuição em forma de barra, passamos a ver através de uma linha mais suave. O gráfico de densidade mostra como os dados numéricos, agrupados em intervalos, são distribuídos entre os eixos X e Y. Para visualizar a densidade, isto é, visualizar em que medida os marcadores se sobrepõem totalmente, a configuração Por cor é usada.
densidade = density(trees$Height)
plot(densidade)
Densidade sobre o Histograma
hist(trees$Height, main=NULL, xlab=NULL, ylab = NULL)
par(new=TRUE)
plot(densidade)
DISPERSÃO: Ele é muito utilizado quando estamos comparando variáveis contínuas. Gráfico de Dispersão são utilizados para pontuar dados em um eixo vertical e horizontal com a intenção de exibir quanto uma variável é afetada por outra. Cada linha na tabela de dados é representada por um marcador cuja posição depende dos seus valores nas colunas determinados nos eixos X e Y.
plot(trees$Girth, trees$Volume)
plot(trees$Girth, trees$Volume, main="Árvores")
plot(trees$Girth, trees$Volume, ylab="Cirunferência", xlab="Volume", col="blue", main="Árvores")
#pch muda o elementog gráfico
plot(trees$Girth, trees$Volume, ylab="Cirunferência", xlab="Volume", col="blue", main="Árvores", pch=21)
Muda o tipo
plot(trees$Girth, trees$Volume, ylab="Cirunferência", xlab="Volume", col="blue", main="Árovres", pch=20, type="l")
Tremulação, diminui sobre posição dos pontos do gráfico
plot(jitter(trees$Girth), trees$Volume, ylab="Cirunferência", xlab="Volume", col="blue", main="Árvores")
Legenda com dimensão categórica: Este gráfico eu vou poder usar o IDC e Imput - acredito que seja uma ideia interessante.
CO2
plot(CO2$conc, CO2$uptake,pch=20, col= CO2$Treatment)
#"bottom", "bottomleft", "left", "topleft", "top", "topright", "right" and "center"
legend("bottomright",legend=c("nonchilled","chilled"),cex=1, fill=c("black","red"))
NOVOS DADOS: Quando eu chamo a função plot com um conjunto de dados com mais de uma variável numérica o resultado será uma matriz de gráficos de dispersão.
plot(trees)
DIVISÃO DE TELA
#Executar com crtl+shift+enter
split.screen(figs=c(2,2))
[1] 1 2 3 4
screen(1)
plot(trees$Girth, trees$Volume)
screen(2)
plot(trees$Girth, trees$Height)
screen(3)
plot(trees$Height, trees$Volume)
screen(4)
hist(trees$Volume)
close.screen(all=TRUE)
GRÁFICOS BÁSICOS II XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Continuação
BOXPLOT: ou diagrama de caixa é uma ferramenta gráfica que permite visualizar a distribuição e valores discrepantes (outliers) dos dados, fornecendo assim um meio complementar para desenvolver uma perspectiva sobre o caráter dos dados.
boxplot(trees$Volume, main= "Árvores", xlab = "Volume")
boxplot(trees$Volume, main= "Árvores", xlab = "Volume", col="blue", horizontal=TRUE )
boxplot(trees$Volume, main="Árvores", xlab = "Volume", col="blue",outline=F )
#notch
boxplot( trees$Height, main="Árvores", xlab = "Altura", col="blue", notch=TRUE )
#dados do gráfico
boxplot.stats(trees$Height)
$stats
[1] 63 72 76 80 87
$n
[1] 31
$conf
[1] 73.72979 78.27021
$out
numeric(0)
#lê apenas uma informação
boxplot.stats(trees$Height)$stats
[1] 63 72 76 80 87
VÁRIOS GRÁFICOS
boxplot(trees)
Agregação
InsectSprays
spray = aggregate(. ~ spray, data=InsectSprays,sum)
spray
Gráfico de Barras - novos dados
#Executar com ctrl+shift+enter
barplot(spray$count,col= gray.colors(6), xlab="Spray", ylab="Total", names.arg=spray$spray)
#box()
Gráfico de Setor - Pizza
Pizza com legenda
pie(spray$count,labels=NA, main="Spray",col=c(1:6))
legend("bottomright",legend=spray$spray ,cex=1, fill=c(1:6))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX TABELAS
install.packages ("stargazer")
library(stargazer)
Formato Latex (muito ulizado em trabalhos científicos)
stargazer(iris)
% Table created by stargazer v.5.2.3 by Marek Hlavac, Social Policy Institute. E-mail: marek.hlavac at gmail.com
% Date and time: seg, ago 01, 2022 - 15:07:17
\begin{table}[!htbp] \centering
\caption{}
\label{}
\begin{tabular}{@{\extracolsep{5pt}}lccccc}
\\[-1.8ex]\hline
\hline \\[-1.8ex]
Statistic & \multicolumn{1}{c}{N} & \multicolumn{1}{c}{Mean} & \multicolumn{1}{c}{St. Dev.} & \multicolumn{1}{c}{Min} & \multicolumn{1}{c}{Max} \\
\hline \\[-1.8ex]
Sepal.Length & 150 & 5.843 & 0.828 & 4.300 & 7.900 \\
Sepal.Width & 150 & 3.057 & 0.436 & 2.000 & 4.400 \\
Petal.Length & 150 & 3.758 & 1.765 & 1.000 & 6.900 \\
Petal.Width & 150 & 1.199 & 0.762 & 0.100 & 2.500 \\
\hline \\[-1.8ex]
\end{tabular}
\end{table}
Formato Html
stargazer(iris, type="html")
<table style="text-align:center"><tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Statistic</td><td>N</td><td>Mean</td><td>St. Dev.</td><td>Min</td><td>Max</td></tr>
<tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Sepal.Length</td><td>150</td><td>5.843</td><td>0.828</td><td>4.300</td><td>7.900</td></tr>
<tr><td style="text-align:left">Sepal.Width</td><td>150</td><td>3.057</td><td>0.436</td><td>2.000</td><td>4.400</td></tr>
<tr><td style="text-align:left">Petal.Length</td><td>150</td><td>3.758</td><td>1.765</td><td>1.000</td><td>6.900</td></tr>
<tr><td style="text-align:left">Petal.Width</td><td>150</td><td>1.199</td><td>0.762</td><td>0.100</td><td>2.500</td></tr>
<tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr></table>
Formato Texto
stargazer(iris, type="text")
===========================================
Statistic N Mean St. Dev. Min Max
-------------------------------------------
Sepal.Length 150 5.843 0.828 4.300 7.900
Sepal.Width 150 3.057 0.436 2.000 4.400
Petal.Length 150 3.758 1.765 1.000 6.900
Petal.Width 150 1.199 0.762 0.100 2.500
-------------------------------------------
Salva em Disco
stargazer(women, out="women.tex", summary=FALSE)
% Table created by stargazer v.5.2.3 by Marek Hlavac, Social Policy Institute. E-mail: marek.hlavac at gmail.com
% Date and time: seg, ago 01, 2022 - 15:07:34
\begin{table}[!htbp] \centering
\caption{}
\label{}
\begin{tabular}{@{\extracolsep{5pt}} ccc}
\\[-1.8ex]\hline
\hline \\[-1.8ex]
& height & weight \\
\hline \\[-1.8ex]
1 & $58$ & $115$ \\
2 & $59$ & $117$ \\
3 & $60$ & $120$ \\
4 & $61$ & $123$ \\
5 & $62$ & $126$ \\
6 & $63$ & $129$ \\
7 & $64$ & $132$ \\
8 & $65$ & $135$ \\
9 & $66$ & $139$ \\
10 & $67$ & $142$ \\
11 & $68$ & $146$ \\
12 & $69$ & $150$ \\
13 & $70$ & $154$ \\
14 & $71$ & $159$ \\
15 & $72$ & $164$ \\
\hline \\[-1.8ex]
\end{tabular}
\end{table}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX PACOTE LATICE É um pacote para visualização de produção de gráficos que já vem no R mas precisa ser carregado
library(lattice)
Boxplot
bwplot(trees$Volume)
bwplot(trees$Volume, main="Árvores",xlab="Volume")
Histograma Aspecto é a proporção, nint número de quebras, type: percent, count, density
Histograma condicional
#Peso das galinhas de acordo com alimentação
chickwts
#histrograma
histogram(chickwts$weight)
#agregamos dados
aggregate(chickwts$weight, by=list(chickwts$feed), FUN=sum)
#histograma condicional
histogram( ~weight | feed, data=chickwts)
Gráfico de dispersão condicional CO2, seis plantas em dois locais, refrigeradas ou não durante a noite
#CO2, conc: concentração de co2, uptake: captação de co2
CO2
xyplot(CO2$conc ~ CO2$uptake)
#type é a origem
xyplot(CO2$conc ~ CO2$uptake | CO2$Type)
#regrigerado ou não
xyplot(CO2$conc ~ CO2$uptake | CO2$Treatment)
Cancer de esofago agegp: idade, alcgp: alcool, tobgp: tabaco
esoph
dotplot(esoph$alcgp ~ esoph$ncontrols, data=esoph)
dotplot(esoph$alcgp ~ esoph$ncontrols | esoph$tobgp)
Matriz de dispersão
splom(~CO2[4:5] | CO2$Type, CO2)
Densidade condicional
densityplot(~CO2$conc | CO2$Treatment, plot.points=FALSE)
densityplot(CO2$conc)
densityplot(~CO2$conc | CO2$Treatment)
densityplot(~CO2$conc | CO2$Treatment, plot.points=FALSE)
Gráfico 3D Spray para repelir abelhas
OrchardSprays
cloud(decrease ~ rowpos * colpos, data=OrchardSprays)
cloud(decrease ~ rowpos * colpos, groups=treatment, data=OrchardSprays)
Level plot Circunferência, largura e volume de árvores
trees
levelplot(Girth ~ Height * Volume, data=trees)