PC & Mobile

Le facteur le plus influent dans la classification des films selon la BDMI – Partie I: Raclage des données

Le facteur le plus influent dans la classification des films selon la BDMI - Partie I: Raclage des données


J'ai toujours été un passionné de cinéma et j'aime explorer d'excellents films en consultant différents sites Web de classements / critiques tels que IMDb, Rotten Tomatoes, etc. Lorsque je regarde la liste des meilleurs films, je me pose toujours la question suivante: Quels sont les principaux facteurs qui influencent le succès d’un film?, est-ce un budget, une billetterie, une langue ou un genre de film?

Par hasard, moi-même et trois autres cinéphiles (également des passionnés de données) avons décidé de mener une étude statistique sur les facteurs déterminants du succès d’un film. Nous avons décidé de regarder IMDb «Les 500 meilleurs films de tous les temps»; nous avons utilisé movie comme instances pour collecter diverses quantités liées à chaque film, puis nous avons effectué une analyse statistique concernant l'ensemble de données.

Notre objectif était de:

1. Utilisez la technique de récupération de données pour extraire des données d'une liste de films IMDb et créer un jeu de données.
2. Utilisez des statistiques descriptives et une modélisation multi-régression pour visualiser et analyser les données que nous avons collectées.
Top 500 films IMDb

Cet article se concentrera sur la première partie de ce projet de recherche, à savoir la création de jeux de données via le grattage et le nettoyage des données.

Motivation

Leobjectif La création de cet ensemble de données consiste à analyser les principaux facteurs qui influent sur le succès d’un film, mesurés par son classement. Notre équipe a créé cette base de données et obtenu les informations contenues dans cet ensemble de données à partir de grattage, à l'aide de Beautiful Soup, d'une page créée par IMDb en 2017 - Le plus grand film de tous les temps.

Composition

Instances et Variables

L'ensemble de données est composé uniquement defilms comme type d'instance. Il y a500 instances (films) au total. Notre ensemble de données contient toutes les instances possibles de la page Web.

Pour chaque instance, il consiste encertificat, durée, classement, genre, vote, brut, pays, langue et budget. Notrevariables catégorielles pour chaque instance comprennent des informations sur le certificat, le genre, le pays et la langue collectéestexte non traité directement gratté de la page Web. Un séjour sans failleVariables numériques pour chaque instance, des informations sur la durée, le classement, le vote, le montant brut et le budget collectés comme suit:texte et valeurs non traités Également gratté directement à partir de la page Web. Aucune étiquette ou cible n'est associée à chaque instance.

Parmi nos 500 instances, certains points de données de variables ont étémanquant Tels que les films bruts et le budget de certains films. Pour les cas sur lesquels nous pourrions trouver des informations ailleurs, nous avons ajouté les informations dans le fichier csv (notre ensemble de données). Toutefois, pour les cas dans lesquels des informations brutes ou budgétaires n’étaient pas disponibles, nous avons supprimé les cas. Notre jeu de données original incluait également Metascore pour chaque instance, mais nous avons décidé de le supprimer à la fin, car il manquait beaucoup de mégascores de films. La raison pour laquelle ces points de données manquent est qu’ils n’étaient pas disponibles sur le site Web original de la BDIM, car certains films sont très anciens et qu’il est donc difficile de collecter des données d’il ya soixante ans. Nous avons initialement collecté des données sans liens explicites entre les instances individuelles, car nous souhaitons analyser cet ensemble de données de manière objective.

Des bruits

Il y en asources de bruit dans le jeu de données. Par exemple, certains films étrangers ont des monnaies brutes et budgétaires en devise et nous avons converti manuellement ces monnaies étrangères en USD au taux de change actuel. Cela peut être inexact, car les taux de change fluctuent constamment et il se peut que cela ne reflète pas exactement les recettes brutes et budgétaires exactes des films étrangers. Il y a aussi des vieux films avec des recettes brutes et budgétaires collectées il y a longtemps. Nous n’avons pas ajusté le montant brut et le budget en fonction de l’inflation et de la dépréciation.

Informations contenues / données de IMDb

Le jeu de données estpartiellement autonome. Pour les variables telles que le certificat, la durée, le classement, le genre, le vote et le montant brut, le texte non traité et les valeurs sont directement extraits de la page Web et sont donc autonomes. Les trois autres variables - pays, langue et budget - n'étaient pas autonomes et ont été extraites des pages Web de chaque occurrence de film sur le site Web IMDb. Par exemple, pour trouver des informations sur le pays, la langue et le budget du premier film Citoyen Kane, nous sommes allés à la page web deCitizen Kane pour gratter le texte et les valeurs non traités. L'ensemble de données ne contient pas d'informations confidentielles ou offensantes.

