Набор данных Wanderbricks

Схема wanderbricks в каталоге samples содержит имитированный набор данных платформы бронирования путешествий. Он моделирует рынок аренды для отдыха, с таблицами, охватывающими пользователей и хозяев, списки недвижимости и направления, бронирование и платежи, отзывы и журналы поддержки, а также активность кликабельных действий.

Используйте этот набор данных для изучения конвейеров проектирования данных, панелей мониторинга аналитики и рабочих процессов машинного обучения без загрузки собственных данных.

Доступ к набору данных

Набор данных Wanderbricks предварительно загружен в samples каталоге и доступен в рабочих областях с поддержкой каталога Unity.

Чтобы перечислить все таблицы в схеме:

SQL

SHOW TABLES IN samples.wanderbricks;

Python

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

Чтобы просмотреть данные в определенной таблице, выполните указанные ниже действия.

SQL

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

Python

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

Замените <table-name> на таблицу, которую вы хотите изучить, например, bookings или reviews.

Таблицы

Схема wanderbricks содержит следующие таблицы. Запустите SHOW TABLES IN samples.wanderbricks для полного списка.

таблица Описание
users Профили пользователей, включая имя, электронную почту, страну или регион и тип пользователя.
hosts Профили хостов, связанные с объявлениями о недвижимости, включая учетные записи и контактные данные.
properties Объявления о недвижимости с такими сведениями, как название, тип, цена и расположение.
bookings Записи о бронировании с датами заезда и выезда, количеством гостей, общими суммами и статусами.
payments Записи оплаты с методами оплаты, соответствующими суммами, статусы и референции бронирования.
booking_updates Записи об изменении состояния бронирования для каналов захвата измененных данных (CDC).
reviews Отзывы пользователей о свойствах, включая оценки, комментарии и is_deleted флаг для обратимого удаления.
clickstream События активности пользователей (представления, щелчки, поиск, фильтры) с вложенными метаданными для устройства и ссылки.
page_views События представления страниц, связанные с пользователями и свойствами.
customer_support_logs Журналы заявок в службу поддержки со встроенными массивами сообщений, включая отправителя и эмоциональный настрой.
destinations Места назначения с именами и описаниями, на которые ссылается список объектов недвижимости.

Связи основной таблицы

На следующей схеме показаны подключения между пользователями, резервированиями, свойствами и связанными таблицами.

Схема связей основной таблицы Wanderbricks, показывающая связи между пользователями, резервированиями, свойствами и связанными таблицами.

  • Пользователи и хосты
    • users представляет путешественников и бизнес-клиентов.
    • hosts представляет владельцев и операторов недвижимости.
  • Свойства и назначения
    • Каждая строка в properties — это объявление, принадлежащее владельцу.
    • properties связано с destinations, чтобы моделировать, где находится список.
  • Бронирование и платежи
    • bookings подключает путешественников (user_id) к объектам размещения (property_id).
    • payments и booking_updates ссылаются на booking_id для фиксации финансовых транзакций и изменений статуса.
  • Поведение и опыт
    • clickstream и page_views отслеживайте, как пользователи просматривают и взаимодействуют с списками.
    • reviews записывает отзывы пользователей и объектов размещения после пребывания.
    • customer_support_logs записи поддерживают взаимодействие, связанное с пользователем.

Примеры запросов

В следующих примерах показано, как запросить набор данных Wanderbricks.

Присоединение пользователей, бронирования и объектов

Возврат последних резервирований с сведениями о гостях и собственности:

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)

Анализ событий кликстрим по устройству

Суммирование взаимодействия по типу события и устройству:

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)

Вычисление средних оценок для каждого объекта

Найдите объекты с высокой оценкой и достаточным количеством отзывов.

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)