Aller au contenu

Projet 2 : Où va notre argent?

Les Montréalais dépensent des centaines de millions de dollars par année en divertissement privé : billets de matchs, abonnements de streaming, entrées de cinéma, concerts.
Pendant ce temps, les piscines municipales manquent de financement. Les bibliothèques réduisent leurs heures. Les plateaux sportifs de quartier tombent en désuétude.

Est-ce qu’on fait les bons choix? Est-ce qu’on pourrait faire autrement?

C’est la question qu’on essaiera de répondre à travers ce projet.


Dans ce projet, vous allez analyser un jeu de données sur les dépenses en loisirs à Montréal. Vous allez le traiter avec NumPy, le visualiser avec Matplotlib, et produire un rapport qui répond à la question :

Si 1 % de l’argent dépensé en divertissement privé à Montréal était réorienté vers les services publics, qu’est-ce qu’on pourrait financer?


Le fichier loisirs_montreal.csv présenté ci-dessous contient les dépenses estimées en loisirs pour les ménages montréalais en dollars par ménage par année, pour quatre années : 2017, 2019, 2021 et 2023.

sous_categorie,grande_categorie,depense_2017,depense_2019,depense_2021,depense_2023
Cinéma - billets,Cinéma,103.01,99.85,39.24,90.54
Cinéma - concessions,Cinéma,75.28,79.91,34.97,79.86
Hockey - billetterie,Hockey,113.38,126.48,0.00,141.26
Hockey - concessions,Hockey,19.72,24.32,0.00,28.25
CF Montréal - billetterie,CF Montréal,17.54,18.21,4.52,18.32
Alouettes - billetterie,Alouettes,10.32,6.75,4.25,14.83
Streaming - vidéo,Streaming,72.00,120.00,185.00,245.00
Streaming - musique,Streaming,35.00,55.00,68.00,88.00
Jeux vidéo - consoles/PC,Jeux vidéo,85.00,92.00,145.00,108.00
Jeux vidéo - mobile,Jeux vidéo,35.00,42.00,58.00,65.00
Jeux vidéo - abonnements,Jeux vidéo,8.00,18.00,32.00,48.00
Spectacles en salle,Concerts,95.00,108.00,5.00,92.00

La matrice de données est 12 sous-catégories × 4 années = 48 valeurs.

Cinéma

Billets : admissions au Québec (OCCQ, Optique culture) × 48 % × prix moyen avant taxes (OCCQ) ÷ ménages MTL.

Concessions : mêmes admissions × Concession per patron (CPP) du rapport annuel Cinéplex (TSX : CGX).

Note 2021 : cinémas fermés 16 semaines au Québec — valeurs très basses attendues.

Hockey — Canadiens

Billetterie : 41 matchs × 21 105 places × prix estimé × 85 % de partisans montréalais ÷ ménages.

2021 = 0 : saison jouée entièrement en bulle (Toronto/Edmonton) sans spectateurs.

Concessions : estimation (le Groupe CH est une société privée).

CF Montréal

Billetterie : 17 matchs locaux MLS × assistance estimée × prix moyen × 90 % locaux ÷ ménages.

Note 2021 : capacité très réduite (restrictions sanitaires au Québec).

Alouettes

Billetterie : 9 matchs locaux CFL × assistance estimée × prix moyen × 90 % locaux ÷ ménages.

Signal fort : la baisse 2017→2019 reflète les difficultés de l’équipe (changements de propriété). La remontée 2023 coïncide avec la victoire de la Coupe Grey.

Streaming

Vidéo (Netflix, Disney+, Crave…) et Musique (Spotify, Apple Music…) : estimations de marché. La hausse marquée en 2021 reflète l’explosion des abonnements pendant les confinements.

Source de référence : Statistique Canada, tableau 11-10-0222-01.

Jeux vidéo

Consoles/PC, Mobile, Abonnements (Game Pass, PS Plus…) : estimations de marché basées sur les tendances canadiennes.

Signal à surveiller : les abonnements × 6 en 6 ans (8 48→ 48/ménage).

Source de référence : Statistique Canada, tableau 11-10-0222-01.

Spectacles en salle

Concerts, humour, comédie musicale : estimations basées sur les rapports ADISQ.

2021 : quasi-zéro — signal le plus brutal de la matrice, plus marqué encore que le cinéma.


Vous travaillerez dans un seul fichier : analyse_loisirs.py, disponible sur Léa.

Le fichier est organisé en quatre sections clairement séparées par des commentaires. Chaque fonction a un rôle précis et la fonction main() agit comme un orchestrateur appelant les diverses fonctions pour les taches d’analyse et visualisation. Aucun calcul ni aucun graphique ne se fait directement dans le main().

analyse_loisirs.py
├── Constantes
├── Chargement des données → charger_csv, lister_grandes_categories, filtrer_par_categorie
├── Analyse statistique → construire_matrice, total_par_annee, total_par_sous_categorie,
│ variation, top_n, sous_categorie_plus_volatile,
│ potentiel_reinvestissement, generer_recommandations
├── Visualisation → graphique_barres_groupees, graphique_variation,
│ graphique_potentiel
└── Programme principal → main

