Menganalisis data multimodal di Python dengan BigQuery DataFrames

Tutorial ini menunjukkan cara menganalisis data multimodal di notebook Python menggunakan class dan metode BigQuery DataFrames.

Tutorial ini menggunakan katalog produk dari set data toko hewan peliharaan Cymbal publik.

Untuk mengupload notebook yang sudah diisi dengan tugas yang dibahas dalam tutorial ini, lihat BigFrames Multimodal DataFrame.

Tujuan

  • Membuat DataFrame multimodal.
  • Menggabungkan data terstruktur dan tidak terstruktur dalam DataFrame.
  • Mengubah gambar.
  • Membuat teks dan embedding berdasarkan data gambar.
  • Membagi PDF menjadi beberapa bagian untuk analisis lebih lanjut.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

  • BigQuery: you incur costs for the data that you process in BigQuery.
  • BigQuery Python UDFs: you incur costs for using BigQuery DataFrames image transformation and chunk PDF methods.
  • Cloud Storage: you incur costs for the objects stored in Cloud Storage.
  • Vertex AI: you incur costs for calls to Vertex AI models.

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Untuk mengetahui informasi selengkapnya, lihat halaman harga berikut:

Sebelum memulai

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection, Cloud Storage, and Vertex AI APIs.

    Enable the APIs

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial ini, minta administrator untuk memberi Anda peran IAM berikut:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Siapkan

Di bagian ini, Anda akan membuat bucket, koneksi, dan notebook Cloud Storage yang digunakan dalam tutorial ini.

Membuat bucket

Buat bucket Cloud Storage untuk menyimpan objek yang ditransformasi:

  1. Di Google Cloud console, buka halaman Buckets.

    Buka Buckets

  2. Klik Create.

  3. Di halaman Create a bucket, di bagian Get started, masukkan nama unik secara global yang memenuhi persyaratan nama bucket.

  4. Klik Buat.

Membuat koneksi

Buat koneksi resource Cloud dan dapatkan akun layanan koneksi. BigQuery menggunakan koneksi untuk mengakses objek di Cloud Storage.

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Penjelajah, klik Tambahkan data.

    Dialog Add data akan terbuka.

  3. Di panel Filter By, di bagian Data Source Type, pilih Business Applications.

    Atau, di kolom Search for data sources, Anda dapat memasukkan Vertex AI.

  4. Di bagian Sumber data unggulan, klik Vertex AI.

  5. Klik kartu solusi Vertex AI Models: BigQuery Federation.

  6. Dalam daftar Connection type, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).

  7. Di kolom Connection ID, ketik bigframes-default-connection.

  8. Klik Create connection.

  9. Klik Go to connection.

  10. Di panel Connection info, salin ID akun layanan untuk digunakan di langkah berikutnya.

Memberikan izin ke akun layanan koneksi

Berikan peran yang diperlukan akun layanan koneksi untuk mengakses Cloud Storage dan Vertex AI. Anda harus memberikan peran ini di project yang sama dengan yang Anda buat atau pilih di bagian Sebelum memulai.

Untuk memberikan peran, ikuti langkah-langkah berikut:

  1. Buka halaman IAM & Admin.

    Buka IAM & Admin

  2. Klik Berikan akses.

  3. Di kolom New principals, masukkan ID akun layanan yang Anda salin sebelumnya.

  4. Di kolom Select a role, pilih Cloud Storage, lalu pilih Storage Object User.

  5. Klik Add another role.

  6. Di kolom Pilih peran, pilih Vertex AI, lalu pilih Pengguna Vertex AI.

  7. Klik Simpan.

Membuat notebook

Buat notebook tempat Anda dapat menjalankan kode Python:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di panel tab panel editor, klik panah drop-down di samping kueri SQL, lalu klik Notebook.

  3. Di panel Start with a template, klik Close.

  4. Klik Connect > Connect to a runtime.

  5. Jika Anda sudah memiliki runtime, terima setelan default, lalu klik Connect. Jika Anda tidak memiliki runtime, pilih Create new Runtime, lalu klik Connect.

    Mungkin perlu waktu beberapa menit hingga runtime disiapkan.

Membuat DataFrame multimodal

Buat DataFrame multimodal yang mengintegrasikan data terstruktur dan tidak terstruktur dengan menggunakan metode from_glob_path dari class Session:

  1. Di notebook, buat sel kode dan salin kode berikut ke dalamnya:
    import bigframes
    
    # Flags to control preview image/video preview size
    bigframes.options.display.blob_display_width = 300
    
    import bigframes.pandas as bpd
    
    # Create blob columns from wildcard path.
    df_image = bpd.from_glob_path(
        "gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/images/*", name="image"
    )
    # Other ways are: from string uri column
    # df = bpd.DataFrame({"uri": ["gs://<my_bucket>/<my_file_0>", "gs://<my_bucket>/<my_file_1>"]})
    # df["blob_col"] = df["uri"].str.to_blob()
    
    # From an existing object table
    # df = bpd.read_gbq_object_table("<my_object_table>", name="blob_col")
    
    # Take only the 5 images to deal with. Preview the content of the Mutimodal DataFrame
    df_image = df_image.head(5)
    df_image
  2. Klik Run.

    Panggilan terakhir ke df_image menampilkan gambar yang telah ditambahkan ke DataFrame. Atau, Anda dapat memanggil metode .display.

