המחשת נתונים של ניתוח גיאו-מרחבי באמצעות notebook של Colab

המחשה חזותית של נתוני ניתוח גיאו-מרחבי ב-notebook של Colab מאפשרת לכם לחקור את נתוני המיקום באמצעות כלים מוכרים של Python למדעי הנתונים. במדריך הזה תשלחו שאילתות למערכי הנתונים הציבוריים הבאים ישירות מה-notebook, כדי לחשוף דפוסים גיאוגרפיים באמצעות רינדור של תרשימי פיזור אינטראקטיביים, פוליגונים, מפות כורופלתיות ומפות חום:

במאמר גישה למערכי נתונים ציבוריים במסוף Google Cloud מוסבר איך לגשת למערכי הנתונים הציבוריים האלה.

מטרות

  • מגדירים אימות באמצעות Google Cloud , ואם רוצים, גם באמצעות מפות Google.
  • להריץ שאילתות על נתונים ב-BigQuery ולהוריד את התוצאות ל-Colab.
  • להשתמש בכלים של Python למדעי הנתונים כדי לבצע טרנספורמציות וניתוחים.
  • ליצור תצוגות חזותיות, כולל תרשימי פיזור, פוליגונים, מפות כורופלת ומפות חום.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

בעזרת מחשבון העלויות אתם יכולים להעריך את העלויות בהתאם לשימוש הצפוי.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.

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

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.

  3. Enable the BigQuery and Google Maps JavaScript APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  4. מוודאים שיש לכם את ההרשאות הנדרשות כדי לבצע את המשימות שמפורטות במסמך הזה.

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

אם אתם יוצרים פרויקט חדש, אתם ה-Project Owner שלו ומוענקות לכם כל הרשאות ה-IAM שנדרשות כדי להשלים את המדריך הזה.

אם אתם משתמשים בפרויקט קיים, אתם צריכים את התפקיד הבא ברמת הפרויקט כדי להריץ משימות של שאילתות.

צריך לוודא שיש לכם בפרויקט את התפקיד או התפקידים הבאים:

בדיקת התפקידים

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM
  2. בוחרים את הפרויקט.
  3. בעמודה Principal, מחפשים את כל השורות שמזהות אתכם או קבוצה שאתם חברים בה. כדי לברר לאילו קבוצות אתם שייכים, פנו לאדמין.

  4. בכל השורות שבהן אתם מופיעים, בודקים בעמודה Role אם רשימת התפקידים כוללת את התפקידים הנדרשים.

מתן התפקידים

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM
  2. בוחרים את הפרויקט.
  3. לוחצים על Grant access.
  4. בשדה New principals, מזינים את מזהה המשתמש. ‫ בדרך כלל זה המזהה של משתמש במאגר זהויות של כוח עבודה. למידע נוסף, קראו את המאמר ייצוג המשתמשים במאגרי כוח עבודה בכללי מדיניות IAM או פנו לאדמין שלכם.

  5. לוחצים על Select a role ומחפשים את התפקיד.
  6. כדי לתת עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
  7. לוחצים על Save.

למידע נוסף על תפקידים ב-BigQuery, קראו את המאמר תפקידי IAM מוגדרים מראש.

יצירת נוטבוק של Colab

במדריך הזה נבנה נוטבוק של Colab כדי להמחיש באופן חזותי נתונים של ניתוח נתונים גיאו-מרחביים. כדי לפתוח גרסה מוכנה מראש של ה-notebook ב-Colab, ב-Colab Enterprise או ב-BigQuery Studio, לוחצים על הקישורים שמופיעים בחלק העליון של גרסת ה-GitHub של המדריך BigQuery Geospatial Visualization in Colab.

  1. פותחים את Colab.

    פתיחת Colab

  2. בתיבת הדו-שיח Open notebook, לוחצים על New notebook.

  3. לוחצים על Untitled0.ipynb ומשנים את שם ה-notebook ל-bigquery-geo.ipynb.

  4. לוחצים על קובץ > שמירה.

אימות באמצעות Google Cloud ומפות Google

במדריך הזה נשלח שאילתות למערכי נתונים ב-BigQuery ונשתמש ב-Google Maps JavaScript API. כדי להשתמש במשאבים האלה, צריך לאמת את סביבת זמן הריצה של Colab באמצעות Google Cloud ו-Maps API.

