Library
Datasets
20 practice datasets used in the lessons. Every one is synthetic — generated for teaching, with invented names and deliberate mess where a lesson needs it. None contains real people's data.
Branch sales exports (synthetic)
March sales exported separately by three branches of an office-supplies shop (Riyadh, Jeddah, Dammam), plus a product catalogue in JSON. Deliberately messy in places, like real exports: the Jeddah file has a blank line, a duplicated row and two product names with stray spaces and lower case; the Dammam file has one quantity written as "n/a" and one row with an empty unit price.
Fields (5)
- date
- Sale date, YYYY-MM-DD (March 2026)
- product
- Product name as typed by the branch (may have stray spaces or different case)
- quantity
- Units sold, a whole number as text (one Dammam row says n/a)
- unit_price
- Price per unit in SAR with two decimals (one Dammam row is empty)
- products.json
- Object mapping each product name to {category, list_price}
data/sales/riyadh.csv · 25 lines · 0.8 KB
date,product,quantity,unit_price 2026-03-01,Filing cabinet,10,610.00 2026-03-02,Office chair,10,449.00 2026-03-03,Notebook A5,6,12.50 2026-03-05,Gel pen (box),1,24.00 2026-03-07,Monitor stand,10,135.00 2026-03-07,LED strip,10,59.00 2026-03-09,Office chair,3,449.00 2026-03-12,Sticky notes,2,8.75 2026-03-13,Sticky notes,2,8.75 2026-03-16,Office chair,5,449.00 2026-03-17,Desk lamp,1,89.00
data/sales/jeddah.csv · 21 lines · 0.7 KB
date,product,quantity,unit_price 2026-03-06,Desk lamp,1,89.00 2026-03-07,Monitor stand,6,135.00 2026-03-11,Desk lamp,3,89.00 2026-03-12, led strip ,1,59.00 2026-03-16,Monitor stand,10,135.00 2026-03-16,Notebook A5,1,12.50 2026-03-16,Monitor stand,10,135.00 2026-03-17,Sticky notes,1,8.75 2026-03-19,Gel pen (box),1,24.00 2026-03-20,Office chair,1,449.00
data/sales/dammam.csv · 17 lines · 0.5 KB
date,product,quantity,unit_price 2026-03-01,Gel pen (box),6,24.00 2026-03-06,Office chair,10,449.00 2026-03-07,Notebook A5,4,12.50 2026-03-09,Filing cabinet,4,610.00 2026-03-16,LED strip,1,59.00 2026-03-16,Notebook A5,n/a,12.50 2026-03-16,Desk lamp,1,89.00 2026-03-17,Gel pen (box),2,24.00 2026-03-17,Notebook A5,4,12.50 2026-03-20,Sticky notes,3, 2026-03-20,Office chair,2,449.00
data/products.json · 34 lines · 0.6 KB
{ "Desk lamp": { "category": "Lighting", "list_price": 89.0 }, "Office chair": { "category": "Furniture", "list_price": 449.0 }, "Notebook A5": { "category": "Stationery", "list_price": 12.5Used in: 8. Paths and folders with pathlib · 8. Reading CSV files · 8. Small data pipelines · 8. Mini project: consolidating branch sales
Generated for Python Quest with a seeded script; the shop, products and figures are invented.
Web server access log (synthetic)
360 lines from one morning of a shop website's access log. Each line is: date, time, HTTP method, path, status code and response time such as 132ms, separated by single spaces.
Fields (5)
- date time
- 2026-04-02 and the time HH:MM:SS
- method
- GET or POST
- path
- Requested page, e.g. /products or /api/stock
- status
- HTTP status code: 200, 201, 301, 404 or 500
- duration
- Response time in milliseconds with an ms suffix, e.g. 87ms
data/access.log · 360 lines · 14.8 KB
2026-04-02 08:02:05 GET /api/prices 200 27ms 2026-04-02 08:03:25 GET /help 200 58ms 2026-04-02 08:05:00 GET /login 200 29ms 2026-04-02 08:06:37 GET /help 200 235ms 2026-04-02 08:07:33 GET / 200 91ms 2026-04-02 08:08:44 GET /help 200 116ms 2026-04-02 08:10:20 GET /cart 200 97ms 2026-04-02 08:11:25 POST /login 200 57ms 2026-04-02 08:11:42 POST /checkout 200 174ms 2026-04-02 08:12:25 GET /checkout 301 108ms 2026-04-02 08:12:53 GET /cart 404 111ms 2026-04-02 08:14:15 GET / 200 47ms
Used in: 8. Processing files line by line
Generated for Python Quest with a seeded script; no real traffic was recorded.
Staff records with errors (synthetic)
An HR export of 30 employees for practising validation. It contains deliberate problems: an empty email, a salary written as 12k, an empty salary, negative and implausibly high weekly hours, a department with stray spaces and lower case, a duplicated employee id and an empty name.
Fields (7)
- employee_id
- Id such as E107 (should be unique)
- name
- Full name
- department
- Sales, Finance, Support, Warehouse or IT
- Work email address
- salary
- Monthly salary in SAR as a whole number
- hours_per_week
- Contracted hours, expected between 1 and 60
- start_date
- YYYY-MM-DD
data/staff.csv · 31 lines · 2.3 KB
employee_id,name,department,email,salary,hours_per_week,start_date E101,Huda Qasim,Warehouse,huda.qasim@qamar-trading.example,13750,40,2024-12-25 E102,Omar Khoury,IT,omar.khoury@qamar-trading.example,9250,45,2021-06-11 E103,Lina Aziz,Sales,lina.aziz@qamar-trading.example,16250,30,2025-06-13 E104,Faris Mansour,Support,,13250,20,2019-03-15 E105,Maya Darwish,IT,maya.darwish@qamar-trading.example,16500,40,2018-09-17 E106,Sami Rahman,Warehouse,sami.rahman@qamar-trading.example,14750,40,2021-09-18 E107,Rana Aziz,Sales,rana.aziz@qamar-trading.example,17000,40,2019-04-22 E108,Yusuf Haddad,Warehouse,yusuf.haddad@qamar-trading.example,12k,40,2015-09-27 E109,Dana Farouk,Warehouse,dana.farouk@qamar-trading.example,17250,40,2019-07-03 E110,Karim Khoury,Finance,karim.khoury@qamar-trading.example,12500,30,2016-06-04 E111,Noor Haddad,IT,noor.haddad@qamar-trading.example,19500,40,2022-09-04
Used in: 8. Validating records
Generated for Python Quest with a seeded script; all names, emails and salaries are invented.
Customer orders in nested JSON (synthetic)
Twelve orders from an office-supplies shop as one JSON document: a top-level object with the store name, currency and a list of orders. Each order has a nested customer object, a list of line items, a paid flag and a coupon that may be null.
Fields (6)
- order_id
- Order reference such as ORD-5004
- date
- Order date, YYYY-MM-DD
- customer
- Object with id, name and city
- items
- List of objects with sku, name, qty and unit_price
- paid
- true or false
- coupon
- A coupon code or null
data/orders.json · 312 lines · 6.3 KB
{ "store": "Qamar Office Supplies", "currency": "SAR", "orders": [ { "order_id": "ORD-5001", "date": "2026-05-27", "customer": { "id": "C-202", "name": "Blue Dune Cafe", "city": "Jeddah" },Used in: 8. Working with JSON
Generated for Python Quest with a seeded script; customers and orders are invented.
Store sales 2024 (synthetic)
813 order lines from a fictional chain of eight homeware and electronics stores across five Saudi regions, one row per order line for the whole of 2024. Clean and consistently typed: use it for selecting, grouping, dates and charts. Prices are in SAR; some November orders carry a 20% promotional price.
Fields (8)
- order_id
- Unique order line number (integer, 10001 upwards)
- date
- Order date, YYYY-MM-DD (2024-01-01 to 2024-12-31)
- store_id
- Store code S01–S08 (see da-stores)
- region
- Central, Western, Eastern, Northern or Southern
- product
- Product name (12 products, see da-products)
- category
- Electronics, Home, Stationery or Grocery
- units
- Units sold on the line (1–15)
- unit_price
- Selling price per unit in SAR
data/store_sales.csv · 814 lines · 46.2 KB
order_id,date,store_id,region,product,category,units,unit_price 10001,2024-01-01,S01,Central,USB-C Cable,Electronics,2,35.00 10002,2024-01-01,S04,Western,USB-C Cable,Electronics,2,35.00 10003,2024-01-02,S04,Western,Arabic Coffee,Grocery,2,42.00 10004,2024-01-03,S07,Northern,USB-C Cable,Electronics,1,35.00 10005,2024-01-04,S06,Eastern,Notebook,Stationery,4,12.00 10006,2024-01-04,S03,Western,Gel Pens,Stationery,1,18.00 10007,2024-01-04,S03,Western,Wireless Mouse,Electronics,4,79.00 10008,2024-01-04,S01,Central,Throw Pillow,Home,3,65.00 10009,2024-01-05,S01,Central,Coffee Mug,Home,2,25.00 10010,2024-01-05,S06,Eastern,Desk Organizer,Stationery,1,55.00 10011,2024-01-06,S07,Northern,USB-C Cable,Electronics,1,35.00
Used in: 14. Selecting and filtering · 14. Transforming columns · 14. Grouping and aggregating · 14. Combining data and 2 more
Generated for Python Quest with a seeded Python script (random.Random with a fixed seed per file, standard library only). Stores, managers, suppliers, students and figures are invented; no real records were used.
Store directory (synthetic)
Lookup table for the store sales dataset: one row per store. Includes S09, a store opened in 2025 that has no 2024 sales — useful for seeing the difference between inner, left and right merges.
Fields (5)
- store_id
- Store code S01–S09 (key for merging with da-store-sales)
- city
- City the store is in
- manager
- Store manager (invented name)
- size_sqm
- Sales floor area in square metres
- opened_year
- Year the store opened
data/stores.csv · 10 lines · 0.3 KB
store_id,city,manager,size_sqm,opened_year S01,Riyadh,Hala Qasim,420,2016 S02,Buraydah,Faris Otaibi,260,2019 S03,Jeddah,Mona Saleh,510,2015 S04,Makkah,Yousef Bakr,300,2020 S05,Dammam,Reem Fahad,380,2017 S06,Khobar,Tariq Nasser,240,2021 S07,Tabuk,Lama Harbi,210,2018 S08,Abha,Omar Shehri,230,2022 S09,Hail,Dana Shammari,190,2025
Used in: 14. Combining data
Generated for Python Quest with a seeded Python script (random.Random with a fixed seed per file, standard library only). Stores, managers, suppliers, students and figures are invented; no real records were used.
Product catalogue (synthetic)
Lookup table for the store sales dataset: unit cost and supplier per product. Contains one product (Plant Pot) that never appears in the sales, so a left merge from the catalogue shows an unsold item.
Fields (4)
- product
- Product name (key for merging with da-store-sales)
- category
- Product category
- unit_cost
- What the chain pays per unit, SAR
- supplier
- Supplier company (invented)
data/products.csv · 14 lines · 0.6 KB
product,category,unit_cost,supplier Wireless Mouse,Electronics,41.00,Nadeem Supplies USB-C Cable,Electronics,14.00,Nadeem Supplies Desk Lamp,Electronics,66.00,Brightline Trading Headphones,Electronics,150.00,Brightline Trading Coffee Mug,Home,9.00,Oasis Homeware Throw Pillow,Home,28.00,Oasis Homeware Wall Clock,Home,47.00,Oasis Homeware Notebook,Stationery,4.50,Qalam Paper Co Gel Pens,Stationery,7.00,Qalam Paper Co Desk Organizer,Stationery,26.00,Qalam Paper Co Arabic Coffee,Grocery,25.00,Najd Foods
Used in: 14. Combining data
Generated for Python Quest with a seeded Python script (random.Random with a fixed seed per file, standard library only). Stores, managers, suppliers, students and figures are invented; no real records were used.
Raw sales export, Jan–Jun 2025 (synthetic, messy)
432 order lines exported from a till system before any cleaning. Deliberately messy: region names have inconsistent capitalisation and stray spaces, some `units` are blank, some `unit_price` values are text such as `SAR 25.00` or `n/a`, and 12 rows are exact duplicates. Used in the end-to-end mini project.
Fields (6)
- order_id
- Order line number; duplicated rows repeat it
- order_date
- Order date, YYYY-MM-DD (first half of 2025)
- region
- Region name with inconsistent case and spacing
- product
- Product name
- units
- Units sold; blank when the till did not record it
- unit_price
- Price per unit as text: mostly `25.00`, sometimes `SAR 25.00` or `n/a`
data/sales_raw.csv · 433 lines · 19.0 KB
order_id,order_date,region,product,units,unit_price 50151,2025-01-01,Eastern,Coffee Mug,1,25.00 50159,2025-01-01,Western,Coffee Mug,11,25.00 50080,2025-01-02,Central,Throw Pillow,1,65.00 50080,2025-01-02,Central,Throw Pillow,1,65.00 50128,2025-01-02,Central,Wall Clock,12,89.00 50308,2025-01-02,Central,Gel Pens,1,18.00 50152,2025-01-03,Western,Notebook,5,12.00 50219,2025-01-03,Northern,Gel Pens,10,18.00 50286,2025-01-03,Southern ,Dates Box,11,60.00 50117,2025-01-04,CENTRAL,Wireless Mouse,9,79.00 50236,2025-01-04,Eastern ,Gel Pens,4,18.00
Used in: 14. Communicating findings
Generated for Python Quest with a seeded Python script (random.Random with a fixed seed per file, standard library only). Stores, managers, suppliers, students and figures are invented; no real records were used.
Employee survey (synthetic, messy)
246 responses to an internal staff survey at a fictional company. Messy on purpose: department names vary in case and spacing, some years and satisfaction scores are blank, `commute_minutes` contains the text `unknown` and two implausible values (1 and 900), `would_recommend` mixes `Yes`, `yes` and ` Yes`, and six responses were submitted twice.
Fields (7)
- respondent_id
- Respondent number 1–240; duplicates repeat it
- department
- Sales, Finance, IT, Operations, HR or Marketing (inconsistent case/spaces)
- years_at_company
- Whole years at the company; sometimes blank
- remote_days
- Days per week worked remotely (0–5)
- satisfaction
- Job satisfaction 1 (low) to 5 (high); sometimes blank
- commute_minutes
- One-way commute in minutes as text; includes `unknown` and outliers
- would_recommend
- Would recommend the company as an employer: Yes/No with inconsistent case and spaces
data/employee_survey.csv · 247 lines · 5.8 KB
respondent_id,department,years_at_company,remote_days,satisfaction,commute_minutes,would_recommend 1,HR,1,2,5,68,Yes 2,Operations,0,2,5,41,Yes 3,Finance,0,2,3,32,Yes 4,Sales,8,2,3,5,no 5,IT,6,5,5,32,Yes 6,operations,1,4,3,39,Yes 7,Operations,2,2,5,32,yes 8,finance,0,4,5,17,Yes 9,OPERATIONS,0,0,3,57,No 10,Sales,8,1,3,37,Yes 11,Operations,3,2,2,16,No
Used in: 14. Cleaning data · 14. Grouping and aggregating
Generated for Python Quest with a seeded Python script (random.Random with a fixed seed per file, standard library only). Stores, managers, suppliers, students and figures are invented; no real records were used.
Website traffic 2024 (synthetic)
Daily visits and sign-ups for three pages (home, pricing, blog) of a fictional software company's website for every day of 2024 (1,098 rows). Traffic grows through the year, dips on Fridays and Saturdays, and jumps during a September campaign — good for dates, resampling and line charts.
Fields (4)
- date
- Day, YYYY-MM-DD
- page
- home, pricing or blog
- visits
- Visits to the page that day
- signups
- Free-trial sign-ups started from that page that day
data/web_traffic.csv · 1099 lines · 25.4 KB
date,page,visits,signups 2024-01-01,home,758,11 2024-01-01,pricing,264,15 2024-01-01,blog,404,1 2024-01-02,home,901,11 2024-01-02,pricing,250,24 2024-01-02,blog,397,2 2024-01-03,home,848,11 2024-01-03,pricing,278,15 2024-01-03,blog,398,3 2024-01-04,home,771,10 2024-01-04,pricing,254,13
Used in: 14. Dates in pandas · 14. Visualising data
Generated for Python Quest with a seeded Python script (random.Random with a fixed seed per file, standard library only). Stores, managers, suppliers, students and figures are invented; no real records were used.
Warehouse sensor readings (synthetic)
Hourly temperature and humidity from three warehouse sensors (A, B, C) for 1–7 March 2024 (504 rows). About 2% of temperatures are blank, and one reading of 85.0 °C is a sensor fault rather than a real temperature.
Fields (4)
- timestamp
- Reading time, YYYY-MM-DD HH:MM (hourly)
- sensor
- Sensor id: A, B or C
- temperature_c
- Temperature in °C; blank when the reading failed
- humidity_pct
- Relative humidity in percent
data/sensor_readings.csv · 505 lines · 13.3 KB
timestamp,sensor,temperature_c,humidity_pct 2024-03-01 00:00,A,,52 2024-03-01 00:00,B,20.8,50 2024-03-01 00:00,C,18.1,50 2024-03-01 01:00,A,19.1,53 2024-03-01 01:00,B,20.8,52 2024-03-01 01:00,C,18.1,54 2024-03-01 02:00,A,18.1,52 2024-03-01 02:00,B,19.9,54 2024-03-01 02:00,C,17.5,52 2024-03-01 03:00,A,18.0,54 2024-03-01 03:00,B,20.5,52
Generated for Python Quest with a seeded Python script (random.Random with a fixed seed per file, standard library only). Stores, managers, suppliers, students and figures are invented; no real records were used.
Student scores (synthetic)
End-of-term scores for 90 students in three Grade 10 classes (10A, 10B, 10C): maths, science and English out of 100, plus attendance percentage. Clean; names are invented first names with an initial.
Fields (7)
- student_id
- Student number 2401–2490
- name
- Invented first name and initial
- class
- 10A, 10B or 10C
- math
- Maths score 0–100
- science
- Science score 0–100
- english
- English score 0–100
- attendance_pct
- Attendance percentage for the term
data/student_scores.csv · 91 lines · 2.7 KB
student_id,name,class,math,science,english,attendance_pct 2401,Aisha A.,10A,100,100,100,96 2402,Iman F.,10A,55,65,54,76 2403,Rana K.,10A,57,60,71,90 2404,Nasser P.,10A,51,59,60,90 2405,Joud U.,10A,88,61,69,95 2406,Ghada Z.,10A,62,75,80,100 2407,Nouf E.,10A,69,67,62,96 2408,Zaid J.,10A,66,73,54,93 2409,Sara O.,10A,86,69,78,97 2410,Eyad T.,10A,78,90,82,89 2411,Layan Y.,10A,67,82,97,89
Used in: 14. DataFrames and loading data · 14. Transforming columns · 14. Visualising data
Generated for Python Quest with a seeded Python script (random.Random with a fixed seed per file, standard library only). Stores, managers, suppliers, students and figures are invented; no real records were used.
Branch sales exports (synthetic)
Three March sales exports from the North, South and West branches of an invented wholesale company. The files describe the same kind of record but disagree on details: the South file has its columns in a different order, the West file uses headers such as "Order ID" with spaces and capitals, and the West file contains one duplicated order. Used to practise combining exports.
Fields (4)
- order_id
- Order reference, prefixed with the branch letter (header "Order ID" in the West file)
- date
- Order date, YYYY-MM-DD
- customer
- Invented customer business name
- amount
- Order value in SAR, two decimals
data/exports/sales_north.csv · 5 lines · 0.2 KB
order_id,date,customer,amount N-1001,2026-03-02,Al-Rawda Bakery,420.00 N-1002,2026-03-03,Sahel Pharmacy,135.50 N-1003,2026-03-05,Najd Office Supplies,980.00 N-1004,2026-03-09,Al-Rawda Bakery,212.75
data/exports/sales_south.csv · 4 lines · 0.1 KB
customer,amount,order_id,date Corniche Cafe,310.00,S-2001,2026-03-01 Tihama Garage,1250.00,S-2002,2026-03-04 Corniche Cafe,95.25,S-2003,2026-03-08
data/exports/sales_west.csv · 5 lines · 0.2 KB
Order ID,Date,Customer,Amount W-3001,2026-03-02,Hijaz Textiles,640.00 W-3002,2026-03-06,Yanbu Marine Parts,1875.40 W-3002,2026-03-06,Yanbu Marine Parts,1875.40 W-3003,2026-03-10,Hijaz Textiles,88.00
Used in: 15. Combining exports
Written by hand for Python Quest; every business name and figure is invented.
Monthly branch exports inbox (synthetic)
An inbox folder as a sales system might leave it: September 2026 exports from three branches, one August export that belongs to the previous month, and a README. The exports are deliberately messy: the South file has different column order and header spelling, a duplicated order, an amount of "n/a" and an impossible date (2026-09-31); the East file has a negative amount and a missing branch. Used in the monthly report mini project.
Fields (6)
- order_id
- Order reference, prefixed with the branch letter
- date
- Order date, YYYY-MM-DD (one invalid date included)
- branch
- Branch name: North, South, East or West (one blank)
- category
- Product category: Bakery, Beverages or Household
- amount
- Order value in SAR (one "n/a" and one negative value included)
- status
- paid or refunded
data/inbox/branch-north_2026-09.csv · 6 lines · 0.3 KB
order_id,date,branch,category,amount,status N-501,2026-09-01,North,Bakery,320.50,paid N-502,2026-09-03,North,Beverages,145.00,paid N-503,2026-09-07,North,Bakery,98.25,refunded N-504,2026-09-15,North,Household,410.00,paid N-505,2026-09-22,North,Beverages,76.40,paid
data/inbox/branch-south_2026-09.csv · 6 lines · 0.3 KB
Category,Amount,Order ID,Date,Branch,Status Household,1200.00,S-701,2026-09-02,South,paid Bakery,215.75,S-702,2026-09-05,South,paid Beverages,n/a,S-703,2026-09-09,South,paid Household,330.00,S-704,2026-09-31,South,paid Bakery,215.75,S-702,2026-09-05,South,paid
data/inbox/branch-east_2026-09.csv · 5 lines · 0.2 KB
order_id,date,branch,category,amount,status E-301,2026-09-04,East,Beverages,560.00,paid E-302,2026-09-11,East,Household,-45.00,paid E-303,2026-09-18,East,Bakery,189.90,paid E-304,2026-09-25,,Beverages,240.00,paid
data/inbox/branch-west_2026-08.csv · 3 lines · 0.1 KB
order_id,date,branch,category,amount,status W-901,2026-08-28,West,Bakery,150.00,paid W-902,2026-08-30,West,Household,72.00,paid
data/inbox/README.txt · 2 lines · 0.1 KB
Branch exports are dropped here by the sales system at the start of each month. File names: branch-<name>_<YYYY-MM>.csv
Used in: 15. Mini project: the monthly operations report
Written by hand for Python Quest; branches, orders and amounts are invented.
Office supplies orders 2025 (synthetic)
546 order lines from Desert Rose Office Supplies, a fictional retailer selling ten products across five Saudi regions, one row per order line for the whole of 2025. Clean and consistently typed, with a seasonal rise towards the end of the year. Prices are in SAR. Used by the sales dashboard project.
Fields (7)
- order_id
- Unique order line number (integer, 50001 upwards)
- date
- Order date, YYYY-MM-DD (2025-01-01 to 2025-12-31), rows in date order
- region
- Central, Western, Eastern, Northern or Southern
- product
- Product name (10 products)
- category
- Electronics, Furniture, Home or Stationery
- units
- Units sold on the line (1–8)
- unit_price
- Selling price per unit in SAR
data/sales_orders.csv · 547 lines · 29.0 KB
order_id,date,region,product,category,units,unit_price 50001,2025-01-01,Western,Notebook Pack,Stationery,8,35 50002,2025-01-02,Eastern,Monitor 27in,Electronics,3,899 50003,2025-01-03,Central,Office Chair,Furniture,2,549 50004,2025-01-05,Eastern,Coffee Mug Set,Home,4,59 50005,2025-01-05,Central,Gel Pens (12),Stationery,6,24 50006,2025-01-06,Central,Notebook Pack,Stationery,2,35 50007,2025-01-06,Northern,Notebook Pack,Stationery,6,35 50008,2025-01-06,Central,Gel Pens (12),Stationery,5,24 50009,2025-01-06,Southern,Wireless Mouse,Electronics,8,79 50010,2025-01-07,Central,Wireless Mouse,Electronics,6,79 50011,2025-01-07,Eastern,Bookshelf,Furniture,4,410
Used in: 17. Project: sales dashboard with pandas and matplotlib
Generated for Python Quest with a seeded script (fixed-seed pseudo-random generator, standard library only). The business, products and figures are invented; no real records were used.
Web shop access log (synthetic)
One hour (09:00–09:59 on 14 March 2026) of web server access log from a fictional online grocery shop, about 400 lines in a common access-log format. Mostly well-formed, but includes realistic problems: a log-rotation marker, a blank line, a truncated line, a line with no byte count, a status code typed with letters and a line missing its IP and timestamp. 304 responses record their size as '-'. Contains bursts of 5xx errors at 09:17, 09:42 and 09:51. IP addresses come from the reserved documentation ranges.
Fields (5)
- ip
- Client IP address (documentation ranges 192.0.2.x, 198.51.100.x, 203.0.113.x)
- time
- Request time in brackets, e.g. [14/Mar/2026:09:42:05 +0300]
- request
- Quoted method, path (sometimes with a ?query string) and protocol
- status
- HTTP status code (200, 301, 302, 304, 404, 500, 503)
- size
- Response size in bytes, or '-' when no body was sent
data/access.log · 400 lines · 32.2 KB
192.0.2.39 - - [14/Mar/2026:09:00:08 +0300] "POST /cart HTTP/1.1" 200 822 198.51.100.48 - - [14/Mar/2026:09:00:10 +0300] "GET /static/app.css HTTP/1.1" 200 24590 198.51.100.70 - - [14/Mar/2026:09:00:15 +0300] "GET /products?page=2 HTTP/1.1" 200 17967 203.0.113.10 - - [14/Mar/2026:09:00:18 +0300] "GET /products HTTP/1.1" 200 18236 192.0.2.21 - - [14/Mar/2026:09:00:21 +0300] "GET /search?q=dates HTTP/1.1" 200 9243 203.0.113.17 - - [14/Mar/2026:09:00:34 +0300] "POST /checkout HTTP/1.1" 200 1357 198.51.100.26 - - [14/Mar/2026:09:00:44 +0300] "GET /products HTTP/1.1" 200 18580 198.51.100.26 - - [14/Mar/2026:09:01:02 +0300] "GET /static/logo.png HTTP/1.1" 200 13123 198.51.100.15 - - [14/Mar/2026:09:01:03 +0300] "GET /cart HTTP/1.1" 200 3478 203.0.113.59 - - [14/Mar/2026:09:01:07 +0300] "GET / HTTP/1.1" 200 5290 192.0.2.57 - - [14/Mar/2026:09:01:17 +0300] "GET /static/logo.png HTTP/1.1" 200 13145 198.51.100.81 - - [14/Mar/2026:09:01:39 +0300] "GET /products?page=2 HTTP/1.1" 200 18294
Used in: 17. Project: web server log analyzer
Generated for Python Quest with a seeded Python script (standard library only). Businesses, people, products and figures are invented; no real records were used.
Customer sign-ups, uncleaned (synthetic)
68 customer rows exported from a fictional shop's sign-up form, deliberately messy: names in mixed capitals with stray and doubled spaces, upper-case emails with leading spaces, three invalid or missing emails, phone numbers in seven different Saudi mobile formats (plus two invalid and two missing), signup dates in three formats (YYYY-MM-DD, DD/MM/YYYY, '7 Jun 2025') with an impossible date, a non-date and blanks, inconsistent city capitalisation, one blank name, and five customers entered twice with the same email (usually in different case or with stray spaces).
Fields (6)
- customer_id
- Customer code C1001–C1064 (repeated on duplicate entries)
- name
- Full name as typed (inconsistent case and spacing, one blank)
- Email as typed (case and spaces vary; some invalid or empty)
- phone
- Saudi mobile number in one of several formats, or invalid/empty
- signup_date
- Sign-up date as YYYY-MM-DD, DD/MM/YYYY or D Mon YYYY; some invalid or empty
- city
- City name (inconsistent case, trailing spaces, one empty)
data/customers_messy.csv · 69 lines · 5.2 KB
customer_id,name,email,phone,signup_date,city C1001,AHMED AL-HARBI ,ahmed.harbi0@example.com,(056) 299 0954,12 Apr 2025,Mecca C1002,SARA KARIM,sara.karim@example.com,966592508795,19 Sep 2024,Abha C1003,Huda Al-Qahtani, HUDA.QAHTANI@EXAMPLE.ORG,966518004882,2024-07-20,Dammam C1004,Faisal Saleh ,faisal.saleh3@example.org,(056) 225 6741,07/06/2025,Khobar C1004,faisal saleh, FAISAL.SALEH3@EXAMPLE.ORG ,056-225-6741,7 Jun 2025,Khobar C1005,Lina Al-Mutairi,lina.mutairi@example.com,(058) 679 7633,2025-09-08,ABHA C1006,Omar Mansour,omar.mansourexample.com,966518798449,22/11/2025,Abha C1007,NOURA AL-SHEHRI,noura.shehri6@mail.example.net,0577836108,2 Jan 2024,Riyadh C1008,Khalid Othman, KHALID.OTHMAN@EXAMPLE.ORG,051-550-4992,2025-03-01,Riyadh C1009,reem al-zahrani ,reem.zahrani@example.org,05512,2024-11-22,Riyadh C1010,YOUSEF NASSER,yousef.nasser9@example.org,051-462-0745,,Medina
Used in: 17. Project: customer data-cleaning pipeline
Generated for Python Quest with a seeded Python script (standard library only). Businesses, people, products and figures are invented; no real records were used.
Oasis Coffee Roasters customers (synthetic, uncleaned)
42 customer rows for a fictional speciality coffee roaster: 40 real customers plus two duplicates (one exact repeat, one re-entered with a lower-case id and different capitals). Names, cities and segments have inconsistent capitals and stray spaces; one email and two join dates are blank. Used by the capstone project.
Fields (6)
- customer_id
- Customer code C001–C040 (one duplicate typed as " c012")
- name
- Person or business name (mixed case, leading or doubled spaces)
- Email address (some upper-case, one blank)
- city
- Saudi city (mixed case, stray spaces)
- segment
- Retail, Wholesale or Cafe (mixed case, stray spaces)
- joined
- Date the customer joined, YYYY-MM-DD (two blank)
data/capstone_customers.csv · 43 lines · 3.0 KB
customer_id,name,email,city,segment,joined C001, Saad Al-Ghamdi,saad.al.ghamdi@inbox.example,Jeddah,retail,2024-02-22 C002,Lama Rashed,lama.rashed@inbox.example,jeddah, Retail ,2024-04-12 C003, Najd Office Hub,najd.office.hub@biz.example,Medina,wholesale,2022-04-16 C004, Bandar Khoury,bandar.khoury@mail.example,jeddah,Retail,2023-06-10 C005,dune cafe,dune.cafe@biz.example,Abha,Cafe,2023-04-24 C006,sultan al-ghamdi,sultan.al.ghamdi@inbox.example,RIYADH,Retail,2022-06-11 C007, Ghada Mansour,ghada.mansour@inbox.example,ABHA, Retail ,2024-05-02 C008,Abeer Rashed,abeer.rashed@inbox.example,RIYADH,Retail,2024-10-14 C009,Rana Al-Shehri,rana.al.shehri@inbox.example,Khobar,Retail, C010,palm corner cafe,palm.corner.cafe@biz.example,Jeddah,Cafe,2023-05-08 C011,Coral Bay Hotel,CORAL.BAY.HOTEL@BIZ.EXAMPLE,Dammam,Wholesale,2024-06-15
Used in: 17. Capstone: end-to-end business analytics
Generated for Python Quest with a seeded Node.js script (fixed-seed pseudo-random generator, standard library only). The company, customers, products and figures are invented; no real records were used.
Oasis Coffee Roasters order lines 2025 (synthetic, uncleaned)
290 order lines (147 orders) for 2025 with a rise towards the end of the year. Deliberately messy: six duplicated export rows, customer ids and SKUs in lower case or with spaces, status written several ways, eight cancelled lines, two impossible or wrongly formatted dates, three bad quantities (0, -1, blank), two unknown customers and one unknown SKU. Used by the capstone project.
Fields (7)
- line_id
- Unique order line id L0001 upwards (repeated on duplicated rows)
- order_id
- Order number O1001 upwards; an order can have several lines
- date
- Order date, YYYY-MM-DD (two invalid)
- customer_id
- Customer code (case and spaces vary; two unknown)
- sku
- Product code (case varies; one unknown)
- qty
- Units ordered (three invalid values)
- status
- completed or cancelled, in inconsistent capitals and spacing
data/capstone_orders.csv · 291 lines · 13.8 KB
line_id,order_id,date,customer_id,sku,qty,status L0001,O1001,2025-01-01,C016,bean-col,1,completed L0002,O1002,2025-01-12,C019,ACC-FLT,7,completed L0003,O1002,2025-01-12,C019,ACC-MUG,8,completed L0004,O1002,2025-01-12,C019,BEAN-ETH,9,completed L0005,O1003,2025-01-07,C037,eqp-grd,3,completed L0006,O1003,2025-01-07,C037,bean-bra,2,completed L0007,O1004,2025-01-20,C034,BEAN-DEC,2,completed L0008,O1004,2025-01-20,C034,TEA-MNT,2,completed L0009,O1005,2025-01-07,C033,EQP-V60,3,completed L0010,O1005,2025-01-07,C033,BEAN-YEM,1,completed L0011,O1005,2025-01-07,C033,BEAN-COL,2,completed
Used in: 17. Capstone: end-to-end business analytics
Generated for Python Quest with a seeded Node.js script (fixed-seed pseudo-random generator, standard library only). The company, customers, products and figures are invented; no real records were used.
Oasis Coffee Roasters product list (synthetic)
12 products as a JSON list of objects. Small inconsistencies to clean: one SKU in lower case with a leading space, categories in mixed case with a trailing space, one price stored as a string and one name with a trailing space. Used by the capstone project.
Fields (4)
- sku
- Product code, e.g. BEAN-ETH
- name
- Product name
- category
- Coffee beans, Tea, Equipment or Accessories
- unit_price
- Price in SAR (a number, once a string)
data/capstone_products.json · 74 lines · 1.4 KB
[ { "sku": "BEAN-ETH", "name": "Ethiopia Yirgacheffe beans 250g", "category": "Coffee beans", "unit_price": 58 }, { "sku": " bean-col", "name": "Colombia Huila beans 250g", "category": "Coffee beans", "unit_price": 49Used in: 17. Capstone: end-to-end business analytics
Generated for Python Quest with a seeded Node.js script (fixed-seed pseudo-random generator, standard library only). The company, customers, products and figures are invented; no real records were used.