O primeiro passa consiste em instanciar as bibliotecas a serem utilizadas:
library(xlsx)
library(dplyr)
library(stringr)
library(ggplot2)
library(waffle)
library(emojifont)
library(showtext)
library(extrafont)
library(scales)
library(cowplot)
library(DT)
library(kableExtra)
require(gridExtra)
library(gt)
library(tm)
library(SnowballC)
library(wordcloud2)
library(webshot)
#webshot::install_phantomjs()
library(htmlwidgets)
library(here)
library(rio)
A abordagem procedural consiste em repetir sequancialmente as tarefas, abaixo são demonstrados alguns passos, sendo que aqueles relacionados a elaboração de tabelas e gráficos devem ser repetidos a cada novo cruzamento avaliado. É feita a carga de dados e nomeação de colunas para facilitar a análise
dados = read.xlsx2(file = "Respostas.xlsx", sheetIndex = 1 , stringsAsFactors=F)
questoes = names(dados)
dados = dados[, 1:28]
names(dados) = c("ID", "Ok1", "Ok2","Idade", "Genero", "Escolaridade", "Tempo", "Setor", "Proposito", "SeSimQual",
"CanaisColaboradores", "QuaisCanais", "Mural", "SeNao", "SatisfeitoClarezaInfo", "SatisfeitoComCanais", "DurantePandemia", "SatisfeitoComClima", "ReceboFeedbacks", "ImportanteTreinamento", "IngressosCortesia", "DatasComemorativas", "BeneficiosEmpresa", "EngajadoEmpresa" , "CrachaFoto", "Motivado", "PrincipaisCampanhas", "SugestaoComunicacao")
glimpse(dados)
## Rows: 20
## Columns: 28
## $ ID <chr> "44827.71648148148", "44827.73061342593", "44827…
## $ Ok1 <chr> "Confirmo", "Confirmo", "Confirmo", "Confirmo", …
## $ Ok2 <chr> "Confirmo", "Confirmo", "Confirmo", "Confirmo", …
## $ Idade <chr> "36", "33 anos", "21", "31", "21", "23 anos", "5…
## $ Genero <chr> "Masculino", "Masculino", "Feminino", "Masculino…
## $ Escolaridade <chr> "Ensino fundamental completo", "Ensino médio com…
## $ Tempo <chr> "De 3 - 5 anos", "De 6 - 10 anos", "De 1 - 2 ano…
## $ Setor <chr> "Atendimento Bomboniere", "Atendimento Bombonier…
## $ Proposito <chr> "Sim", "Não", "Não", "Não", "Não", "Sim", "Sim",…
## $ SeSimQual <chr> "Gostaria que melhorasse o marketing da empresa…
## $ CanaisColaboradores <chr> "Sim", "Sim", "Sim", "Sim", "Sim", "Sim", "Sim",…
## $ QuaisCanais <chr> "WhatsApp", "WhatsApp", "WhatsApp", "WhatsApp, L…
## $ Mural <chr> "Sim", "Sim", "Sim", "Sim", "Sim", "Não", "Sim",…
## $ SeNao <chr> "", "", "", "", "Apenas questões que envolvam o …
## $ SatisfeitoClarezaInfo <chr> "5", "4", "2", "4", "4", "2", "5", "5", "4", "4"…
## $ SatisfeitoComCanais <chr> "5", "4", "2", "4", "3", "1", "5", "5", "4", "5"…
## $ DurantePandemia <chr> "5", "5", "5", "4", "5", "5", "5", "5", "3", "5"…
## $ SatisfeitoComClima <chr> "5", "5", "3", "3", "4", "3", "4", "4", "2", "3"…
## $ ReceboFeedbacks <chr> "5", "5", "2", "2", "5", "1", "5", "5", "2", "2"…
## $ ImportanteTreinamento <chr> "5", "5", "3", "5", "5", "5", "5", "5", "4", "4"…
## $ IngressosCortesia <chr> "5", "5", "5", "4", "5", "5", "5", "5", "5", "5"…
## $ DatasComemorativas <chr> "5", "5", "4", "1", "5", "3", "5", "4", "3", "4"…
## $ BeneficiosEmpresa <chr> "5", "4", "4", "1", "5", "4", "5", "4", "3", "5"…
## $ EngajadoEmpresa <chr> "5", "3", "3", "3", "5", "3", "5", "4", "5", "4"…
## $ CrachaFoto <chr> "5", "5", "3", "4", "5", "3", "5", "4", "3", "2"…
## $ Motivado <chr> "5", "4", "3", "4", "5", "4", "4", "4", "5", "4"…
## $ PrincipaisCampanhas <chr> "Deixa o cinema a caracter das datas. ", "Eu ac…
## $ SugestaoComunicacao <chr> "Estou satisfeito com desempenho do gnc. ", "Ac…
É feito o tratamento dos dados:
dados$Idade = str_remove_all(string = dados$Idade, " anos")
dados$Idade = str_remove_all(string = dados$Idade, "Porto Alegre ")
dados$Idade = as.numeric(dados$Idade)
Em uma primeira análise verifica-se a idade dos entrevistados:
hist(dados$Idade, col = "magenta", main = "Idade", xlab = "Idade", ylab = "Frequência")
Na sequência cria-se uma tabela cruzada com os dados de gênero dos entrevistados e um tráfico com os resultados
df = dados[, c(4:9, 11:13, 15:25)]
df$Idade = as.integer(if_else(is.na(df$Idade), mean(df$Idade, na.rm = 1), df$Idade))
df$Genero =if_else(df$Genero == "Masculino", 0, 1)
df$Escolaridade = if_else(df$Escolaridade == "Ensino fundamental incompleto", 1,
if_else(df$Escolaridade == "Ensino fundamental completo", 2,
if_else(df$Escolaridade == "Ensino médio incompleto", 3,
if_else(df$Escolaridade == "Ensino médio completo", 4,
if_else(df$Escolaridade == "Ensino superior incompleto", 5, 6)))))
df$Tempo = if_else(df$Tempo == "Menos de 1 anos", 1,
if_else(df$Tempo == "De 1 - 2 anos", 2,
if_else(df$Tempo == "De 3 - 5 anos", 3,
if_else(df$Tempo == "De 6 - 10 anos", 4, 5))))
df$Setor = if_else(df$Setor == "Atendimento Bomboniere", 1,
if_else(df$Setor == "Atendimento Bilheteria", 2,
if_else(df$Setor == "Atendimento Recepção", 3, 4)))
df$Proposito = if_else(df$Proposito == "Sim", 1,2)
df$CanaisColaboradores = if_else(df$CanaisColaboradores == "Sim", 1,2)
df$QuaisCanais = if_else(df$QuaisCanais == "WhatsApp", 1,
if_else(df$QuaisCanais == "WhatsApp, Ligação telefônica", 2,3))
df$Mural = if_else(df$Mural == "Sim", 1,2)
colunas<- names(df[, 9:20])
colunas
## [1] "Mural" "SatisfeitoClarezaInfo" "SatisfeitoComCanais"
## [4] "DurantePandemia" "SatisfeitoComClima" "ReceboFeedbacks"
## [7] "ImportanteTreinamento" "IngressosCortesia" "DatasComemorativas"
## [10] "BeneficiosEmpresa" "EngajadoEmpresa" "CrachaFoto"
df[colunas] <- sapply(df[colunas],as.numeric)
colunas<- names(df[ , c(1, 3:20)])
colunas
## [1] "Idade" "Escolaridade" "Tempo"
## [4] "Setor" "Proposito" "CanaisColaboradores"
## [7] "QuaisCanais" "Mural" "SatisfeitoClarezaInfo"
## [10] "SatisfeitoComCanais" "DurantePandemia" "SatisfeitoComClima"
## [13] "ReceboFeedbacks" "ImportanteTreinamento" "IngressosCortesia"
## [16] "DatasComemorativas" "BeneficiosEmpresa" "EngajadoEmpresa"
## [19] "CrachaFoto"
df[colunas] <- sapply(df[colunas],as.double)
head(df)
library(corrplot)
## corrplot 0.90 loaded
M<-cor(df)
corrplot(M, type="lower")
cor.mtest <- function(mat, ...) {
mat <- as.matrix(mat)
n <- ncol(mat)
p.mat<- matrix(NA, n, n)
diag(p.mat) <- 0
for (i in 1:(n - 1)) {
for (j in (i + 1):n) {
tmp <- cor.test(mat[, i], mat[, j], ...)
p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
}
}
colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
p.mat
}
p.mat <- cor.mtest(df) # matriz de p-valores
#col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
col <- colorRampPalette(c("#c42348", "#d91e36", "#da344d", "#ec5766", "#ef7674",
"#FFFFFF",
"#90e0ef", "#48cae4", "#00b4d8", "#0096c7", "#0077b6"))
corrplot(round(M,2), method="color", col=col(200),
type="upper", order="hclust", bg="#B5B5B5",
addCoef.col = "black", # Adicionando o coeficiente de correlação
tl.col="black", tl.srt=90, #Cor do texto e angulo
# Combinando com a significância
p.mat = p.mat, sig.level = 0.05, insig = "blank",
# Alta significancia como esperado será exibida na diagonal diagonal
diag=FALSE
)
library(RColorBrewer)
## Warning: package 'RColorBrewer' was built under R version 4.0.5
corrplot(M, order = 'AOE', addCoef.col = 'black', tl.pos = 'd',
p.mat = p.mat, sig.level = 0.01, insig = "blank",
cl.pos = 'n')
corrplot(round(M,1), method="color", col=col(200),
type="upper", order="hclust",
addCoef.col = "black", # Adicionando o coeficiente de correlação
tl.col="black", tl.srt=90, #Cor do texto e angulo
# Combinando com a significância
p.mat = p.mat, sig.level = 0.90, insig = "blank",
# Alta significancia como esperado será exibida na diagonal diagonal
diag=FALSE
)
r <- cor(df, use="complete.obs")
library(ggplot2)
library(ggcorrplot)
#ggcorrplot(r)
ggcorrplot(round(r,1),
hc.order = TRUE,
type = "lower",
lab = TRUE,
ggtheme = ggplot2::theme_dark(),
colors = c("#e63946", "white", "#219ebc"))
df = as.data.frame(table(dados$Genero))
df
ggplot(df, aes(fill = Var1, values = Freq)) +
geom_waffle(n_rows = 5, size = 0.33, colour = "white") +
scale_fill_manual(name = NULL,
values = c("#189AB4", "#D58BDD"),
labels = c("Masculino", "Feminino")) +
coord_equal() +
theme_void() +
ggtitle("Gênero")
Para evitar ficar repetindo código é feito o reuso através do uso de funções que executam funcionalidades repetidas inúmeras vezes. É importante ressaltar que reuso está muito ligado ao uso de classes e instâncias em programação orientada a objetos POO; embora seja um mode de desenmvolver aplicações de maneira virtuosa e organizada, para este propósito o reuso se dará apenas por meio de funções sem uso de POO.
Inicialmente é carregado o arquivo “funcoes.R” com as funções que automatizam os outputs como gráficos e tabelas
source(file = "funcoes.R")
As funções contidas no arquivo “funcoes.R” são as seguintes, sendo responsáveis por criar tabelas cruzadas e gráficos dos dados das referidas tabelas:
tabelaCruzada = function(banco, colunaUm, colunaDois){
as.data.frame(table(banco[, colunaUm],banco[, colunaDois]))
}
tabela = function(banco, nomes){
names(banco) = nomes
banco %>%
kbl(caption = paste0("<strong style='color:black;font-size:1.5em;'>",VariavelDeInteresse,"</strong>")) %>%
kable_material(c("striped", "hover"))
}
graficoUm = function(VariavelDeInteresse, titulo, banco){
ggplot(data=banco, aes(x=Var1,y=Freq,fill=factor(Var1))) +
geom_bar(position="dodge",stat="identity") +
coord_flip() +
ggtitle(VariavelDeInteresse) + ylab("Frequência") + xlab(VariavelDeInteresse) +
guides(fill=guide_legend(title="Alternativas")) +
scale_y_continuous(breaks = c(1:max(df1$Freq))) +
theme(text = element_text(size = 16))
}
graficoDois = function(VariavelDeInteresse, titulo, banco, parametro){
ggplot(data=df2, aes(x=Var1,y=Freq,fill=factor(Var2))) +
geom_bar(position="dodge",stat="identity") +
coord_flip() +
ggtitle(paste (VariavelDeInteresse,"de acordo com o", titulo)) + ylab("Frequência") + xlab(VariavelDeInteresse) +
guides(fill=guide_legend(title="Gênero"))+
theme(plot.margin=unit(c(0.5,0.5,1,.5), "cm"))+
scale_y_continuous(breaks = c(1:max(df2$Freq))) +
scale_fill_manual(values=c("#D58BDD","#189AB4", "#75E6DA", "#05445E", "#05445E", "#05445E", "#05445E"))+
theme(text = element_text(size = 15))
}
É definida a descrição da variável de interesse
VariavelDeInteresse = "Grau de Instrução"
Coluna = "Tempo"
Cria-se a primeira tabela:
df1 = tabelaSimples(dados, "Escolaridade")
tabela(banco = df1, nomes = c(VariavelDeInteresse, "Frequência"))
Grau de Instrução | Frequência |
---|---|
Ensino fundamental completo | 2 |
Ensino fundamental incompleto | 2 |
Ensino médio completo | 10 |
Ensino médio incompleto | 3 |
Ensino superior completo | 1 |
Ensino superior incompleto | 2 |
Cria-se a segunda tabela:
df2 = tabelaCruzada(dados,"Escolaridade","Genero")
tabela(banco = df2, nomes = c(VariavelDeInteresse, "Gênero", "Frequência"))
Grau de Instrução | Gênero | Frequência |
---|---|---|
Ensino fundamental completo | Feminino | 0 |
Ensino fundamental incompleto | Feminino | 1 |
Ensino médio completo | Feminino | 7 |
Ensino médio incompleto | Feminino | 0 |
Ensino superior completo | Feminino | 1 |
Ensino superior incompleto | Feminino | 1 |
Ensino fundamental completo | Masculino | 2 |
Ensino fundamental incompleto | Masculino | 1 |
Ensino médio completo | Masculino | 3 |
Ensino médio incompleto | Masculino | 3 |
Ensino superior completo | Masculino | 0 |
Ensino superior incompleto | Masculino | 1 |
São criados os gráficos um e dois períodos das tabelas criadas acima
plotUm = graficoUm(VariavelDeInteresse = VariavelDeInteresse, titulo = "teste", banco = df1)
plotDois = graficoDois(VariavelDeInteresse = VariavelDeInteresse, titulo = "Gênero", banco = df2, parametro = "Genero")
Cria-se o grid com os dois gráficos gerados:
plot_grid(plotUm, plotDois,
ncol = 1,
align = "v")
ggplot(data = dados) +
geom_bar(
mapping = aes(x = Genero, fill = Escolaridade),
position = "dodge"
)
require(ggplot2)
require(moonBook)
## Loading required package: moonBook
## Warning: package 'moonBook' was built under R version 4.0.5
##
## Attaching package: 'moonBook'
## The following object is masked from 'package:scales':
##
## comma
require(webr)
## Loading required package: webr
PieDonut(dados,aes(pies=Genero,donuts=Escolaridade))
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
PieDonut(dados,aes(pies=Genero,donuts=Escolaridade),ratioByGroup=FALSE)
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
## `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
PieDonut(dados,aes(pies=Genero,donuts=Escolaridade),selected=c(1,3,5),explodeDonut=TRUE)
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
## Warning: Ignoring unknown aesthetics: explode
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
Por fim é feita a exibição dos dados em uma tabela interativa com filtros e paginação
df2 %>% datatable(rownames = FALSE, colnames = c(VariavelDeInteresse, 'Gênero', 'Nº'), filter = 'top', options = list(pageLength = 5, autoWidth = TRUE))
## `summarise()` has grouped output by 'Escolaridade'. You can override using the
## `.groups` argument.