کار با داده OpenStreetMap

شکل ۱. نقشه
شکل ۱. نقشه
منتشر‌شده در: towardsdatascienceبه تاریخ ۳۱ می ۲۰۲۱
لینک منبع: Working with OpenStreetMap Data

در این مسیر، من از داده OpenStreetMap از BigQuery استفاده خواهم کرد. این عالی است که گوگل آن را به صورت رایگان در مجموعه داده‌های عمومی خود منتشر کرده‌است. بنابراین شما می‌توانید به راحتی اطلاعات جغرافیایی را با SQL جستجو کنید [ ۱ ]. گوگل مجموعه داده‌های خود را یکبار بدون هیچ به‌روزرسانی منتشر کرد. اگر شما به داده‌های جدیدتر نیاز دارید، OpenStreetMap API در ترکیب با برخی کدهای پایتون ساده ممکن است یک راه‌حل ممکن برای مشکل شما باشد.

استفاده از موارد OpenStreetMap

مورد OpenStreetMap.org یک پروژه بین‌المللی است که در سال ۲۰۰۴ با هدف ایجاد یک نقشه رایگان از جهان تاسیس شد. برای این منظور ما داده‌ها را در مورد جاده‌ها، راه‌آهن، رودخانه‌ها، جنگل‌ها، خانه‌ها و خیلی بیشتر در سراسر جهان جمع‌آوری می‌کنیم [ ۲ ].

اگرچه داده OpenStreetMap رایگان است، اما شما می‌توانید مزایای کسب‌وکار خاصی را به خوبی ترسیم کنید. نمونه‌هایی که من به توسعه آن‌ها کمک کرده‌ام یا حداقل آن‌ها را همراهی کرده‌ام برای مثال:

  • تحلیل ژئو (مشتریان من کجا هستند؟)
  • تجزیه و تحلیل بازار (رقبای من کجا فروشگاه‌ دارند؟)
  • بهینه‌سازی تور (چگونه می‌توانم مسیرهای لجستیک را بهینه کنم؟)
  • تشخیص کلاهبرداری (آیا فاکتورهای حمل و نقل موجه هستند؟)
  • و خیلی چیزهای دیگر …

داده‌های تودرتو چیست؟

جستجوی داده‌ها از BigQuery مجموعه داده‌ها زمینه‌های داده‌های تودرتو را بازخواهد گرداند. BigQuery از بارگذاری و پرس و جوی داده‌های تودرتو و تکرار شونده از منابع که از طرح‌های مبتنی بر شی مانند Json پشتیبانی می‌کنند، پشتیبانی می‌کند. در اینجا تصویر کوتاهی از داده‌های تودرتو آورده شده‌است:

شکل ۲. تصویر داده‌های تو در تو و تکرار شونده
شکل ۲. تصویر داده‌های تو در تو و تکرار شونده

ستون آدرس شامل یک آرایه از مقادیر است. آدرس‌های مختلف در آرایه، داده‌های تکرار شونده هستند. زمینه‌های مختلف در هر آدرس، داده‌های تودرتو هستند.

مثال واقعی

برای مثال من با BigQuery از ویژگی‌های سیاره مجموعه داده باز در مجموعه داده ژئو-openmap استفاده کردم. در اینجا، داده‌ها در یک فرمت تو در تو ذخیره شده‌اند، بنابراین بیایید نگاهی بیاندازیم:

SELECT * FROM `bigquery-public-data.geo_openstreetmap.planet_features` LIMIT 1000

این نتیجه خروجی زیر است:

شکل ۳. خروجی
شکل ۳. خروجی

نتیجه در نگاه اول خوب به نظر می‌رسد. بر خلاف پایگاه‌داده‌های رابطه‌ای کلاسیک، من می‌توانم از آرایه‌ها استفاده کنم و ستون‌های اضافی را ذخیره کنم. علاوه بر این، همه چیز با یک عملکرد عالی کار می‌کند. حالا، من می‌خواهم یک سوپرمارکت خاص در آلمان پیدا کنم-باید با یک بند آسان انجام شود-درست است انجام شود؟ تقریبا. در اینجا، شما به جادوی Unnest نیاز دارید.

SELECT *
FROM `bigquery-PUBLIC- data.geo_openstreetmap.planet_features`
WHERE 'Netto' IN
(
SELECT value
FROM unnest(all_tags))
AND (
'addr:country', 'DE') IN
(
SELECT (KEY, value)
FROM unnest(all_tags))
AND (
'addr:city', 'Hamburg') IN
(
SELECT (KEY, value)
FROM unnest (all_tags));

که نتیجه مطلوب است:

شکل ۴. خروجی
شکل ۴. خروجی

