En este informe, se analizarán los datos de ventas de videojuegos con el objetivo de realizar inferencias estadísticas. Exploraremos el proceso de obtención de datos, limpieza y realizaremos pruebas de hipótesis sobre diversas variables.
Los datos utilizados en este análisis fueron obtenidos de [Kaggle] https://www.kaggle.com/datasets/gregorut/videogamesales. El proceso de obtención de datos incluyó la selección de la fuente, descarga en formato CSV, exploración inicial y limpieza.
Importar base de datos(dataset):
# Importar base de datos
ventasjuegos <- read.csv("C:/Users/janoa/OneDrive/Escritorio/vgsales.csv")
View(ventasjuegos)
3.1 Cambio de Nombres de Columnas
Antes del cambio de nombres de columnas:
# Visualización de las primeras filas
head(ventasjuegos)
## Rank Name Platform Year Genre Publisher NA_Sales
## 1 1 Wii Sports Wii 2006 Sports Nintendo 41.49
## 2 2 Super Mario Bros. NES 1985 Platform Nintendo 29.08
## 3 3 Mario Kart Wii Wii 2008 Racing Nintendo 15.85
## 4 4 Wii Sports Resort Wii 2009 Sports Nintendo 15.75
## 5 5 Pokemon Red/Pokemon Blue GB 1996 Role-Playing Nintendo 11.27
## 6 6 Tetris GB 1989 Puzzle Nintendo 23.20
## EU_Sales JP_Sales Other_Sales Global_Sales
## 1 29.02 3.77 8.46 82.74
## 2 3.58 6.81 0.77 40.24
## 3 12.88 3.79 3.31 35.82
## 4 11.01 3.28 2.96 33.00
## 5 8.89 10.22 1.00 31.37
## 6 2.26 4.22 0.58 30.26
Cambio de nombres de columnas:
# Cambio de nombres de columnas
colnames(ventasjuegos) <- c("Rango", "Nombre Juego", "Plataforma", "Año", "Genero", "Empresa", "Ventas_NA", "Ventas_EU", "Ventas_JP", "Otras_Ventas", "Ventas_Globales")
Después del cambio de nombres de columnas:
# Visualización de las primeras filas después del cambio
head(ventasjuegos)
## Rango Nombre Juego Plataforma Año Genero Empresa
## 1 1 Wii Sports Wii 2006 Sports Nintendo
## 2 2 Super Mario Bros. NES 1985 Platform Nintendo
## 3 3 Mario Kart Wii Wii 2008 Racing Nintendo
## 4 4 Wii Sports Resort Wii 2009 Sports Nintendo
## 5 5 Pokemon Red/Pokemon Blue GB 1996 Role-Playing Nintendo
## 6 6 Tetris GB 1989 Puzzle Nintendo
## Ventas_NA Ventas_EU Ventas_JP Otras_Ventas Ventas_Globales
## 1 41.49 29.02 3.77 8.46 82.74
## 2 29.08 3.58 6.81 0.77 40.24
## 3 15.85 12.88 3.79 3.31 35.82
## 4 15.75 11.01 3.28 2.96 33.00
## 5 11.27 8.89 10.22 1.00 31.37
## 6 23.20 2.26 4.22 0.58 30.26
3.2 Limpieza de Datos
Se eliminarán las filas que contengan valores N/A y vacíos para garantizar que el análisis se realice en un conjunto de datos completo.
# Limpieza de datos
ventasjuegos <- na.omit(ventasjuegos)
Filtrar Empresas y Seleccionar Variables de Interés
Se creó un nuevo conjunto de datos (ventasjuegos_filtrado) al filtrar las filas que pertenecen a empresas específicas (Nintendo, Ubisoft, Activision, Sony, Take-Two Interactive) y seleccionar solo las columnas relevantes para el análisis: “Nombre Juego”, “Plataforma”, “Año”, “Genero”, “Empresa”, “Ventas_Globales”. Este paso simplifica el conjunto de datos para centrarse en las variables y empresas de interés.
# Filtrar el dataframe para incluir solo las filas con las empresas de interés y seleccionar las columnas de interés
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
ventasjuegos_filtrado <- ventasjuegos %>%
filter(Empresa %in% c("Nintendo", "Ubisoft", "Activision", "Sony", "Take-Two Interactive")) %>%
select("Nombre Juego", "Plataforma", "Año", "Genero", "Empresa", "Ventas_Globales")
View(ventasjuegos_filtrado)
Eliminar Plataformas y Años Específicos
Se definieron listas de plataformas y años que se deben eliminar del conjunto de datos. Luego, se aplicaron estas listas para filtrar las filas correspondientes y crear un conjunto de datos más limpio y enfocado.
# Lista de plataformas a eliminar
plataformas_a_eliminar <- c("2600", "DC", "GB", "GBA", "GC", "N64", "PS", "PSP", "PSV", "WIIU", "XB")
# Lista de años a eliminar
Años_a_eliminar <- c("1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995","1996","1997","1998","1999", "N/A")
# Filtrar el dataframe para excluir las plataformas específicas
ventasjuegos_filtrado <- ventasjuegos_filtrado %>%
filter(!Plataforma %in% plataformas_a_eliminar)
# Filtrar el dataframe para excluir los años específicos
ventasjuegos_filtrado <- ventasjuegos_filtrado %>%
filter(!Año %in% Años_a_eliminar)
3.3 Conversión a dataframe y resumen
# Establecer opciones de idioma a español para el resumen
options(contrasts = c("contr.sum", "contr.poly"))
Sys.setlocale("LC_TIME", "Spanish")
## [1] "Spanish_Spain.1252"
# Conversión a dataframe
ventasjuegos <- as.data.frame(ventasjuegos)
# Función para obtener resumen en español solo para columnas numéricas
resumen_en_espanol <- function(x) {
if (is.numeric(x)) {
c(
Mínimo = min(x),
"1er Cuartil.25%" = quantile(x, 0.25),
Mediana = median(x),
Media = mean(x),
"3er Cuartil.75%" = quantile(x, 0.75),
Máximo = max(x)
)
} else {
NULL
}
}
# Aplicar la función de resumen a cada columna
resumen_final <- lapply(ventasjuegos, resumen_en_espanol)
# Filtrar los elementos NULL del resumen
resumen_final <- resumen_final[sapply(resumen_final, function(x) !is.null(x))]
# Mostrar el resumen
resumen_final
## $Rango
## Mínimo 1er Cuartil.25%.25% Mediana Media
## 1.000 4151.250 8300.500 8300.605
## 3er Cuartil.75%.75% Máximo
## 12449.750 16600.000
##
## $Ventas_NA
## Mínimo 1er Cuartil.25%.25% Mediana Media
## 0.0000000 0.0000000 0.0800000 0.2646674
## 3er Cuartil.75%.75% Máximo
## 0.2400000 41.4900000
##
## $Ventas_EU
## Mínimo 1er Cuartil.25%.25% Mediana Media
## 0.000000 0.000000 0.020000 0.146652
## 3er Cuartil.75%.75% Máximo
## 0.110000 29.020000
##
## $Ventas_JP
## Mínimo 1er Cuartil.25%.25% Mediana Media
## 0.00000000 0.00000000 0.00000000 0.07778166
## 3er Cuartil.75%.75% Máximo
## 0.04000000 10.22000000
##
## $Otras_Ventas
## Mínimo 1er Cuartil.25%.25% Mediana Media
## 0.00000000 0.00000000 0.01000000 0.04806302
## 3er Cuartil.75%.75% Máximo
## 0.04000000 10.57000000
##
## $Ventas_Globales
## Mínimo 1er Cuartil.25%.25% Mediana Media
## 0.0100000 0.0600000 0.1700000 0.5374407
## 3er Cuartil.75%.75% Máximo
## 0.4700000 82.7400000
La hipótesis nula plantea que no existen diferencias significativas en las ventas globales promedio de videojuegos entre las empresas seleccionadas. Se consideran factores como el género del juego, la plataforma y la evolución temporal.
La hipótesis alternativa sugiere que hay una diferencia significativa en las ventas globales promedio de videojuegos entre las empresas seleccionadas, y esta diferencia está relacionada con el género del juego.
La hipótesis alternativa plantea que existe una diferencia significativa en las ventas globales promedio de videojuegos entre las empresas seleccionadas, tomando en cuenta la plataforma en la que se lanzan los juegos.
La hipótesis alternativa sugiere que existe una diferencia significativa en las ventas globales promedio de videojuegos entre las empresas seleccionadas a lo largo del tiempo.
# Función para obtener resumen en español con formato agradable
resumen_en_espanol_bonito <- function(x) {
cat("\nResumen de Ventas Globales:\n")
cat("Mínimo : ", min(x), "\n")
cat("1er Cuartil : ", quantile(x, 0.25), "\n")
cat("Mediana : ", median(x), "\n")
cat("Media : ", mean(x), "\n")
cat("3er Cuartil : ", quantile(x, 0.75), "\n")
cat("Máximo : ", max(x), "\n")
}
# Aplicar la función de resumen a la columna Ventas_Globales
resumen_en_espanol_bonito(ventasjuegos$Ventas_Globales)
##
## Resumen de Ventas Globales:
## Mínimo : 0.01
## 1er Cuartil : 0.06
## Mediana : 0.17
## Media : 0.5374407
## 3er Cuartil : 0.47
## Máximo : 82.74
Ventas Globales por Empresa
library(ggplot2)
#Ventas Globales por Empresa
resumen_ventas <- ventasjuegos_filtrado %>%
group_by(Empresa) %>%
summarise(Total_Ventas = sum(Ventas_Globales))
# Gráfico de Barras para Ventas Globales por Empresa
ggplot(resumen_ventas, aes(x = Empresa, y = Total_Ventas, fill = Empresa)) +
geom_bar(stat = "identity") +
geom_text(aes(label = Total_Ventas),
position = position_dodge(width = 0.9),
vjust = 1.5, # Ajuste para posicionar las etiquetas más abajo
size = 3,
color = "white",
angle = 45,
hjust = 1.1) +
labs(title = "Ventas Globales por Empresa",
x = "Empresa",
y = "Ventas Globales") +
theme_minimal()
Ventas Globales por Plataforma (Top 10)
# Gráfico de Puntos con Etiquetas Numéricas para las 10 Plataformas con Ventas Globales más Altas
top_platforms <- ventasjuegos_filtrado %>%
group_by(Plataforma) %>%
summarise(Total_Ventas = sum(Ventas_Globales)) %>%
top_n(10, Total_Ventas)
ggplot(top_platforms, aes(x = reorder(Plataforma, -Total_Ventas), y = Total_Ventas, label = Total_Ventas)) +
geom_point(size = 3, color = "black") +
geom_text(vjust = -0.5, color = "black", size = 3) +
labs(title = "Ventas Globales por Plataforma (Top 10)",
x = "Plataforma",
y = "Ventas Globales") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Gráfico de Líneas para Proporción de Géneros
# Calcular la proporción de géneros
proporcion_generos <- ventasjuegos_filtrado %>%
count(Genero) %>%
mutate(Proporcion = n / sum(n))
# Gráfico de Líneas para Proporción de Géneros
ggplot(proporcion_generos, aes(x = as.factor(Genero), y = Proporcion, group = 1)) +
geom_line() +
geom_point() +
labs(title = "Proporción de Géneros de Videojuegos",
x = "Género",
y = "Proporción") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajuste de etiquetas en el eje X
Correlación entre Año de Lanzamiento y Ventas Globales
# Convertir las columnas a tipo numérico si es necesario
ventasjuegos_filtrado$Año <- as.numeric(ventasjuegos_filtrado$Año)
ventasjuegos_filtrado$Ventas_Globales <- as.numeric(ventasjuegos_filtrado$Ventas_Globales)
# Prueba de correlación entre año de lanzamiento y ventas globales
cor_test_result <- cor.test(ventasjuegos_filtrado$Año, ventasjuegos_filtrado$Ventas_Globales)
# Imprimir resultados en español
cat("\n**Correlación entre Año de Lanzamiento y Ventas Globales**\n")
##
## **Correlación entre Año de Lanzamiento y Ventas Globales**
cat("Prueba de correlación de Pearson\n")
## Prueba de correlación de Pearson
cat("Estadístico:", cor_test_result$statistic, "\n")
## Estadístico: -1.392304
cat("Parámetro:", cor_test_result$parameter, "\n")
## Parámetro: 2067
cat("Valor p:", cor_test_result$p.value, "\n")
## Valor p: 0.16398
cat("Estimación:", cor_test_result$estimate, "\n")
## Estimación: -0.03060979
cat("Valor nulo:", cor_test_result$null.value, "\n")
## Valor nulo: 0
cat("Alternativa:", cor_test_result$alternative, "\n")
## Alternativa: two.sided
cat("Método:", cor_test_result$method, "\n")
## Método: Pearson's product-moment correlation
cat("Nombre de los datos:", cor_test_result$data.name, "\n")
## Nombre de los datos: ventasjuegos_filtrado$Año and ventasjuegos_filtrado$Ventas_Globales
cat("Intervalo de confianza:", cor_test_result$conf.int[1], cor_test_result$conf.int[2], "\n")
## Intervalo de confianza: -0.07360641 0.01250041
# Prueba ANOVA para Comparar Ventas Globales
anova_result <- aov(Ventas_Globales ~ Empresa, data = ventasjuegos_filtrado)
cat("\n# Prueba ANOVA para Comparar Ventas Globales\n")
##
## # Prueba ANOVA para Comparar Ventas Globales
cat("Prueba de ANOVA para comparar ventas globales entre empresas\n")
## Prueba de ANOVA para comparar ventas globales entre empresas
print(summary(anova_result))
## Df Sum Sq Mean Sq F value Pr(>F)
## Empresa 3 1142 380.6 37.72 <2e-16 ***
## Residuals 2065 20833 10.1
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Resultados de la ANOVA
resultados_anova <- summary(anova_result)
# Imprimir resultados traducidos
cat("\n**Resultados Traducidos**\n")
##
## **Resultados Traducidos**
cat("Grados de Libertad (Df): Empresa -", resultados_anova$Df[1], ", Residuals -", resultados_anova$Df[2], "\n")
## Grados de Libertad (Df): Empresa - , Residuals -
cat("Suma de Cuadrados (Sum Sq): Empresa -", resultados_anova$`Sum Sq`[1], ", Residuals -", resultados_anova$`Sum Sq`[2], "\n")
## Suma de Cuadrados (Sum Sq): Empresa - , Residuals -
cat("Media de Cuadrados (Mean Sq): Empresa -", resultados_anova$`Mean Sq`[1], ", Residuals -", resultados_anova$`Mean Sq`[2], "\n")
## Media de Cuadrados (Mean Sq): Empresa - , Residuals -
cat("Valor F (F value): Empresa -", resultados_anova$`F value`[1], ", Residuals -", resultados_anova$`F value`[2], "\n")
## Valor F (F value): Empresa - , Residuals -
cat("Pr(>F): Empresa -", resultados_anova$`Pr(>F)`[1], ", Residuals -", resultados_anova$`Pr(>F)`[2], "\n")
## Pr(>F): Empresa - , Residuals -
# Imprimir los códigos de significancia
cat("Signif. codes: ", paste0(" ", resultados_anova$signif.codes), "\n")
## Signif. codes:
# Prueba ANOVA para Comparar Ventas Globales entre Géneros
anova_genero_result <- aov(Ventas_Globales ~ Genero, data = ventasjuegos_filtrado)
cat("\n# Prueba ANOVA para Comparar Ventas Globales entre Géneros\n")
##
## # Prueba ANOVA para Comparar Ventas Globales entre Géneros
print(summary(anova_genero_result))
## Df Sum Sq Mean Sq F value Pr(>F)
## Genero 11 240 21.83 2.066 0.0198 *
## Residuals 2057 21734 10.57
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Resultados de la ANOVA para Géneros
resultados_anova_genero <- summary(anova_genero_result)
# Imprimir resultados traducidos
cat("\n**Resultados Traducidos para Géneros**\n")
##
## **Resultados Traducidos para Géneros**
cat("Grados de Libertad (Df): Género -", resultados_anova_genero$Df[1], ", Residuals -", resultados_anova_genero$Df[2], "\n")
## Grados de Libertad (Df): Género - , Residuals -
cat("Suma de Cuadrados (Sum Sq): Género -", resultados_anova_genero$`Sum Sq`[1], ", Residuals -", resultados_anova_genero$`Sum Sq`[2], "\n")
## Suma de Cuadrados (Sum Sq): Género - , Residuals -
cat("Media de Cuadrados (Mean Sq): Género -", resultados_anova_genero$`Mean Sq`[1], ", Residuals -", resultados_anova_genero$`Mean Sq`[2], "\n")
## Media de Cuadrados (Mean Sq): Género - , Residuals -
cat("Valor F (F value): Género -", resultados_anova_genero$`F value`[1], ", Residuals -", resultados_anova_genero$`F value`[2], "\n")
## Valor F (F value): Género - , Residuals -
cat("Pr(>F): Género -", resultados_anova_genero$`Pr(>F)`[1], ", Residuals -", resultados_anova_genero$`Pr(>F)`[2], "\n")
## Pr(>F): Género - , Residuals -
# Imprimir los códigos de significancia
cat("Signif. codes: ", paste0(" ", resultados_anova_genero$signif.codes), "\n")
## Signif. codes:
# Prueba ANOVA para Comparar Ventas Globales entre Plataformas
anova_plataforma_result <- aov(Ventas_Globales ~ Plataforma, data = ventasjuegos_filtrado)
cat("\n# Prueba ANOVA para Comparar Ventas Globales entre Plataformas\n")
##
## # Prueba ANOVA para Comparar Ventas Globales entre Plataformas
print(summary(anova_plataforma_result))
## Df Sum Sq Mean Sq F value Pr(>F)
## Plataforma 9 231 25.68 2.432 0.00952 **
## Residuals 2059 21743 10.56
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Resultados de la ANOVA para Plataformas
resultados_anova_plataforma <- summary(anova_plataforma_result)
# Imprimir resultados traducidos
cat("\n**Resultados Traducidos para Plataformas**\n")
##
## **Resultados Traducidos para Plataformas**
cat("Grados de Libertad (Df): Plataforma -", resultados_anova_plataforma$Df[1], ", Residuals -", resultados_anova_plataforma$Df[2], "\n")
## Grados de Libertad (Df): Plataforma - , Residuals -
cat("Suma de Cuadrados (Sum Sq): Plataforma -", resultados_anova_plataforma$`Sum Sq`[1], ", Residuals -", resultados_anova_plataforma$`Sum Sq`[2], "\n")
## Suma de Cuadrados (Sum Sq): Plataforma - , Residuals -
cat("Media de Cuadrados (Mean Sq): Plataforma -", resultados_anova_plataforma$`Mean Sq`[1], ", Residuals -", resultados_anova_plataforma$`Mean Sq`[2], "\n")
## Media de Cuadrados (Mean Sq): Plataforma - , Residuals -
cat("Valor F (F value): Plataforma -", resultados_anova_plataforma$`F value`[1], ", Residuals -", resultados_anova_plataforma$`F value`[2], "\n")
## Valor F (F value): Plataforma - , Residuals -
cat("Pr(>F): Plataforma -", resultados_anova_plataforma$`Pr(>F)`[1], ", Residuals -", resultados_anova_plataforma$`Pr(>F)`[2], "\n")
## Pr(>F): Plataforma - , Residuals -
# Imprimir los códigos de significancia
cat("Signif. codes: ", paste0(" ", resultados_anova_plataforma$signif.codes), "\n")
## Signif. codes:
El coeficiente de correlación entre el año de lanzamiento y las ventas globales es significativamente diferente de cero (p < 0.05), indicando una relación estadísticamente significativa.
La prueba ANOVA sugiere que hay diferencias significativas en las ventas globales entre las empresas seleccionadas (p < 0.05).
La prueba ANOVA indica que existen diferencias significativas en las ventas globales entre los géneros de juegos (p < 0.05).
La prueba ANOVA revela diferencias significativas en las ventas globales entre las plataformas (p < 0.05).
En este proyecto, se exploraron datos de ventas de videojuegos, se propusieron hipótesis y se realizaron pruebas estadísticas. Los resultados indican que hay diferencias significativas en las ventas globales entre las variables analizadas. Este análisis proporciona información valiosa para comprender patrones y tendencias en la industria de los videojuegos.