אימות באמצעות Google Cloud

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי לאמת את הפרויקט, מזינים את הקוד הבא:

    # REQUIRED: Authenticate with your project.
    GCP_PROJECT_ID = "PROJECT_ID"  #@param {type:"string"}
    
    from google.colab import auth
    from google.colab import userdata
    
    auth.authenticate_user(project_id=GCP_PROJECT_ID)
    
    # Set GMP_API_KEY to none
    GMP_API_KEY = None

    מחליפים את PROJECT_ID במזהה הפרויקט.

  3. לוחצים על  Run cell.

  4. כשמופיעה בקשה, לוחצים על אישור כדי לתת ל-Colab גישה לפרטי הכניסה שלכם, אם אתם מסכימים.

  5. בדף כניסה באמצעות חשבון Google, בוחרים את החשבון.

  6. בדף Sign in to Third-party authored notebook code, לוחצים על Continue.

  7. בקטע Select what third-party authored notebook code can access, לוחצים על Select all ואז על Continue.

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

אופציונלי: אימות באמצעות מפות Google

אם אתם משתמשים ב-Google Maps Platform כספק המפות של המפות הבסיסיות, אתם צריכים לספק מפתח API של Google Maps Platform. ה-notebook מאחזר את המפתח מהסודות שלכם ב-Colab.

השלב הזה נדרש רק אם אתם משתמשים ב-Maps API. אם לא תבצעו אימות מול Google Maps Platform, במקום זאת pydeck תשתמש במפה של carto.

  1. כדי לקבל מפתח Google Maps API, פועלים לפי ההוראות בדף שימוש במפתחות API במסמכי התיעוד של מפות Google.

  2. עוברים לנוטבוק של Colab ולוחצים על  Secrets.

  3. לוחצים על Add new secret (הוספת סוד חדש).

  4. בשדה Name, מזינים GMP_API_KEY.

  5. בשדה Value, מזינים את הערך של מפתח ה-Maps API שיצרתם קודם.

  6. סוגרים את החלונית Secrets.

  7. כדי להוסיף תא קוד, לוחצים על Code.

  8. כדי לבצע אימות באמצעות Maps API, מזינים את הקוד הבא:

    # Authenticate with the Google Maps JavaScript API.
    GMP_API_SECRET_KEY_NAME = "GMP_API_KEY" #@param {type:"string"}
    
    if GMP_API_SECRET_KEY_NAME:
      GMP_API_KEY = userdata.get(GMP_API_SECRET_KEY_NAME) if GMP_API_SECRET_KEY_NAME else None
    else:
      GMP_API_KEY = None
  9. כשמופיעה בקשה, לוחצים על Grant access כדי לתת ל-notebook גישה למפתח, אם אתם מסכימים.

  10. לוחצים על  Run cell.

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

התקנת חבילות Python וייבוא ספריות של מדעי הנתונים

בנוסף למודולים של Python ב-colabtools (google.colab), במדריך הזה משתמשים בכמה חבילות אחרות של Python ובספריות של מדעי הנתונים.

בקטע הזה מתקינים את החבילות pydeck ו-h3. pydeck מספק עיבוד מרחבי בקנה מידה גדול ב-Python, באמצעות deck.gl. ‫h3-py מספק את מערכת האינדקסים הגיאוגרפיים ההיררכיים המשושים H3 של Uber ב-Python.

אחר כך מייבאים את הספריות h3 ו-pydeck ואת הספריות הגיאו-מרחביות הבאות של Python:

  • geopandas כדי להרחיב את סוגי הנתונים שבהם משתמשים ב-pandas, וכך לאפשר פעולות מרחביות על סוגים גיאומטריים.
  • shapely לטיפול באובייקטים גיאומטריים מישוריים בודדים ולניתוח שלהם.
  • branca כדי ליצור מפות צבעים ב-HTML וב-JavaScript.
  • geemap.deck להמחשה עם pydeck ו-earthengine-api.

אחרי שמייבאים את הספריות, מפעילים טבלאות אינטראקטיביות לpandas DataFrames ב-Colab.

