آمادهسازی دادههای واقعیت زمینی
برای استفاده از جاسازیهای Population Dynamics، دادههای واقعیت زمینی شما باید در یک مرز جغرافیایی پشتیبانیشده تجمیع شوند. از آنجا که انواع مرزهای اداری در سطح جهانی متفاوت است، میتوانید دادههای خود را با استفاده از سیستمهای شبکه ریاضی جهانی (مانند سلولهای S2) یا مناطق اداری محلی (مانند شهرستانها یا بخشها، بسته به مجموعه دادههای خاص کشور) تراز کنید.
گزینه ۱: گنجاندن جاسازیها در یک مدل موجود
- آمادهسازی دادههای پایه مبتنی بر مدل موجود: از جاسازیها به عنوان متغیرهای کمکی مکانی برای بهبود مدل موجود استفاده کنید.
- آموزش یک مدل تصحیح خطا: بهبود یک مدل موجود با ادغام جاسازیها در مدلی که خروجی مدل اصلی، مقدار مورد انتظار یا حقیقت زمینهای و جاسازیها را برای یادگیری یک مدل تصحیح خطای جدید میگیرد.
گزینه ۲: تنظیم برای موارد استفاده خاص
- یک مدل پیشبینی انتخاب کنید: هر مدلی، مانند GBDT، MLP یا خطی، میتواند برای پیشبینیها استفاده شود.
- استفاده از جاسازیها برای پیشبینی: از جاسازیهای دینامیک جمعیت به عنوان ویژگیهای ورودی، در کنار سایر دادههای زمینهای، برای بهبود دقت پیشبینی استفاده کنید.
تجمیع مرزهای سفارشی
اگر دادههای واقعیت زمینی شما از چندضلعیهای سفارشی، مانند کدهای پستی، ایزوکرونهای زمان رانندگی یا مناطق تجاری استفاده میکنند، میتوانید تجمیع مرزی را انجام دهید. این فرآیند چندین بردار سلولی S2 را در یک نمایش واحد برای چندضلعی هدف ترکیب میکند. انتخاب روش وزندهی مناسب تضمین میکند که جاسازی تجمیعشده به طور دقیق اهداف مدلسازی پاییندستی شما را منعکس میکند.
۱. میانگین وزنی جمعیت (پیشفرض توصیهشده برای PDI)
از تجمیع وزنی جمعیت برای موارد استفاده انسانمحور، مانند عملکرد فروشگاههای خردهفروشی یا مدلسازی رفتار مصرفکننده، استفاده کنید.
استفاده از تجمیع مکانی وزندهیشده بر اساس مساحت برای دادههای جمعیتشناختی میتواند ویژگیهای یادگیری ماشین شما را مختل کند. این اتفاق زمانی میافتد که مناطق خالی از سکنه، مانند پارکها، مناطق صنعتی یا پهنههای آبی، مشخصات ساکنان واقعی را تحریف میکنند.
برای حل این مشکل، میتوانید در BigQuery میانگین وزنی جمعیت را انجام دهید. این رویکرد از مجموعه دادههای جمعیتی با وضوح بالا، مانند WorldPop در Earth Engine Data Catalog ، برای محاسبه چگالی دقیق هر بخش سلولی متقاطع S2 استفاده میکند.
برای دیدن یک مثال پیادهسازی کامل از گردش کار وزندهی شده با جمعیت، دفترچه یادداشت تعاملی را اجرا کنید.
۲. میانگین وزنی ناحیهای
برای موارد استفاده محیطی یا فیزیکی، به جای آن از تجمیع وزنی مساحت استفاده کنید. این روش برای تحلیل کاربری زمین، مطالعات محیط ساخته شده یا برنامهریزی زیرساخت که در آنها باید مناطق را صرف نظر از توزیع جمعیت ارزیابی کنید، مفید است.
در این سناریوها، مساحت فیزیکی زمین نسبت به تراکم جمعیت انسانی اهمیت بیشتری دارد. این امر تضمین میکند که هر کیلومتر مربع در مرز چندضلعی به طور مساوی در بردار تجمیعشده مشارکت داشته باشد.
تحت این روش، بردار تعبیه هر سلول S2 تشکیلدهنده توسط مساحت سطح جغرافیایی که در چندضلعی هدف پوشش میدهد، وزندهی میشود.
عملیات جغرافیایی و تبدیل سلول S2
Population Dynamics Insights از توکنهای سلول S2 سطح ۱۲ (که در ستون geo_id به صورت رشتههای هگزادسیمال ۷ کاراکتری ذخیره میشوند) به عنوان واحد مکانی اصلی خود استفاده میکند. میتوانید از توابع جغرافیایی داخلی در BigQuery برای تبدیل مختصات نقطه یا مرزهای مکانی سفارشی به توکنهای سلول S2 منطبق استفاده کنید. برای تبدیل توکنهای سلول S2 به هندسههای چندضلعی برای تجسم، میتوانید از کتابخانههای سمت کلاینت استفاده کنید. برای اطلاعات بیشتر، به دریافت هندسه سلول S2 از یک توکن هگزادسیمال سطح ۱۲ S2 مراجعه کنید.
تبدیل مختصات نقاط به توکنهای ششتایی سطح ۱۲ S2
برای تطبیق مختصات نقطه lat/lng با ستون geo_id در Population Dynamics Insights، از تابع BigQuery S2_CELLIDFROMPOINT همراه با ST_GEOGPOINT استفاده کنید.
BigQuery شناسههای سلولهای S2 را به صورت مقادیر INT64 علامتگذاری شده ذخیره میکند، که باعث میشود شناسههای سلول در برخی مناطق به عنوان اعداد صحیح منفی ارزیابی شوند. در مثالهای زیر، ما یک تابع کمکی به نام TO_S2_HEX تعریف میکنیم که عدد صحیح را به یک توکن هگزادسیمال استاندارد تبدیل میکند و صفرهای انتهایی را طبق مشخصات هندسه S2 حذف میکند.
کوئری زیر مختصات نقطهای میدان تایمز، نیویورک (عرض جغرافیایی 40.75796 ، طول جغرافیایی -73.98554 ) را به توکن هگز سطح ۱۲ S2 متناظر آن تبدیل میکند:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); SELECT 'Times Square, NYC' AS location_name, TO_S2_HEX(S2_CELLIDFROMPOINT(ST_GEOGPOINT(-73.98554, 40.75796), level => 12)) AS geo_id;
برای تبدیل یک جدول نقطهای موجود با ستونهای latitude و longitude به توکنهای S2 قابل اتصال:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); SELECT store_id, TO_S2_HEX(S2_CELLIDFROMPOINT(ST_GEOGPOINT(longitude, latitude), level => 12)) AS geo_id FROM `your-project.internal_data.store_locations`;
تولید توکنهای سلول پوششی سطح ۱۲ S2 برای یک چندضلعی
اگر دادههای شما از مرزهای منطقهای سفارشی (مانند مناطق تجاری، مناطق تحویل یا کدهای پستی در قالب WKT یا GeoJSON) استفاده میکنند، نمایش متن را با استفاده از ST_GEOGFROM به یک GEOGRAPHY تبدیل کنید و S2_COVERINGCELLIDS برای استخراج تمام سلولهای متقاطع سطح ۱۲ S2 استفاده کنید.
کوئری زیر تمام توکنهای ششتایی سطح ۱۲ S2 که یک چندضلعی سفارشی در میدتاون منهتن را پوشش میدهند، استخراج میکند:
CREATE TEMP FUNCTION TO_S2_HEX(s2_int INT64) RETURNS STRING AS ( RTRIM(FORMAT('%x%015x', (s2_int >> 60) & 0xF, s2_int & 0x0FFFFFFFFFFFFFFF), '0') ); WITH CustomBoundary AS ( SELECT ST_GEOGFROM('POLYGON((-73.99 40.75, -73.97 40.75, -73.97 40.76, -73.99 40.76, -73.99 40.75))') AS geom ) SELECT TO_S2_HEX(s2_id) AS geo_id FROM CustomBoundary, UNNEST(S2_COVERINGCELLIDS(geom, min_level => 12, max_level => 12)) AS s2_id;
هندسه سلول S2 را از یک توکن شش ضلعی سطح S2 12 دریافت کنید
توابع BigQuery GIS مبدلهای یکطرفه هستند (Geometry → S2 Cell ID) و تابعی برای تبدیل توکن سلول S2 به چندضلعی GEOGRAPHY ندارند. برای به دست آوردن هندسه چندضلعی توکن سلول S2 برای تجسم یا تحلیل مکانی، از یک کتابخانه سمت کلاینت در پایتون مانند s2sphere برای رمزگشایی یک توکن سلول S2 با 7 کاراکتر به مختصات مرزی آن و shapely برای ساخت یک چندضلعی برای ابزارهای نقشهبرداری مانند Folium استفاده کنید:
import s2sphere from shapely.geometry import Polygon def s2_token_to_polygon(s2_token: str) -> Polygon: """Converts a 7-character S2 cell token into a Shapely Polygon.""" cell_id = s2sphere.CellId.from_token(s2_token) cell = s2sphere.Cell(cell_id) # Extract the 4 corner vertices of the S2 cell vertices = [] for i in range(4): vertex = cell.get_vertex(i) lat_lng = s2sphere.LatLng.from_point(vertex) vertices.append((lat_lng.lng().degrees, lat_lng.lat().degrees)) # Close the polygon loop vertices.append(vertices[0]) return Polygon(vertices) # Example: Get boundary for S2 token '549056f' cell_polygon = s2_token_to_polygon('549056f') print(cell_polygon.wkt)
نمونههای پرسوجو
your-project.your_dataset.embeddings_table را با نام واقعی پروژه، مجموعه داده و جدول هدف خود جایگزین کنید.
SQL: واکشی جاسازیها
این پرسوجو بردار جاسازی و فرادادههای مدیریتی را برای سلولهای S2 در مجموعه دادهی تأمینشدهی شما بازیابی میکند.
SELECT geo_id, administrative_area_level_1_name AS state, administrative_area_level_2_name AS county, features -- The 330-dim vector FROM `your-project.your_dataset.embeddings_table` LIMIT 10;
SQL: پیدا کردن مکانهای مشابه
این پرسوجو مکانهای مشابه از نظر رفتاری را بدون نیاز به دادههای خارجی شناسایی میکند.
این روش از تابع ML.DISTANCE برای محاسبه شباهت کسینوسی استفاده میکند و تطابقهای برتر را برای یک سلول هدف S2 برمیگرداند. این رویکرد از سناریوهای برنامهریزی توسعه، مانند تعیین محل افتتاح یک فروشگاه جدید بر اساس مشخصات یک مکان موجود موفق، پشتیبانی میکند.
برای نمایش سلولهای S2 روی نقشه، باید شناسه سلول S2 را به هندسه چندضلعی مربوطه تبدیل یا به هم متصل کنید، زیرا این مجموعه داده به جای نقاط طول و عرض جغرافیایی از توکنهای سلول S2 استفاده میکند.
WITH TargetLocation AS ( SELECT features AS target_vector FROM `your-project.your_dataset.embeddings_table` -- Replace with your target S2 hex token (e.g., '80ead45') WHERE geo_id = 'YOUR_TARGET_S2_TOKEN' ) SELECT t.geo_id, t.administrative_area_level_1_name AS state, t.administrative_area_level_2_name AS county, -- Calculate Similarity (1.0 is identical, 0.0 is dissimilar) (1 - ML.DISTANCE(t.features, p.target_vector, 'COSINE')) AS similarity_score FROM `your-project.your_dataset.embeddings_table` t, TargetLocation p WHERE t.geo_id != 'YOUR_TARGET_S2_TOKEN' -- Exclude the target itself ORDER BY similarity_score DESC LIMIT 20;
SQL: اتصال دادههای مشتری
این مثال نشان میدهد که چگونه دادههای داخلی خود (مثلاً جدول عملکرد فروشگاه) را با تعبیههای رفتاری غنی کنید. مطمئن شوید که دادههای داخلی شما شامل توکنهای سلول S2 (رشتههای هگز) منطبق هستند.
SELECT store.store_id, store.s2_token, store.total_revenue, embeddings.features AS pdfm_vector FROM `your-project.internal_data.store_performance` AS store JOIN `your-project.your_dataset.embeddings_table` AS embeddings ON -- Join based on the S2 hex token string store.s2_token = embeddings.geo_id
پایتون: بارگذاری دادهها برای یادگیری ماشین
جاسازیها به صورت آرایههای BigQuery ذخیره میشوند. برای استفاده از آنها در کتابخانههای ML، باید ستون را به یک ماتریس NumPy تبدیل کنید.
from google.cloud import bigquery import numpy as np import pandas as pd client = bigquery.Client() query = """ SELECT geo_id, features -- Returns as a list of floats FROM `your-project.your_dataset.embeddings_table` LIMIT 1000 """ # 1. Load data into DataFrame df = client.query(query).to_dataframe() # 2. Convert the 'features' column (Series of Lists) into a Matrix (2D Array) X_matrix = np.stack(df['features'].values) print(f"Data Loaded. Matrix Shape: {X_matrix.shape}") # Output: Data Loaded. Matrix Shape: (1000, 330)
در گوگل کولب اجرا کنید
مشاهده منبع در گیتهاب