Carregar os dados

Os dados podem ser encontrados em: https://github.com/fferegrino/yu-gi-oh/blob/main/data/cards.csv

Basta baixar o arquivo e carrega-lo no R.

cards <- read.csv("C:\\Users\\Gabriel Chileider\\Desktop\\CE303\\P1\\cards.csv")

View(cards)

Variáveis utilizadas.

Selecionaremos apenas as variáveis “name”,“atk”,“def”,“level”,“race” para fazer a análise. Após isso, renomearemos as colunas para facilitar a visualização e removeremos as cartas mágicas/armadilhas com Nível, Ataque ou Defesa como NA.

sub_cards <- cards[,c("name","atk","def","level","race")]

# Renomear as colunas
colnames(sub_cards) <- c("Nome","Ataque","Defesa","Nível","Raça")

# Remover cartas mágicas/armadilhas com Nível, Ataque ou Defesa como NA
sub_cards <- sub_cards[!is.na(sub_cards$Nível),]

Instalar e carregar pacotes necessários

Para fazer os gráficos necessitaremos do pacote ggplot2.

if (!require(ggplot2)) install.packages("ggplot2")
## Carregando pacotes exigidos: ggplot2
library(ggplot2)

Gráfico de barras da frequência dos níveis

sub_cards$intervalo_nivel <- cut(sub_cards$Nível, 
                                 breaks = seq(0, 14, by = 2),  
                                 right = FALSE)              

img2 <- ggplot(sub_cards, aes(x = intervalo_nivel)) + 
  geom_bar(fill = "red") + 
  labs(title = "Distribuição do nível dos monstros", 
       subtitle = "A quantidade de monstros em diferentes intervalos de nível.",
       x = "", y = "Frequência") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5), 
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        panel.grid = element_blank(),
        plot.title = element_text(hjust = 0.5, family = "Arial", face = "bold", size = 14),
        plot.subtitle = element_text(hjust = 0.5, family = "Arial", size = 12))+
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5, size = 5)+
  ylim(0, 4000)

img2

Gráfico de dispersão Ataque x Defesa para níveis 12 a 14

sub_cards_nivel_12_14 <- sub_cards[sub_cards$Nível %in% c(12, 13),]

img3 <- ggplot(sub_cards_nivel_12_14, aes(x = Ataque, y = Defesa)) + 
  geom_point() + 
  labs(
    title = "Ataque vs. Defesa (Níveis 12 e 13)", 
    subtitle = "Ataque e a defesa de cada monstro nos níveis 12 e 13.",
    x = "Ataque", y = "Defesa"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, family = "Arial", face = "bold", size = 14),
    plot.subtitle = element_text(hjust = 0.5, family = "Arial", size = 12),
    panel.grid = element_blank()  # Remove o grid
  )

img3

Tabela de frequência das raças

tabela_frequencia_raca <- table(sub_cards$Raça)
sort(tabela_frequencia_raca, decreasing = TRUE)
## 
##       Warrior       Machine         Fiend   Spellcaster        Dragon 
##          1055           949           814           696           687 
##         Fairy         Beast  Winged Beast          Aqua        Insect 
##           518           388           323           272           255 
##          Rock        Zombie Beast-Warrior         Plant       Psychic 
##           252           245           237           237           177 
##       Reptile       Cyberse          Pyro          Fish       Thunder 
##           174           171           152           141           138 
##      Dinosaur   Sea Serpent          Wyrm      Illusion  Divine-Beast 
##           134            87            85            23             5 
##   Creator-God 
##             1
# Top 5 raças
top5_racas <- names(sort(tabela_frequencia_raca, decreasing = TRUE)[1:5])
top5_racas
## [1] "Warrior"     "Machine"     "Fiend"       "Spellcaster" "Dragon"
sub_cards_top5 <- sub_cards[sub_cards$Raça %in% top5_racas,]

Gráfico de barras top 5 defesa

media_defesa <- aggregate(Defesa ~ Raça, data = sub_cards, FUN = mean)

top5_media_defesa <- media_defesa[order(media_defesa$Defesa, decreasing = TRUE),][1:5,]