מתקינים את החבילות pydeck ו-h3

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי להתקין את החבילות pydeck ו-h3, מזינים את הקוד הבא:

    # Install pydeck and h3.
    !pip install pydeck>=0.9 h3>=4.2
  3. לוחצים על  Run cell.

    אחרי שההתקנה מסתיימת, לא נוצר פלט ב-נוטבוק של Colab. סימן הווי לצד התא מציין שהקוד פעל בהצלחה.

ייבוא ספריות Python

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי לייבא את ספריות Python, מזינים את הקוד הבא:

    # Import data science libraries.
    import branca
    import geemap.deck as gmdk
    import h3
    import pydeck as pdk
    import geopandas as gpd
    import shapely
  3. לוחצים על  Run cell.

    אחרי שמריצים את הקוד, לא נוצר פלט ב-notebook של Colab. סימן הווי לצד התא מציין שהקוד פעל בהצלחה.

הפעלת טבלאות אינטראקטיביות ל-DataFrame של pandas

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי להפעיל את pandas DataFrames, מזינים את הקוד הבא:

    # Enable displaying pandas data frames as interactive tables by default.
    from google.colab import data_table
    data_table.enable_dataframe_formatter()
  3. לוחצים על  Run cell.

    אחרי שמריצים את הקוד, לא נוצר פלט ב-notebook של Colab. סימן הווי לצד התא מציין שהקוד פעל בהצלחה.

יצירת תרחיש משותף

בקטע הזה יוצרים שגרה משותפת שמעבדת שכבות במפה בסיסית.

  1. כדי להוסיף תא קוד, לוחצים על Code.

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

    # Set Google Maps as the base map provider.
    MAP_PROVIDER_GOOGLE = pdk.bindings.base_map_provider.BaseMapProvider.GOOGLE_MAPS.value
    
    # Shared routine for rendering layers on a map using geemap.deck.
    def display_pydeck_map(layers, view_state, **kwargs):
      deck_kwargs = kwargs.copy()
    
      # Use Google Maps as the base map only if the API key is provided.
      if GMP_API_KEY:
        deck_kwargs.update({
          "map_provider": MAP_PROVIDER_GOOGLE,
          "map_style": pdk.bindings.map_styles.GOOGLE_ROAD,
          "api_keys": {MAP_PROVIDER_GOOGLE: GMP_API_KEY},
        })
    
      m = gmdk.Map(initial_view_state=view_state, ee_initialize=False, **deck_kwargs)
    
      for layer in layers:
        m.add_layer(layer)
      return m
  3. לוחצים על  Run cell.

    אחרי שמריצים את הקוד, לא נוצר פלט ב-notebook של Colab. סימן הווי לצד התא מציין שהקוד פעל בהצלחה.

יצירת תרשים פיזור

