تحلیل ترافیک شهری با استفاده از شبکههای اجتماعی و R — راهنمای کاربردی
در این مطلب، چگونگی ساخت نقشه و به عبارت دیگر روش استفاده از کتابخانههای maps و mapdata و ggplot2 در زبان برنامهنویسی R آموزش داده شده است. پس از آن، چگونگی تحلیل ترافیک شهری با بهرهگیری از Geolocation و محتوای موجود در «شبکههای اجتماعی» (Social Networks) مورد بررسی قرار گرفته است.
ساخت نقشه و ترسیم مختصات
در مثال بیان شده در این مطلب، هدف ساخت نقشه جهان است که شهرهای «پکن» (Beijing) و «شانگهای» (Shanghai) که هر دو نیز در چین قرار دارند، در آن با نقاطی مشخص شده باشند.
بدین منظور، نقشه نیمکره شمالی از اروپا تا آسیا نشان داده خواهد شد.
1require(maps)
2require(mapdata)
3library(ggplot2)
4library(ggrepel)
5
6cities = c("Beijing","Shanghai")
7
8global <- map_data("world")
9ggplot() + geom_polygon(data = global, aes(x=long, y = lat, group = group)) +
10 coord_fixed(1.3)
11
12ggplot() +
13 geom_polygon(data = global, aes(x=long, y = lat, group = group), fill = NA, color = "red") +
14 coord_fixed(1.3)
15
16gg1 <- ggplot() +
17 geom_polygon(data = global, aes(x=long, y = lat, group = group), fill = "green", color = "blue") +
18 coord_fixed(1.3)
19gg1
20
21coors <- data.frame(
22 long = c(122.064873,121.4580600),
23 lat = c(36.951968,31.2222200),
24 stringsAsFactors = FALSE
25)
26
27#xlim and ylim can be manipulated to zoom in or out of the map
28coors$cities <- cities
29gg1 +
30 geom_point(data=coors, aes(long, lat), colour="red", size=1) +
31 ggtitle("World Map") +
32 geom_text_repel(data=coors, aes(long, lat, label=cities)) + xlim(0,150) + ylim(0,100)
نقشه حاصل از اجرای کد مذکور به صورت زیر است.
برخی از نکاتی که باید به آنها توجه کرد عبارتند از:
- متغیر cities به منظور تعیین برچسبها برای شهرها مورد استفاده قرار میگیرد.
- دیتافریم coors برای تعیین طول و عرض جغرافیایی هر شهر مورد استفاده قرار میگیرد.
- xlim و ylim در ggplot برای بزرگنمایی و کوچکنمایی نقشه، بسته به مختصات تعیین شده مورد استفاده قرار میگیرند.
توجه به این موضوع لازم است که از کتابخانه ggrepel به منظور نوشتن برچسب هر نقطه برای هر شهر در آن مورد استفاده قرار میگیرد. این امکان وجود دارد که برچسبها با یکدیگر همپوشانی داشته باشند و این موضوع اغلب به لحاظ بصری جذاب نیست.
بزرگنمایی در ناحیه مشخص
1cities = c("Paris","Berlin")
1coors <- data.frame(
2 lat = c(48.864716,52.520008),
3 long = c(2.349014,13.404954),
4 stringsAsFactors = FALSE
5)
1#xlim and ylim can be manipulated to zoom in or out of the map
2coors$cities <- cities
3gg1 +
4 geom_point(data=coors, aes(long, lat), colour="red", size=1) +
5 ggtitle("World Map") +
6 geom_text_repel(data=coors, aes(long, lat, label=cities)) + xlim(-10,40) + ylim(35,60)
چنانکه بیان شد، xlim و ylim برای یک حاشیه باریک تنظیم شدهاند. در اینجا، xlim روی (۴۰ و ۱۰-) و ylim روی (۶۰ و ۳۵) تنظیم شده است. اگرچه، در نقشه پیشین xlim روی (۱۵۰ و 0) و ylim روی (۱۰۰ و ۰) تنظیم شده بود. از آنجا که این متد از پایگاه داده نقشه جهان استفاده میکند، ممکن است کشورهایی که ناحیه مورد نظر کاربر را احاطه کردهاند نیز بتوان یافت (در این مثال، فرانسه و آلمان) که تفکیک شده نیز هستند.
انجام این کار در صورتی که کاربر صرفا قصد داشته باشد یک کشور خاص را نشان دهد امری پیچیده و دشوار نیست، اما امکان نمایش یک کشور به صورت ایزوله نیز وجود دارد. برای مثال با تعیین ("map_data("usa به جای ("map_data("world میتوان یک کشور را به صورت ایزوله نمایش داد.
محاسبه فاصله
اکنون، فرض میشود که هدف محاسبه فاصله بین دو نقطه است.
برای مثال، کاربر میداند که طول و عرض جغرافیایی فرانسه و آلمان به صورت زیر است.
- پاریس: 2.3522 و 48.8566
- برلین: 13.4050 و 52.5200
1p=0.017453292519943295
2a = 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
3distance <-12742*sin(sqrt(a))
4distance #Distance in kilometers
در اینجا مختصات طول و عرض جغرافیایی دریافت و فاصله بین دو نقطه (پاریس و برلین) محاسبه میشود.
1> distance #Distance in kilometers
2[1] 876.0783
خروجی محاسبه حاکی از آن است که فاصله بین پاریس تا برلین برابر با ۸۷۶ کیلومتر است.
مثال کاربردی: نظارت بر ترافیک با رسانههای اجتماعی
پرسشی که در این وهله مطرح میشود این است که چه کاربردهایی برای ترسیم نقشه با استفاده از زبان برنامهنویسی R وجود دارد. فرض میشود که کاربر قصد دارد از دادههای geolocation موجود در رسانههای اجتماعی استفاده کند. برای درک بهتر موضوع یک مثال بیان میشود.
کاربر قصد دارد از دادههای «توییتر» (Twitter) برای تحلیل الگوی ترافیک در بریتانیا استفاده کند. به همین منظور، در توییتر، ۱۰۰۰۰ توییت حاوی کلیدواژه UK traffic را جستوجو میکند. پس از انجام این کار، نقشه موقعیت جغرافیایی آنها ترسیم میشود. به عبارت دیگر، بر اساس طول و عرض جغرافیایی موجود در توییتهایی که دادههای geolocation برای آنها فعال است، نقشه موقعیت جغرافیایی ترسیم میشوند.
1require(maps)
2require(mapdata)
3library(ggplot2)
4library(ggrepel)
5library(devtools)
6library(twitteR)
7library(plyr)
8library(dplyr)
9
10# Twitter
11setup_twitter_oauth(consumerkey, consumersecret, accessToken, accessSecret)
12
13tweets<-searchTwitter("uk traffic", n=10000, since='2018-10-25')
14df <- twListToDF(tweets)
15attach(df)
16
17# Maps
18
19global <- map_data("world")
20ggplot() + geom_polygon(data = global, aes(x=long, y = lat, group = group)) +
21 coord_fixed(1.3)
22
23ggplot() +
24 geom_polygon(data = global, aes(x=long, y = lat, group = group), fill = NA, color = "red") +
25 coord_fixed(1.3)
26
27gg1 <- ggplot() +
28 geom_polygon(data = global, aes(x=long, y = lat, group = group), fill = "green", color = "blue") +
29 coord_fixed(1.3) + xlim(-15,10) + ylim(40,60)
30gg1
31
32tweetlocations<-data.frame(df$longitude,df$latitude)
33tweetlocations<-na.omit(tweetlocations)
34attach(tweetlocations)
35longitude<-as.numeric(as.character(tweetlocations$df.longitude))
36latitude<-as.numeric(as.character(tweetlocations$df.latitude))
37
38#xlim and ylim can be manipulated to zoom in or out of the map
39gg1 +
40 geom_point(data = tweetlocations, aes(x = longitude, y = latitude),
41 colour = 'red', alpha = .5)
اکنون و با رسم نمودارها، میتوان مختصاتهایی که توییت مربوط به «UK traffic» طی ماه گذشته است برای آنها منتشر شده را مشاهده کرد (این کد در ۲۹ نوامبر ۲۰۱۸ اجرا شده است).
شایان توجه است که موقعیت بسیاری از توییتها در نزدیکی بزرگراه M1 و M40 است که به عنوان دو تا از شلوغترین بزرگراههای بریتانیا شناخته شدهاند.
در این مطلب مشاهده شد که چگونه میتوان با استفاده همزمان از رسانههای اجتماعی و ترسیم نقشه، مناطق دارای ترافیک بالا را شناسایی کرد.
اگر مطلب بالا برای شما مفید بوده، آموزشهای زیر نیز به شما پیشنهاد میشود:
- مجموعه آموزشهای برنامهنویسی پایتون
- آموزش برنامهنویسی R و نرمافزار R Studio
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- مجموعه آموزشهای یادگیری ماشین و بازشناسی الگو
- مجموعه آموزشهای هوش محاسباتی
- مجموعه آموزشهای شبکههای عصبی مصنوعی
- ترسیم دادههای جغرافیایی در پایتون — راهنمای جامع
- تبدیل دادههای بدون ساختار به ساختیافته با پایتون و API نقشه گوگل — راهنمای کامل
^^