cores_defesa <- c("Wyrm" = "blue", "Dragon" = "orange", "Illusion" = "red", 
                  "Rock" = "grey", "Divine-Beast" = "grey")  

img6 <- ggplot(top5_media_defesa, aes(x = reorder(Raça, -Defesa), y = Defesa, fill = Raça)) + 
  geom_bar(stat = "identity") +  
  labs(title = "As raças com maior média de Defesa", 
       x = "Raça", y = "Média de Defesa") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5, vjust=10), 
        axis.text.y = element_blank(),
        axis.title.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "none",
        panel.grid = element_blank(),
        plot.title = element_text(hjust = 0.5, family = "Arial", face = "bold", size = 14),
        plot.subtitle = element_text(hjust = 0.5, family = "Arial", size = 12)) +
  geom_text(aes(label = round(Defesa, 1)), vjust = -0.5, size = 5) +  
  scale_fill_manual(values = cores_defesa) +  
  scale_y_continuous(expand = c(0, 500))  

img6

Gráfico de barras top 5 ataque

media_ataque <- aggregate(Ataque ~ Raça, data = sub_cards, FUN = mean)

top5_media_ataque <- media_ataque[order(media_ataque$Ataque, decreasing = TRUE),][1:5,]

cores_ataque <- c("Wyrm" = "blue", "Dragon" = "orange", "Illusion" = "red", 
                  "Dinosaur" = "grey", "Sea Serpent" = "grey")

img5 <- ggplot(top5_media_ataque, aes(x = reorder(Raça, -Ataque), y = Ataque, fill = Raça)) + 
  geom_bar(stat = "identity") +  
  labs(title = "As raças com maior média de Ataque", 
       x = "Raça", y = "Média de Ataque") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5, vjust = 10), 
        axis.text.y = element_blank(),
        axis.title.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "none",
        panel.grid = element_blank(),
        plot.title = element_text(hjust = 0.5, family = "Arial", face = "bold", size = 14),
        plot.subtitle = element_text(hjust = 0.5, family = "Arial", size = 12)) +
  geom_text(aes(label = round(Ataque, 1)), vjust = -0.5, size = 5) +  
  scale_fill_manual(values = cores_ataque) +  
  scale_y_continuous(expand = c(0, 500))  

img5

Gráfico de dispersão Ataque x Defesa para as raças “Dragon”, “Illusion” e “Wyrm”

sub_cards_top3 <- sub_cards[sub_cards$Raça %in% c("Dragon", "Illusion", "Wyrm"),]

img7 <- ggplot(sub_cards_top3, aes(x = Ataque, y = Defesa, color = Raça)) + 
  geom_point(size = 2, alpha = 1) + 
  scale_color_manual(values = c("Dragon" = "orange", "Illusion" = "red", "Wyrm" = "blue")) + 
  labs(title = "Dispersão entre Ataque e Defesa",
       x = "Ataque", y = "Defesa") +
  theme_minimal() +
  theme(legend.position = "right",
        plot.title = element_text(hjust = 0.5, family = "Arial", face = "bold", size = 14),
        plot.subtitle = element_text(hjust = 0.5, family = "Arial", size = 12),
        axis.text.x = element_text(size = 10))


img7

grafico de setores

cartas_na <- sum(is.na(cards$level))

cartas_nao_na <- sum(!is.na(cards$level))


df_cartas_na <- data.frame(Tipo = c("Cartas Mágicas/Armadilha", "Monstros"), Quantidade = c(cartas_na, cartas_nao_na))


img1 <- ggplot(df_cartas_na, aes(x = "", y = Quantidade, fill = Tipo)) + 
  geom_bar(stat = "identity", width = 1) + 
  coord_polar("y") + 
  labs(title = "Tipo das cartas",
       x = "", y = "") +
  theme_void() +
  theme(plot.title = element_text(hjust = 1, family = "Arial", face = "bold", size = 14),
        plot.subtitle = element_text(hjust = 0.5, family = "Arial", size = 12)) +
  scale_fill_manual(values = c("Cartas Mágicas/Armadilha" = "red", "Monstros" = "orange")) +
  geom_text(aes(label = Quantidade), 
            position = position_stack(vjust = 0.5),  
            color = "white",  
            size = 5)  
img1