• Vera pormache Jesus Jeanpieer - 20240738
• Tineo Balcázar
Daniela Rosa - 20231510
• Solis Leon Nilo Andy - 20240734
•
Salazar Vásquez Ytzel Aleeza - 20240734
• Quispe Garcia Francisco
Alberto - 20240729
Como indica nuestro titulo nuestro grupo de estudiantes de la carrera de Estadistíca e ínformatica hemos llevado a cabo una encuesta entre mil estudiantes de la Universidad Nacional Agraria La Molina (UNALM) para conocer sus preferencias sobre videojuegos. La encuesta se centró en las franquicias más populares de Nintendo, como Super Mario, Pokémon, y Animal Crossing, entre otras.
Dado que las franquicias de Nintendo tienen una amplia influencia en la industria de los videojuegos, seleccionamos solo ocho de las más conocidas y queridas por los jugadores. Esta selección se basó en su popularidad y el impacto que han tenido en los jugadores a lo largo de los años.
para este analisis usamos los codigos y una idea de infografia creada en R por la Señorita Tania Shapiro.
Es una consultora independiente especializada en visualización de datos, auditoría de datos, elaboración de informes y paneles de control, además de impartir talleres y formación en estas áreas. La mayoría de sus proyectos los comparte en sus redes sociales o sitios web, como tashapiro_github, el de donde extraimos los codigos.
En la infografía, nuestra autora utilizó información de Wikipedia sobre los videojuegos más populares de Nintendo. Por otro lado, nuestro grupo diseñó una encuesta y trabajó con los datos de manera más específica, centrándonos en los estudiantes de la UNALM.
A continuación, presentamos los resultados de nuestra encuesta:
# Cargando paquetes
library(pacman)
p_load(dplyr, ggplot2, ggimage, ggtext, knitr,
flextable, foreign, gganimate,ggchicklet,
sysfonts, showtext, readxl)
#si no se puede descargar el paquete ggchicklet en tu version
#usar install_github("hrbrmstr/ggchicklet") que instala un paquete
#desde github
#lectura de datos
Nintendo <- read_excel('Nintendo_s.xlsx')
DT::datatable(Nintendo,
rownames = FALSE,
filter = "top",
options = list(pageLength = 10))
A continuación, presentamos una tabla que muestra el porcentaje de preferencia de los estudiantes de la UNALM por cada una de las franquicias de Nintendo incluidas en nuestra encuesta. Estas franquicias representan algunos de los títulos más icónicos en la industria de los videojuegos y ofrecen una variedad de experiencias, desde la aventura y la exploración hasta el entretenimiento en grupo. Esta tabla permite visualizar de manera rápida las tendencias y popularidad de cada franquicia entre los estudiantes.
Nintendo %>% count(franquicia) %>%
mutate(porcentaje = round(n / sum(n) * 100,1)) %>%
select(-n) %>% arrange(desc(porcentaje)) -> nintendo_1
nintendo_1 %>% flextable() %>% autofit() %>% add_header_lines()
franquicia | porcentaje |
|---|---|
Pokemon | 28.6 |
Super Mario | 22.0 |
Donkey Kong | 10.9 |
Animal Crossing | 10.2 |
The Legend of Zelda | 9.5 |
Xenoblade Chronicles | 8.1 |
Kirby | 6.7 |
Splatoon | 4.0 |
En esta sección mostraremos una infografía con los porcentajes obtenidos de las preferencias preferidas por los estudiantes de la UNALM
#importamos y configuramos fuentes de google fonts
sysfonts::font_add_google("Lato","Lato")
sysfonts::font_add_google("Roboto","Roboto", regular.wt=300) #regular.wt(configura el grosor de la fuente)
#¡Primero debes descargar Font Awesome localmente! https://fontawesome.com/download
# y buscar el archivo "font Awesome 6 Free-solid-900.otf" y llevarlo al directorio
# de trabajo
font_add('fs', 'Font Awesome 6 Free-Solid-900.otf') #"fs" es el nombre el cual vas a registrar la fuente
showtext_auto() #Activa el uso de fuentes personalizadas en gráficos.
#data frame para los botones
buttons<-data.frame(#Crea un df llamado buttons
x = c(-1.1,-0.4, -0.75, -0.75,#define la posicion horizontal
-0.75,7.5, #de cada boton para el eje x
7.15,7.85,7.5,7.5,
7.2),
y= c(2,2, 2.3, 1.7,#Define la posicion vertical de cada boton
3.2,2, #para el eje y
3.2,3.2,3.5,2.9,
1.2),
#define el tamaño de cada boton
size = c(rep(7,4),#los primero 4 botones tienen el valor 7
11,11,#los botones centrales(joystikcs) tienen tamaño 11
rep(7,4),#repite el valor "7" de los siguientes 4 botones
7),#el ultimo boton tendra valor 7
#Cada valor de este vector definira la funcion de cada boton
type = c("left_arrow","right_arrow","up_arrow","down_arrow","joystick_left","joystick_right",
"Y","A","X","B", "home"),
icon = c("<span style='font-family:fs'></span>",#<span style='font-family:fs'>...</span>
"<span style='font-family:fs'></span>",#define que icono utiliza la fuente registrada como fs
"<span style='font-family:fs'></span>",#, ...codigos html que representa flechas y otros iconos.
"<span style='font-family:fs'></span>",
rep("",6),#los 6 botones centrales no tienen iconos
"<span style='font-family:fs'></span>")#el ultimo icono es el boton home
)
#<span> y </span>:en HTML se usa para aplicar estilos o formateos a un texto o contenido en línea.
#El atributo style permite aplicar estilos CSS directamente a la etiqueta.
#font-family:fs indica que el contenido dentro de esta etiqueta usará una fuente llamada fs
#font-family:Es una propiedad CSS que define qué fuente debe usarse para mostrar texto.
#En este caso, fs es el nombre registrado para la fuente Font Awesome
#Título para trazar con geom_textbox
title<-paste0(#paste0 une cadenas de texto sin añadir separadores entre ellas.
"<span style='font-size:30pt;color:white;font-family:Lato;'>*FRANQUICIA DE VIDEOJUEGO FAVORITA EN LA UNALM*</span><br>",
"<span style='font-family:Roboto;font-size:20pt;color:#ECECEC;'>Basado en una encuesta realizada a casi 1000 estudiantes universitarios de la UNALM. Los resultados reflejan las preferencias actuales de franquicias de videojuegos. La encuesta se realizo en Noviembre del 2024.</span>"
)#font-size:30pt: El tamaño de la fuente es de 30 puntos.
#color:white: El color del texto es blanco
#font-family:Lato: Utiliza la fuente Lato, que debe estar previamente registrada en R con sysfonts::font_add_google
#font-family:Roboto: Usa la fuente Roboto
#font-size:20pt: Fuente ligeramente más pequeña
#color:#ECECEC: Color gris claro
games <- data.frame(#crea un df llamado games
rank = seq(1,8, by=1),#Genera una secuencia de números del 1 al 8, en incrementos de 1
#Representa el ranking de popularidad de las franquicias (1 = más popular, 8 = menos popular)
title = c("Pokemon", "Super Mario", "Donkey kong", "Animal Crossing", "The Legend of Zelda","Xenoblade Chronicles",
"Kirby","Splatoon"),
copies = c(28.6, 22.0, 10.9, 10.2, 9.5, 8.1, 6.7, 4.0),#Contiene los porcentajes de popularidad para cada franquicia
pos = rev(seq(1,3.325, length.out =8)),#Genera una secuencia de números desde 1 hasta 3.325, dividida en 8 partes iguales
#rev() invierte el orden
#Estos valores definen las posiciones verticales (y) donde se colocarán los elementos en el gráfico, desde abajo hacia arriba.
local = c("pokemon.jpg",
"mario.jpg",
"donkeyk.jpg",
"animalcrossing.jpg",
"zelda.jpg",
"xenoblades.jpg",
"kirby.jpg",
"splatoon.jpg")
)#Es un vector que contiene los nombres de archivos de imágenes asociados a cada franquicia.
#Tomado de StackOverflow de Kamil Slowikowski https://stackoverflow.com/questions/30136725/plot-background-colour-in-gradient
make_gradient <- function(deg = 45, n = 100, cols = blues9) {#deg=el angulo de la gradiente
#n=numero de divisiones por gradiente
#cols= colores a utilizar
cols <- colorRampPalette(cols)(n + 1)
#colorRampPalette(cols)
#Crea una función para generar una gradación suave entre los colores especificados en cols
#Genera n + 1 colores en la gradación.
rad <- deg / (180 / pi)#Convierte el ángulo en grados (deg) a radianes.
mat <- matrix(#Genera una secuencia en el eje x, escalada por el coseno del ángulo.
data = rep(seq(0, 1, length.out = n) * cos(rad), n),#seq(0, 1, length.out = n): Valores de 0 a 1 divididos en n partes iguales.
byrow = TRUE,#Llena las filas de la matriz.
ncol = n
) +
matrix(
data = rep(seq(0, 1, length.out = n) * sin(rad), n),
byrow = FALSE,
ncol = n
)
mat <- mat - min(mat)#Ajusta el valor mínimo de la matriz a 0.
mat <- mat / max(mat)#Ajusta el valor máximo de la matriz a 1
mat <- 1 + mat * n#Escala los valores en la matriz de 1 a n + 1
mat <- matrix(data = cols[round(mat)], ncol = n)#round(mat): Redondea los valores a enteros para usarlos como índices
#cols[...]: Busca el color correspondiente en el gradiente generado al inicio
grid::rasterGrob(#Crea un objeto gráfico tipo rasterGrob
image = mat,#Usa la matriz de colores como imagen
width = unit(1, "npc"),#Define el tamaño del gráfico como el 100% del espacio disponible
height = unit(1, "npc"),
interpolate = TRUE#Suaviza los bordes entre colores del gradiente.
)
}
g <- make_gradient(
deg = 230, n = 500, cols = c("black","#020024","#458d6b","#41644d","#eae640")
)
#deg=Especifica la dirección del gradiente en un ángulo de 230
#n=Define que el gradiente tendrá 500 divisiones o niveles de color.
#cols =Lista de colores que se interpolarán a lo largo del gradiente.
pal_screen = "white"#Define el color blanco como el color de la "pantalla" del gráfico.
pal_s_text = "black"#Color del texto que se superpone sobre la pantalla
pal_bar = '#099DFF'#Color de las barras horizontales que representan datos.
pal_main<-'#323436'#Color del fondo o marco del gráfico.
pal_red <-'#EE3E35'#Colores de los controles o partes
pal_blue <- '#00B1D2'#específicas que representan interacción
pal_button<-'#1E1E1E'#Color de los botones periféricos.
anchor<-1.4#Sirve como coordenada base para alinear textos y barras horizontalmente.
ggplot()+
annotation_custom(
grob = g, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf
)+
#control rojo
geom_rrect(mapping=aes(xmin=0-1.5, xmax=0.75, ymin=0, ymax=4),
r = unit(0.35, 'npc'), fill=pal_red, color="black", size=0.3)+
#control azul
geom_rrect(mapping=aes(xmin=6.75-0.75, xmax=6.75+1.5, ymin=0, ymax=4),
r = unit(0.35, 'npc'), fill=pal_blue, color="black", size=0.3)+
#panel pricipal
geom_rect(mapping=aes(xmin=0, xmax=6.75, ymin=0, ymax=4), fill=pal_main, color="black", size=0.3)+
#borde del panel
geom_rrect(mapping=aes(xmin=0.2, xmax=6.75-0.2, ymin=0.1, ymax=3.9),
r = unit(0.05, 'npc'), fill="black")+
#pantalla
geom_rect(mapping=aes(xmin=0.625, xmax=6.75-0.625, ymin=0.375, ymax=4-0.375), fill=pal_screen)+
#joystick
geom_point(data= buttons|>filter(type %in% c("joystick_left","joystick_right")), mapping=aes(x=x, y=y), size=13, color="#4C4C4C")+
geom_point(data= buttons|>filter(type %in% c("joystick_left","joystick_right")), mapping=aes(x=x, y=y), stroke=0.8, shape=3, size=8.7, color=pal_button)+
#botones redondos
geom_point(data= buttons|>filter(type!="home"), mapping=aes(x=x, y=y, size=size), color=pal_button)+
#texto para los botones
geom_text(data= buttons|>filter(type %in% c("A","X","Y","B")), mapping=aes(x=x, y=y, label=type), color="white")+
#misc button - home, square, plus, and line
geom_point(data=buttons|>filter(type=="home"), mapping=aes(x=x,y=y,size=size), shape=21, stroke=1.5, fill=pal_button, color="#808080")+
geom_point(mapping=aes(x=-0.45,y=1.2), size=6, shape=15, color=pal_button)+
geom_point(mapping=aes(x=-0.45,y=1.2), size=4, color="black")+
geom_point(mapping=aes(y=3.7, x=7), shape=3, size=2, stroke=2, color=pal_button)+
geom_segment(mapping=aes(y=3.7, yend=3.7, x=-0.15,xend=-0.35), color=pal_button, size=1.5)+
#iconos para los botones
geom_richtext(data=buttons|>filter(icon!=""), mapping=aes(x=x, y=y, label=icon), color="white", size=3, fill = NA, label.color = NA,hjust=0.5)+
scale_size_identity()+
#teja
geom_textbox(mapping=aes(x=3.75, y=4.75), label=title, box.size=NA, fill=NA, width=unit(6.5, "in"), halign=0.5)+
geom_text(mapping=aes(x=8.2, y=-0.65), label="Grupo 6: curso: Tecnica de Exploración de Datos ", color="#ECECEC", size=3, hjust=1, family="Roboto")+
scale_y_continuous(limits=c(-0.75,5.5))+
#datos del juego
geom_text(data=games, mapping=aes(y=pos-0.08, x=anchor, label=title), color=pal_s_text, hjust=0, size=4, family="Roboto")+
geom_segment(data=games, mapping=aes(y=pos-0.24, yend=pos-0.24, x=anchor, xend=anchor+(0.088*copies)), size=5, color=pal_bar)+
geom_text(data=games, mapping=aes(y=pos-0.24, x=anchor+0.1, label=paste0(round(copies,1),"%")), color="black", hjust=0, size=2.7, family="Roboto")+
geom_image(data=games, mapping=aes(y=pos-0.18, x=anchor-0.35, image=local), asp=1.6, size=0.02)+
theme_void()
Cada uno de las franquicias presentan características comunes en cada uno de sus juegos que se elaboran a lo largo de los años , lo que al analizarlas y relacionarlas con los porcentajes adquiridos anteriormente , gracias a la encuesta , podemos determinar las características que presentan los estudiantes Universitarios de la UNALM (Universidad Nacional Agraria la Molina)