ניתוח נתונים מרובי-אופנים ב-Python באמצעות BigQuery DataFrames

במדריך הזה מוסבר איך לנתח נתונים מרובי-אופנים במחברת Python באמצעות מחלקות ושיטות של BigQuery DataFrames.

במדריך הזה נעשה שימוש בקטלוג המוצרים ממערך הנתונים הציבורי של חנות חיות המחמד Cymbal.

כדי להעלות מחברת שכבר מאוכלסת במשימות שמוסברות במדריך הזה, אפשר לעיין במאמר בנושא BigFrames Multimodal DataFrame.

מטרות

  • יצירה של מסגרות נתונים מולטי-מודאליות.
  • לשלב נתונים מובנים ולא מובנים ב-DataFrame.
  • שינוי תמונות.
  • יצירת טקסט והטמעות על סמך נתוני תמונה.
  • פיצול קובצי PDF לחלקים קטנים יותר לצורך ניתוח נוסף.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Cloud de Confiance by S3NS, והשימוש בהם כרוך בתשלום:

  • 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.

למידע נוסף, תוכלו לעיין בדפי התמחור הבאים:

לפני שמתחילים

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להשלמת המדריך הזה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

הגדרה

בקטע הזה יוצרים את הקטגוריה של Cloud Storage, את החיבור ואת המחברת שבהם משתמשים במדריך הזה.

יצירת קטגוריה

יוצרים קטגוריה של Cloud Storage לאחסון אובייקטים שעברו טרנספורמציה:

  1. נכנסים לדף Buckets במסוף Cloud de Confiance .

    כניסה לדף Buckets

  2. לוחצים על יצירה.

  3. בדף Create a bucket, בקטע Get started, מזינים שם ייחודי גלובלית שעומד בדרישות לשמות של קטגוריות.

  4. לוחצים על יצירה.

יצירת חיבור

יוצרים חיבור למשאב בענן ומקבלים את חשבון השירות של החיבור. ‫BigQuery משתמש בחיבור כדי לגשת לאובייקטים ב-Cloud Storage.

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית Explorer, לוחצים על Add data.

    תיבת הדו-שיח הוספת נתונים נפתחת.

  3. בחלונית Filter By, בקטע Data Source Type, בוחרים באפשרות Business Applications.

    אפשרות אחרת היא להזין Vertex AI בשדה חיפוש מקורות נתונים.

  4. בקטע מקורות נתונים מומלצים, לוחצים על Vertex AI.

  5. לוחצים על כרטיס הפתרון Vertex AI Models: BigQuery Federation.

  6. ברשימה Connection type בוחרים באפשרות Vertex AI remote models, remote functions, BigLake and Spanner (Cloud Resource).

  7. בשדה מזהה החיבור, מקלידים bigframes-default-connection.

  8. לוחצים על יצירת קישור.

  9. לוחצים על מעבר לחיבור.

  10. בחלונית Connection info (פרטי החיבור), מעתיקים את מזהה חשבון השירות לשימוש בשלב מאוחר יותר.

מתן הרשאות לחשבון השירות של החיבור

מקצים לחשבון השירות של החיבור את התפקידים שנדרשים לו כדי לגשת ל-Cloud Storage ול-Vertex AI. צריך להעניק את התפקידים האלה באותו פרויקט שיצרתם או בחרתם בקטע לפני שמתחילים.

כדי להקצות את התפקיד, בצע את השלבים הבאים:

  1. עוברים לדף IAM & Admin.

    כניסה לדף IAM & Admin

  2. לוחצים על Grant access.

  3. בשדה New principals, מזינים את מזהה חשבון השירות שהעתקתם קודם.

  4. בשדה Select a role, בוחרים באפשרות Cloud Storage ואז באפשרות Storage Object User.

  5. לוחצים על הוספת תפקיד נוסף.

  6. בשדה Select a role (בחירת תפקיד), בוחרים באפשרות Vertex AI ואז באפשרות Vertex AI User (משתמש Vertex AI).

  7. לוחצים על Save.

יצירת מחברת

