Data Science appliquée sur les films sortis au cinéma entre 2000 et 2017

Introduction

Le site IMDb (Internet Movie Database) est un site web qui sert de base de données en ligne sur le cinéma mondial. Ce site web contient donc un grand nombre de données publiques sur les films comme le titre du film, l’année de sortie du film, le genre du film, l’audience, la note des critiques, la durée du film, le résumé du film, les acteurs, les réalisateurs et bien d’autres informations. Face à la grande quantité de données disponibles sur ce site, je me suis dit qu’il serait intéressant d’analyser les données des films sur le site IMDb entre l’année 2000 et l’année 2017.

=> Mon code Python est disponible sur mon GitHub et vers ce lien.

Comparaison entre Python et R

Pour faire mon analyse sur les données du site IMDb, j’ai hésité entre Python et R. Comme j’ai utilisé ces deux langages sur différents projets personnels, je peux ainsi les comparer. Voici mes observations personnelles sur ces langages pour la Data Science :

  • Le langage R est un langage dont la syntaxe est assez simple, il est très simple d’utiliser et manipuler des vecteurs et matrices avec R à partir d’un dataset (jeu de données), puis ensuite afficher les graphiques. C’est clairement un langage orienté pour l’analyse de données et en pratiquant avec R, j’ai constaté que ce langage dispose d’une grande variété de graphiques avancés, en particulier avec la librairie ggplot2. Le langage R dispose aussi déjà des fonctions statistiques et propose de nombreux packages pour traiter un problème spécifique de Data Science. Je ne suis donc pas étonné que R soit très utilisé par des statisticiens. Le langage R est un langage qui me fait rappeler au langage Matlab pour faire des scripts afin de traiter des problèmes d’ingénierie, et j’utilisais souvent des vecteurs et matrices avec ce langage pour tracer des graphiques, et aussi interagir avec des modèles Simulink (modélisation de systèmes robotiques, filtres de Kalman, drones pour le vol vertical, etc.). Je suis donc quasi sûr qu’il doit être aussi possible de faire de la Data Science avec Matlab, même si ce langage est plus axé sur les mathématiques et l’ingénierie (industrie, robotique, mécatronique et vision par ordinateur).
  • Le langage Python est un langage de programmation plus large que R. C’est un langage de programmation orienté objet (POO) et c’est aussi un langage de scripting. Avec Python, il est possible de développer des interfaces graphiques, des applications logicielles, du réseau (client-serveur, TCP, sockets), des jeux, de créer un modèle 3D avec un script Python dans Blender, de créer un site web, et bien sûr de l’analyse de données (Data Science). Pour l’anecdote, le site web d’hébergement de vidéos, YouTube, racheté par Google, est développé en Python. Il est donc possible de faire beaucoup plus de choses avec Python que R. Python est aussi un langage qui obéit à une logique d’indentation, il est très adapté pour implémenter rapidement des algorithmes complexes et il est scalable, c’est-à-dire qu’il est capable de traiter un grand volume de données et est plus performant en temps de traitement des données que R.

J’ai donc préféré utiliser Python pour analyser les données du site IMDb.

Python et Data Science

Pour faire de la Data Science avec Python, j’utilise Python avec les librairies logicielles suivantes :

  • Numpy : il contient de nombreuses fonctions pour le calcul numérique (vecteurs, matrices, polynômes, etc.).
  • Matplotlib : il permet de tracer et visualiser des données sous formes de graphiques.
  • Pandas : il permet de manipuler et analyser des données (dataframes).
  • Seaborn : il complète Matplotlib en fournissant des graphiques statistiques attrayants.

Il y a aussi la librairie Scikit-learn de Python qui permet de faire du machine learning, mais je n’en ai pas eu besoin pour cette analyse des données sur IMDb.

Le premier travail du Data Scientist est de préparer les données, cette étape peut prendre du temps, si les données ne sont pas disponibles sous un fichier CSV. Ensuite, après que le dataset soit prêt, le Data Scientist doit explorer les données et les analyser. Une fois cette étape faite, il doit modéliser les données, les adapter et les valider. Durant cette phase, il est possible d’utiliser des techniques de machine learning pour prédire les informations qu’on veut. Comme je l’ai dit précédemment, dans cette étude de IMDb, je n’ai pas eu besoin d’utiliser le machine learning car je ne cherche pas à prédire à partir des données sur IMDb. Une fois que la modélisation des données est terminée, la dernière étape est de visualiser les résultats et les interpréter.