Menggabungkan data terstruktur dan tidak terstruktur dalam DataFrame

Gabungkan data teks dan gambar dalam DataFrame multimodal:

  1. Di notebook, buat sel kode dan salin kode berikut ke dalamnya:
    # Combine unstructured data with structured data
    df_image["author"] = ["alice", "bob", "bob", "alice", "bob"]  # type: ignore
    df_image["content_type"] = df_image["image"].blob.content_type()
    df_image["size"] = df_image["image"].blob.size()
    df_image["updated"] = df_image["image"].blob.updated()
    df_image
  2. Klik Run .

    Kode ini menampilkan data DataFrame.

  3. Di notebook, buat sel kode dan salin kode berikut ke dalamnya:

    # Filter images and display, you can also display audio and video types. Use width/height parameters to constrain window sizes.
    df_image[df_image["author"] == "alice"]["image"].blob.display()
  4. Klik Run .

    Kode ini menampilkan gambar dari DataFrame dengan nilai kolom author adalah alice.

Melakukan transformasi gambar

Transformasikan data gambar menggunakan metode berikut dari class Series.BlobAccessor:

Gambar yang ditransformasi ditulis ke Cloud Storage.

Mengubah gambar:

  1. Di notebook, buat sel kode dan salin kode berikut ke dalamnya:
    df_image["blurred"] = df_image["image"].blob.image_blur(
        (20, 20), dst=f"{dst_bucket}/image_blur_transformed/", engine="opencv"
    )
    df_image["resized"] = df_image["image"].blob.image_resize(
        (300, 200), dst=f"{dst_bucket}/image_resize_transformed/", engine="opencv"
    )
    df_image["normalized"] = df_image["image"].blob.image_normalize(
        alpha=50.0,
        beta=150.0,
        norm_type="minmax",
        dst=f"{dst_bucket}/image_normalize_transformed/",
        engine="opencv",
    )
    
    # You can also chain functions together
    df_image["blur_resized"] = df_image["blurred"].blob.image_resize(
        (300, 200), dst=f"{dst_bucket}/image_blur_resize_transformed/", engine="opencv"
    )
    df_image
  2. Perbarui semua referensi ke {dst_bucket} untuk merujuk ke bucket yang Anda buat, dalam format gs://mybucket.
  3. Klik Run .

    Kode ini menampilkan gambar asli serta semua transformasinya.

Buat teks

Buat teks dari data multimodal menggunakan metode predict dari class GeminiTextGenerator:

  1. Di notebook, buat sel kode dan salin kode berikut ke dalamnya:
    from bigframes.ml import llm
    
    gemini = llm.GeminiTextGenerator(model_name="gemini-2.0-flash-001")
    
    # Deal with first 2 images as example
    df_image = df_image.head(2)
    
    # Ask the same question on the images
    df_image = df_image.head(2)
    answer = gemini.predict(df_image, prompt=["what item is it?", df_image["image"]])
    answer[["ml_generate_text_llm_result", "image"]]
  2. Klik Run .

    Kode ini menampilkan dua gambar pertama di df_image, beserta teks yang dihasilkan sebagai respons terhadap pertanyaan what item is it? untuk kedua gambar.

  3. Di notebook, buat sel kode dan salin kode berikut ke dalamnya:

    # Ask different questions
    df_image["question"] = [  # type: ignore
        "what item is it?",
        "what color is the picture?",
    ]
    answer_alt = gemini.predict(
        df_image, prompt=[df_image["question"], df_image["image"]]
    )
    answer_alt[["ml_generate_text_llm_result", "image"]]
  4. Klik Run .

    Kode ini menampilkan dua gambar pertama di df_image, dengan teks yang dihasilkan sebagai respons terhadap pertanyaan what item is it? untuk gambar pertama, dan teks yang dihasilkan sebagai respons terhadap pertanyaan what color is the picture? untuk gambar kedua.

Membuat embedding

Buat embedding untuk data multimodal menggunakan metode predict dari class MultimodalEmbeddingGenerator:

  1. Di notebook, buat sel kode dan salin kode berikut ke dalamnya:
    # Generate embeddings on images
    embed_model = llm.MultimodalEmbeddingGenerator()
    embeddings = embed_model.predict(df_image["image"])
    embeddings
  2. Klik Run .

    Kode ini menampilkan penyematan yang dihasilkan oleh panggilan ke model penyematan.

Membagi PDF

Bagi objek PDF menjadi beberapa bagian menggunakan metode pdf_chunk dari class Series.BlobAccessor:

  1. Di notebook, buat sel kode dan salin kode berikut ke dalamnya:
    # PDF chunking
    df_pdf = bpd.from_glob_path(
        "gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/documents/*", name="pdf"
    )
    df_pdf["chunked"] = df_pdf["pdf"].blob.pdf_chunk(engine="pypdf")
    chunked = df_pdf["chunked"].explode()
    chunked
  2. Klik Run .

    Kode ini menampilkan data PDF yang dikelompokkan.

Pembersihan

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.