Himpunan data Wanderbricks

wanderbricks Skema dalam katalog berisi himpunan samples data platform pemesanan perjalanan yang disimulasikan. Ini memodelkan pasar sewa liburan, dengan tabel yang mencakup pengguna dan penyedia, daftar properti dan tujuan, pemesanan dan transaksi pembayaran, ulasan dan log dukungan, serta aktivitas clickstream.

Gunakan himpunan data ini untuk menjelajahi alur rekayasa data, dasbor analitik, dan alur kerja pembelajaran mesin tanpa memuat data Anda sendiri.

Mengakses himpunan data

Dataset Wanderbricks telah dimuat sebelumnya dalam katalog samples dan tersedia di ruang kerja yang mendukung Unity Catalog.

Untuk mencantumkan semua tabel dalam skema:

SQL

SHOW TABLES IN samples.wanderbricks;

Python

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

Untuk mempratinjau data dalam tabel tertentu:

SQL

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

Python

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

Ganti <table-name> dengan tabel yang ingin Anda jelajahi, misalnya bookings atau reviews.

Tabel

wanderbricks Skema menyertakan tabel berikut. Jalankan SHOW TABLES IN samples.wanderbricks untuk daftar lengkap.

Tabel Deskripsi
users Profil pengguna termasuk nama, email, negara atau wilayah, dan jenis pengguna.
hosts Profil host yang ditautkan ke daftar properti, termasuk detail akun dan kontak.
properties Daftar properti dengan detail seperti judul, jenis, harga, dan tujuan.
bookings Catatan pemesanan dengan tanggal check-in/check-out, jumlah tamu, jumlah total, dan status.
payments Catatan pembayaran dengan metode, jumlah, status, dan referensi pemesanan.
booking_updates Rekaman perubahan status pemesanan untuk alur pengambilan data perubahan (CDC).
reviews Ulasan pengguna untuk properti, termasuk peringkat, komentar, dan is_deleted bendera untuk penghapusan sementara.
clickstream Peristiwa aktivitas pengguna (tampilan, klik, pencarian, filter) dengan metadata berlapis untuk perangkat dan perujuk.
page_views Peristiwa tampilan halaman yang terkait dengan pengguna dan properti.
customer_support_logs Mendukung log tiket dengan array pesan berlapis, termasuk pengirim dan sentimen.
destinations Lokasi tujuan yang memiliki nama dan deskripsi, dirujuk dalam daftar properti.

Hubungan tabel utama

Diagram berikut menunjukkan koneksi antara pengguna, pemesanan, properti, dan tabel terkait.

Diagram hubungan tabel utama Wanderbricks memperlihatkan koneksi antara pengguna, pemesanan, properti, dan tabel terkait.

  • Pengguna dan host
    • users mewakili pelancong dan pelanggan bisnis.
    • hosts mewakili pemilik dan operator properti.
  • Properti dan tujuan
    • Setiap baris dalam properties adalah daftar yang dimiliki oleh host.
    • properties terhubung dengan destinations untuk memodelkan lokasi daftar.
  • Pemesanan dan pembayaran
    • bookings menghubungkan wisatawan (user_id) ke properti (property_id).
    • payments dan booking_updates referensi booking_id untuk menangkap transaksi keuangan dan perubahan status.
  • Perilaku dan pengalaman
    • clickstream dan page_views melacak cara pengguna menelusuri dan berinteraksi dengan daftar.
    • reviews menangkap umpan balik setelah menginap dari pengguna dan properti.
    • customer_support_logs rekaman mendukung interaksi yang terikat kembali ke pengguna.

Contoh pertanyaan

Contoh berikut menunjukkan cara mengkueri himpunan data Wanderbricks.

Bergabung dengan pengguna, pemesanan, dan properti

Kembalikan pemesanan terbaru dengan detail tamu dan properti:

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)

Menganalisis peristiwa clickstream berdasarkan perangkat

Ringkas keterlibatan menurut jenis peristiwa dan perangkat:

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)

Menghitung peringkat rata-rata per properti

Temukan properti dengan peringkat tertinggi dengan volume tinjauan yang cukup:

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)