EDA - TOP 1000 Movies by IMDB Rating

Author

Frias, Natalia - Pérez, Miguel.

Published

February 3, 2025

En la industria cinematográfica, las calificaciones otorgadas a las películas reflejan la percepción del público y la crítica sobre su calidad, influenciando tanto su éxito comercial como su legado cultural. Factores como la narrativa, la dirección, el elenco y el contexto histórico de su lanzamiento pueden desempeñar un papel clave en la valoración otorgada.

Este análisis tiene como objetivo responder a la pregunta: ¿Qué periodo de tiempo mostró el mejor desempeño en términos de ratings entre las 1000 películas mejor valoradas en IMDb?. Para ello, compararemos la distribución de calificaciones de películas en distintos intervalos de tiempo, con el fin de identificar patrones y tendencias a lo largo de los años.

Con el fin de responder a esta pregunta, se tomó una base de datos de la página Kaggle, publicada por el usuario Harshit Shankhdhar. El archivo, en formato .csv, contiene información relevante sobre las calificaciones de las películas, permitiendo analizar la evolución de los ratings a lo largo del tiempo.

Para comenzar, se carga la base de datos:

Code
library(readr)
dataset <- read_csv("C:/Users/user/Downloads/imdb_top_1000.csv")
View(dataset)

Con fines ilustrativos, se realiza una vista preliminar con los primeros 10 registros del dataset:



