Genshin Impact es un videojuego de rol y acción en un mundo abierto desarrollado por la empresa China Hoyoverse, el cual funciona a partir de un mecanismo de gasha, este término se refiere a un tipo de máquina expendedora que dispensa cápsulas que contienen juguetes, figuras coleccionables o artículos pequeños de manera aleatoria.
Así pues, el juego consiste en que en cada actualización, se promociona a un personaje exclusivo, junto con un arma nueva que es perfecta para este mismo, motivo por el cual los jugadores se ven atraídos por estos y deciden gastar en el juego con tal de obtener las más recientes novedades.
A través de una base de datos sacada de la página kaggle.com, se analizarán los gastos que los jugadores del gasha llamado Genshin Impact realizan conforme hay nuevas actualizaciones en el juego, y así pues, presentar información importante como medidas de tendencia central y medidas de dispersión, para encontrar cuáles son los factores que más se repiten en los gastos y la tendencia a los que estos van.
Realice un análisis exploratorio de datos para comprender la estructura de la base de datos.
a) ¿Cuántas filas y columnas tiene la base de datos? 38 objetos y 10 variables b) ¿Cuáles son los nombres de las columnas?
setwd("C:/Users/danie/Downloads")#lugar donde tienes el archivo
df=read.csv("Genshin charac rev (by banner).csv")
colnames(df)
## [1] "version" "version_name" "start_date"
## [4] "end_date" "X5_star_characters" "rerun"
## [7] "mixed" "revenue" "banner_days"
## [10] "avg_revenue"
c) ¿Qué tipo de datos contiene cada columna?
variables= c("version", "version_name", "start_date", "end_date", "X5_star_characters",
"rerun", "mixed", "revenue", "banner_days", "avg_revenue")
tipos_de_datos= c("NUMÉRICO", "CADENA DE CARACTERES", "CADENA DE CARACTERES", "CADENA DE CARACTERES",
"CADENA DE CARACTERES", "CADENA DE CARACTERES", "CADENA DE CARACTERES",
"CADENA DE CARACTERES", "ENTERO", "NUMÉRICO")
tabla_datos= data.frame(Variable = variables, "Tipo de datos" = tipos_de_datos)
print(tabla_datos)
## Variable Tipo.de.datos
## 1 version NUMÉRICO
## 2 version_name CADENA DE CARACTERES
## 3 start_date CADENA DE CARACTERES
## 4 end_date CADENA DE CARACTERES
## 5 X5_star_characters CADENA DE CARACTERES
## 6 rerun CADENA DE CARACTERES
## 7 mixed CADENA DE CARACTERES
## 8 revenue CADENA DE CARACTERES
## 9 banner_days ENTERO
## 10 avg_revenue NUMÉRICO
Version
x=c(df$version)
promedio=mean(x)
mediana=median(x)
moda=as.numeric(names(which.max(table(x))))
varianza=var(x)
desviacion=sd(x)
tabla_medidas= data.frame("Promedio" = promedio, "Mediana" = mediana, "Moda" = moda, "varianza" = varianza, "desviacion" = desviacion)
print(tabla_medidas)
## Promedio Mediana Moda varianza desviacion
## 1 2.055263 2.15 1.3 0.4792959 0.692312
Revenue
revenue=as.numeric(gsub("\\,","",df$revenue))
promedio=mean(revenue)
mediana=median(revenue)
moda=as.numeric(names(which.max(table(x))))
varianza=var(revenue)
desviavcion=sd(revenue)
tabla_medidas= data.frame("Promedio" = promedio, "Mediana" = mediana, "Moda" = moda, "varianza" = varianza, "desviacion" = desviacion)
print(tabla_medidas)
## Promedio Mediana Moda varianza desviacion
## 1 17741611 15706760 1.3 6.931278e+13 0.692312
banner_days
x=c(df$banner_days)
promedio=mean(x)
mediana=median(x)
moda=as.numeric(names(which.max(table(x))))
varianza=var(x)
desviacion=sd(x)
tabla_medidas= data.frame("Promedio" = promedio, "Mediana" = mediana, "Moda" = moda, "varianza" = varianza, "desviacion" = desviacion)
print(tabla_medidas)
## Promedio Mediana Moda varianza desviacion
## 1 20.92105 21 21 19.53414 4.419744
df$banner_days
## [1] 25 22 20 22 21 21 15 13 14 21 21 21 21 21 21 21 21 20 22 21 22 21 22 21 22
## [26] 21 22 21 43 22 22 21 22 18 19 18 19 15
Observamos la cantidad de datos que existen en nuestra base de datos para la columna de “banner_days”, se logran apreciar de manera sencilla ya que la base de datos no es muy extensa.
Podemos confirmar de esta manera más visual cuantos datos existen en esta columna
table(df$banner_days)
##
## 13 14 15 18 19 20 21 22 25 43
## 1 1 2 2 2 2 16 10 1 1
Observamos cual es la frecuencia de los datos y una vez más vemos que no existen datos faltantes o marcados como NA, sin embargo decidiremos tratar a los datos iguales a 22 como no deseados y los excluiremos de la tabla como si de “NA”(datos faltantes) se tratasen
na=c(df$banner_days!=22)
na
## [1] TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
## [25] FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
## [37] TRUE TRUE
Creamos un vector con los datos de la columna a tratar pero le ponemos una condición, que sean diferentes al “dato no deseado”, esto nos creara un vector con valores booleanos “TRUE” o “FALSE” dependiendo si el valor de cada una de las filas cumple la condición.
banner=data.frame(df$banner_days[na])
banner
## df.banner_days.na.
## 1 25
## 2 20
## 3 21
## 4 21
## 5 15
## 6 13
## 7 14
## 8 21
## 9 21
## 10 21
## 11 21
## 12 21
## 13 21
## 14 21
## 15 21
## 16 20
## 17 21
## 18 21
## 19 21
## 20 21
## 21 21
## 22 43
## 23 21
## 24 18
## 25 19
## 26 18
## 27 19
## 28 15
Ahora utilizamos este vector como posición de la columna deseada y la guardamos en un nuevo data frame. Tenemos como resultado un data frame que no contiene los datos iguales a 22, podemos confirmar esto con el número de observaciones .
Subtabla 1: tabla por versión.
tabla1=table(df$version)
tabla1=data.frame(tabla1)
colnames(tabla1)=c("Versión","Banners")
tabla1
## Versión Banners
## 1 1 2
## 2 1.1 2
## 3 1.2 2
## 4 1.3 3
## 5 1.4 2
## 6 1.5 2
## 7 1.6 2
## 8 2 2
## 9 2.1 2
## 10 2.2 2
## 11 2.3 2
## 12 2.4 2
## 13 2.5 2
## 14 2.6 2
## 15 2.7 2
## 16 2.8 2
## 17 3 2
## 18 3.1 2
## 19 3.2 1
Subtabla 2: Duración de banner de personajes 5 estrellas y su ganancia.
tabla2=data.frame(characters=c(df$X5_star_characters),duration=c(df$banner_days),revenue=c(df$revenue))
colnames(tabla2)=c("5-star character","Banner duration (days)","Total revenue")
tabla2
## 5-star character Banner duration (days)
## 1 Venti 25
## 2 Klee 22
## 3 Tartaglia 20
## 4 Zhongli 22
## 5 Albedo 21
## 6 Ganyu 21
## 7 Xiao 15
## 8 Keqing 13
## 9 Hu Tao 14
## 10 Venti (Rerun) 21
## 11 Tartaglia (Rerun) 21
## 12 Zhongli (Rerun) 21
## 13 Eula 21
## 14 Klee (Rerun) 21
## 15 Kaedehara Kazuha 21
## 16 Kamisato Ayaka 21
## 17 Yoimiya 21
## 18 Raiden Shogun 20
## 19 Sangonomiya Kokomi 22
## 20 Tartaglia (2nd Rerun) 21
## 21 Hu Tao (Rerun) 22
## 22 Albedo (Rerun) & Eula (Rerun) 21
## 23 Arataki Itto 22
## 24 Shenhe & Xiao (Rerun) 21
## 25 Ganyu (Rerun) & Zhongli (2nd Rerun) 22
## 26 Yae Miko 21
## 27 Raiden Shogun (Rerun) & Kokomi (Rerun) 22
## 28 Kamisato Ayato & Venti (2nd Rerun) 21
## 29 Kamisato Ayaka (Rerun) 43
## 30 Yelan & Xiao (2nd Rerun) 22
## 31 Arataki Itto (Rerun) 22
## 32 Kaedehara Kazuha (Rerun) & Klee (2nd Rerun) 21
## 33 Yoimiya (Rerun) 22
## 34 Tighnari & Zhongli (3rd Rerun) 18
## 35 Ganyu (2nd Rerun) & Kokomi (2nd Rerun) 19
## 36 Cyno & Venti (3rd Rerun) 18
## 37 Nilou & Albedo (2nd Rerun) 19
## 38 Nahida & Yoimiya (2nd Rerun) 15
## Total revenue
## 1 30,632,752
## 2 22,750,080
## 3 13,443,619
## 4 16,264,892
## 5 11,816,107
## 6 15,669,918
## 7 13,145,115
## 8 9,505,798
## 9 12,481,634
## 10 16,614,209
## 11 6,965,445
## 12 10,215,165
## 13 12,619,390
## 14 7,006,180
## 15 9,807,112
## 16 16,451,006
## 17 8,615,144
## 18 33,020,905
## 19 7,020,975
## 20 7,785,438
## 21 25,226,952
## 22 17,026,066
## 23 13,404,072
## 24 16,994,406
## 25 26,780,298
## 26 15,110,264
## 27 33,560,259
## 28 22,767,455
## 29 35,939,066
## 30 32,177,144
## 31 12,586,764
## 32 24,808,479
## 33 14,333,266
## 34 19,068,372
## 35 15,681,840
## 36 19,052,023
## 37 15,731,680
## 38 32,101,943
Subtabla 3:
tabla3=data.frame(Ganancia_diaria=c(df$avg_revenue),
Ganancia_Total=c(df$revenue))
colnames(tabla3)=c("Ganancia promedio","Ganacias Totales")
tabla3
## Ganancia promedio Ganacias Totales
## 1 1,225,310.08 30,632,752
## 2 1,034,094.55 22,750,080
## 3 672,180.95 13,443,619
## 4 739,313.27 16,264,892
## 5 562,671.76 11,816,107
## 6 746,186.57 15,669,918
## 7 876,341.00 13,145,115
## 8 731,215.23 9,505,798
## 9 891,545.29 12,481,634
## 10 791,152.81 16,614,209
## 11 331,687.86 6,965,445
## 12 486,436.43 10,215,165
## 13 600,923.33 12,619,390
## 14 333,627.62 7,006,180
## 15 467,005.33 9,807,112
## 16 783,381.24 16,451,006
## 17 410,244.95 8,615,144
## 18 1,651,045.25 33,020,905
## 19 319,135.23 7,020,975
## 20 370,735.14 7,785,438
## 21 1,146,679.64 25,226,952
## 22 810,765.05 17,026,066
## 23 609,276.00 13,404,072
## 24 809,257.43 16,994,406
## 25 1,217,286.27 26,780,298
## 26 719,536.38 15,110,264
## 27 1,525,466.32 33,560,259
## 28 1,084,164.52 22,767,455
## 29 835,792.23 35,939,066
## 30 1,462,597.45 32,177,144
## 31 572,125.64 12,586,764
## 32 1,181,356.14 24,808,479
## 33 651,512.09 14,333,266
## 34 1,059,354.00 19,068,372
## 35 825,360.00 15,681,840
## 36 1,058,445.72 19,052,023
## 37 827,983.16 15,731,680
## 38 2140129.533 32,101,943
Cree al menos tres visualizaciones diferentes que ayuden a comprender mejor los datos. Puede utilizar gráficos de barras, gráficos de dispersión, histogramas, etc.
Grafica donde podemos ver la cantidad de dias que duraron los banners
hist(df$banner_days,
names.arg = df$categorias,
main = "Dias de duracion",
xlab="DURACION",
ylab = "BANERS",
col = "brown")
Grafica donde se muestra la ganancia promdeio por dia de cada baner
revenue=as.numeric(gsub("\\,","",df$revenue))
barplot(revenue,
main = "REVENUE",
xlab = "Versión",
ylab = "Ganancia promedio por dia",
col = "blue")
Grafica de la cantidad total de ganancias por cada banner.
avg_revenue=as.numeric(gsub("\\,","",df$avg_revenue))
barplot(avg_revenue,
main = "AVG REVENUE",
xlab = "Versión",
ylab = "Ganancia Total",
col = "purple")
El promedio de ventas(revenue) por versión que ha tenido el videojuego en su trayectoria hasta la versión 3.2, es de $17,741,611 y la media por día de ingresos que reciben es de $856,876.9
Por otro lado, se encontró que el promedio de duración de los banners es de 20 días, puesto que al principio de sus actualizaciones, estos eran más extensos, más sin embargo, la duración de los banners ha variado bastante a lo largo del tiempo, determinando así pues que la moda de este es de 21 días, muy parecida a la media.
A partir de los datos obtenidos de las medidas de tendencia central, se pudo identificar que el mes que tuvo más ganancias fue en Mayo del 2022, con el relanzamiento del personaje “Kamisato Ayaka” logrando una cifra de $35,939,066, creemos que el éxito de este banner puede ser debido a que duró 43 días, dándole tiempo a los jugadores de invertir más en el juego y dándonos a entender que los personajes que más dinero recaudan, son los que tienen un periodo de duración más largo.
Los 3 banners con más dinero recaudado del juego son los siguientes:“Zephyr of the Violet Garden” es el banner al que pertenece el personaje con más ganancias del juego, en segundo lugar encontramos a “Floating World Under the Moonlight” que alcanzó $33,020,905 y por último “Akasha Pulses, the Kalpa Flame Rises” con un total de $32,101,943.
Así pues, observamos que la varianza a lo largo del juego es de $8,325,430, factores como la estética del personaje, su jugabilidad, novedades de la actualización, el tiempo de duración del banner y la publicidad que la misma empresa realiza, hacen que las ganancias del juego aumenten o disminuyan.