في هذا المستند، ستتعرّف على كيفية استخدام بيانات معرّفات الأماكن النموذجية من إحصاءات الأماكن، وذلك باستخدام وظائف عدد الأماكن، بالإضافة إلى عمليات البحث المستهدَفة عن تفاصيل الأماكن، وذلك لتعزيز الثقة في نتائجك.
نمط البناء
يمنحك نمط التصميم هذا سير عمل قابلاً للتكرار لسد الفجوة بين التحليل الإحصائي العالي المستوى والتحقق من صحة البيانات الأساسية. من خلال الجمع بين نطاق BigQuery ودقة Places API، يمكنك التحقّق من صحة النتائج التحليلية بثقة. ويُعدّ ذلك مفيدًا بشكل خاص في ما يتعلّق باختيار المواقع وتحليل المنافسين وأبحاث السوق، حيث تكون الثقة في البيانات أمرًا بالغ الأهمية.
يتضمّن جوهر هذا النمط أربع خطوات رئيسية:
- إجراء تحليل على نطاق واسع: استخدِم دالة عدد الأماكن من إحصاءات الأماكن في BigQuery لتحليل بيانات الأماكن على نطاق جغرافي واسع، مثل مدينة أو منطقة بأكملها.
- عزل العيّنات واستخراجها: حدِّد المناطق التي تهمّك (مثل
"النقاط الفعّالة" ذات الكثافة العالية) من النتائج المجمّعة واستخراج
sample_place_ids
التي توفّرها الدالة. - استرداد تفاصيل البيانات الأساسية: استخدِم معرّفات الأماكن التي تم استخراجها لإجراء طلبات مستهدَفة إلى Place Details API من أجل استرداد تفاصيل غنية وواقعية لكل مكان.
- إنشاء تصور مجمّع: ضع طبقة من بيانات الأماكن التفصيلية فوق الخريطة الإحصائية الأولية ذات المستوى العالي للتحقّق بصريًا من أنّ الأعداد المجمّعة تعكس الواقع على أرض الواقع.
سير عمل الحل
يتيح لك سير العمل هذا الربط بين المؤشرات على المستوى الكلّي والحقائق على المستوى الجزئي. تبدأ بنظرة إحصائية عامة ثم تتعمّق بشكل استراتيجي للتحقّق من البيانات باستخدام أمثلة محددة من الواقع.
تحليل كثافة الأماكن على نطاق واسع باستخدام "إحصاءات الأماكن"
تتمثل خطوتك الأولى في فهم المشهد على مستوى عالٍ. بدلاً من جلب آلاف المواقع الفردية المهمة، يمكنك تنفيذ طلب بحث واحد للحصول على ملخّص إحصائي.
تُعدّ وظيفة "إحصاءات الأماكن" PLACES_COUNT_PER_H3
مثالية لهذا الغرض. تجمع هذه الميزة أعداد نقاط الاهتمام في نظام شبكة سداسية الأضلاع
(H3)، ما يتيح لك تحديد المناطق ذات الكثافة العالية أو المنخفضة بسرعة استنادًا إلى معاييرك المحدّدة (مثل المطاعم التي حصلت على تقييم عالٍ والتي تعمل حاليًا).
في ما يلي مثال على طلب بحث. يُرجى العِلم أنّه سيُطلب منك تقديم الموقع الجغرافي لمنطقة البحث. يمكن استخدام مجموعة بيانات مفتوحة، مثل بيانات Overture Maps مجموعة البيانات العامة في BigQuery، لاسترداد بيانات الحدود الجغرافية.
بالنسبة إلى حدود مجموعات البيانات المفتوحة الاستخدام بشكل متكرر، ننصحك بتحويلها إلى جدول في مشروعك. يؤدي ذلك إلى خفض تكاليف BigQuery بشكل كبير وتحسين أداء طلبات البحث.
-- This query counts all highly-rated, operational restaurants
-- across a large geography, grouping them into H3 cells.
SELECT *
FROM
`places_insights___gb.PLACES_COUNT_PER_H3`(
JSON_OBJECT(
'geography', your_defined_geography,
'h3_resolution', 8,
'types', ['restaurant'],
'business_status', ['OPERATIONAL'],
'min_rating', 3.5
)
);
يمنحك ناتج هذا الاستعلام جدولاً بخلايا H3 وعدد الأماكن داخل كل خلية، ما يشكّل أساسًا لخريطة حرارية للكثافة.
عزل النقاط الفعّالة واستخراج أرقام تعريف الأماكن النموذجية
تعرض نتيجة الدالة PLACES_COUNT_PER_H3
أيضًا صفيفًا من sample_place_ids
، يصل إلى 250 معرّف مكان لكل عنصر من عناصر الرد. تشكّل أرقام التعريف هذه الرابط بين الإحصاءات المجمّعة والأماكن الفردية التي تساهم فيها.
يمكن لنظامك أولاً تحديد الخلايا الأكثر صلةً بطلب البحث الأولي.
على سبيل المثال، يمكنك اختيار أفضل 20 خلية تحتوي على أعلى عدد من القيم. بعد ذلك، يمكنك دمج هذه النقاط الساخنة في قائمة واحدة من sample_place_ids
.
تمثّل هذه القائمة عيّنة منتقاة من أهمّ نقاط الاهتمام في المناطق الأكثر صلة، ما يجهّزك لعملية التحقّق المستهدَفة.
إذا كنت تعالج نتائج BigQuery في Python باستخدام إطار بيانات pandas، ستكون عملية استخراج أرقام التعريف هذه بسيطة:
# Assume 'results_df' is a pandas DataFrame from your BigQuery query.
# 1. Identify the 20 busiest H3 cells by sorting and taking the top results.
top_hotspots_df = results_df.sort_values(by='count', ascending=False).head(20)
# 2. Extract and flatten the lists of sample_place_ids from these hotspots.
# The .explode() function creates a new row for each ID in the lists.
all_sample_ids = top_hotspots_df['sample_place_ids'].explode()
# 3. Create a final list of unique Place IDs to verify.
place_ids_to_verify = all_sample_ids.unique().tolist()
print(f"Consolidated {len(place_ids_to_verify)} unique Place IDs for spot-checking.")
يمكن تطبيق المنطق نفسه في حال استخدام لغات برمجة أخرى.
استرداد تفاصيل بيانات الحقيقة الأساسية باستخدام Places API
بعد الحصول على قائمة موحّدة بمعرّفات الأماكن، يمكنك الانتقال من التحليلات على نطاق واسع إلى استرداد بيانات محدّدة. ستستخدم أرقام التعريف هذه للاستعلام من خلال واجهة برمجة التطبيقات Place Details API للحصول على معلومات تفصيلية عن كل موقع جغرافي نموذجي.
هذه خطوة مهمة للتحقّق من صحة المعلومات. في حين أنّ Places Insights كان يخبرك بعدد المطاعم في منطقة معيّنة، يخبرك Places API بالمطاعم المحدّدة، ويقدّم اسمها وعنوانها الدقيق وخطوط الطول والعرض وتقييم المستخدمين وحتى رابطًا مباشرًا إلى موقعها الجغرافي على "خرائط Google". يؤدي ذلك إلى تحسين جودة بيانات العيّنة، وتحويل أرقام التعريف المجردة إلى أماكن ملموسة يمكن التحقّق منها.
للاطّلاع على القائمة الكاملة بالبيانات المتاحة من خلال Place Details API والتكلفة المرتبطة باستردادها، يُرجى مراجعة مستندات واجهة برمجة التطبيقات. يتم ضبط
FieldMask
في الطلب للتحكّم في البيانات التي يتم عرضها من واجهة برمجة التطبيقات.
سيبدو طلب إلى Places API للحصول على معرّف معيّن باستخدام مكتبة برامج Python على النحو التالي:
# A request to fetch details for a single Place ID.
request = {"name": f"places/{place_id}"}
# Define the fields you want returned in the response as a comma-separated string.
fields_to_request = "displayName,formattedAddress,location,googleMapsUri"
# The response contains ground truth data.
response = places_client.get_place(
request=request,
metadata=[("x-goog-fieldmask", fields_to_request)]
)
اطّلِع على أمثلة على مكتبة برامج Places API (الجديدة) لمزيد من التفاصيل.
إنشاء عرض مرئي مجمّع للتحقّق من صحة الفلتر
الخطوة الأخيرة هي جمع مجموعتَي البيانات معًا في عرض واحد. يوفّر ذلك طريقة فورية وبديهية للتحقّق من صحة تحليلك الأوّلي. يجب أن يتضمّن العرض المرئي طبقتَين:
- الطبقة الأساسية: هي خريطة ذات تظليل مساحي أو خريطة حرارية تم إنشاؤها من نتائج
PLACES_COUNT_PER_H3
الأولية، وتعرض الكثافة الإجمالية للأماكن في نطاقك الجغرافي. - الطبقة العلوية: مجموعة من العلامات الفردية لكل نقطة اهتمام نموذجية، يتم رسمها باستخدام الإحداثيات الدقيقة التي تم استردادها من Places API في الخطوة السابقة.
يتم التعبير عن منطق إنشاء هذا العرض المجمّع في مثال الرمز الزائف التالي:
# Assume 'h3_density_data' is your aggregated data from Step 1.
# Assume 'detailed_places_data' is your list of place objects from Step 3.
# Create the base choropleth map from the H3 density data.
# The 'count' column determines the color of each hexagon.
combined_map = create_choropleth_map(
data=h3_density_data,
color_by_column='count'
)
# Iterate through the detailed place data to add individual markers.
for place in detailed_places_data:
# Construct the popup information with key details and a link.
popup_html = f"""
<b>{place.name}</b><br>
Address: {place.address}<br>
<a href="{place.google_maps_uri}" target="_blank">View on Maps</a>
"""
# Add a marker for the current place to the base map.
combined_map.add_marker(
location=[place.latitude, place.longitude],
popup=popup_html,
tooltip=place.name
)
# Display the final map with both layers.
display(combined_map)
من خلال تراكب العلامات المحدّدة والدقيقة على خريطة الكثافة العالية المستوى، يمكنك التأكّد على الفور من أنّ المناطق التي تم تحديدها كنقاط ساخنة تحتوي في الواقع على تركيز عالٍ من الأماكن التي تحلّلها. تساعد هذه الإشارة المرئية في تعزيز الثقة في الاستنتاجات المستندة إلى البيانات.
الخاتمة
يوفّر نمط التصميم هذا طريقة فعّالة وموثوقة للتحقّق من صحة الإحصاءات الجغرافية المكانية على نطاق واسع. من خلال الاستفادة من Places Insights لإجراء تحليل واسع النطاق وقابل للتوسّع، ومن Place Details API للتحقّق من صحة البيانات المستهدَفة، يمكنك إنشاء حلقة ملاحظات وآراء فعّالة. ويضمن ذلك أنّ قراراتك الاستراتيجية، سواء كانت متعلقة باختيار موقع البيع بالتجزئة أو تخطيط الخدمات اللوجستية، تستند إلى بيانات ليست ذات دلالة إحصائية فحسب، بل يمكن التحقّق من دقتها أيضًا.
الخطوات التالية
- استكشِف دوال عدد الأماكن الأخرى لمعرفة كيف يمكنها الإجابة عن أسئلة تحليلية مختلفة.
- راجِع مستندات Places API للاطّلاع على الحقول الأخرى التي يمكنك طلبها لإثراء تحليلك بشكل أكبر.
المساهمون
Henrik Valve | DevX Engineer