Guide recrutement data
Test technique Python pour la data : ce qu'on évalue vraiment
Python est le couteau suisse de la data. Mais l'écart est immense entre empiler des apply et écrire un pipeline vectorisé, testé et robuste en production. Voici ce qu'on évalue vraiment.
Data Builder·Juillet 2025·10 min de lecture·Data Analyst / Data Engineer
« Faire du Python » en data, c'est surtout manipuler de la donnée proprement et écrire du code qui tient en production. On regarde autant la rigueur que la connaissance de la syntaxe. Cinq dimensions.
1pandas : manipulation
Question discriminante
Comment agréger et joindre deux DataFrames proprement — et pourquoi éviter une boucle for sur les lignes ?
merge/join en maîtrisant le type (inner/left) et les clés.groupby().agg() avec plusieurs agrégats nommés.- Vectorisation plutôt que
iterrows/apply ligne à ligne (10 à 100× plus rapide). - Gestion des
dtypes et de la mémoire (categorical, downcast).
Signal d'alerte : boucler avec iterrows pour une opération vectorisable révèle une méconnaissance du coût — signal faible sur de vrais volumes.
2Nettoyage et qualité des données
Question discriminante
On vous donne un CSV sale (NA, doublons, types incohérents). Comment le fiabilisez-vous ?
- Valeurs manquantes : diagnostiquer avant de
dropna/fillna à l'aveugle. - Doublons : détecter avec
duplicated, comprendre la granularité attendue. - Types et dates :
astype, to_datetime, fuseaux horaires. - Valeurs aberrantes : les repérer, décider quoi en faire (garder/écarter) et le documenter.
Signal d'alerte : conclure sans avoir vérifié NA et doublons est le réflexe qui distingue un profil fragile d'un profil fiable.
3Code de qualité
Question discriminante
Comment structurez-vous un script data pour qu'il tienne en production et soit repris par l'équipe ?
- Fonctions et classes réutilisables plutôt qu'un long script monolithique.
- Exceptions ciblées et logging structuré plutôt que des
print. - Tests unitaires :
pytest, fixtures, cas limites. - Configuration et secrets hors du code (variables d'environnement, gestionnaire de secrets).
4APIs et entrées/sorties
Question discriminante
Comment récupérez-vous des données d'une API paginée de façon robuste ?
for page in range(1, n+1):
r = session.get(url, params={'page': page}, timeout=10)
r.raise_for_status() # échoue vite et clairement
rows += r.json()['data']
time.sleep(backoff) # respecter le rate limit
- Pagination + retry avec backoff exponentiel sur les erreurs transitoires.
timeout systématique et gestion du rate limit.- Authentification propre (token, refresh) sans secret en dur.
- Formats de sortie : Parquet plutôt que CSV pour la donnée volumineuse.
5Performance et volumétrie
Question discriminante
Le dataset ne tient plus en mémoire. Que faites-vous ?
- Réduire l'empreinte :
dtypes économes, colonnes utiles seulement, categorical. - Traitement par lots (chunking) plutôt que tout charger d'un coup.
- Passer à un moteur adapté : DuckDB / Polars en local, Spark à l'échelle.
- Savoir quand quitter pandas est un marqueur de séniorité.
6Grille par niveau
| Niveau | Maîtrise attendue | Signal GO | NO-GO |
|---|
| Junior | pandas de base, lecture/écriture de fichiers | Agrège et joint proprement, vérifie ses données | Boucle for pour une opération vectorisable |
| Confirmé | Vectorisation, nettoyage, fonctions, tests | Écrit du code testé, gère les cas limites | Ne teste rien et abuse des print |
| Senior | APIs robustes, logging, perf/volumétrie | Sait quand quitter pandas, sécurise les secrets | Met des secrets en dur dans le code |
| Lead | Architecture de pipelines, standards, packaging | Définit les conventions et l'outillage d'équipe | Ne peut pas expliquer un choix d'architecture |
Home›Blog›Python technical interview for data
Data hiring guide
Python technical interview for data: what we really assess
Python is the data Swiss army knife. But the gap is huge between stacking apply calls and writing a vectorized, tested, production-robust pipeline. Here's what we really assess.
Data Builder·July 2025·10 min read·Data Analyst / Data Engineer
‘Doing Python’ in data mostly means handling data cleanly and writing code that survives production. We look at rigour as much as syntax knowledge. Five dimensions.
1pandas: manipulation
Key question
How do you aggregate and join two DataFrames cleanly — and why avoid a for loop over rows?
merge/join, mastering the type (inner/left) and the keys.groupby().agg() with several named aggregates.- Vectorization over row-wise
iterrows/apply (10–100× faster). - Managing
dtypes and memory (categorical, downcast).
Warning signal : looping with iterrows for a vectorizable operation reveals a lack of cost awareness — a weak signal on real volumes.
2Data cleaning and quality
Key question
You're given a messy CSV (NAs, duplicates, inconsistent types). How do you make it reliable?
- Missing values: diagnose before blindly
dropna/fillna. - Duplicates: detect with
duplicated, understand the expected granularity. - Types and dates:
astype, to_datetime, time zones. - Outliers: spot them, decide what to do (keep/remove) and document it.
Warning signal : concluding without checking NAs and duplicates is the reflex that separates a fragile profile from a reliable one.
3Quality code
Key question
How do you structure a data script so it survives production and can be picked up by the team?
- Reusable functions and classes rather than one long monolithic script.
- Targeted exceptions and structured logging rather than
print. - Unit tests:
pytest, fixtures, edge cases. - Config and secrets out of the code (env vars, secret manager).
4APIs and I/O
Key question
How do you fetch data from a paginated API robustly?
for page in range(1, n+1):
r = session.get(url, params={'page': page}, timeout=10)
r.raise_for_status() # échoue vite et clairement
rows += r.json()['data']
time.sleep(backoff) # respecter le rate limit
- Pagination + retry with exponential backoff on transient errors.
- Systematic
timeout and rate limit handling. - Clean auth (token, refresh) with no hard-coded secret.
- Output formats: Parquet over CSV for large data.
5Performance and volume
Key question
The dataset no longer fits in memory. What do you do?
- Reduce footprint: lean
dtypes, only useful columns, categorical. - Batch processing (chunking) rather than loading everything at once.
- Move to a fitting engine: DuckDB / Polars locally, Spark at scale.
- Knowing when to leave pandas is a seniority marker.
6Level grid
| Level | Expected proficiency | Signal GO | NO-GO |
|---|
| Junior | Basic pandas, file read/write | Aggregates and joins cleanly, checks the data | for loop for a vectorizable operation |
| Mid-level | Vectorization, cleaning, functions, tests | Writes tested code, handles edge cases | Tests nothing and overuses print |
| Senior | Robust APIs, logging, perf/volume | Knows when to leave pandas, secures secrets | Hard-codes secrets in the code |
| Lead | Pipeline architecture, standards, packaging | Defines team conventions and tooling | Can't justify an architecture choice |