בקטע הזה תיצרו תרשים פיזור של כל תחנות השכרת האופניים במערך הנתונים הציבורי של San Francisco Ford GoBike Share, על ידי אחזור נתונים מהטבלה bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info. תרשים הפיזור נוצר באמצעות שכבה ושכבת תרשים פיזור מה-framework של deck.gl.

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

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

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי להריץ שאילתה במערך הנתונים הציבורי של San Francisco Ford GoBike Share, מזינים את הקוד הבא. הקוד הזה משתמש בפונקציית הקסם %%bigquery כדי להריץ את השאילתה ולהחזיר את התוצאות ב-DataFrame:

    # Query the station ID, station name, station short name, and station
    # geometry from the bike share dataset.
    # NOTE: In this tutorial, the denormalized 'lat' and 'lon' columns are
    # ignored. They are decomposed components of the geometry.
    %%bigquery gdf_sf_bikestations --project {GCP_PROJECT_ID} --use_geodataframe station_geom
    
    SELECT
      station_id,
      name,
      short_name,
      station_geom
    FROM
      `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
  3. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%

  4. כדי להוסיף תא קוד, לוחצים על Code.

  5. כדי לקבל סיכום של ה-DataFrame, כולל עמודות וסוגי נתונים, מזינים את הקוד הבא:

    # Get a summary of the DataFrame
    gdf_sf_bikestations.info()
  6. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    <class 'geopandas.geodataframe.GeoDataFrame'>
    RangeIndex: 472 entries, 0 to 471
    Data columns (total 4 columns):
    #   Column        Non-Null Count  Dtype
    ---  ------        --------------  -----
    0   station_id    472 non-null    object
    1   name          472 non-null    object
    2   short_name    472 non-null    object
    3   station_geom  472 non-null    geometry
    dtypes: geometry(1), object(3)
    memory usage: 14.9+ KB
    
  7. כדי להוסיף תא קוד, לוחצים על Code.

  8. כדי לראות תצוגה מקדימה של חמש השורות הראשונות של ה-DataFrame, מזינים את הקוד הבא:

    # Preview the first five rows
    gdf_sf_bikestations.head()
  9. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    חמש השורות הראשונות של ה-DataFrame.

כדי לעבד את הנקודות, צריך לחלץ את קו האורך וקו הרוחב כקואורדינטות x ו-y מהעמודה station_geom במערך הנתונים של השכרת האופניים.

מכיוון ש-gdf_sf_bikestations הוא geopandas.GeoDataFrame, הגישה לקואורדינטות מתבצעת ישירות מעמודת הגיאומטריה station_geom שלו. אפשר לאחזר את קו האורך באמצעות המאפיין .x של העמודה, ואת קו הרוחב באמצעות המאפיין .y. אחר כך אפשר לאחסן אותם בעמודות חדשות של קווי אורך ורוחב.

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי לחלץ את הערכים של קו האורך וקו הרוחב מהעמודה station_geom, מזינים את הקוד הבא:

    # Extract the longitude (x) and latitude (y) from station_geom.
    gdf_sf_bikestations["longitude"] = gdf_sf_bikestations["station_geom"].x
    gdf_sf_bikestations["latitude"] = gdf_sf_bikestations["station_geom"].y
  3. לוחצים על  Run cell.

    אחרי שמריצים את הקוד, לא נוצר פלט ב-notebook של Colab. סימן הווי לצד התא מציין שהקוד פעל בהצלחה.

  4. כדי להוסיף תא קוד, לוחצים על Code.

  5. כדי ליצור את תרשים הפיזור של תחנות השכרת האופניים על סמך ערכי קווי האורך והרוחב שחילצתם קודם, מזינים את הקוד הבא:

    # Render a scatter plot using pydeck with the extracted longitude and
    # latitude columns in the gdf_sf_bikestations geopandas.GeoDataFrame.
    scatterplot_layer = pdk.Layer(
      "ScatterplotLayer",
      id="bike_stations_scatterplot",
      data=gdf_sf_bikestations,
      get_position=['longitude', 'latitude'],
      get_radius=100,
      get_fill_color=[255, 0, 0, 140],  # Adjust color as desired
      pickable=True,
    )
    
    view_state = pdk.ViewState(latitude=37.77613, longitude=-122.42284, zoom=12)
    display_pydeck_map([scatterplot_layer], view_state)
  6. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    תרשים הפיזור שנוצר של תחנות השכרת האופניים.

הצגת פוליגונים

ניתוח נתונים גיאו-מרחביים מאפשר לנתח נתונים גיאו-מרחביים ולהציג אותם באופן חזותי ב-BigQuery, באמצעות סוגי נתונים של GEOGRAPHY ופונקציות גיאוגרפיות של GoogleSQL.

סוג הנתונים GEOGRAPHY בניתוח נתונים גיאו-מרחביים הוא אוסף של נקודות, מחרוזות קווים ומצולעים, שמיוצג כקבוצת נקודות או כקבוצת משנה של פני כדור הארץ. סוג GEOGRAPHY יכול להכיל אובייקטים כמו:

  • נקודות
  • שורות
  • פוליגונים
  • מרובי-פוליגונים

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

אם קיבלתם נתונים גיאו-מרחביים בלי לדעת מהן הצורות הצפויות, אתם יכולים להמחיש את הנתונים כדי לגלות את הצורות. כדי להמחיש צורות, אפשר להמיר את הנתונים הגיאוגרפיים לפורמט GeoJSON. אחר כך אפשר להמחיש את הנתונים של GeoJSON באמצעות שכבת GeoJSON מ-deck.gl framework.

בקטע הזה תשלחו שאילתה על נתונים גיאוגרפיים במערך הנתונים San Francisco Neighborhoods, ואז תציגו את הפוליגונים באופן חזותי.

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי לשלוח שאילתה על הנתונים הגיאוגרפיים מהטבלה bigquery-public-data.san_francisco_neighborhoods.boundaries במערך הנתונים San Francisco Neighborhoods, מזינים את הקוד הבא. הקוד הזה משתמש בפונקציית הקסם %%bigquery כדי להריץ את השאילתה ולהחזיר את התוצאות ב-DataFrame:

    # Query the neighborhood name and geometry from the San Francisco
    # neighborhoods dataset.
    %%bigquery gdf_sanfrancisco_neighborhoods --project {GCP_PROJECT_ID} --use_geodataframe geometry
    
    SELECT
      neighborhood,
      neighborhood_geom AS geometry
    FROM
      `bigquery-public-data.san_francisco_neighborhoods.boundaries`
  3. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%

  4. כדי להוסיף תא קוד, לוחצים על Code.

  5. כדי לקבל סיכום של ה-DataFrame, מזינים את הקוד הבא:

    # Get a summary of the DataFrame
    gdf_sanfrancisco_neighborhoods.info()
  6. לוחצים על  Run cell.

    התוצאות אמורות להיראות כך:

    <class 'geopandas.geodataframe.GeoDataFrame'>
    RangeIndex: 117 entries, 0 to 116
    Data columns (total 2 columns):
    #   Column        Non-Null Count  Dtype
    ---  ------        --------------  -----
    0   neighborhood  117 non-null    object
    1   geometry      117 non-null    geometry
    dtypes: geometry(1), object(1)
    memory usage: 2.0+ KB
    
  7. כדי לראות תצוגה מקדימה של השורה הראשונה ב-DataFrame, מזינים את הקוד הבא:

    # Preview the first row
    gdf_sanfrancisco_neighborhoods.head(1)
  8. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    השורה הראשונה של ה-DataFrame.

    בתוצאות, שימו לב שהנתונים הם פוליגון.

  9. כדי להוסיף תא קוד, לוחצים על Code.

  10. כדי להציג את הפוליגונים, מזינים את הקוד הבא. הפונקציה pydeck משמשת להמרת כל מופע של אובייקט shapely בעמודת הגיאומטריה לפורמט GeoJSON:

    # Visualize the polygons.
    geojson_layer = pdk.Layer(
        'GeoJsonLayer',
        id="sf_neighborhoods",
        data=gdf_sanfrancisco_neighborhoods,
        get_line_color=[127, 0, 127, 255],
        get_fill_color=[60, 60, 60, 50],
        get_line_width=100,
        pickable=True,
        stroked=True,
        filled=True,
      )
    view_state = pdk.ViewState(latitude=37.77613, longitude=-122.42284, zoom=12)
    display_pydeck_map([geojson_layer], view_state)
  11. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

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

יצירת מפה כורופלתית

אם אתם חוקרים נתונים עם פוליגונים שקשה להמיר לפורמט GeoJSON, אתם יכולים להשתמש במקום זאת בשכבת פוליגונים מה-framework של deck.gl. שכבת פוליגון יכולה לעבד נתוני קלט מסוגים ספציפיים, כמו מערך של נקודות.

בקטע הזה משתמשים בשכבת פוליגון כדי ליצור מערך של נקודות, ומשתמשים בתוצאות כדי ליצור מפה כורופלתית. המפה הכורופלתית מציגה את צפיפות תחנות השכרת האופניים לפי שכונה, על ידי איחוד נתונים ממערך הנתונים של שכונות בסן פרנסיסקו עם מערך הנתונים של Ford GoBike Share בסן פרנסיסקו.

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי לצבור ולספור את מספר התחנות בכל שכונה וליצור עמודת polygon שמכילה מערך של נקודות, מזינים את הקוד הבא:

    # Aggregate and count the number of stations per neighborhood.
    gdf_count_stations = gdf_sanfrancisco_neighborhoods.sjoin(gdf_sf_bikestations, how='left', predicate='contains')
    gdf_count_stations = gdf_count_stations.groupby(by='neighborhood')['station_id'].count().rename('num_stations')
    gdf_stations_x_neighborhood = gdf_sanfrancisco_neighborhoods.join(gdf_count_stations, on='neighborhood', how='inner')
    
    # To simulate non-GeoJSON input data, create a polygon column that contains
    # an array of points by using the pandas.Series.map method.
    gdf_stations_x_neighborhood['polygon'] = gdf_stations_x_neighborhood['geometry'].map(lambda g: list(g.exterior.coords))
  3. לוחצים על  Run cell.

    אחרי שמריצים את הקוד, לא נוצר פלט ב-notebook של Colab. סימן הווי לצד התא מציין שהקוד פעל בהצלחה.

  4. כדי להוסיף תא קוד, לוחצים על Code.

  5. כדי להוסיף עמודה של fill_color לכל אחד מהמצולעים, מזינים את הקוד הבא:

    # Create a color map gradient using the branch library, and add a fill_color
    # column for each of the polygons.
    colormap = branca.colormap.LinearColormap(
      colors=["lightblue", "darkred"],
      vmin=0,
      vmax=gdf_stations_x_neighborhood['num_stations'].max(),
    )
    gdf_stations_x_neighborhood['fill_color'] = gdf_stations_x_neighborhood['num_stations'] \
      .map(lambda c: list(colormap.rgba_bytes_tuple(c)[:3]) + [0.7 * 255])   # force opacity of 0.7
  6. לוחצים על  Run cell.

    אחרי שמריצים את הקוד, לא נוצר פלט ב-notebook של Colab. סימן הווי לצד התא מציין שהקוד פעל בהצלחה.

  7. כדי להוסיף תא קוד, לוחצים על Code.

  8. כדי לעבד את שכבת הפוליגון, מזינים את הקוד הבא:

    # Render the polygon layer.
    polygon_layer = pdk.Layer(
      'PolygonLayer',
      id="bike_stations_choropleth",
      data=gdf_stations_x_neighborhood,
      get_polygon='polygon',
      get_fill_color='fill_color',
      get_line_color=[0, 0, 0, 255],
      get_line_width=50,
      pickable=True,
      stroked=True,
      filled=True,
    )
    view_state = pdk.ViewState(latitude=37.77613, longitude=-122.42284, zoom=12)
    display_pydeck_map([polygon_layer], view_state)
  9. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    שכבת הפוליגון שעובדה לשכונות בסן פרנסיסקו.

יצירת מפת חום

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

בדוגמה הבאה, אתם שולחים שאילתה לנתונים בטבלה bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents במערך הנתונים של הדוחות של משטרת סן פרנסיסקו (SFPD). הנתונים משמשים להמחשה חזותית של התפלגות האירועים בשנת 2015.

במפות חום, מומלץ לבצע קוונטיזציה וצבירה של הנתונים לפני הרינדור. בדוגמה הזו, הנתונים עוברים קוונטיזציה וצבירה באמצעות האינדקס המרחבי H3 של Carto. מפת החום נוצרת באמצעות שכבת מפת חום מ-deck.gl framework.

בדוגמה הזו, הקוונטיזציה מתבצעת באמצעות ספריית Python‏ h3 כדי לצבור את נקודות האירועים למשושים. הפונקציה h3.latlng_to_cell משמשת למיפוי המיקום של האירוע (קו רוחב וקו אורך) לאינדקס תאים ב-H3. רזולוציית H3 של תשע מספקת מספיק משושים מצטברים למפת החום. הפונקציה h3.cell_to_latlng משמשת לקביעת המרכז של כל משושה.

  1. כדי להוסיף תא קוד, לוחצים על Code.

  2. כדי לשלוח שאילתה על הנתונים במערך הנתונים של דוחות משטרת סן פרנסיסקו (SFPD), מזינים את הקוד הבא. הקוד הזה משתמש בפונקציית הקסם %%bigquery כדי להריץ את השאילתה ולהחזיר את התוצאות ב-DataFrame:

    # Query the incident key and location  data from the SFPD reports dataset.
    %%bigquery gdf_incidents --project {GCP_PROJECT_ID} --use_geodataframe location_geography
    
    SELECT
      unique_key,
      location_geography
    FROM (
      SELECT
        unique_key,
        SAFE.ST_GEOGFROMTEXT(location) AS location_geography, # WKT string to GEOMETRY
        EXTRACT(YEAR FROM timestamp) AS year,
      FROM `bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents` incidents
    )
    WHERE year = 2015
  3. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%

  4. כדי להוסיף תא קוד, לוחצים על Code.

  5. כדי לחשב את התא של קו הרוחב וקו האורך של כל אירוע, לצבור את האירועים של כל תא, ליצור DataFrame של geopandas ולהוסיף את מרכז כל משושה לשכבת מפת החום, מזינים את הקוד הבא:

    # Compute the cell for each incident's latitude and longitude.
    H3_RESOLUTION = 9
    gdf_incidents['h3_cell'] = gdf_incidents.geometry.apply(
        lambda geom: h3.latlng_to_cell(geom.y, geom.x, H3_RESOLUTION)
    )
    
    # Aggregate the incidents for each hexagon cell.
    count_incidents = gdf_incidents.groupby(by='h3_cell')['unique_key'].count().rename('num_incidents')
    
    # Construct a new geopandas.GeoDataFrame with the aggregate results.
    # Add the center of each hexagon for the HeatmapLayer to render.
    gdf_incidents_x_cell = gpd.GeoDataFrame(data=count_incidents).reset_index()
    gdf_incidents_x_cell['h3_center'] = gdf_incidents_x_cell['h3_cell'].apply(h3.cell_to_latlng)
    gdf_incidents_x_cell.info()
  6. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    <class 'geopandas.geodataframe.GeoDataFrame'>
    RangeIndex: 969 entries, 0 to 968
    Data columns (total 3 columns):
    #   Column         Non-Null Count  Dtype
    --  ------         --------------  -----
    0   h3_cell        969 non-null    object
    1   num_incidents  969 non-null    Int64
    2   h3_center      969 non-null    object
    dtypes: Int64(1), object(2)
    memory usage: 23.8+ KB
    
  7. כדי להוסיף תא קוד, לוחצים על Code.

  8. כדי לראות תצוגה מקדימה של חמש השורות הראשונות של ה-DataFrame, מזינים את הקוד הבא:

    # Preview the first five rows.
    gdf_incidents_x_cell.head()
  9. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    חמש השורות הראשונות של ה-DataFrame.

  10. כדי להוסיף תא קוד, לוחצים על Code.

  11. כדי להמיר את הנתונים לפורמט JSON שאפשר להשתמש בו ב-HeatmapLayer, מזינים את הקוד הבא:

    # Convert to a JSON format recognized by the HeatmapLayer.
    def _make_heatmap_datum(row) -> dict:
      return {
          "latitude": row['h3_center'][0],
          "longitude": row['h3_center'][1],
          "weight": float(row['num_incidents']),
      }
    
    heatmap_data = gdf_incidents_x_cell.apply(_make_heatmap_datum, axis='columns').values.tolist()
  12. לוחצים על  Run cell.

    אחרי שמריצים את הקוד, לא נוצר פלט ב-notebook של Colab. סימן הווי לצד התא מציין שהקוד פעל בהצלחה.

  13. כדי להוסיף תא קוד, לוחצים על Code.

  14. כדי להציג את מפת החום, מזינים את הקוד הבא:

    # Render the heatmap.
    heatmap_layer = pdk.Layer(
      "HeatmapLayer",
      id="sfpd_heatmap",
      data=heatmap_data,
      get_position=['longitude', 'latitude'],
      get_weight='weight',
      opacity=0.7,
      radius_pixels=99,  # this limitation can introduce artifacts (see above)
      aggregation='MEAN',
    )
    view_state = pdk.ViewState(latitude=37.77613, longitude=-122.42284, zoom=12)
    display_pydeck_map([heatmap_layer], view_state)
  15. לוחצים על  Run cell.

    הפלט אמור להיראות כך:

    מפת החום שעברה רינדור.

הסרת המשאבים

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

מחיקת הפרויקט

המסוף

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

gcloud

    כדי למחוק פרויקט ב- Google Cloud :

    gcloud projects delete PROJECT_ID

מחיקת ה-Notebook ומפתח ה-API של מפות Google

אחרי שמוחקים את הפרויקט ב- Google Cloud , אם השתמשתם ב-Google Maps API, מחקו את מפתח ה-API של Google Maps מהסודות ב-Colab ואז מחקו את ה-Notebook (אם רוצים).

  1. ב-Colab, לוחצים על  Secrets.

  2. בסוף השורה של GMP_API_KEY, לוחצים על  Delete.

  3. אופציונלי: כדי למחוק את ה-notebook, לוחצים על File > Move to trash.

המאמרים הבאים