Jeu de données Wanderbricks

Le wanderbricks schéma du samples catalogue contient un jeu de données de plateforme de réservation de voyages simulé. Il modélise une place de marché de location de vacances, avec des tables couvrant les utilisateurs et les hôtes, les annonces de propriétés et les destinations, les réservations et les paiements, les avis et les journaux d'assistance, et l'activité de parcours de clics.

Utilisez ce jeu de données pour explorer les pipelines d’ingénierie des données, les tableaux de bord d’analyse et les flux de travail Machine Learning sans charger vos propres données.

Accéder au jeu de données

Le jeu de données Wanderbricks est préchargé dans le samples catalogue et est disponible dans les espaces de travail compatibles avec le catalogue Unity.

Pour répertorier toutes les tables du schéma :

SQL

SHOW TABLES IN samples.wanderbricks;

Python

display(spark.sql("SHOW TABLES IN samples.wanderbricks"))

Pour afficher un aperçu des données dans une table spécifique :

SQL

SELECT *
FROM samples.wanderbricks.<table-name>
LIMIT 10;

Python

display(spark.read.table("samples.wanderbricks.<table-name>").limit(10))

Remplacez <table-name> par la table que vous souhaitez explorer, par exemple bookings ou reviews.

Tables

Le wanderbricks schéma inclut les tableaux suivants. Exécutez SHOW TABLES IN samples.wanderbricks pour obtenir la liste complète.

Table Description
users Profils utilisateur, y compris le nom, l’e-mail, le pays ou la région et le type d’utilisateur.
hosts Profils d’hôte liés aux listes de propriétés, y compris les détails du compte et du contact.
properties Listes de propriétés avec des détails tels que le titre, le type, le prix et la destination.
bookings Enregistrements de réservation avec des dates d’arrivée/de départ, le nombre de clients, les montants totaux, et l’état.
payments Enregistrements de paiement avec la méthode, le montant, l’état et les références de réservation.
booking_updates Enregistrements de modification de l’état de réservation pour les pipelines de capture de données modifiées (CDC).
reviews Avis des utilisateurs des propriétés, y compris les évaluations, les commentaires et un is_deleted indicateur pour les suppressions douces.
clickstream Événements d’activité utilisateur (vues, clics, recherches, filtres) avec des métadonnées imbriquées pour l’appareil et le référent.
page_views Les événements de consultation de page liés aux utilisateurs et aux propriétés.
customer_support_logs Prendre en charge les journaux des tickets avec des tableaux imbriqués de messages, y compris l’expéditeur et le sentiment.
destinations Emplacements de destination avec noms et descriptions, référencés par des listes de propriétés.

Relations de table principale

Le diagramme suivant montre les connexions entre les utilisateurs, les réservations, les propriétés et les tables associées.

Diagramme des relations de table primaire Wanderbricks montrant les connexions entre les utilisateurs, les réservations, les propriétés et les tables associées.

  • Utilisateurs et hôtes
    • users représente les voyageurs et les clients professionnels.
    • hosts représente les propriétaires de propriétés et les opérateurs.
  • Propriétés et destinations
    • Chaque ligne properties est une liste appartenant à un hôte.
    • properties se connecte à destinations pour modéliser où se trouve l'annonce.
  • Réservations et paiements
    • bookings connecte les voyageurs (user_id) aux propriétés (property_id).
    • payments et booking_updates utilisent booking_id pour capturer les transactions financières et les changements d'état.
  • Comportement et expérience
    • clickstream et page_views suivre la façon dont les utilisateurs parcourent et interagissent avec les listes.
    • reviews capture les commentaires post-séjour par utilisateur et propriété.
    • customer_support_logs les enregistrements facilitent les interactions attachées à un utilisateur.

Exemples de requêtes

Les exemples suivants montrent comment interroger le jeu de données Wanderbricks.

Joindre des utilisateurs, des réservations et des propriétés

Retournez les réservations récentes avec les détails de l’invité et de la propriété :

SQL

SELECT
  u.name              AS guest_name,
  p.title             AS property_title,
  b.check_in,
  b.check_out,
  b.total_amount,
  b.status
FROM samples.wanderbricks.bookings AS b
JOIN samples.wanderbricks.users AS u
  ON b.user_id = u.user_id
JOIN samples.wanderbricks.properties AS p
  ON b.property_id = p.property_id
ORDER BY b.check_in DESC
LIMIT 10;

Python

bookings_df = spark.read.table("samples.wanderbricks.bookings")
users_df = spark.read.table("samples.wanderbricks.users")
properties_df = spark.read.table("samples.wanderbricks.properties")

result_df = (
    bookings_df
    .join(users_df, bookings_df.user_id == users_df.user_id)
    .join(properties_df, bookings_df.property_id == properties_df.property_id)
    .select(
        users_df.name.alias("guest_name"),
        properties_df.title.alias("property_title"),
        bookings_df.check_in,
        bookings_df.check_out,
        bookings_df.total_amount,
        bookings_df.status
    )
    .orderBy(bookings_df.check_in.desc())
    .limit(10)
)

display(result_df)

Analyser les événements clickstream par appareil

Résumez l’engagement par type d’événement et appareil :

SQL

SELECT
  metadata.device AS device_type,
  event,
  COUNT(*)        AS event_count
FROM samples.wanderbricks.clickstream
GROUP BY metadata.device, event
ORDER BY event_count DESC;

Python

from pyspark.sql.functions import col, count

clickstream_df = spark.read.table("samples.wanderbricks.clickstream")

result_df = (
    clickstream_df
    .groupBy(col("metadata.device").alias("device_type"), col("event"))
    .agg(count("*").alias("event_count"))
    .orderBy(col("event_count").desc())
)

display(result_df)

Calcul des évaluations moyennes par propriété

Recherchez les établissements les mieux notés avec un volume d'avis suffisant :

SQL

SELECT
  p.title                       AS property_title,
  p.property_type,
  ROUND(AVG(r.rating), 2)       AS avg_rating,
  COUNT(r.rating)               AS review_count
FROM samples.wanderbricks.properties AS p
JOIN samples.wanderbricks.reviews    AS r
  ON p.property_id = r.property_id
WHERE r.is_deleted = false
GROUP BY p.title, p.property_type
HAVING COUNT(r.rating) >= 5
ORDER BY avg_rating DESC
LIMIT 10;

Python

from pyspark.sql.functions import avg, count, round as pyspark_round, col

properties_df = spark.read.table("samples.wanderbricks.properties")
reviews_df = spark.read.table("samples.wanderbricks.reviews")

result_df = (
    properties_df
    .join(reviews_df, properties_df.property_id == reviews_df.property_id)
    .where(reviews_df.is_deleted == False)
    .groupBy(
        properties_df.title.alias("property_title"),
        properties_df.property_type
    )
    .agg(
        pyspark_round(avg(reviews_df.rating), 2).alias("avg_rating"),
        count(reviews_df.rating).alias("review_count")
    )
    .filter(col("review_count") >= 5)
    .orderBy(col("avg_rating").desc())
    .limit(10)
)

display(result_df)