{
  "format": "dataset-manifest/1",
  "slug": "ai-driven-personalized-reading-list",
  "version": 3,
  "seed": "ai-driven-personalized-reading-list:1",
  "spec": {
    "format": "dataset/1",
    "slug": "ai-driven-personalized-reading-list",
    "name": "Personalized Reading Insights",
    "tagline": "User profiles, reading progress, genres, and tags related to personalized book and audiobook recommendations.",
    "description": "Readers engage with a curated selection of books and audiobooks tailored to their preferences, marking progress and providing feedback on recommendations. This system allows users to interact with a mix of genres, helping them discover both popular and niche literary works. The personalized experience hinges on user profiles that track reading habits, preferences, and feedback, creating a dynamic platform for literary exploration.\n\nThe 'users' table captures individual reader profiles, including their preferences, activity history, and demographic information. Each user interacts with the 'books' table, which contains data on the available titles, including metadata such as authors, publication dates, and summaries. Genres are outlined in the 'genres' table, categorizing books into various classifications, while the 'reading_progress' table tracks how far each user has read in a given book. This allows the system to gauge engagement levels and tailor future recommendations accordingly. The 'tags' table enhances the searchability of books by allowing users to apply personalized labels, and the 'feedback' table provides a platform for users to share their experiences and reviews.\n\nBy analyzing this dataset, developers can answer questions such as which genres are most popular among different demographics, how user feedback correlates with reading progress, and what tags are most frequently assigned to specific books. It is an excellent opportunity for practicing skills in data analysis, data visualization, and relational database management. The data is synthetic, but it reflects the complexities and nuances of real-world reading preferences, providing a rich environment for experimentation and learning.",
    "domain": "iot",
    "shape": "time-series",
    "useCases": [
      "analytics-demo",
      "bi-dashboards"
    ],
    "keywords": [
      "reading",
      "books",
      "user profiles",
      "feedback",
      "genres",
      "tags",
      "progress",
      "insights",
      "personalization"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "users": {
        "description": "This table contains information about each reader, including their preferences and demographics. Each user has a unique identifier.",
        "rows": 150,
        "columns": {
          "user_id": {
            "kind": "pk",
            "description": "Unique identifier for each user."
          },
          "full_name": {
            "kind": "fullName",
            "description": "Full name of the user."
          },
          "email": {
            "kind": "email",
            "from": "full_name",
            "description": "User's email address."
          },
          "age": {
            "kind": "int",
            "min": 18,
            "max": 100,
            "description": "Age of the user."
          },
          "preferences": {
            "kind": "json",
            "template": {
              "genres": {
                "kind": "words",
                "max": 20,
                "description": "Preferred genres of the user."
              }
            },
            "description": "User preferences regarding reading genres."
          }
        }
      },
      "books": {
        "description": "This table holds metadata about books and audiobooks available for readers. Each book has a unique identifier.",
        "rows": 200,
        "columns": {
          "book_id": {
            "kind": "pk",
            "description": "Unique identifier for each book."
          },
          "title": {
            "kind": "words",
            "max": 3,
            "description": "Title of the book.",
            "pool": [
              "adventure",
              "mystery",
              "fantasy",
              "science",
              "romance",
              "thriller",
              "history",
              "biography",
              "selfhelp",
              "horror",
              "poetry",
              "cookbook",
              "travel",
              "guide",
              "novel",
              "classic",
              "novella",
              "comic",
              "graphic",
              "children",
              "youngadult"
            ],
            "min": 1
          },
          "author": {
            "kind": "words",
            "max": 3,
            "description": "Author of the book.",
            "pool": [
              "smith",
              "johnson",
              "williams",
              "brown",
              "jones",
              "garcia",
              "miller",
              "davis",
              "rodriguez",
              "martinez",
              "hernandez",
              "lopez",
              "gonzalez",
              "wilson",
              "anderson",
              "thomas",
              "taylor",
              "moore",
              "jackson",
              "martin"
            ],
            "min": 1
          },
          "genre_id": {
            "kind": "fk",
            "ref": "genres.genre_id",
            "nullable": false,
            "description": "Foreign key linking to the genre of the book."
          },
          "publication_year": {
            "kind": "int",
            "min": 1900,
            "max": 2023,
            "description": "Year the book was published."
          }
        }
      },
      "genres": {
        "description": "This table categorizes the various genres available for books. Each genre has a unique identifier.",
        "rows": 15,
        "columns": {
          "genre_id": {
            "kind": "pk",
            "description": "Unique identifier for each genre."
          },
          "genre_name": {
            "kind": "words",
            "max": 3,
            "description": "Name of the genre.",
            "pool": [
              "fiction",
              "nonfiction",
              "mystery",
              "fantasy",
              "romance",
              "sci-fi",
              "thriller",
              "horror",
              "historical",
              "biography",
              "selfhelp",
              "poetry",
              "adventure",
              "youngadult",
              "children",
              "graphicnovel",
              "classic",
              "dystopian",
              "literary",
              "comedy",
              "drama"
            ],
            "min": 1
          }
        }
      },
      "reading_progress": {
        "description": "This table tracks the reading progress of users for each book they are engaged with. It links users and books.",
        "rows": {
          "per": "users",
          "via": "user_id",
          "min": 1,
          "max": 10,
          "skew": "long-tail"
        },
        "columns": {
          "progress_id": {
            "kind": "pk",
            "description": "Unique identifier for each progress entry."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.user_id",
            "description": "Foreign key linking to the user."
          },
          "book_id": {
            "kind": "fk",
            "ref": "books.book_id",
            "description": "Foreign key linking to the book."
          },
          "percentage_completed": {
            "kind": "int",
            "min": 0,
            "max": 100,
            "description": "Percentage of the book completed by the user.",
            "distribution": "high"
          },
          "last_read_date": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-10-31",
            "description": "Date when the user last read the book.",
            "trend": "growing"
          }
        }
      },
      "tags": {
        "description": "This table contains tags that can be assigned to books for better categorization. Each tag has a unique identifier.",
        "rows": 50,
        "columns": {
          "tag_id": {
            "kind": "pk",
            "description": "Unique identifier for each tag."
          },
          "tag_name": {
            "kind": "words",
            "max": 3,
            "description": "Name of the tag.",
            "pool": [
              "bestseller",
              "newrelease",
              "awardwinning",
              "mustread",
              "page-turner",
              "classic",
              "inspiring",
              "thought-provoking",
              "emotional",
              "funny",
              "suspenseful",
              "heartwarming",
              "educational",
              "engaging",
              "whimsical",
              "dark",
              "uplifting",
              "adventurous",
              "romantic",
              "intense"
            ],
            "min": 1
          },
          "book_id": {
            "kind": "fk",
            "ref": "books.book_id",
            "description": "Foreign key linking to the book associated with the tag."
          }
        }
      },
      "feedback": {
        "description": "This table captures user feedback on books they have read, allowing for insights into their experiences. Each feedback entry has a unique identifier.",
        "rows": {
          "per": "reading_progress",
          "via": "progress_id",
          "min": 1,
          "max": 3,
          "skew": "long-tail"
        },
        "columns": {
          "feedback_id": {
            "kind": "pk",
            "description": "Unique identifier for each feedback entry."
          },
          "progress_id": {
            "kind": "fk",
            "ref": "reading_progress.progress_id",
            "description": "Foreign key linking to the user's reading progress."
          },
          "rating": {
            "kind": "int",
            "min": 1,
            "max": 5,
            "description": "Rating given by the user for the book.",
            "distribution": "high"
          },
          "comments": {
            "kind": "sentence",
            "max": 250,
            "description": "User's comments or feedback about the book."
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "timestamped",
      "categorical",
      "nullable",
      "high-cardinality"
    ],
    "analysisQuestions": [
      "What are the most popular genres among users?",
      "How does reading progress differ between genres?",
      "Which books receive the highest ratings from users?",
      "What feedback trends emerge over time for specific books?",
      "How does the reading frequency change across different age groups?"
    ],
    "suggestedQueries": [
      {
        "title": "Get user reading progress",
        "sql": "SELECT u.full_name, b.title, rp.percentage_completed FROM users u JOIN reading_progress rp ON u.user_id = rp.user_id JOIN books b ON rp.book_id = b.book_id;",
        "dialect": "postgres"
      },
      {
        "title": "Average ratings per genre",
        "sql": "SELECT g.genre_name, AVG(f.rating) as average_rating FROM feedback f JOIN reading_progress rp ON f.progress_id = rp.progress_id JOIN books b ON rp.book_id = b.book_id JOIN genres g ON b.genre_id = g.genre_id GROUP BY g.genre_name;",
        "dialect": "postgres"
      },
      {
        "title": "Books read over time",
        "sql": "SELECT last_read_date, COUNT(*) as books_read FROM reading_progress GROUP BY last_read_date ORDER BY last_read_date;",
        "dialect": "postgres"
      },
      {
        "title": "Feedback trends for a specific book",
        "sql": "SELECT b.title, AVG(f.rating) as average_rating, COUNT(f.comments) as feedback_count FROM feedback f JOIN reading_progress rp ON f.progress_id = rp.progress_id JOIN books b ON rp.book_id = b.book_id WHERE b.book_id = 1 GROUP BY b.title;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Data Analysts",
        "body": "Data analysts can use this dataset to derive insights on reading trends. By analyzing user reading habits, they can identify which genres are gaining popularity and make data-driven recommendations for future reading lists."
      },
      {
        "title": "Educators",
        "body": "Educators looking to promote reading among students can utilize this dataset to understand which genres resonate most with different age groups. By tailoring recommendations based on data insights, they can enhance student engagement."
      },
      {
        "title": "App Developers",
        "body": "App developers focusing on personalized reading experiences can leverage this dataset to build features that track user preferences and progress. By integrating insights from user feedback, they can continually enhance their recommendation algorithms."
      },
      {
        "title": "Marketing Teams",
        "body": "Marketing teams can analyze the feedback data to understand user sentiments on various books. By identifying which titles receive positive or negative feedback, they can refine their marketing strategies and promotional campaigns."
      }
    ]
  },
  "counts": {
    "genres": 15,
    "books": 200,
    "tags": 50,
    "users": 150,
    "reading_progress": 599,
    "feedback": 942
  },
  "stats": {
    "users": {
      "rows": 150,
      "columns": {
        "user_id": {
          "nulls": 0,
          "distinct": 150,
          "min": 1,
          "max": 150
        },
        "full_name": {
          "nulls": 0,
          "distinct": 148,
          "min": "Amir Sato",
          "max": "Zoe Murphy"
        },
        "email": {
          "nulls": 0,
          "distinct": 149
        },
        "age": {
          "nulls": 0,
          "distinct": 75,
          "min": 18,
          "max": 99
        },
        "preferences": {
          "nulls": 0,
          "distinct": 150
        }
      }
    },
    "books": {
      "rows": 200,
      "columns": {
        "book_id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "title": {
          "nulls": 0,
          "distinct": 134
        },
        "author": {
          "nulls": 0,
          "distinct": 149
        },
        "genre_id": {
          "nulls": 0,
          "distinct": 15,
          "min": 1,
          "max": 15
        },
        "publication_year": {
          "nulls": 0,
          "distinct": 105,
          "min": 1900,
          "max": 2022
        }
      }
    },
    "genres": {
      "rows": 15,
      "columns": {
        "genre_id": {
          "nulls": 0,
          "distinct": 15,
          "min": 1,
          "max": 15
        },
        "genre_name": {
          "nulls": 0,
          "distinct": 12
        }
      }
    },
    "reading_progress": {
      "rows": 599,
      "columns": {
        "progress_id": {
          "nulls": 0,
          "distinct": 599,
          "min": 1,
          "max": 599
        },
        "user_id": {
          "nulls": 0,
          "distinct": 150,
          "min": 1,
          "max": 150
        },
        "book_id": {
          "nulls": 0,
          "distinct": 188,
          "min": 1,
          "max": 200
        },
        "percentage_completed": {
          "nulls": 0,
          "distinct": 98,
          "min": 1,
          "max": 100
        },
        "last_read_date": {
          "nulls": 0,
          "distinct": 247,
          "min": "2023-01-01",
          "max": "2023-10-31"
        }
      }
    },
    "tags": {
      "rows": 50,
      "columns": {
        "tag_id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "tag_name": {
          "nulls": 0,
          "distinct": 44
        },
        "book_id": {
          "nulls": 0,
          "distinct": 42,
          "min": 8,
          "max": 187
        }
      }
    },
    "feedback": {
      "rows": 942,
      "columns": {
        "feedback_id": {
          "nulls": 0,
          "distinct": 942,
          "min": 1,
          "max": 942
        },
        "progress_id": {
          "nulls": 0,
          "distinct": 599,
          "min": 1,
          "max": 599
        },
        "rating": {
          "nulls": 0,
          "distinct": 5,
          "min": 1,
          "max": 5
        },
        "comments": {
          "nulls": 0,
          "distinct": 931
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/genres.csv",
      "format": "csv",
      "table": "genres",
      "key": "datasets/ai-driven-personalized-reading-list/v3/csv/genres.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/csv/genres.csv",
      "bytes": 286,
      "sha256": "8762742f89fa7f193bdb95e6fe7e22f8f734e5d283f45e66a2e89d8afd8486bc",
      "rows": 15,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/books.csv",
      "format": "csv",
      "table": "books",
      "key": "datasets/ai-driven-personalized-reading-list/v3/csv/books.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/csv/books.csv",
      "bytes": 8365,
      "sha256": "bbf2252b08056fc24e21cad04a64df4cc82e6c8d71a4f0b0a2f1d3da73f64a35",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/tags.csv",
      "format": "csv",
      "table": "tags",
      "key": "datasets/ai-driven-personalized-reading-list/v3/csv/tags.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/csv/tags.csv",
      "bytes": 1455,
      "sha256": "bb58700320df5f6b14f838831d463ee184f492adb336d02014a24b7dc68503d9",
      "rows": 50,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/users.csv",
      "format": "csv",
      "table": "users",
      "key": "datasets/ai-driven-personalized-reading-list/v3/csv/users.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/csv/users.csv",
      "bytes": 20227,
      "sha256": "8b1ffb9d4bae566fee77a452f14166c577c703a5f39b04794af736dccea1048b",
      "rows": 150,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/reading_progress.csv",
      "format": "csv",
      "table": "reading_progress",
      "key": "datasets/ai-driven-personalized-reading-list/v3/csv/reading_progress.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/csv/reading_progress.csv",
      "bytes": 15382,
      "sha256": "1247f4f466f5e4384fe587edaa40b0025359167e5177ffd7b719dd54ffaa21e3",
      "rows": 599,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/feedback.csv",
      "format": "csv",
      "table": "feedback",
      "key": "datasets/ai-driven-personalized-reading-list/v3/csv/feedback.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/csv/feedback.csv",
      "bytes": 63457,
      "sha256": "d3558433d54101fdff47613c525ccab34cc6be046a0deb8534d2e3a93497c00f",
      "rows": 942,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "ai-driven-personalized-reading-list.json",
      "format": "json",
      "table": null,
      "key": "datasets/ai-driven-personalized-reading-list/v3/ai-driven-personalized-reading-list.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/ai-driven-personalized-reading-list.json",
      "bytes": 316260,
      "sha256": "53bcd4d8b5f896da2734fb06622bcfb001073bb255c8bc45dc211790a967f3c2",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/ai-driven-personalized-reading-list/v3/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/sql/postgres.sql",
      "bytes": 134866,
      "sha256": "16600d42daaff4f6620d65679406a7ff17be5ded8dac98a37078477ee715e004",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/ai-driven-personalized-reading-list/v3/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/sql/mysql.sql",
      "bytes": 134122,
      "sha256": "603f4ee10ca8ef961ec7295de2364a64838f6d12415f39b765ca96186d4b0986",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/ai-driven-personalized-reading-list/v3/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/sql/mssql.sql",
      "bytes": 136960,
      "sha256": "b85dd8954fe466b3d70ab1dfcd07a37a826daf5bbb9cefa693cbb80db76a51cb",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/ai-driven-personalized-reading-list/v3/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/sql/sqlite.sql",
      "bytes": 133913,
      "sha256": "67b2d9029d47a32e4b1c15a28a006473bf81a47a442338166aa782f48af27f66",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/ai-driven-personalized-reading-list/v3/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/prisma/seed.ts",
      "bytes": 253147,
      "sha256": "ea7d788a3f6237b49cceb92d66171a9f80640312cfb01d31ea4a5f92a0949cbd",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/ai-driven-personalized-reading-list/v3/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/ai-driven-personalized-reading-list/v3/django/fixtures.json",
      "bytes": 383583,
      "sha256": "cc9b5cf48e075528eb47e9e6c6f8b384f634bab03d80a79b8cfd011d134b64e5",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788766025147,
  "updatedAt": 1788782169203
}
