{
  "format": "dataset-manifest/1",
  "slug": "urban-mobility-and-bike-sharing-app",
  "version": 1,
  "seed": "urban-mobility-and-bike-sharing-app:1",
  "spec": {
    "format": "dataset/1",
    "slug": "urban-mobility-and-bike-sharing-app",
    "name": "Urban Bike Sharing Insights",
    "tagline": "Users, trips, promotions, station locations, and maintenance records from an urban bike-sharing service.",
    "description": "A bike-sharing service operates in urban areas, providing users with a convenient way to rent bicycles for short trips. This eco-friendly transportation option promotes sustainability and ease of mobility, allowing users to navigate through the city's bustling streets. The service records a variety of interactions, including user rentals, bike trips taken, promotional offers utilized, station locations for bike pick-up and drop-off, and maintenance activities for ensuring the bikes are in optimal condition. Each of these components plays a critical role in the overall operation and success of the bike-sharing business.\n\nIn this dataset, the 'users' table contains unique identifiers for each registered user, along with details about their demographics and rental history. The 'trips' table captures each bike rental transaction, including information on duration, start and end times, and the specific bikes used. The 'promotions' table lists promotional codes and their effectiveness, detailing how often they are redeemed and their impact on user behavior. The 'station_locations' table provides geographic coordinates and information about the various stations where bikes can be picked up or returned. Lastly, the 'maintenance_records' table tracks the upkeep of bikes, recording when repairs are made and what issues are addressed.\n\nThese tables relate to one another through various keys. For instance, each trip entry links back to a user through a user ID, and trips can be connected to specific stations using station IDs. Promotions can influence user behavior in terms of trip frequency, with codes linked to specific users or timeframes in the trips table. Analyzing this data can help answer questions such as: What are the peak times for bike rentals? How do promotional offers affect user engagement? Which stations are most frequently used and require more maintenance? The dataset is synthetic, yet it mimics real-world scenarios and serves as a valuable resource for developers and data analysts to practice their skills.",
    "domain": "saas",
    "shape": "transactional",
    "useCases": [
      "sql-practice",
      "orm-seeding"
    ],
    "keywords": [
      "bike sharing",
      "urban mobility",
      "transactions",
      "promotions",
      "user data",
      "maintenance",
      "trips"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "users": {
        "description": "This table holds user information for the bike-sharing platform, linking to their transactions and trips.",
        "rows": 200,
        "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."
          },
          "registration_date": {
            "kind": "date",
            "from": "2020-01-01",
            "to": "2023-12-31",
            "description": "Date when the user registered for the service."
          }
        }
      },
      "trips": {
        "description": "This table records individual bike trips, linking each trip to a user and a bike.",
        "rows": 1000,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each trip."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.id",
            "description": "Reference to the user who took the trip."
          },
          "bike_id": {
            "kind": "int",
            "min": 1,
            "max": 100,
            "description": "Identifier for the bike used in the trip."
          },
          "start_station": {
            "kind": "city",
            "description": "The station where the trip started.",
            "nullable": true
          },
          "end_station": {
            "kind": "city",
            "description": "The station where the trip ended.",
            "nullable": true
          },
          "start_time": {
            "kind": "datetime",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "dayProfile": "waking",
            "description": "Timestamp of when the trip started."
          },
          "end_time": {
            "kind": "datetime",
            "after": "start_time",
            "withinDays": 1,
            "description": "Timestamp of when the trip ended."
          }
        }
      },
      "promotions": {
        "description": "This table outlines promotional codes that users can apply to their trips.",
        "rows": 50,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each promotion."
          },
          "code": {
            "kind": "words",
            "min": 5,
            "max": 10,
            "description": "The promotional code offered to users."
          },
          "discount_percentage": {
            "kind": "decimal",
            "min": 5,
            "max": 50,
            "scale": 0,
            "description": "Percentage discount offered by the promotion.",
            "nullable": true
          },
          "valid_from": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Date from which the promotion is valid.",
            "nullable": true
          },
          "valid_to": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Date until which the promotion is valid.",
            "nullable": true
          }
        }
      },
      "station_locations": {
        "description": "This table records the locations of bike stations throughout the urban area.",
        "rows": 30,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each station."
          },
          "station_name": {
            "kind": "words",
            "min": 2,
            "max": 5,
            "description": "The name of the bike station."
          },
          "latitude": {
            "kind": "decimal",
            "min": -90,
            "max": 90,
            "scale": 6,
            "description": "Latitude of the station's location."
          },
          "longitude": {
            "kind": "decimal",
            "min": -180,
            "max": 180,
            "scale": 6,
            "description": "Longitude of the station's location."
          }
        }
      },
      "maintenance_records": {
        "description": "This table logs maintenance activities performed on bikes in the fleet.",
        "rows": 100,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each maintenance record."
          },
          "bike_id": {
            "kind": "int",
            "min": 1,
            "max": 100,
            "description": "Identifier for the bike that was maintained."
          },
          "maintenance_date": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Date when maintenance was performed."
          },
          "description": {
            "kind": "sentence",
            "description": "Details of the maintenance performed.",
            "nullable": true
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "nullable",
      "timestamped",
      "categorical"
    ],
    "analysisQuestions": [
      "What are the peak hours for bike rentals in the city?",
      "Which promotional codes are the most effective in increasing trip frequency?",
      "How does the location of bike stations affect trip patterns?",
      "What maintenance issues are most commonly reported for bikes?",
      "Which user demographics are more likely to use promotional codes?"
    ],
    "suggestedQueries": [
      {
        "title": "Join Users and Trips",
        "sql": "SELECT users.full_name, trips.start_time, trips.end_time FROM users JOIN trips ON users.id = trips.user_id;",
        "dialect": "postgres"
      },
      {
        "title": "Count Trips per Station",
        "sql": "SELECT start_station, COUNT(*) FROM trips GROUP BY start_station;",
        "dialect": "postgres"
      },
      {
        "title": "Average Trip Duration",
        "sql": "SELECT AVG(EXTRACT(EPOCH FROM (end_time - start_time))) AS average_duration FROM trips;",
        "dialect": "postgres"
      },
      {
        "title": "Promotional Code Usage",
        "sql": "SELECT promotions.code, COUNT(trips.id) FROM promotions LEFT JOIN trips ON trips.promo_code_id = promotions.id GROUP BY promotions.code;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Data Analysis for Urban Planners",
        "body": "Urban planners can utilize this dataset to analyze the effectiveness of bike-sharing programs in improving transportation efficiency. By examining trip patterns and station usage, they can identify areas needing additional bike stations or promotional efforts, optimizing urban mobility strategies."
      },
      {
        "title": "Marketing Campaign Evaluation",
        "body": "Marketing teams can leverage the promotional data to evaluate the performance of various promotional codes. By analyzing which promotions led to increased user engagement and trip frequency, they can refine future marketing strategies to better encourage bike rentals."
      },
      {
        "title": "Maintenance Scheduling",
        "body": "Maintenance teams can use this dataset to track maintenance records and identify common issues with specific bike models. This analysis allows for proactive scheduling of repairs, ensuring the fleet remains in optimal working condition for users."
      },
      {
        "title": "User Engagement Insights",
        "body": "Data scientists can explore user engagement by analyzing trips and registration patterns. By segmenting users based on demographics and trip behaviors, they can provide insights that help design targeted user experiences and loyalty programs."
      }
    ]
  },
  "counts": {
    "maintenance_records": 100,
    "promotions": 50,
    "station_locations": 30,
    "users": 200,
    "trips": 1000
  },
  "stats": {
    "users": {
      "rows": 200,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "full_name": {
          "nulls": 0,
          "distinct": 197,
          "min": "Alice Hoffmann",
          "max": "Zara Walker"
        },
        "email": {
          "nulls": 0,
          "distinct": 198
        },
        "registration_date": {
          "nulls": 0,
          "distinct": 185,
          "min": "2020-01-02",
          "max": "2023-12-25"
        }
      }
    },
    "trips": {
      "rows": 1000,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 1000,
          "min": 1,
          "max": 1000
        },
        "user_id": {
          "nulls": 0,
          "distinct": 199,
          "min": 1,
          "max": 200
        },
        "bike_id": {
          "nulls": 0,
          "distinct": 100,
          "min": 1,
          "max": 100
        },
        "start_station": {
          "nulls": 105,
          "distinct": 63,
          "min": "Amsterdam",
          "max": "Zurich"
        },
        "end_station": {
          "nulls": 105,
          "distinct": 63,
          "min": "Amsterdam",
          "max": "Zurich"
        },
        "start_time": {
          "nulls": 0,
          "distinct": 1000,
          "min": "2023-01-01 16:02:46",
          "max": "2023-12-31 22:24:19"
        },
        "end_time": {
          "nulls": 0,
          "distinct": 1000,
          "min": "2023-01-01 23:17:03",
          "max": "2024-01-01 17:59:43"
        }
      }
    },
    "promotions": {
      "rows": 50,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "code": {
          "nulls": 0,
          "distinct": 50
        },
        "discount_percentage": {
          "nulls": 5,
          "distinct": 32,
          "min": 5,
          "max": 50
        },
        "valid_from": {
          "nulls": 6,
          "distinct": 42,
          "min": "2023-01-18",
          "max": "2023-12-25"
        },
        "valid_to": {
          "nulls": 5,
          "distinct": 40,
          "min": "2023-01-03",
          "max": "2023-12-19"
        }
      }
    },
    "station_locations": {
      "rows": 30,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 30,
          "min": 1,
          "max": 30
        },
        "station_name": {
          "nulls": 0,
          "distinct": 30
        },
        "latitude": {
          "nulls": 0,
          "distinct": 30,
          "min": -88.493111,
          "max": 86.683306
        },
        "longitude": {
          "nulls": 0,
          "distinct": 30,
          "min": -175.155309,
          "max": 143.250288
        }
      }
    },
    "maintenance_records": {
      "rows": 100,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 100,
          "min": 1,
          "max": 100
        },
        "bike_id": {
          "nulls": 0,
          "distinct": 67,
          "min": 6,
          "max": 100
        },
        "maintenance_date": {
          "nulls": 0,
          "distinct": 88,
          "min": "2023-01-04",
          "max": "2023-12-30"
        },
        "description": {
          "nulls": 6,
          "distinct": 94
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/maintenance_records.csv",
      "format": "csv",
      "table": "maintenance_records",
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/csv/maintenance_records.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/csv/maintenance_records.csv",
      "bytes": 6996,
      "sha256": "15eef5484569a4ef4080c5afda9aebecdd090bd83dc86a2e011b084e7513ca61",
      "rows": 100,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/promotions.csv",
      "format": "csv",
      "table": "promotions",
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/csv/promotions.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/csv/promotions.csv",
      "bytes": 3920,
      "sha256": "eb49238895561882443a00bb8285298e5e3ff1a3c2d219d926332272c250810b",
      "rows": 50,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/station_locations.csv",
      "format": "csv",
      "table": "station_locations",
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/csv/station_locations.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/csv/station_locations.csv",
      "bytes": 1443,
      "sha256": "61b76a9ca7fcecf11f12d79d463b00ed86182a117c55af344bbd6e52f50c6bb6",
      "rows": 30,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/users.csv",
      "format": "csv",
      "table": "users",
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/csv/users.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/csv/users.csv",
      "bytes": 10358,
      "sha256": "5e66bf9557a88b6f9f9af72db373ef4270d3b7fe2b58c80691aea636288692fc",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/trips.csv",
      "format": "csv",
      "table": "trips",
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/csv/trips.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/csv/trips.csv",
      "bytes": 65671,
      "sha256": "a2d624fc4129fbf054f749cc96aad35cd7c6b08fcbc0e70f13369a8d782db70a",
      "rows": 1000,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "urban-mobility-and-bike-sharing-app.json",
      "format": "json",
      "table": null,
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/urban-mobility-and-bike-sharing-app.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/urban-mobility-and-bike-sharing-app.json",
      "bytes": 279404,
      "sha256": "686e2b104abb044e57e920e64973b0d18876d8f50d4cb74beaadf704e3aa2e16",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/sql/postgres.sql",
      "bytes": 117014,
      "sha256": "d8b0da83366b80d92d9cf58d4cfcd867b2448bce5be4dedefc10f037cb5ca779",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/sql/mysql.sql",
      "bytes": 116437,
      "sha256": "e48e20181cae504ccfaa1054885b912fec5542895f5bc3fa773959ccd222c759",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/sql/mssql.sql",
      "bytes": 121544,
      "sha256": "11d084abf62a85c564d2adf1b86711f5a0f26d126acf2770c325944c6736bac5",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/sql/sqlite.sql",
      "bytes": 116334,
      "sha256": "f43905e92df278d02e7437a8ad8e3ac15e1444fa7dc87c2e33f99c3fd6910c21",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/prisma/seed.ts",
      "bytes": 239608,
      "sha256": "3535484a009ba5604107a0a434fd51cca36bd0f4ff48d8e26e7ba305738d9e85",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/urban-mobility-and-bike-sharing-app/v1/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/urban-mobility-and-bike-sharing-app/v1/django/fixtures.json",
      "bytes": 336963,
      "sha256": "85e7dc990b3c287361a4b7bb92a55749db5ab1616c1e750713d3dadaaab51abe",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788768302999,
  "updatedAt": 1788768302999
}
