ParcoursOuvrir l'appli

Projet : les transactions Mobile Money

Données : NumPy et pandas · 60 min

Le projet

M. Tchoupo tient un point de vente Mobile Money (MTN et Orange) avec des agents dans quatre villes. Il te confie l'export de ses transactions de juin 2026, mobile_money.csv. Il veut savoir :

  1. combien d'argent est passé par ses points, et combien de frais ont été encaissés ;
  2. quels types d'opérations dominent ;
  3. à quelle heure il y a le plus de monde, pour savoir quand mettre deux agents ;
  4. quel opérateur rapporte le plus de frais.

Les colonnes :

Colonne Contenu
date jour de l'opération, AAAA-MM-JJ
heure heure, HH:MM
type depot, retrait, transfert ou paiement
montant en FCFA
frais frais encaissés, en FCFA
ville ville de l'agent (parfois manquante)
operateur MTN ou Orange

Les données sont inventées pour le cours, mais elles ont la forme exacte des exports réels. Tu vas suivre les quatre étapes de toute analyse : lire, nettoyer, calculer, présenter, cette fois avec pandas.

Exercice : Étape 1 : lire et vérifier

Lis le fichier dans df, puis :

  • nb : le nombre de transactions ;
  • manquantes : le nombre de villes manquantes ;
  • remplace ensuite les villes manquantes par "Inconnue" dans le DataFrame (ici, c'est honnête : ça n'invente aucun montant).
Voir une solution
import pandas as pd

df = pd.read_csv("mobile_money.csv")

nb = len(df)
manquantes = df["ville"].isna().sum()
df["ville"] = df["ville"].fillna("Inconnue")

print(nb, manquantes)
print(df["ville"].value_counts())

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Étape 2 : les grands chiffres

Le fichier est chargé et nettoyé. Calcule :

  • volume : la somme de tous les montants ;
  • frais_total : la somme des frais ;
  • moyenne : le montant moyen d'une transaction, arrondi à l'entier ;
  • grosses : le nombre de transactions d'au moins 20 000 FCFA.
Voir une solution
import pandas as pd

df = pd.read_csv("mobile_money.csv")
df["ville"] = df["ville"].fillna("Inconnue")

volume = df["montant"].sum()
frais_total = df["frais"].sum()
moyenne = round(df["montant"].mean())
grosses = (df["montant"] >= 20000).sum()
print(volume, frais_total, moyenne, grosses)

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Étape 3 : par type d'opération

Construis par_type : un tableau qui donne, pour chaque type d'opération, le nombre de transactions (count) et le montant total (sum), trié par montant total du plus grand au plus petit.

Puis type_frequent : le type le plus fréquent (le plus de transactions).

Voir une solution
import pandas as pd

df = pd.read_csv("mobile_money.csv")
df["ville"] = df["ville"].fillna("Inconnue")

par_type = df.groupby("type")["montant"].agg(["count", "sum"]).sort_values("sum", ascending=False)
type_frequent = df["type"].value_counts().idxmax()
print(par_type)
print(type_frequent)

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Étape 4 : l'heure de pointe et les opérateurs

Calcule :

  • une colonne h : l'heure seule (les 2 premiers caractères de heure, par exemple "14") ;
  • pointe : l'heure qui compte le plus de transactions ;
  • frais_op : un dictionnaire des frais encaissés par opérateur ;
  • part_orange : la part des frais venant d'Orange, en pourcentage arrondi à 1 chiffre après la virgule.
Voir une solution
import pandas as pd

df = pd.read_csv("mobile_money.csv")
df["ville"] = df["ville"].fillna("Inconnue")

df["h"] = df["heure"].str[:2]
pointe = df["h"].value_counts().idxmax()
frais_op = df.groupby("operateur")["frais"].sum().to_dict()
part_orange = round(frais_op["Orange"] / df["frais"].sum() * 100, 1)
print(pointe, frais_op, part_orange)

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Étape 5 : la fonction de synthèse

Dernière brique, la plus utile : une fonction qui produit la synthèse de n'importe quel fichier de transactions, pour que M. Tchoupo puisse la relancer chaque mois.

Écris synthese(nom_fichier) qui lit le fichier, remplace les villes manquantes par "Inconnue", et renvoie un dictionnaire avec les clés :

  • "transactions" : le nombre de transactions ;
  • "volume" : la somme des montants ;
  • "frais" : la somme des frais ;
  • "meilleure_ville" : la ville au plus gros volume ;
  • "pointe" : l'heure de pointe (texte de 2 caractères).

Le correcteur la testera sur juin et sur un petit fichier de juillet. Pense à convertir les nombres avec int(...) : le dictionnaire doit contenir des entiers Python ordinaires.

Voir une solution
import pandas as pd


def synthese(nom_fichier):
    """Lit un fichier de transactions et renvoie ses indicateurs principaux."""
    df = pd.read_csv(nom_fichier)
    df["ville"] = df["ville"].fillna("Inconnue")
    return {
        "transactions": len(df),
        "volume": int(df["montant"].sum()),
        "frais": int(df["frais"].sum()),
        "meilleure_ville": df.groupby("ville")["montant"].sum().idxmax(),
        "pointe": df["heure"].str[:2].value_counts().idxmax(),
    }


print(synthese("mobile_money.csv"))
print(synthese("juillet.csv"))

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Et maintenant : de vraies données

Tu sais maintenant explorer n'importe quel fichier CSV. Les meilleurs exercices sont de vraies données, et il en existe des milliers, gratuites :

Dans les modules suivants, tu vas apprendre à interroger des bases de données avec SQL, puis à faire apprendre une machine à partir de ces tableaux : le machine learning commence là où l'analyse de données s'arrête.