En fait, l’objectif du Data Scientist est surtout de faire parler les données, donner du sens aux données à partir d’un grand volume de données structurées ou non, rassemblées ou éparpillées, internes ou externes, de faire ressortir les informations utiles qui vont apporter une valeur ajoutée dans par exemple un business afin d’augmenter le chiffre d’affaires d’une entreprise.

Etude du problème

Objectif : Analyser les données disponibles sur le site IMDb pour les films sortis au cinéma entre 2000 et 2017.

Préparation du dataset

Sur le site de IMDb, il est possible de filtrer les recherches, et donc d’afficher tous les films pour une année, comme par exemple l’année 2017.

Par exemple, la première page de tous les films de 2017 sous IMDb est disponible sous l’URL suivante :

http://www.imdb.com/search/title?release_date=2017&sort=num_votes,desc&page=1

J’ai ainsi commencé à inventorier les données disponibles sur cette page, comprendre leur signification, et surtout réfléchir à un moyen qui puisse récupérer les données sur IMDb. Après avoir inventorié les données disponibles sur cette page et comprendre la signification de chaque donnée, j’ai commencé la phase de sélection des données, autrement dit, les données dont je souhaite garder pour mon étude de Data Science.

Voici les données dont je souhaite garder :

  • Titre du film
  • Genre du film
  • Durée du film (en minutes)
  • Année de sortie du film
  • Nombre de votes du public
  • Note du public (note sur 10)
  • Note des critiques (note sur 100)
  • Recette du film (en millions de dollars)

Il reste désormais à récupérer ces données sur tous les films entre 2000 et 2017.

Mes connaissances en HTML, CSS et Javascript m’ont beaucoup aidé pour trouver un moyen de récupérer ces données de manière automatique. Comme tout site web, le code du site IMDb est fait en HTML, CSS et Javascript. Il fallait donc parser ce code HTML, et récupérer uniquement les données concernées entre certaines balises HTML et appliquer cela sur plusieurs pages et sur toutes les années de l’année 2000 à l’année 2017.

J’ai donc développé un script en Python en utilisant la librairie BeautifulSoup, qui permet de parser du code HTML, j’ai limité le parsage à 8 pages pour chaque année, donc en commençant par l’année 2000, mon script Python récupère les données sur 8 pages, puis refait la même étape sur l’année suivante jusqu’à l’année 2017.

Dans mon script Python, j’envoie une requête HTML de type GET au site IMDb pour récupérer la page concernée à des temps réguliers. Avant de lancer le script Python, j’ai quand même regardé de nouveau le site IMDb avec la liste des films, et je me suis rendu compte que certaines données sont manquantes sur ce site IMDb. Pour certains films, il n’y a par exemple, pas de recette, pas de votes ou pas de durée du film. Comme il y a beaucoup de films, il est probable qu’il y ait d’autres données manquantes, donc si j’avais lancé mon script Python, j’aurai récupéré un dataset avec des valeurs manquantes.

J’ai réfléchi à plusieurs solutions pour remédier à ce problème de dataset avec des valeurs manquantes qui sont les suivantes :

  1. Supprimer la ligne avec les valeurs manquantes
  2. Remplir les champs vides par des valeurs spécifiques
  3. Remplir les champs vides par des calculs

J’ai préféré opter pour la première solution, donc j’ai mis à jour mon script Python, pour qu’il ne prenne pas en compte les films dont des données sont manquantes lors du parsage. Une fois cela fait, j’ai lancé mon script, et j’ai attendu une demi-heure pour récupérer les données entre 2000 et 2017.

Analyse des données

J’ai ainsi récupéré le dataset avec le script Python. Avec la librairie Pandas, il est possible d’avoir une vue d’ensemble du dataset et en appliquant des fonctions comme info(), describe() et head(), j’ai pu vérifier le contenu de mon dataset.

Avec la fonction head() appliqué sur mon dataset, j’affiche une partie du dataset, ici, j’ai affiché les 8 premières données :