Les données sont partiellement liée aux personnes en tant qu'évaluations, c'est l'opinion généralisée. Les classements peuvent refléter la façon dont le public perçoit les qualités des films. Cependant, certains groupes de personnes sont plus susceptibles d’évaluer. Par exemple, les personnes qui aiment vraiment ou n'aiment pas ce film ou ce casting en particulier ont plus de chances de donner leur opinion. Les cinéphiles sont également plus susceptibles d’évaluer mais de façon plus objective.

Processus de collecte

Toutes nos variables sont directement observables sous forme de texte brut et de valeurs sur les différentes pages de IMDb.

les packages que notre équipe a utilisés pour la collecte de données

Nous avons utilisé la bibliothèque Python BeautifulSoup pour extraire des données des pages Web IMDb. Comme indiqué dans le fichier Python fourni, pour chaque variable, nous avons identifié des modèles de texte ou des valeurs présentées au format HTML. Nous avons ensuite obtenu des informations pour chaque variable en identifiant les balises et la classe de chaque variable sur le site Web.

Pour des informations autonomes:

  • Nom du film: Nous avons identifié le nom du film sous les balises «h3» et la classe «lister-item-header». Nous avons simplement utilisé getText () pour obtenir des données texte et des expressions régulières pour supprimer les espaces supplémentaires.
obtenir des noms de film
  • Certificat: nous avons identifié les informations sur le certificat sous les balises «p» et la classe «text-muted text-small». Nous avons constaté que les informations dont nous avons besoin pour chaque occurrence de film sont toutes les trois balises. Nous avons donc ajouté le getText (). valeur de chaque troisième balise dans notre tableau de certificats.
Obtenir un certificat
  • Durée: Nous avons identifié que les informations dont nous avions besoin sur la durée se trouvaient sous les balises «span» et de classe «runtime». Comme dans le cas du certificat, de nombreuses informations textuelles sont renvoyées pour chaque instance. La durée dont nous avons besoin pour cet ensemble de données est toujours le premier texte renvoyé sous cette balise et cette classe. Nous n'avons donc ajouté que les informations de l'index 0.
Obtenir la durée
  • Notation: les informations dont nous avons besoin se trouvent dans une section d'informations sous les balises «div» et la classe «IPL-rating-star small». . ”Nous avons utilisé 2 boucles for pour obtenir les valeurs de classement.
Obtenir une cote
  • Genre: Obtenir des informations sur le genre était plus simple. Toutes les informations de genre sont sous les balises «span» et classe «genre». Nous avons simplement utilisé get_text () pour obtenir le texte dont nous avions besoin.
Obtenir le genre
  • Vote: le vote suit des schémas similaires à ceux du certificat. Nous avons d’abord trouvé une section d’informations contenant les données de vote sous les balises «p» et classe »text-muted text-small». Cette section comprend trois types d’informations récurrents. Les informations que nous avons collectées sont regroupées par tranche. Nous avons parcouru tous les trois morceaux et avons recherché des informations sous la balise «span», qui correspond au texte que nous souhaitons.
  • Brut: Les informations brutes sont également extraites des mêmes informations sous «span» utilisées pour extraire les données de vote. Les données brutes sont toujours la cinquième valeur présentée sous ce bloc d'informations. Nous avons donc simplement extrait les données à l'aide de get («data-value») sur l'index 4 du bloc de données.
Obtenir le vote et brut

Données provenant de liens externes:

Pour les variables suivantes, nous avons dû parcourir les pages Web de chaque occurrence de film. Nous avons constaté que le modèle de ces pages Web était composé de l'en-tête «https://www.imdb.com/title/tt» + de chiffres représentant un identifiant de film. Nous avons d’abord utilisé la fonction find_all de Beautiful Soup pour trouver tous les liens dans la page d’accueil principale. Par la suite, nous avons constaté que IMDB identifiait chaque film par une série de chiffres. Ensuite, nous utilisons la fonction re.compile () avec le modèle d’expression régulière ‘/ title / (tt d {5,7}) /’ pour rechercher les liens correspondants à ce modèle. Ensuite, nous avons filtré ces liens utiles et les avons ajoutés à une nouvelle liste. Après avoir imprimé la nouvelle liste, nous avons trouvé que chaque titre de film était répété deux fois. Ensuite, nous utilisons une fonction for loop pour extraire chaque lien en position impaire.

Trouver des identifiants de film