יוצרים מחברת שבה אפשר להריץ קוד Python:

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בסרגל הכרטיסיות של חלונית העריכה, לוחצים על החץ לתפריט הנפתח לצד שאילתת SQL ואז לוחצים על מחברת.

  3. בחלונית להתחיל עם תבנית, לוחצים על סגירה.

  4. לוחצים על Connect > Connect to a runtime (התחברות > התחברות לסביבת זמן ריצה).

  5. אם יש לכם סביבת ריצה קיימת, מאשרים את הגדרות ברירת המחדל ולוחצים על Connect (חיבור). אם אין לכם זמן ריצה קיים, בוחרים באפשרות Create new Runtime (יצירת זמן ריצה חדש) ולוחצים על Connect (חיבור).

    יכול להיות שיחלפו כמה דקות עד שסביבת זמן הריצה תוגדר.

יצירת DataFrame מולטימודאלי

יצירת DataFrame מרובה-אופנים שמשלב נתונים מובנים ולא מובנים באמצעות השיטה from_glob_path של הסיווג Session:

  1. במחברת, יוצרים תא קוד ומעתיקים אליו את הקוד הבא:
    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. לוחצים על הפעלה.

    הקריאה האחרונה אל df_image מחזירה את התמונות שנוספו ל-DataFrame. אפשר גם להפעיל את השיטה .display.

שילוב של נתונים מובנים ולא מובנים ב-DataFrame

משלבים נתוני טקסט ותמונה ב-DataFrame מולטי-מודאלי:

  1. במחברת, יוצרים תא קוד ומעתיקים אליו את הקוד הבא:
    # 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. לוחצים על הפעלה .

    הקוד מחזיר את נתוני ה-DataFrame.

  3. במחברת, יוצרים תא קוד ומעתיקים אליו את הקוד הבא:

    # 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. לוחצים על הפעלה .

    הקוד מחזיר תמונות מ-DataFrame שבהן ערך העמודה author הוא alice.

ביצוע טרנספורמציות של תמונות

אפשר לבצע טרנספורמציה של נתוני תמונות באמצעות השיטות הבאות של הסיווג Series.BlobAccessor:

התמונות שעברו שינוי נכתבות ב-Cloud Storage.

שינוי תמונות:

  1. במחברת, יוצרים תא קוד ומעתיקים אליו את הקוד הבא:
    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. מעדכנים את כל ההפניות אל {dst_bucket} כך שיפנו אל המאגר שיצרתם, בפורמט gs://mybucket.
  3. לוחצים על הפעלה .

    הקוד מחזיר את התמונות המקוריות וגם את כל השינויים שנעשו בהן.

יצירת טקסט

כדי ליצור טקסט מנתונים מרובי-אופנים, משתמשים בשיטה predict של הסיווג GeminiTextGenerator:

  1. במחברת, יוצרים תא קוד ומעתיקים אליו את הקוד הבא:
    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. לוחצים על הפעלה .

    הקוד מחזיר את שתי התמונות הראשונות ב-df_image, יחד עם טקסט שנוצר בתגובה לשאלה what item is it? עבור שתי התמונות.

  3. במחברת, יוצרים תא קוד ומעתיקים אליו את הקוד הבא:

    # 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. לוחצים על הפעלה .

    הקוד מחזיר את שתי התמונות הראשונות ב-df_image, עם טקסט שנוצר בתגובה לשאלה what item is it? לגבי התמונה הראשונה, וטקסט שנוצר בתגובה לשאלה what color is the picture? לגבי התמונה השנייה.

יצירת הטמעות

כדי ליצור הטמעות של נתונים מרובי-אופנים, משתמשים בשיטת predict של הסיווג MultimodalEmbeddingGenerator:

  1. במחברת, יוצרים תא קוד ומעתיקים אליו את הקוד הבא:
    # Generate embeddings on images
    embed_model = llm.MultimodalEmbeddingGenerator()
    embeddings = embed_model.predict(df_image["image"])
    embeddings
  2. לוחצים על הפעלה .

    הקוד מחזיר את ההטמעות שנוצרו על ידי קריאה למודל הטמעה.

חלוקת קובצי PDF לחלקים

מפצלים אובייקטים של PDF באמצעות method ‏pdf_chunk של class ‏Series.BlobAccessor:

  1. במחברת, יוצרים תא קוד ומעתיקים אליו את הקוד הבא:
    # 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. לוחצים על הפעלה .

    הקוד מחזיר את נתוני ה-PDF בחלקים.

הסרת המשאבים

  1. In the Cloud de Confiance 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.