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

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

במדריך הזה נעשה שימוש במערכי הנתונים הציבוריים הבאים של BigQuery:

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

אתם משתמשים במערכי הנתונים הציבוריים כדי ליצור את התרשימים הבאים:

  • תרשים פיזור של כל תחנות שיתוף האופניים מסט הנתונים של Ford GoBike Share
  • מצולעים במערך הנתונים San Francisco Neighborhoods
  • מפה כורופלתית של מספר תחנות השכרת האופניים לפי שכונה
  • מפת חום של אירועים מתוך מערך הנתונים של דוחות משטרת סן פרנסיסקו

מטרות

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

עלויות

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

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

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

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Google Maps JavaScript 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

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

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Google Maps JavaScript 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

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

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

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

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

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

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

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

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

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

מתן התפקידים

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

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

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

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

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

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

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

    פתיחת Colab

  2. בתיבת הדו-שיח פתיחת מחברת, לוחצים על מחברת חדשה.

  3. לוחצים על Untitled0.ipynb ומשנים את שם המחברת ל-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. לוחצים על  הפעלת התא.

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

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

  6. בדף כניסה לקוד של מחברת שנוצרה על ידי צד שלישי, לוחצים על המשך.

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

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

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

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

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

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

  2. עוברים ל-Notebook של Colab ולוחצים על  Secrets (סודות).

  3. לוחצים על הוספת סוד חדש.

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

  5. במאפיין ערך, מזינים את הערך של מפתח 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. לוחצים על  הפעלת התא.

    אחרי שמשלימים את תהליך ההרשאה, לא נוצר פלט בנוטבוק של 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.

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

התקנה של החבילות pydeck ו-h3

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

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

    # Install pydeck and h3.
    !pip install pydeck>=0.9 h3>=4.2
  3. לוחצים על  הפעלת התא.

    אחרי שתסיימו את ההתקנה, לא ייווצר פלט בנוטבוק של 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. לוחצים על  הפעלת התא.

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

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

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

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

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

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

בקטע הזה יוצרים תרשים פיזור של כל תחנות השכרת האופניים במערך הנתונים הציבורי של Ford GoBike Share בסן פרנסיסקו, על ידי אחזור נתונים מהטבלה bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info. תרשים הפיזור נוצר באמצעות שכבה ושכבת תרשים פיזור ממסגרת 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. לוחצים על  הפעלת התא.

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

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

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

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

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

    חמש השורות הראשונות של 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. לוחצים על  הפעלת התא.

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

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

    תרשים פיזור שעבר רינדור של תחנות להשכרת אופניים.

הצגה חזותית של פוליגונים

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

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

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

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

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

בקטע הזה, תריצו שאילתות על נתונים גיאוגרפיים במערך הנתונים 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. לוחצים על  הפעלת התא.

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

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

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

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

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

    השורה הראשונה ב-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. לוחצים על  הפעלת התא.

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

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

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

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

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

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

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

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

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

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

יצירת מפת חום

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

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

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

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

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

  2. כדי לשלוח שאילתה לנתונים במערך הנתונים San Francisco Police Department (SFPD) Reports (דוחות של משטרת סן פרנסיסקו), מזינים את הקוד הבא. הקוד הזה משתמש בפונקציית הקסם %%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. לוחצים על  הפעלת התא.

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

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

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

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

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

    חמש השורות הראשונות של 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. לוחצים על  הפעלת התא.

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

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

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

הסרת המשאבים

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

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

המסוף

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

    כניסה לדף Manage resources

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

gcloud

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

    gcloud projects delete PROJECT_ID

מחיקת מפתח Google Maps API ומחברת

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

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

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

  3. אופציונלי: כדי למחוק את המחברת, לוחצים על קובץ > העברה לאשפה.

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