On retrouve bien les données sélectionnées :

  • Titre du film -> Movie
  • Genre du film -> Genre
  • Durée du film (en minutes) -> timeMin
  • Année de sortie du film -> Year
  • Nombre de votes du public -> Vote
  • Note du public (note sur 10) -> audienceRating
  • Note des critiques (note sur 100) -> criticRating
  • Recette du film (en millions de dollars) -> grossMillions

Ensuite, j’applique la fonction info() sur mon dataset :

On peut voir sur l’image ci-dessus, que j’ai récupéré 4583 entrées (lignes) avec 8 colonnes (un type de donnée pour chaque colonne). Pour chaque colonne de donnée (audienceRating, Genre, etc.), je n’ai pas de valeurs manquantes (non-null) et le typage des données semblent cohérents, par exemple, j’ai bien un float pour la note du public (audienceRating), un entier pour l’année (Year) et le nombre de votes (Vote). Cependant, les colonnes Genre et Movie sont par définition des chaînes de caractères et Python les interprète comme type object. Pour pouvoir utiliser et visualiser ces deux données Genre et Movie, je dois les typer en category et j’obtiens ainsi :

Les deux données Genre et Movie sont donc bien de type category.

Ensuite, j’affiche le résumé statistique du dataset avec describe().

Avec ce résumé, j’ai accès à beaucoup d’informations sur mon dataset, comme le nombre de lignes, la moyenne des données, l’écart-type, le minimum, le maximum et les trois quartiles.

Modélisation des données

Comme dit précédemment, j’ai sélectionné les données suivantes:

  • Titre du film -> Movie
  • Genre du film -> Genre
  • Durée du film (en minutes) -> timeMin
  • Année de sortie du film -> Year
  • Nombre de votes du public -> Vote
  • Note du public (note sur 10) -> audienceRating
  • Note des critiques (note sur 100) -> criticRating
  • Recette du film (en millions de dollars) -> grossMillions

A partir de ces données, je peux tracer toutes sortes de graphiques que la librairie Pandas permet.

Visualisation des données et interprétation des données

Je peux visualiser les notes du public (audienceRating) en fonction des notes des critiques (criticRating) sur tous les films confondus sortis entre 2000 et 2017.

Représentation graphique des notes du public en fonction des notes des critiques entre 2000 et 2017 :

On constate qu’il y a une forte concentration de points, en suivant une droite linéaire, ce qui signifie que dans la plupart des cas, les notes du public des films sont en accord avec ceux des notes des critiques. On voit aussi que pour le public, la distribution est plus forte entre 5/10 et 8/10 et ceux des critiques entre 30/100 et 80/100, ce qui confirme bien que dans la plupart des cas, la cohérence entre les notes du public et ceux des critiques.

Cependant, on peut voir que pour certains films, le public n’est pas en accord avec les critiques, par exemple, pour quelques films, les notes du public sont comprises entre 1/10 et 3/10 alors que les notes des critiques sont comprises entre 40/100 et 60/100. On peut aussi voir également que, pour d’autres films, les notes du public sont comprises entre 4/10 et 7/10 alors que ceux des critiques sont entre 20/100 et 50/100.

Dans ce graphique, on peut conclure que le public apprécie souvent les films et donne généralement une note au-dessus de 5/10 alors que les critiques sont plus sévères car les notes des critiques sont souvent plus basses que ceux du public pour tout film confondu.

Représentation graphique en hexagone des notes du public en fonction des notes des critiques entre 2000 et 2017 :

Sur ce graphique, on voit bien la linéarité des notes entre le public et les critiques.

Les films les plus appréciés par le public et les critiques entre 2000 et 2017

Après recherche dans le dataset, on peut déterminer les films les plus appréciés par le public et les critiques.

Les meilleurs films appréciés par le public entre 2000 et 2017 sont :

  • “The Century of the Self” sorti en 2002 avec un note de 9/10.
  • “The Dark Knight : Le chevalier noir” sorti en 2008 avec un note de 9/10.

Le film le plus apprécié par les critiques est :

  • “Boyhood” sorti en 2014 avec une note de 100/100.

Représentation graphique des notes du public en fonction de la durée du film entre 2000 et 2017 :

Sur ce graphique, on voit que la plupart des films durent entre 60 minutes et 120 minutes et récoltent le plus de notes et ces notes sont comprises entre 4/10 et 8/10 avec une majorité de notes au-dessus de 6/10.

Pour certains films qui durent plus de 3 heures (180 minutes), on constate que le public les apprécie car il donne généralement une note au-dessus de 7/10. Dans ce graphique, on voit que le plus long film dure 366 minutes soit 6 heures et 10 minutes et a une note de 8.5/10, et après une recherche dans le dataset, il s’agit du film “Nos meilleurs années” sorti en 2003 qui est un film de drame.

Représentation graphique des notes des critiques en fonction de la durée du film entre 2000 et 2017 :

Sur ce graphique, on constate que pour les films entre 60 minutes et 120 minutes, les notes des critiques sont plus concentrées et varient entre 10/100 et 98/100.

Représentation graphique de la recette des films en fonction des notes du public entre 2000 et 2017 :

Sur ce graphique, on voit clairement que les films qui ont été bien notés par le public sont des films qui ont rapporté le plus de millions de dollars, ce qui est logique car si les gens ont apprécié un film, ils vont en parler autour d’eux, ce qui va inciter d’autres personnes à aller au cinéma le voir, et donc augmenter la recette du film. Les notes du public sont plus concentrées entre 5/10 et 8/10.

Dans le dataset, le film qui a rapporté le plus de millions de dollars est le film “Star Wars: Episode VII – Le réveil de la Force” avec 936.66 millions de dollars sorti en 2015.

Représentation graphique de la recette des films en fonction des notes des critiques entre 2000 et 2017 :

Dans ce graphique, on constate que les notes des critiques sont plus concentrées entre 30/100 et 80/100, ce qui signifie que les critiques sont plus exigeants envers les films que le public. On remarque aussi que les films qui ont des notes élevées de la part des critiques sont ceux qui ont rapporté beaucoup d’argent.

Représentation graphique du nombre de votes en fonction des notes du public entre 2000 et 2017 :

Sur ce graphique, on voit bien que plus le public apprécie un film, plus ils votent et donnent une bonne note.

Le film qui a récolté le plus de votes est le film “The Dark Knight : Le chevalier noir” avec 1865768 votes.

Représentation graphique de la recette des films en fonction de la durée du film entre 2000 et 2017 :

Sur ce graphique, on remarque que les films entre 60 minutes et 150 minutes (2h30) sont ceux qui rapportent le plus. Par contre, les films d’une durée très longue, dépassant les 3 heures, rapportent beaucoup moins, c’est-à-dire, en-dessous d’un million de dollars.

On en déduit qu’un réalisateur devrait éviter de faire un film qui fasse au moins 3 heures, et qu’il devrait limiter son film a une durée entre 1h et 2h30 pour que son public ne se lasse pas durant la projection du film.

Distribution selon l’audience, les critiques, la durée, la recette, les votes et l’année :

  • Notes du public : la plupart des notes du public sont entre 6/10 et 7/10.
  • Notes des critiques : la plupart des notes des critiques sont entre 40/100 et 70/100.
  • Durée du film : un grand nombre de films ont une durée de 100 minutes (1h40).
  • Recette du film : la plupart des films rapportent entre 0 et 100 millions de dollars.
  • Nombre de votes : la plupart des votes sont situés entre 0 et 250000 votes.
  • Année : beaucoup de films sont sortis en 2000, 2009 et 2017.

Histogrammes des films par genre entre 2000 et 2017

Face à la grande quantité de données, j’ai divisé mon dataset en 3 sous dataset en regroupant par 6 genres pour chaque dataset car j’avais en tout 18 genres de films sur mon dataset.

Les genres de films sont :

  • Action
  • Aventure
  • Animation
  • Biographie
  • Comédie
  • Crime
  • Documentaire
  • Drame
  • Famille
  • Fantaisie
  • Horreur
  • Musique
  • Mystère
  • Romance
  • Science-Fiction
  • Thriller
  • Guerre
  • Western

J’obtiens ainsi trois graphiques d’histogrammes par groupe de 6 genres.

Histogramme de la recette par genre de film entre 2000 et 2017 :

Sur cet histogramme, on voit que les films de biographie, de comédie, de crime, de drame et d’horreur ont été les plus nombreux entre 2000 et 2017. Il y a eu peu de films de mystère, de western ou de guerre durant cette période.

On remarque aussi que les films qui ont rapporté le plus (entre 200 et 400 millions de dollars), sont des films d’action, de drame, et de mystère.

Histogramme des notes du public par genre de film entre 2000 et 2017 :

On remarque que les films d’action, d’aventure, d’animation, de biographie, de comédie, de crime, documentaire, de drame, de mystère et de science-fiction étaient les plus appréciés par le public (note supérieure ou égale à 8/10).

Histogramme des notes des critiques par genre de film entre 2000 et 2017 :

On constate que les films d’aventure, d’animation, de biographie, de comédie, documentaire, de drame, de science-fiction et de mystère sont les films les mieux notés par les critiques (note supérieure ou égale à 80/100).

Histogramme des votes par genre de film entre 2000 et 2017 :

Les films d’animation, de drame et de mystère ont reçu le plus de votes par rapport aux autres films.

Représentation graphique des notes du public en fonction des notes des critiques par genre de film entre 2000 et 2017 :

Comme j’ai divisé mon dataset en 3 parties de 6 genres de films, j’obtiens trois graphiques.

Le public et les critiques partagent dans la plupart des cas, le même avis sur les films, en particulier pour les films de comédie ou de crime. Les films d’animation et d’aventure sont les films les plus appréciés par le public et les critiques.

Les films de drame et documentaires sont les plus appréciés par le public et les critiques.

Les films de mystère et de science-fiction sont les plus appréciés par le public et les critiques.

Boxplot de quelques données en fonction des genres des films entre 2000 et 2017 :

Dans ces boxplots, il faut se référer à la médiane, au minimum et au maximum pour avoir une vue de la dispersion des données autour de la médiane.

  • Notes des critiques : les films d’animation, de biographie, de crime, de drame, de mystère et de science-fiction sont les mieux notés par les critiques.
  • Notes du public : les films d’animation, aventure, biographie, crime, documentaire, de mystère et de science-fiction sont le mieux notés par le public.
  • Recette des films : les films d’action, d’aventure, d’animation, de famille sont ceux qui ont le plus rapportés.
  • Durée des films : les films d’action, aventure, biographie, crime, famille, drame et de mystère sont ceux qui durent les plus longtemps en termes de durée.

On peut également tracer ces boxplot (boîtes à moustaches) sous forme de violinplot (violons) comme ci-dessous :

L’interprétation de ces graphiques sont les mêmes que ceux des boxplots.

Avec la librairie Pandas, je peux aussi afficher des graphiques sous forme de grille, ce qui permet d’afficher un grand nombre d’informations sur un même graphique.

J’ai ainsi pu afficher plusieurs informations sur le même graphique qui sont :

  • La note du public en ordonnée
  • La note des critiques en abscisse
  • Un genre par ligne
  • Une année par colonne

Le dataset contient 18 années (2000 à 2017) et 18 genres, cela fait donc beaucoup de colonnes à afficher (18 colonnes) et de genres à afficher. Pour améliorer la visibilité, j’ai donc divisé en 6 années (2000 à 2005, 2006 à 2011 et 2012 à 2017).

Représentation graphique des notes du public en fonction des notes des critiques entre 2000 à 2005 pour des films d’Action, Aventure, Animation, Biographie, Comédie et Crime :

Représentation graphique des notes du public en fonction des notes des critiques entre 2000 à 2005 pour des films de Documentaire, Drame, Famille, Fantaisie, Horreur et Musique :

Représentation graphique des notes du public en fonction des notes des critiques entre 2000 à 2005 pour des films de Mystère, Romance, Science-Fiction, Thriller, Guerre et Western :

Représentation graphique des notes du public en fonction des notes des critiques entre 2006 à 2011 pour des films d’Action, Aventure, Animation, Biographie, Comédie et Crime :

Représentation graphique des notes du public en fonction des notes des critiques entre 2006 à 2011 pour des films de Documentaire, Drame, Famille, Fantaisie, Horreur et Musique :

Représentation graphique des notes du public en fonction des notes des critiques entre 2006 à 2011 pour des films de Mystère, Romance, Science-Fiction, Thriller, Guerre et Western :

Représentation graphique des notes du public en fonction des notes des critiques entre 2012 à 2017 pour des films d’Action, Aventure, Animation, Biographie, Comédie et Crime :

Représentation graphique des notes du public en fonction des notes des critiques entre 2012 à 2017 pour des films de Documentaire, Drame, Famille, Fantaisie, Horreur et Musique :

