تجزیه و تحلیل زمان سفر با Uber Movement (QGIS3)
هشدار
داده های حرکت Uber متوقف شده است [ مشاهده اطلاعیه ]. همچنان می توانید آموزش را با استفاده از داده های آرشیو ارائه شده در آموزش دنبال کنید و تکنیک تحلیل زمان سفر با استفاده از QGIS را یاد بگیرید.
Uber Movement دادههای زمان سفر ناشناس و جمعآوری شده را برای بسیاری از شهرهای جهان به اشتراک میگذارد. محصول Travel Times Uber Movement یک مجموعه داده عمومی است که سفر منطقه به منطقه را در یک شهر اندازه گیری می کند. این زمانها بر اساس سواریهای واقعی Uber هستند و نشاندهنده دقیق ازدحام و الگوهای ترافیک در شهر هستند. این یک مجموعه داده بزرگ و قابل دسترسی است که از میلیونها تاکسی واقعی جمعآوری شده است. این آموزش تکنیک هایی را برای کار با استفاده از چنین مجموعه داده های ترافیکی انبوه برای انجام تجزیه و تحلیل زمان سفر در QGIS نشان می دهد.
نمای کلی کار
ما از یک مجموعه داده ترافیک جمعآوری شده برای شهر بنگلور، هند استفاده میکنیم تا زمان سفر به یک مکان انتخابی در شهر را پیدا کنیم. ما همچنین یک نقشه Isochrone برای آستانه سفر ۳۰ دقیقه ایجاد خواهیم کرد.
خواهید گرفت
- یک فایل GeoJSON را در QGIS بارگیری کنید
دریافت داده ها
ما مجموعه داده Travel Times را برای شهر بنگلور هند دانلود خواهیم کرد.
- به وب سایت Uber Movement بروید و روی Cities کلیک کنید .
- جستجو برای
Banglore
.
- روی دانلود داده کلیک کنید .
- در پنجره بازشو، به GEO BOUNDARIES بروید . این شامل فایل GeoJSON بخش Banglore خواهد بود. اطلاعات مجوز را بپذیرید و برای دانلود کلیک کنید.
Download data
BANGLORE_WARDS.JSON
- سپس به سوئیچ کنید . این داده ها از سال ۲۰۱۶ تا ۲۰۲۰ در دسترس است و هر سال به ۴ فصل تقسیم می شود. ما داده ها را برای دانلود می کنیم . آن را انتخاب کرده و روی آن کلیک کنید . این فایل حاوی تمام اطلاعات ناشناس درباره سفر هفتگی uber در بنگلور از ژوئیه تا سپتامبر ۲۰۱۹ است.
ALL DATA
2019 Quarter ۳
Travel Times by Hour of Day (Weekdays Only)
برای راحتی شما می توانید داده ها را از لینک های زیر دانلود کنید.
bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate.csv
منبع داده: [UBER]
bangalore_wards.json
فایل را در پنل مرورگر پیدا کنید و آن را روی بوم بکشید. در مرحله بعد، یک لایه بیس مپ از OpenStreetMap بارگذاری می کنیم. ما از پلاگین QuickMapServices برای دسترسی به نقشه پایه استفاده خواهیم کرد. پس از نصب، به بروید . یک لایه کاشی بیس مپ از OpenStreetMap به پروژه اضافه خواهد شد. سپس روی دکمه Open Data Source Manager کلیک کنید .
- به تب متن جدا شده بروید . فایل را مرور کنید
bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate.csv
و آن را انتخاب کنید. از آنجایی که این فایل CSV فقط داده های جدولی است، گزینه No geometry (Atribute only table) را انتخاب کرده و روی Add کلیک کنید .
- لایه به پنل لایه ها
bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate
اضافه می شود . این لایه حاوی داده های مکان سفر ناشناس و جمع آوری شده بین مناطق مختلف شهر است. هر ردیف از جدول شامل ستونهایی برای منطقه مبدا ( sourceid )، منطقه مقصد ( dstid )، ساعت روز ( hod ) و میانگین زمان سفر جمعآوری شده از تمام سفرهای بین این منطقه در آن ساعت ( mean_travel_time ) است. میتوانید درباره این مجموعه داده در Movement: Travel Times Calculation Methodology (pdf) اطلاعات بیشتری کسب کنید . قبل از حرکت به جلو، بیایید بررسی کنیم که چه تعداد رکورد داده در لایه وجود دارد. روی لایه کلیک راست کرده و Show Feature Count را انتخاب کنید . کل ردیف های جدول در کنار آن نمایش داده می شود. این یک جدول نسبتا بزرگ است اما ما برای تجزیه و تحلیل خود به تمام ردیف های داده نیاز نداریم. اکنون مکان مورد نظر خود را شناسایی کرده و این جدول را به رکوردهای داده برای آن فیلتر می کنیم.bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate
- ما می خواهیم تمام مناطقی را که در عرض ۳۰ دقیقه از یک مکان خاص قابل دسترسی هستند محاسبه کنیم. با استفاده از نقشه پایه استاندارد OSM ، می توانید مکان مورد نظر را پیدا کنید. سپس
bangalore_wards
لایه را انتخاب کنید، از ابزار Identify استفاده کنید و روی آن کلیک کنید. نتایج ویژگی های منطقه حاوی مکان را نشان می دهد. برای هدف این آموزش، فرض کنید مکان هدف ما در منطقه JP Nagar با MOVEMENT_ID ۱۹۳ است .
- ما میتوانیم رکوردهای زمان سفر را فقط برای کسانی که این منطقه را مقصد دارند فیلتر کنیم. همچنین میتوانیم تحلیل خود را به ساعت اوج رفتوآمد صبح از ۹ صبح تا ۱۰ صبح محدود کنیم. روی لایه کلیک راست کرده
bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate
و Filter را انتخاب کنید .
- عبارت فیلتر زیر را وارد کرده و روی OK کلیک کنید .
"dstid" = 193 AND "hod" = 9
- در پنجره اصلی QGIS، خواهید دید که تعداد رکوردهای جدول فیلتر شده اکنون به ۱۹۷ کاهش یافته است . از آنجایی که در کل ۱۹۸ منطقه در شهر وجود دارد، ما رکورد زمان سفر بین ۱ بخش مقصد و ۱۹۷ منطقه مبدا را داریم. جدول ویژگی هر دو لایه را با استفاده از دکمه Open Attribute Table در نوار ابزار Attributes باز کنید .
- اکنون اشکال بخش را در لایه
bangalore_wards
و اطلاعات جدولی در لایه داریمbangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate
. ما می توانیم اطلاعات ویژگی را با استفاده از یک ویژگی مشترک به اشکال بپیوندیم. در اینجاMOVEMENT_ID
ستون ازbangalore_wards
لایه وsourceid
ستون ازbangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate
شناسه بخش منحصر به فرد هستند که می توانند به یکدیگر متصل شوند. این عملیات یک Table Join نامیده می شود .
- قبل از اینکه بتوانیم این دو لایه را به هم بپیوندیم، باید اطمینان حاصل کنیم که مقادیر در هر دو ستون دقیقاً مطابقت دارند. تصور می شود که آنها یکسان به نظر می رسند، آنها انواع مختلفی دارند. از آنجایی که فرمت GeoJSON راهی برای تعیین انواع ویژگی ندارد، همه مقادیر از نوع String – یعنی Text فرض میشوند. اما وقتی یک CSV را به QGIS وارد می کنیم، به طور پیش فرض QGIS سعی می کند انواع ستون ها را بر اساس مقادیر تعیین کند و نوع فیلد مناسب را اختصاص دهد. برای فایل CSV، نوع داده برای ستون به عنوان عدد صحیح
sourceid
اختصاص داده شد . بنابراین باید ستون را از GeoJSON به نوع Integer نیز تبدیل کنیم. به بروید . برای راه اندازی آن دوبار کلیک کنید.
bangalore_wards
به عنوان لایه ورودی انتخاب کنید . نام فیلد را به عنوان نامگذاری کنیدjoinfield
و نوع فیلد نتیجه را به عنوان انتخاب کنیدInteger
.MOVEMENT_ID
به عنوان عبارت وارد کنید . روی دکمه … در کنار Calculated کلیک کنید و Save to File را انتخاب کنید… سپس نام فایل خروجی را به صورت وارد کنیدbangalore_wards_fixed.gpkg
. روی Run کلیک کنید . ماشین حساب فیلد را ببندید.
- یک لایه جدید به پنل لایه ها
bangalore_wards_fixed
اضافه می شود . اکنون ما آماده انجام اتصال هستیم. به بروید . برای راه اندازی آن دوبار کلیک کنید.
bangalore_wards_fixed
به عنوان لایه ورودی وjoinfield
به عنوان فیلد Table انتخاب کنید .bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate
به عنوان لایه ورودی ۲ وsourceid
فیلد Table 2 را انتخاب کنید . لایه Joined را به عنوان نامگذاری کنیدuber_travel_times.gpkg
و روی Run کلیک کنید .
- یک لایه جدید به پنل لایه ها
uber_travel_times
اضافه می شود . بیایید آن را برای تجسم نتیجه پیوستن استایل کنیم. روی Open the Layer Styling Panel کلیک کنید . رندر و به عنوان مقدار را انتخاب کنید . یک رمپ رنگی را انتخاب کنید و روی طبقه بندی کلیک کنید . نقشه را مشاهده خواهید کرد که افزایش زمان سفر را بیشتر از مقصد نشان می دهد.Graduated
mean_travel_time
- اما ما به دنبال تجزیه و تحلیل و استخراج مناطقی هستیم که در ۳۰ دقیقه از زمان سفر هستند، بنابراین باید کمی پردازش بیشتری انجام دهیم. استایل را به رندر Single symbol برگردانید . روی لایه کلیک راست کرده
uber_travel_times
و Filter را انتخاب کنید .
- عبارت زیر را وارد کنید تا همه مناطق را در ۱۸۰۰ ثانیه (۳۰ دقیقه) از میانگین زمان سفر انتخاب کنید. ما همچنین باید منطقه مقصد خود را که ۰ زمان سفر خواهد داشت را نیز لحاظ کنیم.
"mean_travel_time" <= 1800 OR "MOVEMENT_ID" = 193
- این لایه اکنون خوشه چند ضلعی را نشان می دهد که ناحیه مورد نظر را تشکیل می دهد. اکنون همه آنها را در یک چند ضلعی ادغام می کنیم. به . برای راه اندازی آن دوبار کلیک کنید.
uber_travel_times
به عنوان لایه ورودی انتخاب کنید . لایه Dissolved را به صورت نامگذاری کنید۳۰min_isochrone.gpkg
. روی Run کلیک کنید .
- یک لایه جدید به پنل لایه ها
۳۰min_isochrone
اضافه می شود که نتیجه تجزیه و تحلیل ما را نشان می دهد.
اگر می خواهید بازخورد بدهید یا تجربه خود را در مورد این آموزش به اشتراک بگذارید، لطفاً در زیر نظر دهید. (به حساب GitHub نیاز دارد)