#Trabalho da disciplina de Ciclo de Vida e Introdução à Linguagem R
#REALIZADO PELOs PARTICIPANTES
#FLAVIO ADMILSON SANTOS DE SOUZA — MATRICULA: 202503699836
#Jennifer Coutinho de Souza —– MATRICULA: 202503699879
#Julyanne de Souza Teixeira —– MATRICULA: 202503700001
#Marcella Francisco da Silva Carrilio —– MATRICULA: 202503699976
#instala um pacote
#install.packages("tidyverse") #Manipulando o dataframe com tidyverse()
#Manipulando o dataframe com dplyr()
install.packages("dplyr")
install.packages("psych")
install.packages("readxl")
install.packages("ggplot2")
install.packages("readxl") #Importação de dados .xls para resultar em um dataframe
#importação da biblioteca --- CARREGAMENTO DOS PACOTES
# Para manipulação de dados
library(dplyr)
Anexando pacote: ‘dplyr’
Os seguintes objetos são mascarados por ‘package:stats’:
filter, lag
Os seguintes objetos são mascarados por ‘package:base’:
intersect, setdiff, setequal, union
library(readxl)## Alternativa mais robusta ao read.table
# Para análise estatística
library(psych)
# Para visualização
library(ggplot2)#analise de graficos barras
Anexando pacote: ‘ggplot2’
Os seguintes objetos são mascarados por ‘package:psych’:
%+%, alpha
library(corrplot) # Ótimo para visualizar matrizes de correlação
corrplot 0.95 loaded
#library(tidyverse)
#remover objetos da memória
#rm(sexo) #remove somente o objeto X
#———————————————————————– # ETL (Extração - Transformação - Carga) #———————————————————————–
#A fonte de dados é o arquivo “Tabela de atendimentos por convenio.xlsx”. - base de atendimentos onde transformei em um dataframe chamado teste2
#Importação de dados .xlsx, o resultado é um dataframe
install.packages("readxl")
library(readxl)
tabela_atendimentos<- read_excel("Tabela de atendimentos por convenio.xlsx")
is.data.frame(tabela_atendimentos)
#Importação de dados .xlsx, o resultado é um dataframe
install.packages("readxl")
library(readxl)
tabela_atendimentos2023<- read_excel("Tabela de atendimentos por convenio 2023.xlsx")
is.data.frame(tabela_atendimentos2023)
#verificando a estrutura
str(tabela_atendimentos)
tibble [37 × 15] (S3: tbl_df/tbl/data.frame)
$ Código : chr [1:37] "15" "44" "9" "73" ...
$ Convênio: chr [1:37] "Appai" "Particular" "Intermédica" "Bradesco" ...
$ Jan/2022: num [1:37] 241 193 48 69 53 51 39 34 11 17 ...
$ Fev/2022: num [1:37] 257 188 44 44 73 34 50 27 28 26 ...
$ Mar/2022: num [1:37] 342 259 77 70 84 46 70 38 27 29 ...
$ Abr/2022: num [1:37] 270 186 81 61 45 46 44 26 28 17 ...
$ Mai/2022: num [1:37] 293 225 74 76 59 60 69 40 38 23 ...
$ Jun/2022: num [1:37] 285 185 83 97 59 59 44 42 37 27 ...
$ Jul/2022: num [1:37] 291 198 86 67 48 81 64 37 30 29 ...
$ Ago/2022: num [1:37] 361 195 86 78 69 60 62 59 47 34 ...
$ Set/2022: num [1:37] 305 167 73 57 72 54 54 53 39 20 ...
$ Out/2022: num [1:37] 331 161 82 61 63 64 53 64 26 28 ...
$ Nov/2022: num [1:37] 292 134 79 73 33 48 50 50 32 37 ...
$ Dez/2022: num [1:37] 246 144 71 55 34 48 42 44 29 31 ...
$ Total : num [1:37] 3514 2235 884 808 692 ...
#———————————————————————– # Análise Exploratória de Dados básica #———————————————————————–
#Para visualizar o conteúdo dos dados importados
View(tabela_atendimentos)
teste2 <- tabela_atendimentos
is.data.frame(teste2)
[1] TRUE
#verificando a estrutura
str(teste2)
tibble [37 × 15] (S3: tbl_df/tbl/data.frame)
$ Código : chr [1:37] "15" "44" "9" "73" ...
$ Convênio: chr [1:37] "Appai" "Particular" "Intermédica" "Bradesco" ...
$ Jan/2022: num [1:37] 241 193 48 69 53 51 39 34 11 17 ...
$ Fev/2022: num [1:37] 257 188 44 44 73 34 50 27 28 26 ...
$ Mar/2022: num [1:37] 342 259 77 70 84 46 70 38 27 29 ...
$ Abr/2022: num [1:37] 270 186 81 61 45 46 44 26 28 17 ...
$ Mai/2022: num [1:37] 293 225 74 76 59 60 69 40 38 23 ...
$ Jun/2022: num [1:37] 285 185 83 97 59 59 44 42 37 27 ...
$ Jul/2022: num [1:37] 291 198 86 67 48 81 64 37 30 29 ...
$ Ago/2022: num [1:37] 361 195 86 78 69 60 62 59 47 34 ...
$ Set/2022: num [1:37] 305 167 73 57 72 54 54 53 39 20 ...
$ Out/2022: num [1:37] 331 161 82 61 63 64 53 64 26 28 ...
$ Nov/2022: num [1:37] 292 134 79 73 33 48 50 50 32 37 ...
$ Dez/2022: num [1:37] 246 144 71 55 34 48 42 44 29 31 ...
$ Total : num [1:37] 3514 2235 884 808 692 ...
#Manipulando o data frame
#toda a 5º linha
teste2 [5,]
# convertendo-o para um vetor primeiro
maior_valor_5linha <- max(as.matrix(dados_numericos), na.rm = TRUE)
#consultando uma coluna do dataframe
teste2["Convênio"]
#amostrando os valores maximos dos 20 primeiras linhas do nosso projeto de dados
head(teste2, 20)
# 5. Destacar os convênios com mais atendimentos em Janeiro
# O arrange(desc(...)) ordena do maior para o menor
top_20_convenios_jan <- teste2 %>%
arrange(desc(teste2$`Jan/2022`)) %>%
head(20)
print("Top 20 convênios em Janeiro/2022:")
[1] "Top 20 convênios em Janeiro/2022:"
print(top_20_convenios_jan)
#retorna os 6 últimos
tail(teste2,20)
# 6. Destacar os convênios com menos atendimentos em Janeiro
bottom_20_convenios_jan <- teste2 %>%
arrange(`Jan/2022`) %>% # Ordem crescente
head(20)
print("Os 20 Convênios com menos atendimentos em Janeiro/2022:")
[1] "Os 20 Convênios com menos atendimentos em Janeiro/2022:"
print(bottom_20_convenios_jan)
#listar objetos do dataframe
ls(teste2)
[1] "Abr/2022" "Ago/2022" "Código" "Convênio" "Dez/2022" "Fev/2022" "Jan/2022" "Jul/2022" "Jun/2022" "Mai/2022" "Mar/2022" "Nov/2022"
[13] "Out/2022" "Set/2022" "Total"
#listar objetos do dataframe
names(teste2)
[1] "Código" "Convênio" "Jan/2022" "Fev/2022" "Mar/2022" "Abr/2022" "Mai/2022" "Jun/2022" "Jul/2022" "Ago/2022" "Set/2022" "Out/2022"
[13] "Nov/2022" "Dez/2022" "Total"
dim(teste2)
[1] 37 15
#Representação de amostras de atendimentos realizados em janeiro de 2022 com amostra da totalização do mês
total_atendimentos <- teste2$`Jan/2022`
total_atendimentos <- table(total_atendimentos)
print(total_atendimentos)
total_atendimentos
0 1 2 3 4 6 7 8 9 10 11 12 16 17 22 34 39 48 51 53 69 193 241 875
9 2 2 3 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1
#resumo estatístico
summary(teste2)
Código Convênio Jan/2022 Fev/2022 Mar/2022 Abr/2022 Mai/2022
Length:37 Length:37 Min. : 0.0 Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00
Class :character Class :character 1st Qu.: 1.0 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 2.00 1st Qu.: 1.00
Mode :character Mode :character Median : 7.0 Median : 9.00 Median : 9.00 Median : 6.00 Median : 9.00
Mean : 47.3 Mean : 48.65 Mean : 65.19 Mean : 51.08 Mean : 60.54
3rd Qu.: 22.0 3rd Qu.: 27.00 3rd Qu.: 29.00 3rd Qu.: 28.00 3rd Qu.: 38.00
Max. :875.0 Max. :900.00 Max. :1206.00 Max. :945.00 Max. :1120.00
Jun/2022 Jul/2022 Ago/2022 Set/2022 Out/2022 Nov/2022 Dez/2022
Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.0 Min. : 0.00
1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.0 1st Qu.: 0.00
Median : 8.00 Median : 7.00 Median : 9.00 Median : 10.00 Median : 10.00 Median : 5.0 Median : 4.00
Mean : 58.38 Mean : 58.86 Mean : 65.95 Mean : 56.54 Mean : 60.38 Mean : 52.7 Mean : 46.11
3rd Qu.: 37.00 3rd Qu.: 32.00 3rd Qu.: 47.00 3rd Qu.: 39.00 3rd Qu.: 29.00 3rd Qu.: 33.0 3rd Qu.: 31.00
Max. :1080.00 Max. :1089.00 Max. :1220.00 Max. :1046.00 Max. :1117.00 Max. :975.0 Max. :853.00
Total
Min. : 1.0
1st Qu.: 11.0
Median : 93.0
Mean : 671.7
3rd Qu.: 372.0
Max. :12426.0
# 11. Realizar a análise de correlação entre os meses
# Usando o dataframe 'dados_numericos' que criamos
cor_resultado <- corr.test(dados_numericos, method = "pearson")
print(cor_resultado, short = FALSE) # 'short = FALSE' mostra mais detalhes
Call:corr.test(x = dados_numericos, method = "pearson")
Correlation matrix
Jan/2022 Fev/2022 Mar/2022 Abr/2022 Mai/2022 Jun/2022 Jul/2022 Ago/2022 Set/2022 Out/2022 Nov/2022 Dez/2022 Total
Jan/2022 1.00 1.00 1 1 1 1 1 1 1 1 0.99 1 1
Fev/2022 1.00 1.00 1 1 1 1 1 1 1 1 0.99 1 1
Mar/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Abr/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Mai/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Jun/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Jul/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Ago/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Set/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Out/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Nov/2022 0.99 0.99 1 1 1 1 1 1 1 1 1.00 1 1
Dez/2022 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Total 1.00 1.00 1 1 1 1 1 1 1 1 1.00 1 1
Sample Size
[1] 37
Probability values (Entries above the diagonal are adjusted for multiple tests.)
Jan/2022 Fev/2022 Mar/2022 Abr/2022 Mai/2022 Jun/2022 Jul/2022 Ago/2022 Set/2022 Out/2022 Nov/2022 Dez/2022 Total
Jan/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Fev/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Mar/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Abr/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Mai/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Jun/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Jul/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Ago/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Set/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Out/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Nov/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Dez/2022 0 0 0 0 0 0 0 0 0 0 0 0 0
Total 0 0 0 0 0 0 0 0 0 0 0 0 0
Confidence intervals based upon normal theory. To get bootstrapped values, try cor.ci
#———————————————————————– # Análise Exploratória de Dados com gráficos # Os gráficos serão exibidos na aba ‘Plots’ do RStudio ou em uma nova janela. #———————————————————————–
data <- as.matrix(dados_numericos)
heatmap(data)
# (Código para encontrar var1 e var2 continua o mesmo)
# ...
# Gráfico atualizado sem o aviso de depreciação
ggplot(teste2, aes(x = .data[[var1]], y = .data[[var2]])) +
geom_point(aes(color = Total), size = 4, alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE, color = "red") +
labs(
title = paste("Scatterplot de Maior Correlação:", var1, "vs", var2),
x = paste("Atendimentos em", var1),
y = paste("Atendimentos em", var2)
) +
theme_minimal()
#COMPARANDO 2 MESES DE ATENDIMENTOS MÉDICOS REALIZADOS, ONDE TIVEMOS O LEVE AUMENTO DO CONVÊNIO APPAI QUE EM JANEIRO TEVE MENOS ATENDIMENTOS DO QUE O NORMAL.
a <- dados_numericos$`Jan/2022`; b <- dados_numericos$`Fev/2022`
plot(a,b) #plotando com pontos
plot(a, b, type = "l") #agora com linha
#Ainda, é possível realizar mudanças nas características das linhas. Basta utilizar os comandos “lwd=” e “lty=” que modificam, respectivamente, a largura e o estilo da linha:
lines(a, 2*b, lwd = 4) #alterando a espessura da linha
lines(a, 0.5*b, lty = 2) #linha tracejada
lines(a, 3*b, lty = 3) #linha pontilhada
lines(a, 4*b, lty = 2, lwd = 4) #linha tracejada grossa
# 15. Histograma da variável 'Total'
ggplot(teste20, aes(x = Total)) +
geom_histogram(binwidth = 500, fill = "lightblue", color = "black") +
labs(title = "Distribuição do Total de Atendimentos Anuais por Convênio", x = "Total de Atendimentos", y = "Frequência (Nº de Convênios)") +
theme_classic()
# 16. Múltiplos Histogramas (usando o objeto 'dados_long' correto)
ggplot(dados_long, aes(x = Atendimentos, fill = Mes)) +
geom_histogram(binwidth = 20, show.legend = FALSE, color = "black") +
facet_wrap(~ Mes, scales = "free") + # Cria um mini-gráfico para cada mês
labs(title = "Histogramas de Atendimentos para Cada Mês",
x = "Nº de Atendimentos",
y = "Frequência") +
theme_light()
#Boxplot
x = c(teste2$`Jan/2022`)
y = c(teste2$`Fev/2022`)
z = c(teste2$`Mar/2022`)
boxplot(x,y,z) #para plotar no mesmo gráfico (comparação)
# --- Código para o Item 18 (com ordenação) ---
# Primeiro, resumimos os dados
atendimentos_mensais <- dados_numericos %>%
select(-Total) %>%
summarise_all(sum) %>%
pivot_longer(cols = everything(), names_to = "Mes", values_to = "Total_Atendimentos")
# Criamos um fator para ordenar os meses corretamente
ordem_meses <- c("Jan/2022", "Fev/2022", "Mar/2022", "Abr/2022", "Mai/2022", "Jun/2022",
"Jul/2022", "Ago/2022", "Set/2022", "Out/2022", "Nov/2022", "Dez/2022")
atendimentos_mensais$Mes <- factor(atendimentos_mensais$Mes, levels = ordem_meses)
# Agora, o gráfico de barras com a sintaxe corrigida e ordenado
ggplot(atendimentos_mensais, aes(x = Mes, y = Total_Atendimentos, fill = Mes)) +
geom_bar(stat = "identity", show.legend = FALSE) +
geom_text(aes(label = Total_Atendimentos), vjust = -0.5) +
labs(title = "Total de Atendimentos por Mês em 2022",
x = "Mês",
y = "Nº Total de Atendimentos") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
#amostrando os valores maximos dos 20 primeiras linhas do nosso projeto de dados
head(teste2, 20)
# 19. Gráfico de Pizza para os 10 Principais Convênios (sem a linha de Total)
# Prepara os dados
top_10_convenios <- teste2 %>%
filter(!is.na(Convênio)) %>% # <<< ESTA É A LINHA QUE REMOVE O N/A
arrange(desc(Total)) %>%
head(10) %>%
select(Convênio, Total)
# Cria o gráfico
ggplot(top_10_convenios, aes(x = "", y = Total, fill = Convênio)) +
geom_bar(stat = "identity", width = 1, color = "white") + # Adiciona uma borda branca
coord_polar(theta = "y") + # Transforma em pizza
geom_text(
aes(label = paste0(round(Total / sum(Total) * 100), "%")),
position = position_stack(vjust = 0.5), # Posiciona o texto no meio da fatia
color = "white", # Cor do texto para melhor contraste
size = 4
) +
labs(title = "Proporção de Atendimentos Anuais (Top 10 Convênios)") +
theme_void() + # Remove fundo, eixos e texto desnecessários
guides(fill = guide_legend(title = "Convênio")) # Mantém uma legenda clara
#———————————————————————– # Análise dos Dados #———————————————————————–
cat(“— Passo 20: Interpretação dos Gráficos —”,
” ### 20. Análise dos Dados e Interpretação dos Gráficos
A análise exploratória dos dados de atendimentos por convênio em 2022 forneceu os seguintes insights estratégicos:
Concentração de Volume em Poucos Convênios: Existe uma notável concentração de atendimentos. O gráfico de pizza (Item 19) demonstra que ‘Appai’ e ‘Particular’ sozinhos representam a maior parte do volume anual entre os 10 principais convênios. Isso indica uma alta dependência e importância estratégica desses dois parceiros.
Sazonalidade da Demanda: O gráfico de barras (Item 18) revela uma clara variação sazonal nos atendimentos ao longo do ano. Observam-se picos de demanda em Março e Agosto, com uma queda notável em Abril. Este padrão é fundamental para o planejamento de recursos, pessoal e estoque.
Consistência e Previsibilidade dos Convênios: O heatmap de correlação (Item 12) mostra coeficientes muito próximos de 1.00 entre todos os meses. Isso indica que os convênios mantêm seu volume relativo de forma consistente; um convênio com alto volume em janeiro provavelmente terá alto volume nos meses seguintes. Essa alta correlação confere previsibilidade ao faturamento por convênio.
Distribuição e Identificação de Outliers: Os boxplots (Item 17) confirmam visualmente a concentração de volume. A maioria dos convênios apresenta um número baixo e semelhante de atendimentos (representado pela ‘caixa’ do boxplot), enquanto alguns poucos, como ‘Appai’ e ‘Particular’, aparecem como outliers significativos na extremidade superior, reforçando sua importância estratégica.
Conclusão Estratégica: A análise sugere que a estratégia de negócio deve se concentrar em manter e fortalecer o relacionamento com os convênios de maior volume (‘Appai’ e ‘Particular’), ao mesmo tempo que se prepara para as flutuações sazonais de demanda, especialmente para os picos de Março e Agosto. ” “)
This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.
plot(cars)
Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).
The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.