You inherit an extract whose numeric column mixes real zeros, cells with nothing recorded and one repeated round number - how do you establish what each means?
answer
- profile before you compute
- count the holes, then the values
- extremes against a defensible outside range
- zeros arriving in whole rows together
- the column cannot settle it alone
basics
~20 sProfile before computing: count the flagged holes, list the distinct values with their frequencies, check the extremes against a defensible range, see whether the zeros arrive in whole rows, then confirm the convention with whoever produced the column.
solid answer
~50 sTreat it as profiling work that happens before any analysis, not as part of the analysis. Four cheap passes get you most of the way: how many cells the absence check flags in each column; the distinct values with their counts, which exposes one value repeating implausibly often; the minimum and maximum against a range you can defend physically or commercially rather than against the data itself; and how the candidate states are spread over time and over source, because an encoding that starts partway through the history is a producer change rather than a property of the data. Zeros that arrive in whole rows at once, every measure at zero together, are a reporting gap wearing a measurement's clothes. Then do the non-technical step and ask what the producing system writes when there is no value. Record the conclusion beside the dataset and convert everything to one representation at a single boundary.
go deeper
The habit to build is looking before computing: how many holes, which values are most common, what the smallest and largest values are. Three quick looks catch most delivery surprises.
Explain why each pass works and what it cannot show: frequency without an external plausibility range proves nothing, and a column reporting no holes may simply be carrying absence as an ordinary value.
Show the whole loop - profile, slice by time and source, settle the convention with the producer, convert once at the boundary, record the decision - and name the case where the column can never answer the question.
The lasting question is who owns the convention. Decide whether your organisation accepts columns whose absence encoding is undocumented, and what a team is expected to do when a producer changes it without notice.
## Why this is a separate step Every figure you compute from this column inherits whatever you assumed about its blanks and its suspicious round number. Doing that reasoning inside the analysis means it is done implicitly, differently in each script, and never written down. Doing it first, as a short profiling pass with a written conclusion, costs an hour and is the difference between a number you can defend and a number you can only publish. The core difficulty is that four states can live in one delivered column at once: a measured zero, a cell with nothing recorded, a present value of length zero where the column admits text, and a stand-in code the producer wrote to mean no data. Three of the four are present values, so only one of them is visible to anything that looks for absence. ## The four passes 1. **Count the holes per column.** How many cells the absence check flags, as an absolute number and as a share of rows. A column that reports none is not thereby complete - it is a column where absence, if any, is being carried as a value. 2. **List the distinct values with their counts.** For a numeric column, the extremes plus the most frequent values are enough. One exact value with a count far out of line with its neighbours is the clearest single signal there is. 3. **Check the extremes against an external range.** Not against the data - against what the instrument can read, what the business can sell, what a date can plausibly be. Only an outside range can tell you that a value is impossible. 4. **Slice by time and by source.** Run the first three per month and per producing system. Conventions change: a feed that reported holes honestly for two years and started writing a code after a migration will look consistent in aggregate and obvious once split. ## Reading what the passes tell you | What you see | What it suggests | What it does not prove | |---|---|---| | One value repeating far outside a defensible range | a stand-in code | which of several reasons it stands in for | | Whole rows at zero across unrelated measures | a reporting gap filled with a default | that every zero in the column is suspect | | Holes concentrated in one period or one source | a collection or delivery failure | that the values elsewhere are trustworthy | | A frequent but plausible value | nothing on its own | anything at all without an external range | The last row is the discipline that keeps this honest. Frequency alone is not evidence; frequency plus impossibility is. ## The limits of profiling Profiling separates a stand-in code from a reading only when the code is impossible. When the producer chose a value that genuinely occurs - zero in a column where zero happens, or the first day of the month as a default date - the two are identical in storage and the column has no further information to give. At that point the work moves off the data: - the operational record of when a device, shop or feed was down; - a companion status or quality field delivered alongside; - the correlation between candidate rows and other columns that failed at the same time; - the producing team, who can simply tell you. And if none of that resolves it, the deliverable is the ambiguity itself: how many rows are affected, which figures they touch, and what each competing interpretation would do to the headline number. ## Closing it out Finish with three things, in this order. Settle the convention with the producer in writing, so the next delivery is interpretable without repeating this. Convert to one representation at a single boundary - where the data enters your process - so every downstream step sees the same meaning for a hole. And record what you concluded next to the dataset, including the values you treated as codes and the date the convention was confirmed, because the single most common way this decays is that somebody fixes it, tells nobody, and the upstream convention changes six months later. ## What an interviewer is listening for The signal is that you do not start by computing. A strong answer names concrete, cheap passes, insists that plausibility comes from outside the data, admits the case profiling cannot settle, and ends with the producer conversation rather than with a clever heuristic. A weak answer proposes a rule - treat anything below some threshold as absence - without ever asking what the producing system actually does.
- What do you do when profiling cannot separate a measured zero from a code that is also zero?Say so and escalate. Inside the column the two are identical, so the evidence has to come from elsewhere: uptime records, a companion status field, whole rows arriving at zero together, or the producer's own answer. Until it is settled, publish the figure with its population stated and the affected volume named, or hold it.
- Why convert the delivered convention at one boundary rather than handling it in each report?Because every script that handles it separately is another place to get it wrong and another place to update. One conversion, close to where the data enters your process, gives every downstream step the same meaning for a hole and leaves exactly one thing to change when the producer alters the encoding.
- How does slicing by time change what the profile tells you?It separates a property of the data from a change in the producer. Aggregated over two years, a convention that switched after a migration looks like a modest share of odd values; split by month it looks like a step change on a known date, which is both a much stronger signal and the thing you actually take to the producing team.
saying these in an interview costs you the question
- Starts computing averages before knowing what a blank cell means.
- Treats a frequency spike as proof without any plausibility check.
- Assumes one convention holds across the whole history of a feed.
- Skips the producer conversation because the data should speak for itself.
- Converts codes to absence separately inside every downstream report.