courses/DSL/transactions-mock-data/store-transactions-generator.ipynb (233 lines of code) (raw):
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"1 + 2"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'store_transactions.jsonl'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import json\n",
"import random\n",
"from datetime import datetime, timedelta\n",
"import uuid\n",
"\n",
"def random_date(start, end):\n",
" return start + timedelta(\n",
" seconds=random.randint(0, int((end - start).total_seconds())),\n",
" )\n",
"\n",
"def generate_item():\n",
" items = [\n",
" {\"item_id\": \"ITEM001\", \"name\": \"Laptop\", \"price\": 999.99},\n",
" {\"item_id\": \"ITEM002\", \"name\": \"Mouse\", \"price\": 25.50},\n",
" {\"item_id\": \"ITEM003\", \"name\": \"Keyboard\", \"price\": 49.99},\n",
" {\"item_id\": \"ITEM004\", \"name\": \"Monitor\", \"price\": 199.99},\n",
" {\"item_id\": \"ITEM005\", \"name\": \"USB Cable\", \"price\": 9.99},\n",
" ]\n",
" item = random.choice(items)\n",
" item[\"quantity\"] = random.randint(1, 5)\n",
" return item\n",
"\n",
"def generate_record(loyalty_numbers):\n",
" transaction_id = str(uuid.uuid4())\n",
" timestamp = random_date(datetime(2023, 1, 1), datetime(2024, 7, 28)).isoformat() + 'Z'\n",
" loyalty_number = random.choice(loyalty_numbers + [\"\"]) if random.random() > 0.5 else \"\"\n",
" store_number = f\"STORE{random.randint(100, 125)}\"\n",
" region = random.choice([\"Northwest\", \"Northeast\", \"Southwest\", \"Southeast\", \"Midwest\"])\n",
" items = [generate_item() for _ in range(random.randint(1, 5))]\n",
" total_amount = sum(item[\"price\"] * item[\"quantity\"] for item in items)\n",
" payment_method = random.choice([\"cash\", \"credit_card\", \"debit_card\", \"gift_card\", \"online_payment\"])\n",
"\n",
" return {\n",
" \"transaction_id\": transaction_id,\n",
" \"timestamp\": timestamp,\n",
" \"loyalty_number\": loyalty_number,\n",
" \"store_number\": store_number,\n",
" \"region\": region,\n",
" \"items\": items,\n",
" \"total_amount\": total_amount,\n",
" \"payment_method\": payment_method\n",
" }\n",
"\n",
"# Generate 100 unique loyalty numbers\n",
"loyalty_numbers = [str(uuid.uuid4()) for _ in range(100)]\n",
"\n",
"# Generate 1000 records\n",
"records = [generate_record(loyalty_numbers) for _ in range(1000)]\n",
"\n",
"# Save the records to a JSON-L file\n",
"file_path = 'store_transactions.jsonl'\n",
"with open(file_path, 'w') as f:\n",
" for record in records:\n",
" f.write(json.dumps(record) + '\\n')\n",
"\n",
"file_path\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Collecting faker\n",
" Downloading Faker-26.0.0-py3-none-any.whl (1.8 MB)\n",
"\u001b[K |████████████████████████████████| 1.8 MB 2.5 MB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: python-dateutil>=2.4 in /Users/doug/Library/Python/3.9/lib/python/site-packages (from faker) (2.9.0.post0)\n",
"Requirement already satisfied: six>=1.5 in /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages (from python-dateutil>=2.4->faker) (1.15.0)\n",
"Installing collected packages: faker\n",
"Successfully installed faker-26.0.0\n",
"\u001b[33mWARNING: You are using pip version 21.2.4; however, version 24.1.2 is available.\n",
"You should consider upgrading via the '/Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip' command.\u001b[0m\n"
]
}
],
"source": [
"! pip3 install faker"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\"store_number\": \"STORE100\", \"address\": \"65036 Chloe Summit, East Victor, OK 99564\", \"manager_name\": \"Joseph Luna\", \"phone_number\": \"001-394-712-4927x80944\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE101\", \"address\": \"5216 Cooper Lodge, North Sarah, MO 43646\", \"manager_name\": \"Shelby Haynes\", \"phone_number\": \"(778)848-4178x7492\", \"region\": \"Midwest\"}\n",
"{\"store_number\": \"STORE102\", \"address\": \"536 Bob Curve, South Amytown, AR 33943\", \"manager_name\": \"Courtney Reyes\", \"phone_number\": \"882.779.7184x508\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE103\", \"address\": \"4410 Katrina Centers Apt. 202, Solisborough, AK 85838\", \"manager_name\": \"Jeff Ryan\", \"phone_number\": \"955.880.7285\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE104\", \"address\": \"0542 Green Dam Apt. 726, South John, UT 77402\", \"manager_name\": \"Nicholas Kennedy\", \"phone_number\": \"9183739839\", \"region\": \"Northeast\"}\n",
"{\"store_number\": \"STORE105\", \"address\": \"8664 Hays Route, South Sherry, MS 70429\", \"manager_name\": \"Kenneth Mendez\", \"phone_number\": \"+1-484-895-8940x396\", \"region\": \"Northwest\"}\n",
"{\"store_number\": \"STORE106\", \"address\": \"Unit 1636 Box 6187, DPO AA 99197\", \"manager_name\": \"James Austin\", \"phone_number\": \"(620)256-9551x61958\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE107\", \"address\": \"89791 Amanda Flats Apt. 417, Smithside, VT 11392\", \"manager_name\": \"Nicole Roberts\", \"phone_number\": \"915-328-1407x2984\", \"region\": \"Northwest\"}\n",
"{\"store_number\": \"STORE108\", \"address\": \"71274 Kimberly Skyway Apt. 654, Carterside, ND 51809\", \"manager_name\": \"Sarah Carpenter\", \"phone_number\": \"2472999871\", \"region\": \"Southwest\"}\n",
"{\"store_number\": \"STORE109\", \"address\": \"273 Anthony Turnpike Apt. 412, East Katiemouth, FM 78883\", \"manager_name\": \"Elizabeth Anderson\", \"phone_number\": \"+1-461-660-5186x43201\", \"region\": \"Midwest\"}\n",
"{\"store_number\": \"STORE110\", \"address\": \"8312 Stephanie Grove, Port Amandastad, ID 60892\", \"manager_name\": \"Brenda Mills\", \"phone_number\": \"(811)670-0342\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE111\", \"address\": \"18745 Sarah Loaf Apt. 438, Patrickville, IN 77691\", \"manager_name\": \"Holly Hayes\", \"phone_number\": \"(323)625-1370\", \"region\": \"Southwest\"}\n",
"{\"store_number\": \"STORE112\", \"address\": \"768 Banks Points Suite 463, Cohenview, MA 73365\", \"manager_name\": \"Michelle Hammond\", \"phone_number\": \"726.533.8110x437\", \"region\": \"Midwest\"}\n",
"{\"store_number\": \"STORE113\", \"address\": \"16647 Thompson Village Suite 966, Goodwinburgh, TX 24112\", \"manager_name\": \"Kevin Williamson\", \"phone_number\": \"819.204.8569\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE114\", \"address\": \"460 Keith Extensions Apt. 221, Reedhaven, NJ 88530\", \"manager_name\": \"Emily Smith MD\", \"phone_number\": \"+1-549-433-9129x03225\", \"region\": \"Midwest\"}\n",
"{\"store_number\": \"STORE115\", \"address\": \"85786 Pruitt Street, Julieville, UT 05489\", \"manager_name\": \"David Padilla\", \"phone_number\": \"310.325.5560x4338\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE116\", \"address\": \"88409 Freeman Harbors Apt. 859, Jamesport, MO 00728\", \"manager_name\": \"Christopher Lewis\", \"phone_number\": \"(731)736-8420\", \"region\": \"Midwest\"}\n",
"{\"store_number\": \"STORE117\", \"address\": \"5953 Norma Terrace, Port Ryanmouth, NE 61558\", \"manager_name\": \"Douglas Jackson\", \"phone_number\": \"(429)284-4601x48924\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE118\", \"address\": \"277 Smith Valley Suite 414, Jenniferchester, PR 41185\", \"manager_name\": \"Denise Cook\", \"phone_number\": \"001-319-251-4650x1913\", \"region\": \"Southwest\"}\n",
"{\"store_number\": \"STORE119\", \"address\": \"30074 Martin Center, Andrealand, UT 28365\", \"manager_name\": \"Traci Lopez\", \"phone_number\": \"001-911-207-7454x41160\", \"region\": \"Southwest\"}\n",
"{\"store_number\": \"STORE120\", \"address\": \"Unit 7183 Box 1679, DPO AP 35012\", \"manager_name\": \"Katherine Kent\", \"phone_number\": \"918-823-0502\", \"region\": \"Northwest\"}\n",
"{\"store_number\": \"STORE121\", \"address\": \"653 Foster Cliffs, West Meredithfort, GA 75065\", \"manager_name\": \"Hannah Taylor\", \"phone_number\": \"2842102452\", \"region\": \"Midwest\"}\n",
"{\"store_number\": \"STORE122\", \"address\": \"70045 Tyler Radial Apt. 101, Fernandezview, AL 23537\", \"manager_name\": \"Katherine Hall\", \"phone_number\": \"407.586.5742x7539\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE123\", \"address\": \"70807 Hall Track Apt. 982, Port Gailview, AL 59092\", \"manager_name\": \"Kaitlyn Wilson\", \"phone_number\": \"386-723-8020x960\", \"region\": \"Southeast\"}\n",
"{\"store_number\": \"STORE124\", \"address\": \"653 Roberts Groves Suite 388, Maryton, MP 18930\", \"manager_name\": \"Mark Bates\", \"phone_number\": \"(887)967-1654x900\", \"region\": \"Southwest\"}\n",
"{\"store_number\": \"STORE125\", \"address\": \"9093 Isabella Circle Suite 539, South Brittanyport, SD 27836\", \"manager_name\": \"Rachel Lee\", \"phone_number\": \"(821)844-9545\", \"region\": \"Southeast\"}\n"
]
},
{
"data": {
"text/plain": [
"'stores.jsonl'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import json\n",
"import faker\n",
"import random\n",
"\n",
"# Initialize Faker for generating fake data\n",
"fake = faker.Faker()\n",
"\n",
"def generate_store(store_number):\n",
" address = fake.address().replace(\"\\n\", \", \")\n",
" manager_name = fake.name()\n",
" phone_number = fake.phone_number()\n",
" region = random.choice([\"Northwest\", \"Northeast\", \"Southwest\", \"Southeast\", \"Midwest\"])\n",
" \n",
" return {\n",
" \"store_number\": store_number,\n",
" \"address\": address,\n",
" \"manager_name\": manager_name,\n",
" \"phone_number\": phone_number,\n",
" \"region\": region\n",
" }\n",
"\n",
"# Generate data for stores numbered STORE100 to STORE125\n",
"store_numbers = [f\"STORE{number}\" for number in range(100, 126)]\n",
"stores = [generate_store(store_number) for store_number in store_numbers]\n",
"\n",
"# Save the records to a JSON-L file\n",
"file_path = 'stores.jsonl'\n",
"with open(file_path, 'w') as f:\n",
" for store in stores:\n",
" f.write(json.dumps(store) + '\\n')\n",
"\n",
"# Display the JSON-L data\n",
"for store in stores:\n",
" print(json.dumps(store))\n",
"\n",
"file_path\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}