Ces valeurs sont déjà définies en haut du fichier. Utilisez-les dans vos fonctions plutôt que de réécrire les nombres.

ANNEES = [2017, 2019, 2021, 2023]
NB_MENAGES = {2017: 746000, 2019: 756000, 2021: 762000, 2023: 781000}
POURCENTAGE = 0.01 # 1 % réorienté vers les services publics

charger_csv est déjà implémentée — vous pouvez l’appeler immédiatement pour vérifier que vos données se chargent correctement.

def charger_csv(chemin):
"""
Lit loisirs_montreal.csv et retourne trois listes :
sous_categories : liste de str — 12 noms de sous-catégories
grandes_categories : liste de str — 12 grandes catégories (avec doublons)
matrice : liste de listes de float
chaque sous-liste = [dep_2017, dep_2019, dep_2021, dep_2023]
"""
# ✅ Déjà implémentée (rien à modifier)
def lister_grandes_categories(grandes_categories):
"""Retourne la liste triée des grandes catégories, sans doublons."""
# TODO - Code à écrire
def filtrer_par_categorie(sous_cats, grandes_cats, matrice, categorie):
"""
Retourne deux listes (sous_cats_filtrees, sous_matrice)
contenant uniquement les lignes correspondant à la grande catégorie donnée.
"""
# TODO - Code à écrire

Voici la structure attendue. Les ___ sont les valeurs que votre code doit calculer et afficher.

====================================================
OÙ VA L'ARGENT DE LOISIRS À MONTRÉAL?
12 sous-catégories · 2017 / 2019 / 2021 / 2023
====================================================
Ménages MTL (2023) : 781 000
Dépense totale estimée pour la ville (2017) : ___ $
Dépense totale estimée pour la ville (2019) : ___ $
Dépense totale estimée pour la ville (2021) : ___ $ ← effet pandémie
Dépense totale estimée pour la ville (2023) : ___ $
→ La dépense totale = somme de toutes les sous-catégories ($/ménage)
multipliée par le nombre de ménages de l'année correspondante.
--- TOP 3 SOUS-CATÉGORIES EN 2023 ---
1. ___ (___ $/ménage)
2. ___ (___ $/ménage)
3. ___ (___ $/ménage)
--- IMPACT DE LA PANDÉMIE (2019 → 2021) ---
Plus forte baisse : ___ (−___ %)
Plus forte hausse : ___ (+___ %)
Sous-catégorie la plus volatile (écart-type le plus grand) : ___
--- REPRISE 2021 → 2023 ---
Sous-catégorie dont la reprise est la plus rapide : ___ (+___ %)
Sous-catégorie pas encore revenue au niveau 2019 : ___
→ Comparer 2019 et 2023 : variation(matrice, 1, 3) — valeur négative = pas encore revenue
--- ET SI ON RÉORIENTAIT 1 % DES DÉPENSES 2023? ---
Total ville 2023 : ___ $
1 % = ___ $ par année
→ ...
--- PISTES D'INVESTISSEMENT ---
1. ...
2. ...
3. ...
====================================================

Les deux premiers sont obligatoires. Le troisième est optionnel — faites-le si vous avez le temps, il bonifie le rapport.

Sauvegardez-les dans le dossier graphiques/. Ce dossier est créé automatiquement quand vous lancez analyse_loisirs.py.

FichierCe qu’il montre
graphiques/01_barres_groupees.pngToutes les sous-catégories × 4 années
graphiques/02_impact_pandemie.pngVariation 2019→2021 par sous-catégorie
graphiques/03_potentiel.png (optionnel)Ce que représente 1 % réorienté

  • Fichier analyse_loisirs.py complété
  • Rapport écrit (2-3 pages) + dossier graphiques/ avec les 2 graphiques obligatoires (+ le 3e si réalisé)

Le rapport comporte trois sections distinctes.

Section 1 — Les données : Décrivez ce que le jeu de données contient. Quelles catégories vous semblent solides (sources officielles) vs estimées? Quelles limites avez-vous identifiées?

Section 2 — Les résultats : Répondez à la question centrale en vous appuyant sur vos graphiques et vos calculs. Qu’est-ce que votre matrice révèle? Quel est l’impact de la pandémie? Quelles tendances ressortent sur 2017-2023? Qu’est-ce qui vous a surpris?

Section 3 — Le code : Expliquez en français, sans copier le code, comment votre programme fonctionne. Décrivez le rôle de chaque groupe de fonctions, ce que représente votre matrice NumPy (shape, axes), et pourquoi vous avez utilisé axis=0 ou axis=1 à tel endroit.

Vous présentez vos résultats et vous répondez à la question centrale : investissons-nous bien notre argent et notre énergie en loisirs à Montréal?. Si vous faites la vidéo, ajoutez le lien dans votre rapport.


CritèrePoints
Chaque fonction a un rôle précis, main n’effectue aucun calcul20
Calculs NumPy corrects — axis, argmax, argsort, std, gestion des nan25
Graphiques lisibles — titre, axes étiquetés, légende, effet pandémie visible (2 obligatoires)15
Recommandations générées par le code à partir des données15
Qualité du code — noms de variables descriptifs, pas de code copié-collé en double10
Rapport écrit15
Vidéo+10
Total100