|Poster_Link                                                                                                                                       |Series_Title                                  |Released_Year |Certificate |Runtime |Genre                     | IMDB_Rating|Overview                                                                                                                                                                                      | Meta_score|Director             |Star1             |Star2                |Star3             |Star4            | No_of_Votes|     Gross|
|:-------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------|:-------------|:-----------|:-------|:-------------------------|-----------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------:|:--------------------|:-----------------|:--------------------|:-----------------|:----------------|-----------:|---------:|
|https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UX67_CR0,0,67,98_AL_.jpg |The Shawshank Redemption                      |1994          |A           |142 min |Drama                     |         9.3|Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency.                                                                        |         80|Frank Darabont       |Tim Robbins       |Morgan Freeman       |Bob Gunton        |William Sadler   |     2343110|  28341469|
|https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY98_CR1,0,67,98_AL_.jpg |The Godfather                                 |1972          |A           |175 min |Crime, Drama              |         9.2|An organized crime dynasty's aging patriarch transfers control of his clandestine empire to his reluctant son.                                                                                |        100|Francis Ford Coppola |Marlon Brando     |Al Pacino            |James Caan        |Diane Keaton     |     1620367| 134966411|
|https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UX67_CR0,0,67,98_AL_.jpg                                 |The Dark Knight                               |2008          |UA          |152 min |Action, Crime, Drama      |         9.0|When the menace known as the Joker wreaks havoc and chaos on the people of Gotham, Batman must accept one of the greatest psychological and physical tests of his ability to fight injustice. |         84|Christopher Nolan    |Christian Bale    |Heath Ledger         |Aaron Eckhart     |Michael Caine    |     2303232| 534858444|
|https://m.media-amazon.com/images/M/MV5BMWMwMGQzZTItY2JlNC00OWZiLWIyMDctNDk2ZDQ2YjRjMWQ0XkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY98_CR1,0,67,98_AL_.jpg |The Godfather: Part II                        |1974          |A           |202 min |Crime, Drama              |         9.0|The early life and career of Vito Corleone in 1920s New York City is portrayed, while his son, Michael, expands and tightens his grip on the family crime syndicate.                          |         90|Francis Ford Coppola |Al Pacino         |Robert De Niro       |Robert Duvall     |Diane Keaton     |     1129952|  57300000|
|https://m.media-amazon.com/images/M/MV5BMWU4N2FjNzYtNTVkNC00NzQ0LTg0MjAtYTJlMjFhNGUxZDFmXkEyXkFqcGdeQXVyNjc1NTYyMjg@._V1_UX67_CR0,0,67,98_AL_.jpg |12 Angry Men                                  |1957          |U           |96 min  |Crime, Drama              |         9.0|A jury holdout attempts to prevent a miscarriage of justice by forcing his colleagues to reconsider the evidence.                                                                             |         96|Sidney Lumet         |Henry Fonda       |Lee J. Cobb          |Martin Balsam     |John Fiedler     |      689845|   4360000|
|https://m.media-amazon.com/images/M/MV5BNzA5ZDNlZWMtM2NhNS00NDJjLTk4NDItYTRmY2EwMWZlMTY3XkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UX67_CR0,0,67,98_AL_.jpg |The Lord of the Rings: The Return of the King |2003          |U           |201 min |Action, Adventure, Drama  |         8.9|Gandalf and Aragorn lead the World of Men against Sauron's army to draw his gaze from Frodo and Sam as they approach Mount Doom with the One Ring.                                            |         94|Peter Jackson        |Elijah Wood       |Viggo Mortensen      |Ian McKellen      |Orlando Bloom    |     1642758| 377845905|
|https://m.media-amazon.com/images/M/MV5BNGNhMDIzZTUtNTBlZi00MTRlLWFjM2ItYzViMjE3YzI5MjljXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY98_CR0,0,67,98_AL_.jpg |Pulp Fiction                                  |1994          |A           |154 min |Crime, Drama              |         8.9|The lives of two mob hitmen, a boxer, a gangster and his wife, and a pair of diner bandits intertwine in four tales of violence and redemption.                                               |         94|Quentin Tarantino    |John Travolta     |Uma Thurman          |Samuel L. Jackson |Bruce Willis     |     1826188| 107928762|
|https://m.media-amazon.com/images/M/MV5BNDE4OTMxMTctNmRhYy00NWE2LTg3YzItYTk3M2UwOTU5Njg4XkEyXkFqcGdeQXVyNjU0OTQ0OTY@._V1_UX67_CR0,0,67,98_AL_.jpg |Schindler's List                              |1993          |A           |195 min |Biography, Drama, History |         8.9|In German-occupied Poland during World War II, industrialist Oskar Schindler gradually becomes concerned for his Jewish workforce after witnessing their persecution by the Nazis.            |         94|Steven Spielberg     |Liam Neeson       |Ralph Fiennes        |Ben Kingsley      |Caroline Goodall |     1213505|  96898818|
|https://m.media-amazon.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1_UX67_CR0,0,67,98_AL_.jpg                                 |Inception                                     |2010          |UA          |148 min |Action, Adventure, Sci-Fi |         8.8|A thief who steals corporate secrets through the use of dream-sharing technology is given the inverse task of planting an idea into the mind of a C.E.O.                                      |         74|Christopher Nolan    |Leonardo DiCaprio |Joseph Gordon-Levitt |Elliot Page       |Ken Watanabe     |     2067042| 292576195|
|https://m.media-amazon.com/images/M/MV5BMmEzNTkxYjQtZTc0MC00YTVjLTg5ZTEtZWMwOWVlYzY0NWIwXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UX67_CR0,0,67,98_AL_.jpg |Fight Club                                    |1999          |A           |139 min |Drama                     |         8.8|An insomniac office worker and a devil-may-care soapmaker form an underground fight club that evolves into something much, much more.                                                         |         66|David Fincher        |Brad Pitt         |Edward Norton        |Meat Loaf         |Zach Grenier     |     1854740|  37030102|

A su vez, se revisan sus dimensiones:

[1] 1000   16

El print anterior, permite afirmar que el dataset cuenta con un total de 1000 filas y 16 columnas.

Teniendo claro que esta base de datos contiene 16 variables diferentes, se presenta a continuación una tabla que contiene información detallada de cada una de ellas.

