در این مطلب، چگونگی ساخت نقشه و به عبارت دیگر روش استفاده از کتابخانه‌های maps و mapdata و ggplot2 در زبان برنامه‌نویسی R آموزش داده شده است. پس از آن، چگونگی تحلیل ترافیک شهری با بهره‌گیری از Geolocation و محتوای موجود در «شبکه‌های اجتماعی» (Social Networks) مورد بررسی قرار گرفته است.

ساخت نقشه و ترسیم مختصات

در مثال بیان شده در این مطلب، هدف ساخت نقشه جهان است که شهرهای «پکن» (Beijing) و «شانگهای» (Shanghai) که هر دو نیز در چین قرار دارند، در آن با نقاطی مشخص شده باشند. بدین منظور، نقشه نیم‌کره شمالی از اروپا تا آسیا نشان داده خواهد شد.

require(maps)
require(mapdata)
library(ggplot2)
library(ggrepel)

cities = c("Beijing","Shanghai")

global <- map_data("world")
ggplot() + geom_polygon(data = global, aes(x=long, y = lat, group = group)) + 
  coord_fixed(1.3)

ggplot() + 
  geom_polygon(data = global, aes(x=long, y = lat, group = group), fill = NA, color = "red") + 
  coord_fixed(1.3)

gg1 <- ggplot() + 
  geom_polygon(data = global, aes(x=long, y = lat, group = group), fill = "green", color = "blue") + 
  coord_fixed(1.3)
gg1

coors <- data.frame(
  long = c(122.064873,121.4580600),
  lat = c(36.951968,31.2222200),
  stringsAsFactors = FALSE
)  

#xlim and ylim can be manipulated to zoom in or out of the map
coors$cities <- cities
gg1 + 
  geom_point(data=coors, aes(long, lat), colour="red", size=1) + 
  ggtitle("World Map") +
  geom_text_repel(data=coors, aes(long, lat, label=cities)) + xlim(0,150) + ylim(0,100)

نقشه حاصل از اجرای کد مذکور به صورت زیر است.

ترسیم نقشه در زبان R

برخی از نکاتی که باید به آن‌ها توجه کرد عبارتند از:

  • متغیر cities به منظور تعیین برچسب‌ها برای شهرها مورد استفاده قرار می‌گیرد.
  • دیتافریم coors برای تعیین طول و عرض جغرافیایی هر شهر مورد استفاده قرار می‌گیرد.
  • xlim و ylim در ggplot برای بزرگ‌نمایی و کوچک‌نمایی نقشه، بسته به مختصات تعیین شده مورد استفاده قرار می‌گیرند.

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

بزرگنمایی در ناحیه مشخص

cities = c("Paris","Berlin")
coors <- data.frame(
  lat = c(48.864716,52.520008),
  long = c(2.349014,13.404954),
  stringsAsFactors = FALSE
)
#xlim and ylim can be manipulated to zoom in or out of the map
coors$cities <- cities
gg1 + 
  geom_point(data=coors, aes(long, lat), colour="red", size=1) + 
  ggtitle("World Map") +
  geom_text_repel(data=coors, aes(long, lat, label=cities)) + xlim(-10,40) + ylim(35,60)

ترسیم نقشه در زبان برنامه‌نویسی R