Utilisation de boucles for Dans chaque exemple, nous avons d’abord extrait une zone de texte contenant les informations nécessaires sous les balises «div» et de classe «txt-block». Dans la zone de texte, pour éviter des informations incohérentes dans chaque instance, nous avons utilisé le paramètre if- Elif structure à ajouter 0 pour les films sans informations de budget et ajouter "non spécifique" pour les films sans informations de langue. Nous avons reconnu que chaque type d’information suit un en-tête indiquant le type d’information. Par exemple, les données budgétaires suivies de la rubrique "Budget:", nous avons donc utilisé ces rubriques pour identifier les films dépourvus de telles informations en vérifiant si nous pouvions trouver les rubriques dans chaque cas.

Pour la majorité des instances avec toutes les informations disponibles, nous avons utilisé les fonctions try-except et if pour extraire les informations suivantes:

  • Pays: les informations sur les pays se trouvent sous la balise «h4». Nous avons donc utilisé getText () pour extraire les données texte après le titre «Pays:».
  • Langue: comme dans le pays, les informations sur la langue figurent également sous la balise «h4». Nous avons donc également utilisé getText () pour extraire les données texte après le titre «Langue».
  • Budget: Budget est similaire mais différent en ce sens que les informations budgétaires figurent également sous la balise «h4», mais nous ne pouvons pas utiliser getText (), car les informations budgétaires ne sont pas sous forme de texte. Les informations budgétaires étant stockées sous forme de valeur de données, nous avons utilisé l'attribut «.next_sibling» pour extraire la valeur de données après la rubrique «Budget:».
Extraire les données de tous les 500 films

Remarque: le jeu de données n'est pas un exemple. à partir d'un grand ensemble de données. Notre équipe A été impliqué dans la collecte de données sans aucune compensation. Il n'y a pas d'examen éthique processus réalisés. L'ensemble de données n'est lié aux personnes que lorsque les personnes ont publié leurs évaluations dans la BDIM.

Prétraitement / Nettoyage / Étiquetage

Pour créer le jeu de données au format csv, nous avons créé des tableaux vides pour chaque variable et ajouté des données extraites à ces tableaux pour le nettoyage et la création du fichier csv final. Voici quelques méthodes que nous avons utilisées pour nettoyer les données:

  • Expression régulière: Pour les noms de film, nous avons utilisé “\ n. + \ n (. +) \ n. + \ n” pour supprimer les espaces avant, après et entre les lettres.
  • Rstrip: nous avons utilisé l'attribut rstrip pour supprimer les espaces à la fin d'une chaîne pour Genre et budget.
  • Conversion de devise: Dans certains cas, la valeur brute était exprimée dans d’autres monnaies. Nous avons converti manuellement ces devises en USD.
  • Conversion de chaînes en nombres flottants ou entiers: Pour la durée, nous avons d’abord utilisé get_text () pour rechercher la chaîne après une balise. Ensuite, nous convertissons la chaîne de type duration en float. Pour Year, après avoir extrait des années du site Web à l'aide de la fonction get_text (), nous avons converti le type d'année de string en int. Pour Vote, après avoir extrait les votes du site Web à l'aide de get_text () et remplacé une virgule par un espace (car le texte était en mode monétaire, avec un signe dollar et une virgule), nous convertissons le type de vote de chaîne en entier.
  • Modification des unités pour la mise à l’échelle: nous avons divisé les données brutes par un million afin de mieux les mettre à l’échelle.

Utilisations du jeu de données

Notre ensemble de données est accessible via ce lien.

L'ensemble de données a été utilisé pour certaines tâches similaires d'analyse de films. Il existe de nombreuses analyses de données sur les films, mais certaines d'entre elles sont obsolètes et incomplètes. Par exemple, de nombreuses analyses de données portant sur les films d'une année spécifique ou des analyses portant spécifiquement sur des genres et des types de films. Notre ensemble de données peut également être utilisé pour analyser l’évolution des goûts des films au cours des dernières années ou pour prévoir les recettes brutes et budgétaires attendues en insérant d’autres faits de ce film à l’avenir. Notre composition de l'ensemble de données pourrait ne pas avoir d'impact sur les utilisateurs futurs et le jeu de données ne devrait pas être utilisé.

Conclusion

Dans cette première partie de notre recherche, nous avons utilisé des techniques telles que le grattage des données et l’expression régulière pour créer la base de données. Dans la partie II, nous analyserons l'ensemble de données que nous avons obtenu à partir de la liste de films et effectuerons des recherches et des modèles statistiques supplémentaires.

_
Il s'agit d'un projet de groupe mené par une équipe de quatre étudiants de l'Université Cornell: Yuri Dai, Serina Lee, Kexin Lou et Shangzhen Wu.

_
L'ensemble de données est créé à des fins de recherche et il n'y a pas de subvention ou de financement associé.

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close