Logo de kxs.frCours d'informatique pour le lycée et la prépa

Projet IMDb

Prérequis

Introduction

Ce projet utilise la base de données de l'IMDb : la plus grosse base de donnée mondiale sur les films, séries et animations. Il est possible de récupérer (légalement) un ensemble limité (mais conséquent) de cette base de données à cette adresse : https://datasets.imdbws.com/. La documentation est à cette adresse : https://www.imdb.com/interfaces/. Il est ensuite possible de transformer ces fichiers csv en une base de donnée MySQL. J'ai utilisé ce script (je ne garantis pas son fonctionnement).

Présentation

Dans ce projet, vous allez écrire un programme qui va permettre de générer un infographie se rapprochant de celle-ci :

Bien sur, il n'y aura pas l'image de la série mais vous devriez être capables de produire les trois tableaux de l'image. Pour cela, nous allons utiliser deux modules :

mysql.connector
pour se connecter à la base de donnée imdb sur votre ordinateur ;
processing
pour créer l'image.

Attention, toute la difficulté est de pouvoir ensuite générer cette infographie pour n'importe quelle série !

mysql.connector

Ce module permet de se connecter à une base de donnée mysql directement à partir de Python. Un utilisateur python avec le mot de passe python a été créer pour vous autoriser à vous connecter depuis Python. Voici un exemple de code qui permet de récupérer les 10 films les mieux notés :

import mysql.connector

conn = mysql.connector.connect(host="localhost",user="python", password='python', database="imdb")
cursor = conn.cursor()
query = "SELECT originalTitle, startYear, numVotes FROM work_basics JOIN work_ratings USING (id_work) WHERE worktype LIKE 'movie' ORDER BY numVotes DESC LIMIT 10;"
cursor.execute(query)
lignes = cursor.fetchall()
for ligne in lignes:
    print(ligne)
conn.close()

À partir de ce code et de l'activité corrigée sur l'IMDb vous devriez arriver à récupérer les données nécessaires pour créer l'infographie désirée.

Dans un premier temps vous allez devoir récupérer les informations pour créer le tableau de droite. Il faut donc obtenir les notes de tous les épisodes d'une série et les stocker dans un tableau contenant une saison par ligne. Pour Breaking Bad cela devra resembler à quelque-chose comme cela :

tab = [[9.1,8.7,8.8,8.3,8.4,9.3,8.9],
       [8.7,9.3,8.4,8.3,8.4,8.9,8.7,9.2,9.2,8.6,8.9,9.3,9.3],
       [8.6,8.7,8.5,8.3,8.7,9.3,9.6,8.8,8.5,7.8,8.5,9.5,9.7],
       [9.2,8.3,8.1,8.7,8.7,8.5,8.9,9.3,8.9,9.6,9.7,9.5,9.9],
       [9.3,8.9,8.9,8.9,9.7,9.1,9.6,9.6,9.5,9.2,9.6,9.2,9.8,10,9.7,9.9]]

dessin.py

Comme il n'existe pas de bibliothèque simple pour faire du dessin en Python, je vous propose d'en créer une en vous basant sur Turtle. Voici la structure de cette bibliothèque avec les fonctions ligne et bouge (on utilisera le français pour éviter les doublons avec Turtle) déjà implémentées :

from turtle import *

# On cache la tortue et on la fait aller vite
ht()
speed(0)

def bouge(x, y):
    """
        Permet de déplacer la tortue à un point donné
    """
    up()
    goto(x,y)
    down()

def ligne(x1, y1, x2, y2):
    """
        Trace une ligne entre les deux points (x1, y1) et (x2, y2)
    """
    bouge(x1, y1)
    goto(x2, y2)

def rect(x, y, width, height):
    """
        Trace un rectangle de coin haut gauche (x, y),
        de largeur width et de hauteur height.
    """


def cercle(x, y, r):
    """
        Trace un cercle de centre (x, y) et de rayon r
    """

def ecrire(x, y, texte):
	"""
		Écrit les texte aux coordonnées x et y.
		(x,y) devra être le point en bas à gauche du texte.
	"""

Il reste donc rect, cercle et ecrire à implémenter. Il faudra aussi surement rajouter si cela est nécessaire un mécanisme pour colorier l'intérieur des rectangles et cercles ainsi qu'un moyen de changer la couleur des traits et du remplissage. Toutes le améliorations nécessaires sont les bienvenues.

Dessin

Nous allons maintenant utiliser le module que vous venez de créer pour représenter le tableau. Vous utiliserez donc la commande suivante au début de votre programme :

from dessin import *

Vous pouvez utiliser une variation de couleurs différente si cela vous semble plus approprié. Vous utiliserez en entrée le tableau contenant les notes de chaque saison.

Améliorations

Vous pouvez ensuite vous attaquer aux deux autres graphes de l'image.

Tableau du barème

Voilà le barème complet sur 15 pour ce projet.

Tâche Barème
Génération du tableau des notes 2 points
Création de la bibliothèque dessin.py 3 point
Tableau des notes par épisode avec couleurs 3 point
Histogramme des notes par saison 2 points
Tableau des tops et flops 2 point
Code propre 1 points
Code optimisé 1 point
Commentaires 1 points
Totals 15