آمادهسازی دادههای واقعیت عینی
برای استفاده از جاسازیهای «پویایی جمعیت»، دادههای حقیقت زمینهای شما باید در محدوده جغرافیایی پشتیبانیشدهای تجمیع شود. ازآنجاییکه انواع مرزهای اداری در سطح جهانی متفاوت است، میتوانید دادههایتان را بااستفاده از سیستمهای شبکه ریاضی جهانی (مانند سلولهای S2) یا مناطق اداری محلی (مانند شهرستانها یا مناطق، بسته به مجموعه دادههای خاص کشور) تراز کنید.
گزینه ۱: ادغام جاسازیها در مدل موجود
- آمادهسازی واقعیت زمینی مبتنی بر مدل موجود: از جاسازیها بهعنوان متغیرهای کمکی جغرافیایی-فضایی برای بهبود مدل موجود استفاده کنید.
- آموزش مدل تصحیح خطا: با ادغام کردن جاسازیها در مدلی که برونداد مدل اصلی، مقدار موردانتظار یا واقعیت عینی، و جاسازیها را برای یادگیری مدل تصحیح خطای جدید میگیرد، مدل موجود را بهبود دهید.
گزینه ۲: تنظیم برای موارد استفاده خاص
- انتخاب مدل پیشبینی: هر مدلی، مانند GBDT، MLP، یا خطی، میتواند برای پیشبینی استفاده شود.
- استفاده از جاسازیها برای پیشبینی: از جاسازیهای «پویایی جمعیت» بهعنوان ویژگیهای ورودی، در کنار سایر دادههای زمینهای، برای بهبود دقت پیشبینی استفاده کنید.
انبوهش مرز سفارشی
اگر دادههای واقعیت زمینی شما از چندضلعیهای سفارشی، مانند کدهای پستی، همزمانهای زمان رانندگی، یا مناطق تجاری استفاده میکند، میتوانید انبوهش مرزی انجام دهید. این فرایند چندین بردار سلول S2 را در یک نمایش واحد برای چندضلعی هدف ترکیب میکند. انتخاب روش وزندهی مناسب تضمین میکند که جاسازی انبوهیده بهدرستی اهداف مدلسازی پاییندستی شما را منعکس میکند.
۱. میانگین وزنی جمعیت (پیشفرض توصیهشده برای PDI)
از انبوهش وزندار جمعیت برای موارد استفاده انسانمحور، مانند عملکرد فروشگاه خردهفروشی یا مدلسازی رفتار مصرفکننده، استفاده کنید.
استفاده از تجمیع فضایی وزنی منطقهای برای دادههای جمعیتشناختی میتواند ویژگیهای یادگیری ماشین شما را تحریف کند. این اتفاق زمانی رخ میدهد که مناطق خالی از سکنه، مانند پارکها، مناطق صنعتی، یا آبها، نمایه ساکنان واقعی را تحریف کنند.
برای حل این مشکل، میتوانید میانگین وزنی جمعیت را در BigQuery انجام دهید. این رویکرد از مجموعهدادههای جمعیتشناختی با وضوح بالا، مانند WorldPop در کاتالوگ دادههای Earth Engine، برای محاسبه تراکم دقیق هر بخش سلول S2 متقاطع استفاده میکند.
برای دیدن نمونه پیادهسازی کامل گردش کار وزنی جمعیت، دفتر یادداشت تعاملی را اجرا کنید.
۲. میانگین وزنی ناحیه
برای موارد استفاده محیطی یا فیزیکی، بهجای آن از انبوهش وزنی منطقهای استفاده کنید. این اطلاعات برای تحلیل کاربری اراضی، مطالعات محیط ساخت، یا برنامهریزی زیرساخت که در آن باید مناطق را بدون درنظر گرفتن توزیع جمعیت ارزیابی کنید مفید است.
در این سناریوها، مساحت زمین فیزیکی مرتبطتر از تراکم جمعیت انسانی است. این کار باعث میشود هر کیلومتر مربع در مرز چندضلعی بهطور مساوی در بردار تجمیعشده مشارکت داشته باشد.
در این روش، بردار جاسازی هر سلول S2 تشکیلدهنده براساس مساحت جغرافیایی که در چندضلعی هدف پوشش میدهد وزندهی میشود.
عملیات جغرافیایی و تبدیل سلول S2
«اطلاعات آماری درباره پویایی جمعیت» از نشانهای سطح ۱۲ سلول S2 (ذخیرهشده در ستون geo_id
بهعنوان رشتههای شانزدهشانزدهی ۷ نویسهای) بهعنوان واحد فضایی اصلی خود استفاده میکند. میتوانید از
توابع جغرافیایی داخلی
در BigQuery برای تبدیل مختصات نقطهای یا مرزهای فضایی سفارشی به
نشانهای سلولی S2 منطبق استفاده کنید. برای تبدیل کردن کدهای سلول S2 به هندسههای چندضلعی برای
دیداریسازی، میتوانید از کتابخانههای سمت کارخواه استفاده کنید. برای اطلاعات بیشتر، به دریافت هندسه سلول S2 از
نشانه ششضلعی سطح ۱۲ S2 مراجعه کنید.
تبدیل مختصات نقطه به کدهای هگزادسیمال S2 سطح ۱۲
برای مطابقت دادن مختصات نقطه عرض/طول جغرافیایی با ستون geo_id در
«اطلاعات آماری درباره پویایی جمعیت»، از تابع BigQuery S2_CELLIDFROMPOINT همراه با
ST_GEOGPOINT استفاده کنید.
BigQuery شناسههای سلول S2 را بهعنوان مقادیر INT64 علامتدار ذخیره میکند، که باعث میشود شناسههای سلول در
برخی مناطق بهعنوان اعداد صحیح منفی ارزیابی شوند. در مثالهای زیر، تابع کمکیای بهنام TO_S2_HEX تعریف میکنیم که عدد صحیح را به
نشانه هگزادسیمال استاندارد تبدیل میکند و طبق مشخصات S2 Geometry
صفرهای انتهایی را حذف میکند.
پُرسمان زیر مختصات نقطهای میدان تایمز در نیویورک (عرض جغرافیایی
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
توابع BigQuery GIS تبدیلکنندههای یکطرفه (هندسه → شناسه سلول S2) هستند و
تابعی برای تبدیل کد سلول S2 به چندضلعی GEOGRAPHY ندارند.
برای بهدست آوردن هندسه چندضلعی یک کد سلول S2 برای دیداریسازی یا تحلیل فضایی، از کتابخانه سمت کارخواه در Python مثل s2sphere برای رمزگشایی کد سلول S2 هفتحرفی به مختصات مرزی آن، و 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: Find similar locations
این پُرسمان مکانهای مشابه ازنظر رفتاری را بدون نیاز به دادههای خارجی شناسایی میکند.
این تابع از تابع 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
Python: بار کردن دادهها برای یادگیری ماشین
جاسازیها بهصورت «آرایههای BigQuery» ذخیره میشوند. برای استفاده از آنها در کتابخانههای یادگیری ماشین، باید ستون را به ماتریس 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)
اجرا در Google Colab
مشاهده منبع در GitHub