Data science project ideas: 12 questions to answer with public data
A good data science project asks one clear question of a public dataset and answers it with the uncertainty showing. Pick data you can link, such as NYC taxi trips, Inside Airbnb listings, World Bank indicators or Lichess games, state the question before you open the file, and finish with a chart and a limits paragraph. Below are 12 projects, each with a linked source, a stack, what it teaches, a first analysis, a stretch goal and a time estimate in hours.
What makes a data science project good?
Data science is mostly the work around the model: choosing a question, cleaning, checking the answer against reality and explaining it to someone who was not there. A project that shows those steps beats one that shows an impressive algorithm on a cleaned toy table. If your goal is prediction accuracy, the machine learning project ideas page is the better match; this page is about analysis.
| Part | What it contains | Test it passes |
|---|---|---|
| Question | One sentence a non-expert understands | You can say what result would count as a no |
| Data | Source link, licence, date downloaded, row count | A stranger can fetch the same file |
| Method | Cleaning rules and the calculation, in code | Rerunning the script reproduces every number |
| Result | A chart and a number with its uncertainty | A reader sees how sure you are |
| Limits | Who is missing from the data, what changed over time | You name one way the answer could be wrong |
Question: Do taxi riders tip less late at night? Data: NYC TLC yellow taxi trips, one month, Parquet. Definition: tip percent = tip amount / fare amount, card payments only. A yes looks like: median tip percent differs by more than 2 points between 6-9 pm and 1-4 am, with an interval that excludes zero. A no looks like: difference under 1 point or interval includes zero. Risks: cash tips are not recorded; short fares inflate percentages. Decision rule for outliers: drop fares under 3 dollars; say so in the write-up.
All sources below were checked in October 2026, and each is linked so you can read its licence and data dictionary before you start. The time estimates assume you can already read a CSV with pandas or SQL. If you want a problem that matters to someone, look at the board of ideas: many posts are questions that an analysis could answer, and any of them can become a project.
Which data science projects use city and transport data?
City data is large, dated and messy in useful ways: timestamps, locations, outliers and rules that change. It is also the data employers recognise.
01 Do taxi riders tip less late at night?
Compare tip percentages by hour and day using a month of New York taxi trips.
- Dataset
- NYC TLC trip records: monthly Parquet files for yellow, green and for-hire vehicles, published with a delay of about two months.
- Stack
- Python, DuckDB or pandas, a plotting library.
- Teaches
- Columnar files, SQL aggregation, outliers, definitions that change the answer.
- Time estimate
- 8 to 12 hours.
First version: one month of yellow taxi data. Read the data dictionary to see how tips are recorded for each payment type, filter to the payments where they are recorded, and chart median tip percent by hour. State the filters in the write-up.
Stretch: the TLC notes that a congestion-fee column was added to the yellow, green and high-volume files. Compare trip counts and fares before and after the first month it appears, and be careful to separate that change from seasonality.
02 Which bike stations run empty at 8 am?
Find stations where bikes leave faster than they arrive during the morning commute.
- Dataset
- Citi Bike system data: monthly trip files with start and end stations and times, plus a real-time GBFS feed.
- Stack
- Python, pandas, GeoPandas or a mapping library.
- Teaches
- Time zones, flow counting, simple maps, large monthly files.
- Time estimate
- 10 to 15 hours.
First version: for one month, count departures and arrivals per station per hour, take the difference, and map the stations with the largest morning deficit.
Stretch: estimate how many bikes a single van would need to move before 8 am to cover the top ten deficits on a typical weekday, and say what that figure assumes.
03 How long does the city take to answer a complaint?
Median response time by complaint type and borough, with unresolved cases handled honestly.
- Dataset
- NYC 311 service requests, available through a SoQL query API.
- Stack
- Python, requests, pandas, lifelines for the stretch.
- Teaches
- Query APIs, time deltas, medians over means, censored data.
- Time estimate
- 10 to 15 hours.
First version: pull one year with the SoQL query syntax, compute closed-minus-created time for closed requests, and rank complaint types by median.
Stretch: requests still open at the download date are not zero or infinite; they are censored. Use lifelines to estimate survival curves and show how much the naive median understated the wait.
04 Is my city getting warmer, station by station?
Fit a trend to one long-running weather station and test how sensitive it is to missing years.
- Dataset
- NOAA GHCN-Daily: daily records from more than 100,000 stations in 180 countries and territories.
- Stack
- Python, pandas, statsmodels.
- Teaches
- Station metadata, units, missing data, trend estimates with intervals.
- Time estimate
- 10 to 15 hours.
First version: choose a station near you with at least 60 years of data, check the units in the documentation, compute the annual mean of daily maximum temperature and fit a linear trend with a confidence interval.
Stretch: repeat for five stations, vary the rule for how many missing days disqualify a year, and report whether the conclusion changes. If it does not, say so; that is a result.
Which data science projects explore economics and society?
These datasets come with an argument attached, which is useful: you learn to separate what the numbers say from what people want them to say.
01 Does spending more on health buy longer lives?
Plot life expectancy against health spending per person across countries and look at where the pattern bends.
- Dataset
- World Bank Data through its API: indicators SP.DYN.LE00.IN (life expectancy at birth) and SH.XPD.CHEX.PC.CD (current health expenditure per capita).
- Stack
- Python, requests, pandas, Altair or Plotly.
- Teaches
- Pulling from an API, joining on country codes, log scales, correlation versus cause.
- Time estimate
- 8 to 12 hours.
First version: fetch both indicators for one year as JSON, drop the regional aggregates that the API mixes in with countries, join on the three-letter country code and plot with a log x-axis.
Stretch: animate the plot over twenty years, label the countries that sit far above or below the curve, and write a paragraph on why spending is not the only cause.
02 What do developers say they earn, and who is missing?
Analyse self-reported pay in a developer survey with intervals and a clear note on who answers surveys.
- Dataset
- Stack Overflow Developer Survey: results and data files from 2017 to 2025, data under the ODbL 1.0.
- Stack
- Python, pandas, SciPy for bootstrap intervals.
- Teaches
- Sampling bias, self-reported outliers, bootstrap confidence intervals, schema drift.
- Time estimate
- 8 to 12 hours.
First version: median yearly compensation by years of experience for one country, with extreme values trimmed by a rule you state. Show the number of respondents behind each bar.
Stretch: compute bootstrap intervals, compare 2024 with 2025 after reconciling column names between years, and write what the survey cannot tell you about people who never answer it.
03 Reproduce a published data story, then check it
Take one article's public data, recompute its headline numbers, and extend it with newer data.
- Dataset
- FiveThirtyEight data: one folder per story, data under CC BY 4.0, code under MIT. The airline-safety folder is a compact place to start.
- Stack
- Python or R, a notebook.
- Teaches
- Reading a methodology, reproducing results, writing about disagreement.
- Time estimate
- 6 to 10 hours.
First version: read the story and the folder README, recompute the numbers it cites and note any difference, however small.
Stretch: add more recent data from an official source and test whether the original conclusion still holds. Write the result as a short reader-facing note, not a notebook.
04 How fast are countries changing their energy mix?
Compare the shift from fossil to low-carbon electricity across countries, with a speed metric you define.
- Dataset
- Our World in Data energy dataset: country and region data with a codebook, openly licensed under Creative Commons BY.
- Stack
- Python, pandas, small-multiple charts.
- Teaches
- Wide tables, aggregates mixed with countries, per-person normalisation, defining a metric.
- Time estimate
- 8 to 12 hours.
First version: pick six countries, remove region rows, and draw one small chart per country of the share of electricity from fossil sources over time. Use the codebook to choose columns.
Stretch: define transition speed as points of share lost per year over a rolling window, rank all countries, and discuss why a small country with one new dam can top the list.
Which data science projects use games, the web and food data?
Open data from online communities is large, fresh and easy to explain to a recruiter. It is also crowdsourced, so every project here has a data-quality lesson.
01 Which chess openings win at which rating?
Estimate white's score by opening and rating band, and say which groups are too small to trust.
- Dataset
- Lichess open database: monthly game exports under CC0; recent months hold roughly 400,000 games each.
- Stack
- Python, python-chess or a streaming parser, DuckDB.
- Teaches
- Streaming large files, parsing semi-structured text, small-sample intervals.
- Time estimate
- 12 to 18 hours.
First version: stream 100,000 games from one month with python-chess, group by opening code and white's rating band, compute white's score and drop groups below 200 games.
Stretch: add Wilson intervals to each bar and compare blitz with longer time controls. A chart where most intervals overlap is an honest finding.
02 What makes a Wikipedia page spike?
Find the days a page's views jump above normal and classify what caused each jump.
- Dataset
- Wikimedia Analytics API for daily pageviews, or the raw pageview dumps.
- Stack
- Python, requests, pandas, statsmodels.
- Teaches
- Seasonal decomposition, anomaly flags, joining events to time series.
- Time estimate
- 10 to 15 hours.
First version: download three years of daily views for ten articles, remove weekly seasonality with STL decomposition and flag days more than three median absolute deviations above the trend.
Stretch: label each flagged day by hand (news, anniversary, film release), estimate how fast attention decays, and see whether the decay differs by type.
03 How reliable is crowdsourced nutrition data?
Measure how complete the product database is by country and category, then compare labels with the numbers.
- Dataset
- Open Food Facts data: nightly CSV, Parquet and database dumps under the ODbL, with the contents under DbCL.
- Stack
- Python, DuckDB reading the Parquet export.
- Teaches
- Missingness, SQL over large files, data quality metrics, share-alike licences.
- Time estimate
- 10 to 15 hours.
First version: count products per country and the share with a sugar value filled in, then show the distribution of sugar per 100 grams for five categories, flagging impossible values such as more than 100 grams.
Stretch: compare the Nutri-Score grade field with sugar content to find products where they disagree, and read the ODbL terms on the data page before you publish a derived dataset.
04 Do pull requests in some languages get merged faster?
Count pull request outcomes from public GitHub activity, keeping the biases of public data in view.
- Dataset
- GH Archive: hourly archives of public GitHub events as JSON since 2011, also available on BigQuery.
- Stack
- Python, DuckDB reading JSON, or BigQuery SQL.
- Teaches
- Event data, deduplication, survivorship and selection bias, careful wording.
- Time estimate
- 12 to 20 hours.
First version: download one day of hourly files, keep pull request events, and compute the share merged within seven days, grouped by repository language. Check how events map to a pull request's life, since one request produces several events.
Stretch: extend to a month, control for repository size, and write down why a difference between languages might come from project culture rather than the language.
How should you present a data science project?
Lead with the finding and the chart, not with the tools. Put the question and answer at the top of the README, the chart under it, and the code and data link further down. Add the limits paragraph even when it feels like admitting weakness: reviewers read it as judgment.
- Give the sample size next to every statistic, and an interval when you can compute one.
- Save the raw download and the cleaning script, never only the cleaned file.
- Use a plain chart type that fits the question; one idea per chart.
- Say what you would do with another week.
Looking for more starting points? The Python projects and intermediate Python projects pages cover the coding side, and API project ideas lists free sources you can query live. Lists of datasets also live in OpenML, Hugging Face Datasets, Gapminder and scikit-learn's loaders.
Frequently asked questions
What is a good data science project for beginners?
Pick one question and one month of a clean public dataset, such as taxi tips by hour or life expectancy against health spending. Finish with a single chart, a number with an interval and a limits paragraph. A small finished analysis teaches more than an abandoned large one.
Where can I find free datasets for data science projects?
Good sources include the NYC TLC and NYC Open Data portals, World Bank Data, NOAA, Our World in Data, Inside Airbnb, the Lichess database and FiveThirtyEight's repository. Each states a licence on its page, so read it before you publish anything derived from the data.
How is a data science project different from a machine learning project?
A data science project answers a question about the world with data, cleaning and explanation, and may use no model at all. A machine learning project builds a predictor and judges it on held-out data. Many strong portfolios contain both, and the two share validation habits.
Do I need big data tools for a portfolio project?
Rarely. DuckDB or pandas handles several gigabytes on a laptop, and a month of taxi or bike trips is well within reach. Reach for Spark or BigQuery only when your question needs a year or more of a very large source, such as GH Archive.
How many data science projects should I show?
Two or three complete analyses are enough, ideally on different kinds of data, such as time series, survey data and text or events. Each should have a question, a reproducible script, a clear chart and a limits section a stranger can follow.
Can I use AI tools to help with a data science project?
Yes, for boilerplate such as loading files and drawing charts, as long as you check every number it produces against a hand calculation. The question, the cleaning rules and the interpretation should be yours, because those are what a reviewer asks about.
Created with AI assistance and edited for this site. Examples are illustrative and do not represent customer research. About the publisher.