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 }