{
  "format": "dataset-manifest/1",
  "slug": "grocery-shopping-list-and-meal-planner",
  "version": 1,
  "seed": "grocery-shopping-list-and-meal-planner:1",
  "spec": {
    "format": "dataset/1",
    "slug": "grocery-shopping-list-and-meal-planner",
    "name": "Meal Planning and Grocery Trends",
    "tagline": "User-generated meal plans, shopping history, and pantry items reflecting diverse dietary preferences and trends.",
    "description": "Users plan their meals and manage grocery shopping, ensuring efficient cooking and shopping experiences tailored to their dietary needs. They create personalized meal plans that reflect their preferences, dietary restrictions, and cooking styles. Pantry items are tracked, allowing users to know what ingredients are available at home, while shopping history provides insights into their purchasing habits over time. Recipes offer a range of options that users can choose to incorporate into their meal plans, with ingredient lists detailing the components necessary for each dish.\n\nIn this dataset, a row in the users table represents an individual user and their unique profile, while the pantry_items table lists the specific ingredients each user has on hand. The shopping_history table records transactions, linking users to the items they purchased, while meal_plans outline the meals users intend to prepare over a certain period. Recipes contain various dishes that can be made, and ingredient_lists provide the details of what each recipe requires.\n\nRelationships between these tables allow for deep analysis; for instance, users can compare their pantry items with their meal plans to avoid over-purchasing. One can also explore how certain ingredients tend to appear more frequently in shopping history, indicating popular recipes or dietary trends. This data answers questions about user preferences, shopping habits, and meal planning efficiency, making it a valuable resource for practicing data analysis techniques. The insights drawn from these connections can enhance understanding of consumer behavior in the meal planning and grocery shopping space.\n\nThe data is synthetic, generated to provide a realistic scenario for developers looking to refine their analytical skills in e-commerce related to meal planning.",
    "domain": "ecommerce",
    "shape": "slowly-changing",
    "useCases": [
      "etl-pipelines",
      "teaching"
    ],
    "keywords": [
      "meal planning",
      "grocery shopping",
      "recipes",
      "pantry items",
      "shopping history",
      "dietary preferences"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "users": {
        "description": "This table captures user details, linking meal planning and shopping behaviors to individual households.",
        "rows": 100,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each user."
          },
          "full_name": {
            "kind": "fullName",
            "description": "The full name of the user."
          },
          "email": {
            "kind": "email",
            "from": "full_name",
            "description": "The email address of the user."
          },
          "created_at": {
            "kind": "datetime",
            "from": "2020-01-01",
            "to": "2023-12-31",
            "description": "The account creation date.",
            "dayProfile": "waking"
          }
        }
      },
      "pantry_items": {
        "description": "This table lists items typically stored in users' pantries, linked to their dietary preferences.",
        "rows": 150,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each pantry item."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.id",
            "description": "References the user who owns the pantry item."
          },
          "item_name": {
            "kind": "productName",
            "description": "The name of the pantry item."
          },
          "quantity": {
            "kind": "int",
            "min": 0,
            "max": 100,
            "description": "Amount of the item in stock."
          },
          "expiration_date": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2025-12-31",
            "description": "Expiration date of the pantry item."
          }
        }
      },
      "shopping_history": {
        "description": "This table tracks the shopping history of users, providing insights into purchasing trends.",
        "rows": 300,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each shopping record."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.id",
            "description": "References the user who made the purchase."
          },
          "purchase_date": {
            "kind": "date",
            "from": "2022-01-01",
            "to": "2023-12-31",
            "description": "Date of the shopping transaction.",
            "trend": "seasonal"
          },
          "total_amount": {
            "kind": "decimal",
            "min": 0,
            "max": 500,
            "scale": 2,
            "description": "Total amount spent during the shopping trip."
          }
        }
      },
      "meal_plans": {
        "description": "This table contains meal plans created by users, linking to specific recipes.",
        "rows": 200,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each meal plan."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.id",
            "description": "References the user who created the meal plan."
          },
          "meal_date": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Date for which the meal plan is set.",
            "trend": "seasonal"
          },
          "recipe_id": {
            "kind": "fk",
            "ref": "recipes.id",
            "nullable": true,
            "description": "References the recipe for the meal plan."
          }
        }
      },
      "recipes": {
        "description": "This table lists recipes that users can select for their meal plans, including dietary tags.",
        "rows": 100,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each recipe."
          },
          "title": {
            "kind": "title",
            "description": "The title of the recipe."
          },
          "instructions": {
            "kind": "paragraph",
            "max": 500,
            "description": "Step-by-step instructions for preparing the recipe."
          },
          "dietary_tags": {
            "kind": "words",
            "max": 50,
            "description": "Dietary preferences or restrictions associated with the recipe."
          }
        }
      },
      "ingredient_lists": {
        "description": "This table connects recipes to their required ingredients, reflecting what users need to buy.",
        "rows": 250,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each ingredient list entry."
          },
          "recipe_id": {
            "kind": "fk",
            "ref": "recipes.id",
            "description": "References the recipe for which the ingredients are listed."
          },
          "ingredient_name": {
            "kind": "productName",
            "description": "Name of the ingredient required for the recipe."
          },
          "quantity_needed": {
            "kind": "int",
            "min": 1,
            "max": 50,
            "description": "Amount of the ingredient needed for the recipe."
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "categorical",
      "nullable",
      "timestamped",
      "high-cardinality"
    ],
    "analysisQuestions": [
      "What are the most commonly purchased pantry items?",
      "How do dietary preferences influence shopping habits?",
      "Which recipes are most frequently planned in a given month?",
      "What is the average expenditure per shopping trip?",
      "How often do users purchase items that are nearing expiration?"
    ],
    "suggestedQueries": [
      {
        "title": "Join Users and Shopping History",
        "sql": "SELECT users.full_name, shopping_history.purchase_date, shopping_history.total_amount FROM users JOIN shopping_history ON users.id = shopping_history.user_id;",
        "dialect": "postgres"
      },
      {
        "title": "Aggregate Shopping Amounts by User",
        "sql": "SELECT user_id, SUM(total_amount) AS total_spent FROM shopping_history GROUP BY user_id;",
        "dialect": "postgres"
      },
      {
        "title": "Meal Plans and Corresponding Recipes",
        "sql": "SELECT meal_plans.meal_date, recipes.title FROM meal_plans LEFT JOIN recipes ON meal_plans.recipe_id = recipes.id;",
        "dialect": "postgres"
      },
      {
        "title": "Pantry Items Used in Recipes",
        "sql": "SELECT pantry_items.item_name, recipes.title FROM pantry_items JOIN ingredient_lists ON pantry_items.item_name = ingredient_lists.ingredient_name JOIN recipes ON ingredient_lists.recipe_id = recipes.id;",
        "dialect": "postgres"
      },
      {
        "title": "Shopping Trends Over Time",
        "sql": "SELECT DATE_TRUNC('month', purchase_date) AS month, COUNT(*) AS num_purchases FROM shopping_history GROUP BY month ORDER BY month;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Data Analysis for Meal Planning Apps",
        "body": "Developers creating meal planning apps can use this dataset to analyze user behavior, such as which recipes are most popular among different dietary preferences. By exploring the relationships between meal plans and shopping history, they can enhance user recommendations and improve the app's functionality."
      },
      {
        "title": "Educational Purposes in Data Science",
        "body": "Instructors teaching data science can utilize this dataset to demonstrate how to perform data analysis and SQL querying. Students can practice writing queries to extract insights about meal planning habits and grocery shopping trends, allowing them to apply theoretical knowledge to practical scenarios."
      },
      {
        "title": "Market Research for Grocery Stores",
        "body": "Market analysts can leverage this dataset to understand consumer purchasing patterns and preferences. By analyzing the shopping history and pantry items, they can identify trends that could influence inventory management and promotional strategies for grocery stores."
      },
      {
        "title": "Dietary Management Systems",
        "body": "Nutritionists and healthcare professionals can use this dataset to design dietary management systems that cater to individual user needs. By analyzing the dietary tags in recipes and pantry items, they can develop personalized meal plans that align with clients' health goals."
      }
    ]
  },
  "counts": {
    "recipes": 100,
    "ingredient_lists": 250,
    "users": 100,
    "meal_plans": 200,
    "pantry_items": 150,
    "shopping_history": 300
  },
  "stats": {
    "users": {
      "rows": 100,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 100,
          "min": 1,
          "max": 100
        },
        "full_name": {
          "nulls": 0,
          "distinct": 100,
          "min": "Alice Jansen",
          "max": "Zara Rossi"
        },
        "email": {
          "nulls": 0,
          "distinct": 100
        },
        "created_at": {
          "nulls": 0,
          "distinct": 100,
          "min": "2020-01-18 07:49:20",
          "max": "2023-12-22 15:51:37"
        }
      }
    },
    "pantry_items": {
      "rows": 150,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 150,
          "min": 1,
          "max": 150
        },
        "user_id": {
          "nulls": 0,
          "distinct": 79,
          "min": 1,
          "max": 99
        },
        "item_name": {
          "nulls": 0,
          "distinct": 130,
          "min": "Classic Headphones",
          "max": "Wireless Tripod"
        },
        "quantity": {
          "nulls": 0,
          "distinct": 80,
          "min": 0,
          "max": 99
        },
        "expiration_date": {
          "nulls": 0,
          "distinct": 138,
          "min": "2023-01-06",
          "max": "2025-12-28"
        }
      }
    },
    "shopping_history": {
      "rows": 300,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 300,
          "min": 1,
          "max": 300
        },
        "user_id": {
          "nulls": 0,
          "distinct": 100,
          "min": 1,
          "max": 100
        },
        "purchase_date": {
          "nulls": 0,
          "distinct": 239,
          "min": "2022-01-02",
          "max": "2023-12-31"
        },
        "total_amount": {
          "nulls": 0,
          "distinct": 299,
          "min": 1.92,
          "max": 499.68
        }
      }
    },
    "meal_plans": {
      "rows": 200,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "user_id": {
          "nulls": 0,
          "distinct": 87,
          "min": 1,
          "max": 100
        },
        "meal_date": {
          "nulls": 0,
          "distinct": 148,
          "min": "2023-01-02",
          "max": "2023-12-31"
        },
        "recipe_id": {
          "nulls": 20,
          "distinct": 88,
          "min": 1,
          "max": 100
        }
      }
    },
    "recipes": {
      "rows": 100,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 100,
          "min": 1,
          "max": 100
        },
        "title": {
          "nulls": 0,
          "distinct": 100
        },
        "instructions": {
          "nulls": 0,
          "distinct": 100
        },
        "dietary_tags": {
          "nulls": 0,
          "distinct": 100
        }
      }
    },
    "ingredient_lists": {
      "rows": 250,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 250,
          "min": 1,
          "max": 250
        },
        "recipe_id": {
          "nulls": 0,
          "distinct": 89,
          "min": 1,
          "max": 100
        },
        "ingredient_name": {
          "nulls": 0,
          "distinct": 192,
          "min": "Classic Blender",
          "max": "Wireless Watch"
        },
        "quantity_needed": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/recipes.csv",
      "format": "csv",
      "table": "recipes",
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/csv/recipes.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/csv/recipes.csv",
      "bytes": 38049,
      "sha256": "569a1136d5d5ec5e7ab432f859bf428738f197798734b5ef6a92d4989c19cc91",
      "rows": 100,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/ingredient_lists.csv",
      "format": "csv",
      "table": "ingredient_lists",
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/csv/ingredient_lists.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/csv/ingredient_lists.csv",
      "bytes": 6354,
      "sha256": "c7bd498c93ec75b6abbd09035159da5b4c2f719ee738a5a92c7f42658b69cf3a",
      "rows": 250,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/users.csv",
      "format": "csv",
      "table": "users",
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/csv/users.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/csv/users.csv",
      "bytes": 6077,
      "sha256": "c86858c854c5c7864d8cf673600040b75b113f6caeacb8bf1a94dee7a341a66c",
      "rows": 100,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/meal_plans.csv",
      "format": "csv",
      "table": "meal_plans",
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/csv/meal_plans.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/csv/meal_plans.csv",
      "bytes": 4256,
      "sha256": "52d5803cf087701cf193e6c6c16db4f99e6088e42249ef8e5cc91ba109a03ecc",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/pantry_items.csv",
      "format": "csv",
      "table": "pantry_items",
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/csv/pantry_items.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/csv/pantry_items.csv",
      "bytes": 5507,
      "sha256": "e3fd75d0a3f67150c479f2c2e6c7bbe6b1201caf049bcea70baed99c8899182c",
      "rows": 150,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/shopping_history.csv",
      "format": "csv",
      "table": "shopping_history",
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/csv/shopping_history.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/csv/shopping_history.csv",
      "bytes": 7644,
      "sha256": "648776f716aefabdcc5954292e54f1fc2abb22a5269616e53f3730c52d075065",
      "rows": 300,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "grocery-shopping-list-and-meal-planner.json",
      "format": "json",
      "table": null,
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/grocery-shopping-list-and-meal-planner.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/grocery-shopping-list-and-meal-planner.json",
      "bytes": 170906,
      "sha256": "88feec34eb186b004d9d146406cea0dcdd582d9c17b47de39311fa6c62d07e9b",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/sql/postgres.sql",
      "bytes": 84494,
      "sha256": "519669621ab65851d7ba272251d061b75461f1c1b19a3c78a834b3ba8b24d9e2",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/sql/mysql.sql",
      "bytes": 83790,
      "sha256": "f2091cefd2690356e47a02b0f0497896f5d1f91ed50b63422abcb52e1418e0ae",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/sql/mssql.sql",
      "bytes": 85858,
      "sha256": "d4991c10b3331d73c808e85e76815868f6618721a7705f3f1fa3e96e073c37aa",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/sql/sqlite.sql",
      "bytes": 83538,
      "sha256": "bf3fb9ce2b0de1fb82cd9f6b4114f16cb0e262ac0d04e38fc62a60f2969ace90",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/prisma/seed.ts",
      "bytes": 141647,
      "sha256": "9ef271bfb38a3723d9dad198c4e3dc4f5d222dbcd7d53152a26b07456b3fa96a",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/grocery-shopping-list-and-meal-planner/v1/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/grocery-shopping-list-and-meal-planner/v1/django/fixtures.json",
      "bytes": 221001,
      "sha256": "631505f083de58e7ca259fb703aa38cd34e551f93cb8dc751d6eea1dbc9dae26",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788766616743,
  "updatedAt": 1788766616743
}
