CinéData

Application de recommandation de films construite end-to-end : ingestion de 50M+ lignes IMDB, pipeline de nettoyage en 10 étapes, moteur NearestNeighbors avec vectorisation TF-IDF et distance cosine, application Streamlit déployée en production.

Python Machine Learning Streamlit Pandas HTML + CSS NearestNeighbors TF-IDF Power BI Requêtes API RegEx
50M+
Lignes IMDB traitées
10 000
Films dans le dataset final
10
Étapes de pipeline
Page d'accueil CinéData Streamlit

Page d'accueil — CinéData, déployée sur Streamlit Cloud

Premier projet 100% GitHub — travail collaboratif en équipe, branches par feature, pull requests et code review. Tout le workflow est versionné et reproductible.
1

Pipeline IMDB + TMDB en 10 étapes

Point de départ : les datasets officiels IMDB, dont certains fichiers dépassent 50 millions de lignes. Pour éviter de tout charger en mémoire, nous avons pré-filtré les datasets nécessaires et certaines données sont traitées par chunks, filtrées et enrichies via la database TMDB. Chaque étape est un module Python indépendant (s01s10) orchestré par pipeline.py, garantissant la reproductibilité complète du processus.

s01–s04
Chargement & filtrage des titres IMDB
s05–s07
Extraction réalisateurs, casting, noms
s08
Dataset IMDB final consolidé
s09
Nettoyage données TMDB
s10
Fusion IMDB + TMDB → 10 000 films
s01Chargement des basics IMDB (Filtres avec Pandas)
s02Filtrage sur les versions françaises (RegEx important ici)
s03Nettoyage des ratings — seuils de votes minimums (filtres)
s04Sélection des films principaux (filtres)
s05Extraction des réalisateurs depuis crew
s06Enrichissement du casting et des producteurs (chunks)
s07Résolution des noms (chunks)
s08Consolidation du dataset IMDB final
s09Nettoyage & normalisation des données TMDB
s10Fusion multi-sources → dataset ML final (10K films)
2

Moteur de recommandation NearestNeighbors

Code build_artifacts — moteur de recommandation

Le moteur combine trois types de features pour construire une matrice de similarité :

  • Texte (TF-IDF) — résumé, casting et réalisateurs vectorisés en n-grammes (1,2), min/max_df pour filtrer le bruit et sortie en matrice sparses
  • Catégories (MultiLabelBinarizer) — genres, pays d'origine, popularité encodés en matrices binaires sparse aussi
  • Numériques (StandardScaler) — durée, année de sortie, note moyenne normalisées

L'utilisation d'une methode de calcul "cosine" se justifie ici par la nature des features choisies. Nous avons beaucoup d'informations textuelles, et malheureusement un simple calcul euclidiéen sera beaucoup trop sensible aux différentes échelles de valeur.
Le but ici est de dégager un "profil" de film pour en saisir les similitudes, pas de comparer les valeurs brutes d'une caractéristique.
Chaque feature est pondérée (w_genre=0.2, w_sum=0.3, w_cast=0.1…) pour jouer sur leurs importances dans la recommandation. La matrice finale est normalisée avec normalize(X) avant d'être passée à NearestNeighbors(metric="cosine").


Résumé technique : ce choix gère efficacement les matrices sparse et donne des résultats pertinents sur des données textuelles.

Les poids ont été ajustés empiriquement : le résumé (0.30) et le pays d'origine (0.25) ont le plus d'influence ; la popularité (0.05) et le casting (0.10) servent d'affinement.

3

Application interactive déployée

L'application expose le moteur dans une interface à 3 pages. Les affiches sont récupérées via l'API OMDB (avec fallback sur les URLs déjà présentes dans le dataset). Le design est personnalisé avec du CSS injecté via Markdown Streamlit. La page de recommandation affiche des badges de similarité calculés à partir des distances cosine pour différencier les niveaux de proximité entre films.

Page recommandations CinéData

Page recommandations — badges cosine, affiches TMDB, filtres période & note

Les 3 pages de l'application

  • Accueil — présentation du projet et contexte client (cinéma indépendant, département 23)
  • Catalogue — exploration des 10 000 films avec filtres genre, année, note et fiches détaillées
  • Recommandations — film de référence + filtres, résultats triés en 3 niveaux de popularité

🔥 Valeurs sûres

Distance cosine très faible, films très proches

⭐ Belles découvertes

Films similaires mais moins évidents

💎 Pépites cachées

Distance plus grande mais avec similarité thématique

🎨 Fiche détaillée

Chaque film possède une fiche détaillée avec des recommandations brutes sous celle-ci

Principales librairies Python

5 librairies clés parmi la vingtaine utilisée dans le projet.

🐼
pandas
Manipulation des datasets, nettoyage, fusions multi-sources en pipeline
🤖
scikit-learn
TF-IDF, MultiLabelBinarizer, StandardScaler, NearestNeighbors
🔢
numpy
Construction et normalisation de la matrice de features sparse
🎈
streamlit
Interface web multi-pages, déploiement cloud, CSS custom
🌐
requests
Appels API OMDB pour affiches et métadonnées en temps réel

Résultats & apprentissages

Un projet end-to-end complet, du fichier brut à l'application en production.

🔗

Pipeline reproductible

10 étapes modulaires (s01→s10) orchestrées par pipeline.py. Chaque étape produit des artefacts intermédiaires versionés sur GitHub.

🧠

Feature engineering hybride

TF-IDF, MultiLabelBinarizer et StandardScaler combinés avec pondération manuelle pour des recommandations précises et nuancées.

🚀

Mise en production

Application déployée sur Streamlit Cloud, architecture modulaire multi-pages, CSS personnalisé et appels API TMDB en temps réel.