Cuadro de Operacionalización de Variables
Variable Definición Tipo Indicadores
Poster_Link Enlace a la imagen del póster de la película/serie. Cualitativa, nominal URL de la imagen del póster.
Series_Title Título de la película/serie. Cualitativa, nominal Nombre del contenido.
Released_Year Año en el que la película/serie fue estrenada. Cuantitativa, discreta Año entre 1900 y 2025.
Certificate Clasificación por edades asignada al contenido. Cualitativa, ordinal Clasificaciones como PG, R, etc.
Runtime Duración de la película/serie en minutos. Cuantitativa, continua Número de minutos (e.g., 120).
Genre Género(s) asociados al contenido. Cualitativa, nominal Acción, Drama, Comedia, etc.
IMDB_Rating Calificación promedio otorgada por los usuarios en IMDB. Cuantitativa, continua Puntaje de 0 a 10.
Overview Resumen breve de la película/serie. Cualitativa, nominal Texto descriptivo breve.
Meta_score Puntuación otorgada en Metacritic. Cuantitativa, continua Puntaje de 0 a 100.
Director Nombre del director de la película/serie. Cualitativa, nominal Nombre completo del director.
Star1 Nombre del actor/actriz principal. Cualitativa, nominal Nombre completo del actor principal.
Star2 Nombre del segundo actor/actriz principal. Cualitativa, nominal Nombre completo del segundo actor.
Star3 Nombre del tercer actor/actriz principal. Cualitativa, nominal Nombre completo del tercer actor.
Star4 Nombre del cuarto actor/actriz principal. Cualitativa, nominal Nombre completo del cuarto actor.
No_of_Votes Número total de votos recibidos en IMDB. Cuantitativa, discreta Número mayor o igual a 0.
Gross Ingresos totales generados en taquilla (en dólares). Cuantitativa, continua Cantidad en dólares.

Con el fin de dar inicio al descriptivo de los datos, se utiliza la función summary, para obtener un resumen estadístico con las principales medidas de la base de datos:

 Poster_Link        Series_Title       Released_Year      Certificate       
 Length:1000        Length:1000        Length:1000        Length:1000       
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
   Runtime             Genre            IMDB_Rating      Overview        
 Length:1000        Length:1000        Min.   :7.600   Length:1000       
 Class :character   Class :character   1st Qu.:7.700   Class :character  
 Mode  :character   Mode  :character   Median :7.900   Mode  :character  
                                       Mean   :7.949                     
                                       3rd Qu.:8.100                     
                                       Max.   :9.300                     
                                                                         
   Meta_score       Director            Star1              Star2          
 Min.   : 28.00   Length:1000        Length:1000        Length:1000       
 1st Qu.: 70.00   Class :character   Class :character   Class :character  
 Median : 79.00   Mode  :character   Mode  :character   Mode  :character  
 Mean   : 77.97                                                           
 3rd Qu.: 87.00                                                           
 Max.   :100.00                                                           
 NA's   :157                                                              
    Star3              Star4            No_of_Votes          Gross          
 Length:1000        Length:1000        Min.   :  25088   Min.   :     1305  
 Class :character   Class :character   1st Qu.:  55526   1st Qu.:  3253559  
 Mode  :character   Mode  :character   Median : 138549   Median : 23530892  
                                       Mean   : 273693   Mean   : 68034751  
                                       3rd Qu.: 374161   3rd Qu.: 80750894  
                                       Max.   :2343110   Max.   :936662225  
                                                         NA's   :169        

El resumen estadístico de las variables numéricas y categóricas proporciona una primera visión sobre la estructura y distribución de los datos antes de aplicar técnicas de limpieza. Se identificó la presencia de valores faltantes en métricas clave como Meta_score (157 NA’s) y Gross (169 NA’s), lo que indica la necesidad de estrategias de imputación o exclusión de registros incompletos. Además, los valores mínimo y máximo en estas métricas presentan una variabilidad considerable, lo que sugiere la posible presencia de valores atípicos o escalas inconsistentes que deberán evaluarse en detalle.

En cuanto a la variable No_of_Votes, se observa una diferencia notable entre la mediana (138,549 votos) y la media (273,693 votos), lo que indica una distribución sesgada con posibles valores extremos que pueden afectar el análisis. Asimismo, la variable Released_Year muestra un rango de años bien definido, lo que permite analizar la evolución del desempeño de las películas a lo largo del tiempo sin anomalías evidentes.

Dado que estos datos aún no han sido sometidos a un proceso de limpieza o imputación, el siguiente paso consistirá en abordar la gestión de valores faltantes y la detección de valores atípicos. Posteriormente, se podrá realizar un análisis más preciso sobre las tendencias en las calificaciones y el éxito de las películas en distintos períodos de tiempo.

Ahora, se da inicio a la revisión de valores faltantes, realizando un conteo de los valores NA presentes en cada columna de la base de datos:

  Poster_Link  Series_Title Released_Year   Certificate       Runtime 
            0             0             0           101             0 
        Genre   IMDB_Rating      Overview    Meta_score      Director 
            0             0             0           157             0 
        Star1         Star2         Star3         Star4   No_of_Votes 
            0             0             0             0             0 
        Gross 
          169 

