Interview Insights · Data Analytics
How Interviewers Know Whether You Actually Built Your Notebook
Quick summary — Notebook ownership
Interviewers check notebook ownership through quirks, fluency and history, not through suspicion. Copied notebooks are common, so interviewers have simple ways to check. People who built an analysis remember the annoying parts of the data: duplicated test orders, a column that changed format, a city spelled three ways. They can change a groupby or a filter in seconds. And their repository shows the notebook growing over time. If you built your notebook, preparing for these checks takes an evening. If you did not, these checks are where it shows.
In this guide you will learn:
- Why the data's quirks are the strongest proof you built the analysis
- The live edits interviewers commonly ask for, with working pandas code
- How your git history supports or undermines your story
- What to say when part of the notebook was adapted from someone else
- An evening plan to prepare honestly for ownership checks
SECTION 01Questions only the person who cleaned the data can answer
My favourite ownership question is not about code at all. It is: 'What was the most annoying thing about this dataset?' Someone who spent hours cleaning it answers instantly and with feeling. Maybe dates came in two formats, or some orders had negative quantities that turned out to be returns, or the same city appeared as 'Bengaluru', 'Bangalore' and 'BLR'.
Someone who downloaded a finished notebook usually answers in general terms: 'there were some missing values'. Every dataset has missing values. What I want is the specific, slightly irritating detail that you could only know by living in the data. That memory is very hard to fake and very easy to keep if you write it down while you work.
| My question | Builder's answer | Borrower's answer | Why it separates them |
|---|---|---|---|
| Most annoying thing in the data? | Dates in two formats after a system change | Some missing values | Specific pain is remembered |
| Any rows you removed on purpose? | Internal test orders with a staff email domain | Duplicates, I think | Builders know their exclusions |
| Which column surprised you? | Quantity was negative for returns | None really | Surprises stick in memory |
| What would break with next month's file? | New product codes would be unmapped | It should work | Builders know their weak points |
import pandas as pd
orders = pd.read_csv('data/orders.csv')
# Quirk 1: dates switched from DD-MM-YYYY to YYYY-MM-DD mid-year
orders['order_date'] = pd.to_datetime(orders['order_date'],
format='mixed', dayfirst=True)
# Quirk 2: one city, three spellings
city_map = {'Bangalore': 'Bengaluru', 'BLR': 'Bengaluru'}
orders['city'] = orders['city'].replace(city_map)
# Quirk 3: staff test orders
is_test = orders['email'].str.endswith('@internal.example', na=False)
orders = orders[~is_test]
# Quirk 4: negative quantity rows are returns, not errors
returns = orders[orders['quantity'] < 0]
sales = orders[orders['quantity'] > 0]DATA QUIRKS LOG (keep this while you work)
Date | Quirk found | What I did
----------+----------------------------------+--------------------
Day 2 | Two date formats in order_date | format='mixed', dayfirst
Day 2 | Negative quantities | Split into returns
Day 3 | City spelled 3 ways | Mapping dictionary
Day 4 | Staff test orders in data | Filtered by email domain
Read this log the night before the interview.
Each line is a ready ownership answer.
One technical note: format='mixed' in pd.to_datetime needs pandas 2.0 or later. If an interviewer asks why you did not simply let pandas guess, the honest answer is that mixed day-first and year-first strings are exactly where guessing goes wrong, so you told it what to expect.
SECTION 02The small live edits that reveal fluency
The second check is a live change. During a screen share, I ask for something small: 'Can you show the median instead of the mean here?' or 'What if we only look at Delhi?' or 'Group this by quarter instead of month.' None of these are hard. They take a builder a few seconds, because the builder knows where the relevant line is and what it does.
A borrower has two problems. First, finding the right cell takes time, because they do not know the notebook's structure. Second, they are not sure what else depends on the variable they are changing, so they hesitate. I am not testing whether you can write perfect pandas from memory. I am watching how quickly you find your way around your own work.
| Edit I ask for | Where the change goes | Builder's speed | What hesitation suggests |
|---|---|---|---|
| Median instead of mean | The aggregation in one groupby | Seconds | Does not know where the metric is computed |
| Only one city | A filter before the groupby | Seconds | Unsure where data is filtered |
| Quarter instead of month | The period conversion line | Under a minute | Did not write the date logic |
| Add a count column | Named aggregation in agg() | Under a minute | Unfamiliar with the summary step |
summary = (sales
.assign(month=sales['order_date'].dt.to_period('M'))
.groupby(['city', 'month'])
.agg(avg_order=('amount', 'mean'),
revenue=('amount', 'sum'))
.reset_index())
summary.head()# Edit 1: median instead of mean
# Edit 2: only Delhi
# Edit 3: quarter instead of month
# Edit 4: add an order count
delhi = sales[sales['city'] == 'Delhi']
summary = (delhi
.assign(quarter=delhi['order_date'].dt.to_period('Q'))
.groupby('quarter')
.agg(median_order=('amount', 'median'),
revenue=('amount', 'sum'),
orders=('order_id', 'nunique'))
.reset_index())
summary
Named aggregations like avg_order=('amount', 'mean') make live edits easier, because the output column name tells you exactly which line to change. Writing your notebook this way is a small investment that pays off under pressure.
While you make an edit, say what you are doing: 'The metric is calculated in this agg call, so I will change mean to median here.' Talking while typing proves you know the structure even before the cell runs.
SECTION 03What your repository history says before you speak
The third check happens before the interview. If your notebook is on GitHub, I may glance at the commit history. A notebook that appears in a single commit called 'upload' with a polished final state is not proof of copying. Many people only push at the end. But it gives me nothing to support your story either.
A notebook that grew over several commits, with messages like 'add cohort table', 'fix date parsing for mixed formats' and 'move exploration to appendix', tells a story of real work. Even better if the messages match the quirks you mention in the interview. You cannot rewrite history for old projects honestly, but for every new project you can commit as you go, and for old ones you can explain how you worked.
| What I see in the repo | Neutral reading | Strong reading | How to improve it |
|---|---|---|---|
| Single commit, final state | Pushed at the end | Not applicable | Commit at each milestone in future work |
| Several commits, clear messages | Normal workflow | Built step by step | Keep messages specific |
| Commit fixes a bug you mention | Consistent story | Strong ownership proof | Mention the fix in the interview |
| README with data source and steps | Organised | Thought about reuse | Add how to run and known limits |
# Commit as the analysis grows, with specific messages
git add analysis.ipynb
git commit -m "Parse mixed date formats in order_date"
git add analysis.ipynb
git commit -m "Split negative quantities into returns table"
git add analysis.ipynb data/README.md
git commit -m "Add Delhi quarterly summary and data notes"
# See how the notebook changed over time
git log --oneline -- analysis.ipynb# Notebook diffs are noisy because outputs are stored
# inside the .ipynb file. Two common helpers:
# 1. nbdime shows notebook-aware diffs
pip install nbdime
nbdiff analysis.ipynb
# 2. Clear outputs before committing a work-in-progress
jupyter nbconvert --clear-output --inplace analysis.ipynb
git add analysis.ipynb
git commit -m "WIP: cohort grouping"
If part of your notebook came from a course, a tutorial or a teammate, say so plainly. 'The plotting helper came from a course exercise; the cleaning and cohort logic are mine' is a strong answer. It is specific, honest and puts the focus on what you did.
SECTION 04An evening plan to prepare for ownership checks
If the notebook is genuinely yours, these steps make that obvious in the interview. If parts are adapted, they help you separate and explain your own contribution clearly.
STEP 1: REBUILD YOUR QUIRKS LIST (30 minutes)
Open the raw data again, not the cleaned version.
For each column, ask:
- Any odd formats or units?
- Any impossible values (negative, future dates)?
- Any spelling variants?
- Any rows that should not be there?
Write at least four quirks with what you did
about each. These are your ownership answers.STEP 2: LIVE EDIT DRILL (30 minutes)
Time yourself on each, starting from the open notebook:
[ ] Change one aggregation (mean -> median)
[ ] Add a filter for one category or city
[ ] Change the time grain (month -> quarter)
[ ] Add one new column to a summary
[ ] Sort the result by a different column
Speak each step aloud while typing.
Target: find the right cell in under 15 seconds.STEP 3: CONTRIBUTION MAP (15 minutes)
Section | Mine | Adapted | From where
--------------------+------+---------+-----------
Loading and parsing | [ ] | [ ] | _________
Cleaning | [ ] | [ ] | _________
Main analysis | [ ] | [ ] | _________
Charts | [ ] | [ ] | _________
Conclusions | [ ] | [ ] | _________
Practise one honest sentence that summarises this map.
SECTION 05Habits that make ownership obvious
Build these habits into every new project, and ownership checks become easy.
- Log quirks as you find them — Keep a short text file of data surprises and your fixes. It becomes the most convincing interview material you own.
- Commit at milestones — Push after each meaningful step with a specific message, so your repository tells the story of how the work grew.
- Use named aggregations — Output names such as
median_ordermake every metric easy to locate when an interviewer asks for a change. - Credit borrowed parts — Note in a comment where a helper function came from. Honesty about small borrowed pieces makes the rest more believable.
- Narrate while you type — In live edits, say where the change goes and why before you run it. Silence while searching looks like unfamiliarity.
SECTION 06Interview Q&A — Notebook ownership
Q1What was the hardest part of cleaning this dataset?
Give one specific quirk and your fix. For example: 'The order date switched format partway through the year, from day-first to year-first. Letting pandas guess mixed up days and months, so I parsed it with format set to mixed and dayfirst, then checked that no dates landed in the future.'
Q2Can you change this summary to show the median instead of the mean?
Locate the aggregation and say it aloud: 'The average is calculated in this agg call, so I change mean to median and rename the output column.' Rerun the cell and briefly comment on how the result differs, for example that the median is lower because a few large orders pull the mean up.
Q3Your repository has only one commit. Did you write this notebook yourself?
Answer calmly and specifically: 'Yes, I worked locally and pushed at the end, which I now avoid. I can show the quirks I handled, such as the mixed date formats and test orders, and I am happy to make any change you like in the notebook now.'
Q4Which parts of this notebook did you not write yourself?
Be precise: 'The heatmap helper was adapted from a course exercise. The cleaning, the returns logic and the cohort analysis are mine.' Then offer to walk through one of your own parts. Specific honesty builds trust.
Q5What would break if we ran this on next month's data?
Name real weak points, such as new product codes missing from the mapping dictionary, a new city spelling, or a changed column name. Then say how you would guard against them, for example with a check that lists unmapped values before the analysis runs.
SECTION 07Test yourself — Notebook ownership quiz
Five questions. No sign-up.
0 / 5Pick an answer to see why it is right or wrong.
SECTION 08Frequently asked questions
Can interviewers tell if I copied my data science notebook?
Often, yes. They ask about specific data quirks, request small live changes and look at how the notebook evolved. Someone who did the work answers these quickly; someone who copied it usually struggles with the details.
Is it okay to use code from tutorials in my portfolio notebook?
Using a helper or pattern from a tutorial is normal. Make sure you understand it, adapt it to your data and be ready to say which parts are yours. Copying an entire analysis is what causes trouble.
How do I prepare for live coding on my own notebook?
Practise small edits on your notebook: changing an aggregation, adding a filter, changing the time grain and adding a column. Time yourself, speak while you type and add clearer headers where you struggle to find the code.
Should I upload my notebook to GitHub with commit history?
Yes. For new projects, commit at each milestone with clear messages. It shows how the work developed and supports your story. For old projects, a good README and clear explanations still help.
What if I forget details of an old notebook?
Revisit the raw data and the notebook before the interview and write a quirks list. If you still forget a detail in the room, say so honestly and reason through it from the code rather than guessing.
Does Uncodemy help with answers like these?
Yes. Uncodemy's Data Analytics Training Course in Noida (classroom and online) includes live projects, one-to-one mock interviews and resume reviews, so you practise answers like these with trainer feedback before the real interview. You can book a free demo class from this page to see how the sessions work.
SECTION 09Related reads
Classroom & online · Noida
Build analysis you can prove is yours
Our Data Analytics Training Course teaches Python, pandas, Git and analysis projects end to end, so your notebooks grow with real history and you can change them confidently in any interview.
₹15,500 · full programme- Projects on raw, messy data
- Git and GitHub workflow
- Live-edit interview drills
- Weekday & weekend batches