Représentation graphique des notes du public en fonction des notes des critiques entre 2012 à 2017 pour des films de Mystère, Romance, Science-Fiction, Thriller, Guerre et Western :

Interprétation des résultats

  • Entre 2000 et 2005, très peu de films de famille, fantastique, mystère, romance, science-fiction, thriller et de guerre et encore moins pour les films de genre musical et de western entre 2000 et 2005. Les notes du public et des critiques sont en cohérence.
  • Entre 2006 et 2011, très peu de films fantastiques, de mystère, de romance, de science-fiction et de thriller et quasi pas de films de famille, musical, guerre et western. Le public et les critiques semblent être du même avis sur la plupart des films.
  • Entre 2012 et 2017, il y a eu peu de films de famille, fantastique, Mystère, Romance, Science-Fiction, Thriller, Western et quasi pas de film de guerre. Les notes du public et des critiques sont assez similaires.

Par conséquent, entre 2000 et 2017, le public donne des notes proches des notes des critiques sur une grande majorité des films et on en déduit que le public et les critiques ont le même avis sur un film.

Affichage de plusieurs graphes sur un même graphique

J’ai tracé 3 graphes sur un même graphique.

Chaque graphique regroupe :

  • Les notes du public en fonction des recettes des films
  • Les notes des critiques en fonction des recettes des films
  • Les recettes des films selon leur genre
  • Les notes du public en fonction des notes des critiques

Le 1er graphique est pour des films d’Action, Aventure, Animation, Biographie, Comédie et Crime entre 2000 à 2017.

Le 2e graphique est pour des films de genre Documentaire, Drame, Famille, Fantaisie, Horreur et Musique entre 2000 à 2017.

Le 3e graphique est pour des films de genre Mystère, Romance, Science-Fiction, Thriller, Guerre et Western entre 2000 à 2017.

Les 3 graphiques montrent que les films d’action, d’aventure, d’animation, de famille sont ceux qui ont le plus rapportés, les notes du public des films sont assez proches de ceux des notes des critiques, et que les films qui sont bien notés par le public et les critiques sont ceux qui ont rapporté beaucoup d’argent.

Conclusion

La préparation des données, la modélisation statistique de ces données, puis la visualisation de ces données avec une grande variété de graphique, et enfin l’interprétation de ces graphiques ont permis de mener une analyse et une vue globale des films sortis au cinéma entre 2000 et 2017.

Cette étude à travers un grand volume de données, m’a permis ainsi de déterminer les points suivants pour les films entre 2000 et 2017 :

  • Les notes du public des films sont assez proches de ceux des notes des critiques
  • Les critiques notent plus sévèrement que le public
  • La plupart des films durent entre 60 minutes et 120 minutes
  • Les films qui sont bien notés par le public et les critiques sont ceux qui ont rapporté le plus d’argent
  • Plus le public apprécie un film, plus ils votent et donnent une bonne note
  • Les films entre 60 minutes et 150 minutes (2h30) sont ceux qui rapportent le plus d’argent
  • Les films qui dépassent les 3 heures sont ceux qui rapportent le moins d’argent
  • Les films d’animation, de biographie, de crime, de drame, de mystère et de science-fiction sont les mieux notés par les critiques
  • Les films d’animation, aventure, biographie, crime, documentaire, de mystère et de science-fiction sont les mieux notés par le public
  • Les films d’action, d’aventure, d’animation, de famille sont ceux qui ont le plus rapportés
  • Les films d’action, aventure, biographie, crime, famille, drame et de mystère sont ceux qui durent les plus longtemps en termes de durée
  • Les films de biographie, de comédie, de crime, de drame et d’horreur ont été les plus nombreux
  • Il y a eu peu de films de mystère, de western ou de guerre
  • Les films qui ont rapporté le plus, sont des films d’action, de drame, et de mystère
A propos Nicolas Chen 63 Articles
Nicolas Chen est le Fondateur et Président de OpenDeepTech. Il est aussi un ingénieur développement logiciel qui a travaillé dans de nombreuses entreprises de divers secteurs tels que l'automobile, l'aéronautique, le médical, la robotique, la data science, le machine learning et le deep learning.

Soyez le premier à commenter

Laisser un commentaire