De lo anterior, es evidente que los datos faltantes en el dataset, se encuentran presentes únicamente en las columnas correspondientes a variables cuantitativas.

Para un total de 427 datos NA, que se verifica a través de la función sum().

[1] 427

Al detectar 427 registros con datos faltantes, es pertinente realizar un tratamiento a todos ellos. Sin embargo, primero se generan varios gráficos para comprender con mayor claridad la situación del dataset. Estos gráficos también servirán posteriormente para realizar comparaciones una vez que los datos hayan sido tratados.

Figure 1 - Figure 2

 Variables sorted by number of missings: 
      Variable Count
         Gross 0.169
    Meta_score 0.157
   Certificate 0.101
   Poster_Link 0.000
  Series_Title 0.000
 Released_Year 0.000
       Runtime 0.000
         Genre 0.000
   IMDB_Rating 0.000
      Overview 0.000
      Director 0.000
         Star1 0.000
         Star2 0.000
         Star3 0.000
         Star4 0.000
   No_of_Votes 0.000

Con el mismo propósito, se genera un missingness map:

Figure 3

Gracias a este gráfico (Figure 3), se puede afirmar que sólo el 2% de los datos contienen valores NA.

Para dar inicio al tratamiento, se utiliza la función na.omit() para eliminar todas las filas con valores NA en el dataset:

Con el fin de verificar que las gráficas pre y post tratamiento se mantengan iguales, se generan dos histogramas para la variable Gross:

Code
library(ggplot2)
ggplot(dataset, aes(x = Gross)) +
  geom_histogram(fill = "blue", color = "blue", bins = 30) +  
  ggtitle("Original Data") +
  xlab("Gross") +
  ylab("Frequency") +
  theme_minimal()

Figure 4
Code
library(ggplot2)
ggplot(dataset_limpio, aes(x = Gross)) +
  geom_histogram(fill = "lightblue", color = "lightblue", bins = 30) +  
  ggtitle("Litwise Deletion") +
  xlab("Gross") +
  ylab("Frequency") +
  theme_minimal()

Figure 5

Estos gráficos (Figure 4 y Figure 5), demustran que la distribución de cada variable se mantiene igual, aún tras haber eliminados los datos faltantes.

Por supuesto, se genera un nuevo Missingness Map, con los datos NA eliminados:

Figure 6

Como se puede observar, se obtuvo un 0% de datos faltantes, por lo tanto, se puede afirmar que el tratamiento fue exitoso.

Luego, se realiza un nuevo resumen estadístico sin valores faltantes, con el objetivo de abordar de una mejor manera la pregunta planteada al comienzo del EDA:

 Poster_Link        Series_Title       Released_Year      Certificate       
 Length:714         Length:714         Length:714         Length:714        
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
   Runtime             Genre            IMDB_Rating      Overview        
 Length:714         Length:714         Min.   :7.600   Length:714        
 Class :character   Class :character   1st Qu.:7.700   Class :character  
 Mode  :character   Mode  :character   Median :7.900   Mode  :character  
                                       Mean   :7.937                     
                                       3rd Qu.:8.100                     
                                       Max.   :9.300                     
   Meta_score       Director            Star1              Star2          
 Min.   : 28.00   Length:714         Length:714         Length:714        
 1st Qu.: 70.00   Class :character   Class :character   Class :character  
 Median : 78.00   Mode  :character   Mode  :character   Mode  :character  
 Mean   : 77.16                                                           
 3rd Qu.: 86.00                                                           
 Max.   :100.00                                                           
    Star3              Star4            No_of_Votes          Gross          
 Length:714         Length:714         Min.   :  25229   Min.   :     1305  
 Class :character   Class :character   1st Qu.:  96010   1st Qu.:  6157408  
 Mode  :character   Mode  :character   Median : 236603   Median : 34850146  
                                       Mean   : 356135   Mean   : 78513585  
                                       3rd Qu.: 507792   3rd Qu.:102464067  
                                       Max.   :2343110   Max.   :936662225  

Tras la limpieza de datos, el conjunto final incluye 714 películas, lo que indica que la eliminación de valores faltantes tuvo un impacto significativo en la base de datos original de 1000 registros. Esto sugiere que los 427 valores NA estaban distribuidos en múltiples columnas, lo que llevó a que muchas filas fueran eliminadas al aplicar la limpieza. La eliminación de registros con valores faltantes garantiza que el análisis posterior se base en datos completos, reduciendo posibles sesgos derivados de datos incompletos.

