Projet : les transactions Mobile Money
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 :
- combien d'argent est passé par ses points, et combien de frais ont été encaissés ;
- quels types d'opérations dominent ;
- à quelle heure il y a le plus de monde, pour savoir quand mettre deux agents ;
- 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 deheure, 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 :
- Kaggle (kaggle.com/datasets) : des jeux de données sur tous les sujets, avec des carnets d'analyse écrits par d'autres, à lire pour apprendre ;
- Zindi (zindi.africa) : la plateforme africaine de compétitions de données, avec des problèmes réels du continent (agriculture, santé, finance) ;
- data.worldbank.org : les données de la Banque mondiale sur tous les pays, dont le Cameroun (population, électricité, accès à Internet...).
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.