
A messy-data portfolio project shows how you handle problems real analysts meet: duplicate customers, totals that disagree between systems, a metric whose definition changed and a tracking outage. Recruiters want to see how you found each, what you decided and how you told the business. This guide gives six traps, how to detect them and a README that proves it.
One fact about our own offer, so you can judge this fairly. The EDWartens data analyst job simulation is a training project at a simulated company, done day by day with project documents, emails and tickets. It is not employment, an internship or a work placement. The first week is free and every ticket is checked as you hand it in. A graded, verifiable certificate is optional, and the longer Premium version is paid; prices show in your own currency before you pay. It shows on your EDWartens profile under Work experience, marked as a job simulation.
Why tidy datasets do not impress
Famous practice sets such as Titanic and Iris are useful for learning a library, but thousands of applicants have the same notebook. A hiring manager who opens it learns that you can follow a tutorial. A project built on faulty data, with a visible trail of how you found and handled each fault, shows what the job is actually like. What a reader opens first is not the notebook but the README and the memo, so those are where your effort should go.
Everything below uses an invented company, Tidewater Bikes, a made-up city bike hire firm. The data is synthetic. If you build your own version, say so on the first line of your README.
Start with a brief, not a dataset
Real analysis starts with a question from someone else. Write yours as a ticket, so the project has a purpose and a reader. For example: “Why did repeat bookings fall in September, and is the fall real?” Then write a small data dictionary so the reader knows what each field means.
| Part of the brief | Example for the Tidewater project |
|---|---|
| Question | Why did repeat bookings fall in September, and is it real? |
| Requester | Head of Operations (a role, not a person) |
| Decision it informs | Whether to run a retention campaign in October |
| Sources | Booking system export, finance payment export, customer list, web tracking |
| Date range | 1 July to 30 September |
| Deadline and format | One page and a chart, by Friday |
| Known limits | Synthetic data; web tracking has a gap; customer list was merged in August |
Trap 1: profile before you analyse
Before any chart, look at what you have. Count the rows, check what should be unique, check the dates and look at blanks. Eight checks catch most of the damage. Keep the results in a log, because the log is part of the portfolio piece.
| Check | What you ask | How to run it |
|---|---|---|
| Row count | Does it match what the source says? | COUNT(*) in SQL, len() in Python, ROWS() in a sheet |
| Key uniqueness | Is each booking ID unique? | GROUP BY id HAVING COUNT(*) > 1 |
| Nulls | Which fields are blank, and how many? | Count nulls per column, as a percentage |
| Date range | Are all dates inside the stated period? | MIN and MAX; look for future dates |
| Valid values | Are categories what the dictionary says? | SELECT DISTINCT on each category field |
| Duplicates | Are there repeats under different IDs? | Group on email, date and amount |
| Referential integrity | Does every booking have a real customer? | LEFT JOIN, count the unmatched |
| Plausibility | Are amounts and durations believable? | Min, max and a histogram; look for zeros and extremes |
Trap 2: two sources that should agree and do not
The booking system says 4,812 completed bookings in the period. Finance says 4,775 paid. Neither is wrong; they measure different things. The job is not to pick one but to build a bridge that explains every difference.
| Step | Count | Reason |
|---|---|---|
| Bookings in the booking system | 4,812 | Starting point |
| Less refunded bookings | 21 | Paid, then refunded; finance counts net |
| Less test bookings | 9 | Created by staff, never paid |
| Less duplicates | 4 | Same booking submitted twice |
| Less paid in the next month | 3 | Timing difference at the period end |
| Equals finance paid bookings | 4,775 | Agrees with finance |
The write-up sentence: “The booking system and finance differ by 37 bookings; all 37 are explained by refunds (21), test bookings (9), duplicates (4) and timing (3).” A bridge that ends at zero unexplained is the thing to show. If it does not, say how large the gap is and what you suspect.
Trap 3: a metric whose definition changed
“Active riders” sounds clear and is not. Suppose the dashboard counted a rider as active if they took at least one ride in the last 30 days (version 1), and in August the business changed it to include anyone with a paid membership, riding or not (version 2). Show both side by side, never silently switch.
| Definition | Active riders in September | What changed |
|---|---|---|
| Version 1: at least one ride in 30 days | 3,940 | Original dashboard definition |
| Version 2: ride or paid membership in 30 days | 5,210 | Used from August |
| Difference | 1,270 | Members who did not ride |
The lesson for the memo: a figure that “rose” from August to September may only have crossed the definition change. State which definition each chart uses, and when you must compare across the change, recompute the older months with the new rule.
Trap 4: merged records and blank sources
Systems get merged and fields get left blank. After a hypothetical customer list merge on 3 August, check two things. First, how many rows now share an email with another row. Second, how many have no source recorded at all.
| Measure | Rows | Share of 7,420 |
|---|---|---|
| Rows sharing an email with another row | 318 | 4.3 percent |
| Rows with a blank acquisition source | 1,106 | 14.9 percent |
| Rows in both groups | 12 | 0.2 percent |
| Rows with at least one fault (318 + 1,106 - 12) | 1,412 | 19.0 percent |
| Clean, unique rows with a source | 6,008 | 81.0 percent |
Watch the overlap: twelve rows are in both groups, so you subtract them once when you add the groups. Always check your own arithmetic when sets overlap. The point is to put a size on the damage, and to say what you will not fill in. You do not guess missing sources, and you do not merge people on a similar name. You report the effect: any analysis by acquisition source leaves out about 15 percent of customers.
Trap 5: a tracking outage
A conversion rate is bookings divided by website sessions. If the tracker stops for three days, sessions drop to zero while bookings carry on, and the rate becomes meaningless on those days. A naive weekly average that treats the zeros as real shows a crash that did not happen.
| Day type | Sessions | Bookings | Rate |
|---|---|---|---|
| Normal day | 2,400 | 165 | 6.9 percent |
| Outage day (tracker down) | 0 recorded | 160 | Undefined |
| Wrong: outage days counted as zero conversion | n/a | n/a | Week average of 4 normal and 3 outage days falls to 3.9 percent |
| Right: outage days excluded and marked on the chart | n/a | n/a | Rate stays near 6.9 percent |
Detect it by plotting daily sessions and looking for a flat line at zero. Handle it by excluding the days from the rate, saying so on the chart and, if the business needs a number, estimating sessions from a source you can defend, clearly labelled as an estimate.
Trap 6: is the fall real?
Repeat booking rates were 412 of 5,200 customers in the north (7.92 percent) and 356 of 5,100 in the south (6.98 percent). Is the gap real or chance? A two-proportion test answers it. The NIST handbook covers the method.
- Pooled rate: (412 + 356) / (5,200 + 5,100) = 768 / 10,300 = 7.46 percent.
- Standard error: the square root of 0.0746 x 0.9254 x (1/5,200 + 1/5,100) = 0.00518.
- Difference: 7.92 percent minus 6.98 percent = 0.94 percentage points.
- z = 0.0094 / 0.00518 = 1.82. The two-sided p-value is about 0.07.
At the usual 5 percent level that is not significant. It is not proof there is no difference either. The honest sentence is: “The north repeats more often, but with these sample sizes the gap could easily be chance; I would not run a campaign on it alone.” That sentence shows more skill than a confident wrong claim.
The privacy request
Hiring managers also like to see judgement. A realistic scenario: a manager emails asking for the full customer list with emails, to send to an outside agency by this afternoon. A good response asks what the purpose is, whether customers agreed to that use, and whether the agency needs personal data at all. It offers aggregated counts instead, and refers the request to whoever handles data protection. The ICO's UK GDPR guidance and the Government of India data protection framework set the rules in those places. Never put real personal data in a public portfolio.
The README and memo
A one-page README is the front door. Use this order: the question; the data and its limits; the checks you ran; the decisions and why; the result in plain words; and what you would do next. Put the memo, a short note for a non-technical reader, first. Host everything somewhere free and public, such as a code repository with a short page, and put the link in your CV.
Ten things a reviewer looks for
- A clear question and a stated reader.
- A line saying the data is public or synthetic.
- A data quality log with counts, not just words.
- A reconciliation that ends at zero unexplained, or states the gap.
- Each metric defined, with changes in definition shown.
- Blank and merged records sized, not hidden.
- Gaps in data marked on charts.
- A significance test explained in plain words.
- A decision or recommendation, with its limits.
- Code or queries someone else could run.
Where to get messy data and where to practise
Real faults are easy to find. Both data.gov.uk and data.gov.in publish files that contain blanks, odd formats and changed categories. Pick one that interests you, ask a question and keep a log. If you prefer a guided setting, the data analyst job simulation gives you a ticket, several sources with planted faults and a deadline at a simulated company, and each ticket is checked as you hand it in. The machine learning engineer simulation and the AI business analyst simulation extend the same habits, and all sit on the job simulation hub.
A finished simulation shows on your EDWartens profile under Work experience, marked as a job simulation, and the optional certificate has a public page where anyone can verify it. In your own portfolio, describe it honestly as practice work with invented data. For wording, read our guide on whether job simulations are worth it. To see how course work becomes a portfolio, see how to build an engineering portfolio from course projects, and for a guided path, the data science internship plan for beginners and the data science internship track. The jobs board lists current openings.
Last updated 19 October 2026. The company, data and figures in this post are invented and the data is synthetic.
Practise with us
Internship
SCADA and HMI
Free internship: 4 weeks, a free certificate and nothing to buy. Premium adds mentor calls and the graded certificate.
See the internshipRoles
IIoT and networks
Roles that ask for this skill, 6 open in this country now. Free to see and to apply. We are not a recruitment agency.
See rolesTake the free course
Questions
How many portfolio projects does a data analyst need?
Three to five good ones beat ten shallow ones. Include at least one project with several sources that disagree, because that is what real work looks like. Give each a one-page write-up, so a busy reader can understand the question, the checks and the result in two minutes.
Where can I find messy data for practice?
Open government portals such as data.gov.uk and data.gov.in publish real files with real faults. You can also take a clean dataset and add faults on purpose, such as duplicates, blank fields and a changed definition, provided you say clearly that the faults are synthetic and list exactly what you added.
Is Kaggle enough for a portfolio?
It is fine for practice, but a copied notebook looks like every other copied notebook. Pick your own question, add a second source or a data quality log, and write a short memo for a non-technical reader. The thinking you add is the part a hiring manager can judge.
Should I use SQL, Python or Excel?
Use the tool the jobs you want ask for, and show you can check your own work in it. The reasoning, the checks and the clarity of the write-up matter more than the tool. A short SQL query with a reconciliation check beats a long notebook with no checks.
How do I show data cleaning without sharing private data?
Use public or synthetic data only, never a real customer list, and keep a log of every change: what you found, how many rows, what you did and why. The log is the proof. Remove names, emails and any identifier that could point to a person before anything goes online.
Do I need statistics to be a data analyst?
You need the basics and the ability to explain them in plain words: averages and spread, sample size, confidence and a simple significance test. The goal is to say whether a change is real or likely to be chance, and how sure you are, without hiding behind jargon.
Can a job simulation count as a portfolio piece?
Yes, as practice work, if you describe it as a simulation with invented data and show the memo and checks you wrote yourself. Do not present it as employment or as a real client project, and do not copy the simulation's own answers into your write-up.
How long should a project README be?
One page. State the question, the data and its limits, the checks you ran, the decisions you made, the result and what you would do next. A reviewer will read that page before opening any code, so it is worth more care than the notebook.
Sources
- UK Government, data.gov.uk open data portal (checked 19 October 2026)
- Government of India, Open Government Data platform (checked 19 October 2026)
- ICO, UK GDPR guidance and resources (checked 19 October 2026)
- NIST/SEMATECH e-Handbook of Statistical Methods (checked 19 October 2026)
- MeitY, Government of India, data protection framework (checked 19 October 2026)
Written by the EDWartens engineering team for general education. Product names are trademarks of their owners; mentioning them does not imply endorsement. Prices and terms of other providers were checked on the date shown and can change.

PLC Programming Projects for Beginners With Real Specs

Data Centre MOP Example: Method of Procedure

RAID Log Example for Engineering Projects

Automation Engineer Career Guide 2026: Roles, Skills and a Free Learning Route

8D Report Example: A Worked Customer Complaint

Free Job Simulations for Engineers: The Honest List