En cuanto a la variable IMDB_Rating, la media (7.94) y la mediana (7.90) son cercanas, lo que sugiere una distribución relativamente simétrica de los ratings. Sin embargo, variables como No_of_Votes y Gross presentan una gran dispersión, con diferencias notables entre los cuartiles y valores máximos elevados, lo que sugiere la posible presencia de películas con una popularidad o recaudación atípicamente alta.

La reducción en el número de registros garantiza que los análisis posteriores se basen en datos más confiables. A partir de esta limpieza, el siguiente paso será explorar la distribución de calificaciones a lo largo del tiempo, identificando periodos con mejor desempeño en términos de ratings.

A continuación se presenta un gráfico de líneas, con el objetivo de comprender las variaciones que ha sufrido el rating de las películas a lo largo del tiempo:

Figure 7

Tras analizar el gráfico anterior (Figure 7), es evidente que los mejores periodos fueron los abarcados entre 1970 - 1975 y 1990 - 1995. Por lo que se utilizará un diagrama de caja y bigotes para estudiar ambos resultados:

Figure 8

Observando ambos diagramas (Figure 8), queda claro que existe una diferencia notable en la distribución de las calificaciones. Si bien ambos períodos presentan una dispersión considerable, el intervalo 1990-1995 muestra una mediana más alta, lo que indica que la mayoría de las películas en este rango de años obtuvieron calificaciones superiores en comparación con las de 1970-1975. Además, la amplitud intercuartílica en el segundo período es menor, sugiriendo una menor variabilidad en los ratings y una mayor concentración de películas con puntuaciones elevadas. Aunque ambos grupos presentan valores atípicos, el período 1990-1995 exhibe más valores extremos en el rango superior, lo que sugiere la presencia de películas altamente valoradas. Estos resultados indican que, en términos de rating, 1990-1995 fue una mejor época para IMDb, con un mayor reconocimiento y apreciación del público hacia las películas de esos años.

Ahora, se genera un histograma para entender con mayor claridad la distribución de los ratings entre 1990 - 1995, y de esta manera sacar algunas conclusiones sobre el mismo:

Figure 9

A su vez, se calcula la curtosis a través del siguiente algoritmo:

Code
library(moments)

dataset_filtrado <- subset(dataset_limpio, Released_Year >= 1990 & Released_Year <= 1995)
curtosis_IMDB <- kurtosis(dataset_filtrado$IMDB_Rating)

print(paste("La curtosis de los ratings de IMDb entre 1990 y 1995 es:", curtosis_IMDB))
[1] "La curtosis de los ratings de IMDb entre 1990 y 1995 es: 4.46384810020351"

Del gráfico anterior (Figure 9) es importante mencionar que al tener asimetría positiva, queda claro que la mayoría de las películas tienen calificaciones entre 7.5 y 8.5, pero hay algunas con ratings muy altos que jalan la distribución hacia la derecha. Además, la curtosis de 4.46 indica que la distribución es leptocúrtica, es decir, los valores están muy concentrados cerca de la media, pero con colas más pesadas. Esto es bueno porque muestra que en este periodo hubieron muchas películas con calidad bastante pareja, pero también varias con calificaciones por encima de 9.0. La presencia de estos valores atípicos en la parte alta sugiere que este fue un momento clave en la industria del cine, donde no solo surigeron películas buenas en general, sino que también aparecieron verdaderos clásicos que se volvieron referentes. En conclusión y dando respuesta a la pregunta que se planteó al inicio de este EDA, el mejor periodo en términos de ratings del top 1000 películas IMDb, fue, 1990-1995.

Haciendo uso de esta base de datos, es posible resolver muchas más dudas relacionadas a la industria del cine, basándonos en las calificaciones brindadas por los usuarios de IMDB. Algunas de ellas podrían ser:

¿Las películas con más votos en IMDb tienden a tener ratings más altos o más bajos?

¿Cuál género ha tenido el mejor performance en los últimos 10 años?

¿Existen directores o actores cuyos proyectos tengan ratings consistentemente altos o bajos?

¿Hay géneros que tienen raitings más consistentes que otros?

¿Cuántas películas tienen un rating superior a 9.0 y de qué géneros son?