چنانکه بیان شد، xlim و ylim برای یک حاشیه باریک تنظیم شده‌اند. در اینجا، xlim روی (۴۰ و ۱۰-) و ylim روی (۶۰ و ۳۵) تنظیم شده است. اگرچه، در نقشه پیشین xlim روی (۱۵۰ و 0) و ylim روی (۱۰۰ و ۰) تنظیم شده بود. از آنجا که این متد از پایگاه داده نقشه جهان استفاده می‌کند، ممکن است کشورهایی که ناحیه مورد نظر کاربر را احاطه کرده‌اند نیز بتوان یافت (در این مثال، فرانسه و آلمان) که تفکیک شده نیز هستند. انجام این کار در صورتی که کاربر صرفا قصد داشته باشد یک کشور خاص را نشان دهد امری پیچیده و دشوار نیست، اما امکان نمایش یک کشور به صورت ایزوله نیز وجود دارد. برای مثال با تعیین (“map_data(“usa به جای (“map_data(“world می‌توان یک کشور را به صورت ایزوله نمایش داد.

محاسبه فاصله

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

  • پاریس: 2.3522 و 48.8566
  • برلین: 13.4050 و 52.5200
p=0.017453292519943295
a = 0.5 - cos((coors$lat[2] - coors$lat[1]) * p)/2 + cos(coors$lat[1] * p) * cos(coors$lat[2] * p) * (1 - cos((coors$long[2] - coors$long[1]) * p)) / 2
distance <-12742*sin(sqrt(a))
distance #Distance in kilometers

در اینجا مختصات طول و عرض جغرافیایی دریافت و فاصله بین دو نقطه (پاریس و برلین) محاسبه می‌شود.

> distance #Distance in kilometers
[1] 876.0783

خروجی محاسبه حاکی از آن است که فاصله بین پاریس تا برلین برابر با ۸۷۶ کیلومتر است.

مثال کاربردی: نظارت بر ترافیک با رسانه‌های اجتماعی

پرسشی که در این وهله مطرح می‌شود این است که چه کاربردهایی برای ترسیم نقشه با استفاده از زبان برنامه‌نویسی R وجود دارد. فرض می‌شود که کاربر قصد دارد از داده‌های geolocation موجود در رسانه‌های اجتماعی استفاده کند. برای درک بهتر موضوع یک مثال بیان می‌شود. کاربر قصد دارد از داده‌های «توییتر» (Twitter) برای تحلیل الگوی ترافیک در بریتانیا استفاده کند. به همین منظور، در توییتر، ۱۰۰۰۰ توییت حاوی کلیدواژه UK traffic را جست‌و‌جو می‌کند. پس از انجام این کار، نقشه موقعیت جغرافیایی آن‌ها ترسیم می‌شود. به عبارت دیگر، بر اساس طول و عرض جغرافیایی موجود در توییت‌هایی که داده‌های geolocation برای آن‌ها فعال است، نقشه موقعیت جغرافیایی ترسیم می‌شوند.

require(maps)
require(mapdata)
library(ggplot2)
library(ggrepel)
library(devtools)
library(twitteR)
library(plyr)
library(dplyr)

# Twitter
setup_twitter_oauth(consumerkey, consumersecret, accessToken, accessSecret)

tweets<-searchTwitter("uk traffic", n=10000, since='2018-10-25')
df <- twListToDF(tweets)
attach(df)

# Maps

global <- map_data("world")
ggplot() + geom_polygon(data = global, aes(x=long, y = lat, group = group)) + 
  coord_fixed(1.3)

ggplot() + 
  geom_polygon(data = global, aes(x=long, y = lat, group = group), fill = NA, color = "red") + 
  coord_fixed(1.3)

gg1 <- ggplot() + 
  geom_polygon(data = global, aes(x=long, y = lat, group = group), fill = "green", color = "blue") + 
  coord_fixed(1.3) + xlim(-15,10) + ylim(40,60)
gg1

tweetlocations<-data.frame(df$longitude,df$latitude)
tweetlocations<-na.omit(tweetlocations)
attach(tweetlocations)
longitude<-as.numeric(as.character(tweetlocations$df.longitude))
latitude<-as.numeric(as.character(tweetlocations$df.latitude))

#xlim and ylim can be manipulated to zoom in or out of the map
gg1 +
  geom_point(data = tweetlocations, aes(x = longitude, y = latitude),
             colour = 'red', alpha = .5)

اکنون و با رسم نمودارها، می‌توان مختصات‌هایی که توییت مربوط به «UK traffic» طی ماه گذشته است برای آن‌ها منتشر شده را مشاهده کرد (این کد در ۲۹ نوامبر ۲۰۱۸ اجرا شده است).

تحلیل ترافیک شهری با استفاده از شبکه‌های اجتماعی

شایان توجه است که موقعیت بسیاری از توییت‌ها در نزدیکی بزرگ‌راه M1 و M40 است که به عنوان دو تا از شلوغ‌ترین بزرگ‌راه‌های بریتانیا شناخته شده‌اند. در این مطلب مشاهده شد که چگونه می‌توان با استفاده هم‌زمان از رسانه‌های اجتماعی و ترسیم نقشه، مناطق دارای ترافیک بالا را شناسایی کرد.

اگر مطلب بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شود:

^^

اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

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

بر اساس رای 2 نفر

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *