{
  "format": "dataset-manifest/1",
  "slug": "occupancy-by-night",
  "version": 2,
  "seed": "occupancy-by-night:1",
  "spec": {
    "format": "dataset/1",
    "slug": "occupancy-by-night",
    "name": "Occupancy by Night",
    "tagline": "Nightly hotel occupancy and rates by room type over two years, highlighting weekend and seasonal patterns.",
    "description": "Hotels track their nightly occupancy and room rates to optimize pricing strategies and improve revenue management. This dataset captures nightly occupancy and revenue per available room (RevPAR) across different hotels and room types over a two-year period. It reflects seasonal trends and weekend patterns, allowing hotel managers and analysts to identify peak periods and adjust pricing accordingly. The tables are interconnected, enabling users to explore how different room types perform in various hotels during specific time frames. This synthetic dataset is ideal for practicing data analysis techniques relevant to the hospitality industry, answering questions about occupancy rates, revenue trends, and seasonal impacts.",
    "domain": "hospitality",
    "shape": "time-series",
    "useCases": [
      "bi-dashboards",
      "analytics-demo"
    ],
    "keywords": [
      "hotel occupancy",
      "room rates",
      "revenue management",
      "time series",
      "hospitality analytics"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "hotels": {
        "description": "This table contains information about each hotel, including its location and classification. Each row represents a unique hotel.",
        "rows": 50,
        "columns": {
          "hotel_id": {
            "kind": "pk",
            "description": "Unique identifier for the hotel."
          },
          "name": {
            "kind": "fullName",
            "description": "The name of the hotel."
          },
          "location": {
            "kind": "city",
            "description": "City where the hotel is located."
          },
          "star_rating": {
            "kind": "int",
            "min": 1,
            "max": 5,
            "description": "Star rating of the hotel, from 1 to 5."
          }
        }
      },
      "room_types": {
        "description": "This table lists the different room types available in each hotel. Each row corresponds to a unique room type within a hotel.",
        "rows": 150,
        "columns": {
          "room_type_id": {
            "kind": "pk",
            "description": "Unique identifier for the room type."
          },
          "hotel_id": {
            "kind": "fk",
            "ref": "hotels.hotel_id",
            "description": "Reference to the hotel this room type belongs to."
          },
          "type_name": {
            "kind": "words",
            "description": "Name of the room type (e.g., Deluxe, Standard).",
            "pool": [
              "Deluxe",
              "Standard",
              "Suite",
              "Economy",
              "Luxury",
              "Penthouse",
              "Studio",
              "Family",
              "Double",
              "Twin",
              "Queen",
              "King",
              "Accessible",
              "Bungalow",
              "Villa",
              "Cottage",
              "Loft",
              "Attic",
              "Chalet",
              "Cabin",
              "Apartment",
              "Condo",
              "Flat",
              "Room",
              "Executive",
              "Premier",
              "Basic",
              "Superior",
              "Budget",
              "Corporate",
              "Business",
              "Resort",
              "Retreat",
              "Heritage",
              "Boutique",
              "Trendy",
              "Modern",
              "Classic",
              "Rustic",
              "Seaside",
              "Mountain",
              "Urban",
              "Countryside",
              "Waterfront",
              "Garden",
              "View",
              "Skyline",
              "Ocean",
              "Park",
              "Cozy",
              "Spacious",
              "Intimate",
              "Charming"
            ],
            "min": 1,
            "max": 3
          },
          "base_rate": {
            "kind": "decimal",
            "min": 50,
            "max": 500,
            "scale": 2,
            "description": "Base rate per night for this room type.",
            "distribution": "long-tail"
          }
        }
      },
      "occupancy_data": {
        "description": "This table captures nightly occupancy data for each hotel and room type. Each row represents occupancy details for a specific date.",
        "rows": 600,
        "columns": {
          "occupancy_id": {
            "kind": "pk",
            "description": "Unique identifier for the occupancy record."
          },
          "hotel_id": {
            "kind": "fk",
            "ref": "hotels.hotel_id",
            "description": "Reference to the hotel."
          },
          "room_type_id": {
            "kind": "fk",
            "ref": "room_types.room_type_id",
            "description": "Reference to the room type."
          },
          "date": {
            "kind": "date",
            "from": "2022-01-01",
            "to": "2023-12-31",
            "description": "The date of the occupancy record.",
            "trend": "seasonal"
          },
          "occupied_rooms": {
            "kind": "int",
            "min": 0,
            "max": 100,
            "description": "Number of rooms occupied on this night.",
            "distribution": "long-tail"
          },
          "total_rooms": {
            "kind": "int",
            "min": 10,
            "max": 100,
            "description": "Total number of rooms available for this room type."
          },
          "revpar": {
            "kind": "decimal",
            "min": 0,
            "max": 1000,
            "scale": 2,
            "description": "Revenue per available room for this date.",
            "distribution": "heavy-tail"
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "timestamped",
      "monetary",
      "categorical"
    ],
    "analysisQuestions": [
      "What is the average occupancy rate by hotel type?",
      "How do room rates fluctuate during peak seasons?",
      "Which days of the week have the highest occupancy rates?",
      "What is the revenue per available room trend over the two years?",
      "How does occupancy differ between room types?"
    ],
    "suggestedQueries": [
      {
        "title": "Join Hotels and Room Types",
        "sql": "SELECT h.name, rt.type_name FROM hotels h JOIN room_types rt ON h.hotel_id = rt.hotel_id;",
        "dialect": "postgres"
      },
      {
        "title": "Average Occupancy Rate by Hotel",
        "sql": "SELECT h.name, AVG(od.occupied_rooms::decimal / od.total_rooms) AS avg_occupancy FROM occupancy_data od JOIN hotels h ON od.hotel_id = h.hotel_id GROUP BY h.name;",
        "dialect": "postgres"
      },
      {
        "title": "Monthly Revenue Trends",
        "sql": "SELECT DATE_TRUNC('month', od.date) AS month, SUM(od.revpar) AS total_revenue FROM occupancy_data od GROUP BY month ORDER BY month;",
        "dialect": "postgres"
      },
      {
        "title": "Room Type Performance Over Time",
        "sql": "SELECT rt.type_name, DATE_TRUNC('month', od.date) AS month, AVG(od.occupied_rooms::decimal / od.total_rooms) AS avg_occupancy FROM occupancy_data od JOIN room_types rt ON od.room_type_id = rt.room_type_id GROUP BY rt.type_name, month ORDER BY month;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Hotel Revenue Manager",
        "body": "A revenue manager at a hotel chain can use this dataset to analyze occupancy trends across different room types and make data-driven decisions on pricing strategies during peak seasons, ensuring maximum revenue generation."
      },
      {
        "title": "Business Intelligence Analyst",
        "body": "A business intelligence analyst can leverage this dataset to create visualizations that highlight occupancy patterns and revenue performance, helping stakeholders understand the impact of events on hotel bookings."
      },
      {
        "title": "Market Researcher",
        "body": "A market researcher could analyze this data to identify consumer behavior trends in the hospitality industry, assessing how various factors such as location and room type influence occupancy rates and pricing."
      }
    ]
  },
  "counts": {
    "hotels": 50,
    "room_types": 150,
    "occupancy_data": 600
  },
  "stats": {
    "hotels": {
      "rows": 50,
      "columns": {
        "hotel_id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "name": {
          "nulls": 0,
          "distinct": 50,
          "min": "Alice Bennett",
          "max": "Zara Demir"
        },
        "location": {
          "nulls": 0,
          "distinct": 38,
          "min": "Amsterdam",
          "max": "Vienna"
        },
        "star_rating": {
          "nulls": 0,
          "distinct": 5,
          "min": 1,
          "max": 5
        }
      }
    },
    "room_types": {
      "rows": 150,
      "columns": {
        "room_type_id": {
          "nulls": 0,
          "distinct": 150,
          "min": 1,
          "max": 150
        },
        "hotel_id": {
          "nulls": 0,
          "distinct": 48,
          "min": 1,
          "max": 50
        },
        "type_name": {
          "nulls": 0,
          "distinct": 140
        },
        "base_rate": {
          "nulls": 0,
          "distinct": 149,
          "min": 50,
          "max": 493.59
        }
      }
    },
    "occupancy_data": {
      "rows": 600,
      "columns": {
        "occupancy_id": {
          "nulls": 0,
          "distinct": 600,
          "min": 1,
          "max": 600
        },
        "hotel_id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "room_type_id": {
          "nulls": 0,
          "distinct": 146,
          "min": 1,
          "max": 150
        },
        "date": {
          "nulls": 0,
          "distinct": 399,
          "min": "2022-01-03",
          "max": "2023-12-31"
        },
        "occupied_rooms": {
          "nulls": 0,
          "distinct": 100,
          "min": 0,
          "max": 99
        },
        "total_rooms": {
          "nulls": 0,
          "distinct": 90,
          "min": 10,
          "max": 100
        },
        "revpar": {
          "nulls": 0,
          "distinct": 570,
          "min": 0,
          "max": 993.33
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/hotels.csv",
      "format": "csv",
      "table": "hotels",
      "key": "datasets/occupancy-by-night/v2/csv/hotels.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/csv/hotels.csv",
      "bytes": 1346,
      "sha256": "c4bea7ffef4cbf7ea325318739c7b53d612208f25a3d667d589b71dc25175d9e",
      "rows": 50,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/room_types.csv",
      "format": "csv",
      "table": "room_types",
      "key": "datasets/occupancy-by-night/v2/csv/room_types.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/csv/room_types.csv",
      "bytes": 4529,
      "sha256": "6804c0a442ec44b1925a9aae96d73e366aa17ce91c287bbd05211b6938527210",
      "rows": 150,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/occupancy_data.csv",
      "format": "csv",
      "table": "occupancy_data",
      "key": "datasets/occupancy-by-night/v2/csv/occupancy_data.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/csv/occupancy_data.csv",
      "bytes": 20409,
      "sha256": "593d1226d96ee4a7ac8743455f24f513251b1ffeb58367c8aede2680d4d6ca34",
      "rows": 600,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "occupancy-by-night.json",
      "format": "json",
      "table": null,
      "key": "datasets/occupancy-by-night/v2/occupancy-by-night.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/occupancy-by-night.json",
      "bytes": 139052,
      "sha256": "968d88c5816ebb333d6afc4f225a015081587fab3a460f8b1241127625509683",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/occupancy-by-night/v2/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/sql/postgres.sql",
      "bytes": 39157,
      "sha256": "6af020f99e1ed84c42c03185f90aeaafc9bfe79a89f969aa021a44548b7c50a4",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/occupancy-by-night/v2/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/sql/mysql.sql",
      "bytes": 38754,
      "sha256": "52f0ea03db8d1645cae81868c5c75fde6301295be011622cbceabf78e5c2456a",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/occupancy-by-night/v2/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/sql/mssql.sql",
      "bytes": 39802,
      "sha256": "447179d63bc19c21d9787548107b053f9e8a38fa1f22cebdf23af1ead7e7fe45",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/occupancy-by-night/v2/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/sql/sqlite.sql",
      "bytes": 38613,
      "sha256": "ae08423da20f16ac33f4f85d28eefb3d2625432896ce8fa05d0f410bdea4769f",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/occupancy-by-night/v2/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/prisma/seed.ts",
      "bytes": 104740,
      "sha256": "5681b2f4bbb91d6564ec8de073bb89370092d34f30afde3a941fa3410299643e",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/occupancy-by-night/v2/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/occupancy-by-night/v2/django/fixtures.json",
      "bytes": 167583,
      "sha256": "9d3f483ddc4a265494179ecbef18dbb0583741d031125807a849e845542e8387",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788734057435,
  "updatedAt": 1788785137225
}