با تابع unnest می‌توانید داده‌ها را مسطح کنید و در نتیجه خروجی پرس و جو:

SELECT osm_id,tags
FROM bigquery-public-data.geo_openstreetmap.planet_features,
UNNEST(all_tags) as tags limit 100

شکل ۵. مسطح کردن داده‌ها
شکل ۵. مسطح کردن داده‌ها

این احتمالا مهم‌ترین چیزی است که شما هنگام کار با داده‌های تودرتو در BigQuery باید بدانید و می‌خواهید برخی از داده‌ها را پرس و جو کنید. اما چه می‌شود اگر می‌خواهید از داده‌ها برای فرآیندهای ETL بیشتر استفاده کنید، داده‌ها را در پایگاه‌داده‌های رابطه‌ای ذخیره کنید یا به زوج‌های با ارزش کلیدی به عنوان ویژگی برای طبقه‌بندی کننده خود نیاز داشته باشید؟ در اینجا، شما می‌خواهید که داده‌ها مسطح نشوند-زیرا این امر منجر به ردیف‌های تکراری خواهد شد-در اینجا شما جفت مقادیر کلیدی را در آرایه به عنوان ستون‌های جدید می‌خواهید:

SELECT
(
SELECT osm_id) osmid,
(
SELECT value
FROM unnest(all_tags)
WHERE KEY = "Address") AS address,
(
SELECT value
FROM unnest(all_tags)
WHERE KEY = "name") AS name,
(
SELECT value
FROM unnest(all_tags)
WHERE KEY = "opening_hours") AS opening_hours,
(
SELECT value
FROM unnest(all_tags)
WHERE KEY = "organic") AS organic,
(
SELECT geometry) AS geometry,
FROM bigquery-public-data.geo_openstreetmap.planet_features
WHERE (
'Edeka' IN
(
SELECT value
FROM unnest(all_tags))
OR 'Rewe' IN
(
SELECT value
FROM unnest(all_tags))
OR 'Netto' IN
(
SELECT value
FROM unnest(all_tags)))
AND (
'addr:country', 'DE') IN
(
SELECT (KEY, value)
FROM unnest(all_tags)) -
AND (
'addr:city', 'Hamburg') IN
(
SELECT (KEY, value)
FROM unnest(all_tags));

که خروجی را به ما می‌دهد:

شکل ۶. داده‌های مزاحم و بازیابی شده در ستون‌ها
شکل ۶. داده‌های مزاحم و بازیابی شده در ستون‌ها

در نهایت، شما می‌توانید داده‌ها را از طریق ابزارهای هوش تجاری مانند استودیو داده گوگل-به خصوص هنگام کار با BigQuery-تجسم کنید.

شکل ۷. استودیو داده گوگل برای تجسم تصاویر ژئو داده
شکل ۷. استودیو داده گوگل برای تجسم تصاویر ژئو داده

در مورد استفاده مرتبط، داده‌ها نیز بر روی نقشه ارائه شدند تا ایده‌ای در مورد نحوه توزیع فروشگاه‌ها به دست آید. در داشبورد، یک جدول اساسی نیز دیدگاه‌های نزدیکتری می‌دهد. برای تجزیه و تحلیل عمیق‌تر، داده‌ها نیز در سناریوهای تقسیم‌بندی مشتری آتی مورد استفاده قرار گرفتند.

نتیجه‌گیری

علاوه بر OpenStreetMap API و مجموعه داده‌های عمومی Googles، مجموعه داده‌های بیشتری وجود دارند که می‌توانید برای تحلیل‌های خود پیدا کرده و از آن‌ها استفاده کنید. در اینجا، من وب سایت جستجوی مجموعه داده گوگل را توصیه می‌کنم: https://www.google.com/publicdata/directory

سیستم‌های جدید مانند BigQuery قدرت محاسباتی بسیار بالا و نتایج سریع را از طریق پایگاه‌های داده مبتنی بر ستون ارائه می‌دهند. با مثال‌های بالا، شما باید بتوانید اکثر موارد استفاده از داده‌های تو در تو را به خوبی جستجو و پردازش کنید. با داده‌های رایگان و توان محاسباتی، می‌توانید بسیاری از موارد استفاده سودآور را اجرا کنید. به عنوان اولین گام، من توصیه می‌کنم که به سادگی با داده‌ها سر و کار داشته باشید. این کار را می‌توانید با لایه Google Cloud Free به راحتی انجام دهید.

منابع و گزارش‌های بیشتر

[ ۱ ] Google، OpenStreetMap Public Dataset

[ ۲] OpenStreetMap, https://www.openstreetmap.de/ (2021)

[ ۳ ] Google, Solve real business challenges on Google Cloud (2021)

این متن با استفاده از ربات ترجمه مقاله علم داده ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.