Task2 SWARM社交平台数据集的可视化

R数据图示创意扩展

Posted by Jiawen Wu on December 7, 2018

SWARM数据集简介

2014年5月,Foursquare 发布 Swarm 这一款独立的全新签到应用,预示着靠签到起家的 Foursquare 正在试图向 Facebook 一样将其臃肿的主应用根据分工不同而拆成数个独立的轻型应用,以满足移动时代的用户需求。SWARM 这种被称为是Neighborhood Sharing 的被动地理信息分享形式的精确度被控制到了 Foursquare 认为是恰到好处的程度,既不会让好友对你的具体所在了如指掌又提供了足够的信息让用户来计划一次偶发的聚会。

在这个案例中我们使用的数据集正是SWARM平台上线后某城市用户的签到信息数据。有兴趣的小伙伴可以点击进入数据下载页面(密码:xjmq)

这个数据集中的数据已经被分为了两个部分,一部分是当地人的profile信息及签到信息,另一部分是旅行者(也就是常驻城市标记不为目标城市的用户)的profile信息及签到信息。在本case中我们主要来看纽约市签到数据的情况,也就是数据集中的 nyc 文件夹下的文件。


用户profile 我们先来看一下 nyc_local_profile 这个文件中有什么样的信息。

## 'data.frame':    579 obs. of  6 variables:
	$ user_id       : int  7888379 139361183 30911792 ... 
	$ if_local      : int  1 1 1 1 1 1 1 1 1 1 ...
	$ gender        : Factor w/ 3 levels "female","male",..: 2 2 3 2 1 ...
	$ checkins_count: int  1683 313 448 1066 1772 470 4260 ...
	$ photos_count  : int  25 3 52 46 159 0 150 84 221 160 ...
	$ friends_count : int  89 2 92 120 4 278 25 122 110 138 ...

用户profile包含了用户的ID,是否是当地人的标记,性别,签到次数,po照次数,以及在平台上的好友数量。

签到数据 我们再来看一下 nyc_local_checkin 中包含了什么信息

## 'data.frame':    593557 obs. of  8 variables:
	$ user_id      : int  10008414 10008414 10008414  ...
	$ if_local     : int  1 1 1 1 1 1 1 1 1 1 ...
	$ venue_id     : Factor w/ 48397 levels "3fd66200f964a52000e71ee3",..: 1497 23103 1124 18070 36890 ...
	$ category_name: Factor w/ 629 levels "Accessories Stores",..: 302 94 427 205 ...
	$ category_id  : Factor w/ 628 levels "4bf58dd8d48988d100941735",..: 302 355 25 ...
	$ lat          : num  40.7 40.7 40.8 40.8 40.7 ...
	$ lng          : num  -74 -74 -74 -74 -74 ...
	$ created_time : Factor w/ 440245 levels "2012-12-31 19:03",..: 320668 318670 318657 ...

签到戳的数据文件中除了包含用户信息外主要包含的是签到点的信息,包括签到地点的种类,经纬度以及签到时间。

数据可视化

相关图:在同一张图上呈现尽可能多的信息

  • 纽约市当地人朋友数量,签到次数及po照次数的相关图
    • 相关矩阵气泡图 适用于变量很多的情况 在这里只作为demo
      corrplot(Op_corr, type = "full", order = "hclust", tl.col = "black", tl.srt = 45,tl.cex = .68,addCoef.col="black", number.cex = .58)
      

      相关矩阵气泡图

  • 包含了更多信息的相关图
    chart.Correlation(Op_nyc_locpro, histogram=TRUE, pch=19, text.col = 'b')
    

签到数量的变化

  • 纽约市当地人从2013年初到2017年5月日签到数的变化 使用library(dygraph)在R中进行交互数据可视化图的绘制,代码参考 dygraphs for R
date_fac <- date_count$date
date_count$date <- as.Date(date_fac)
don=xts(x = date_count$Freq , order.by = date_count$date)

dygraph(don) %>% 
	dyOptions(labelsUTC = TRUE,fillAlpha=.2, fillGraph=TRUE, drawGrid = FALSE,colors="#D8AE5A") %>%
	dyRangeSelector() %>%
	dyCrosshair(direction = "both") %>% # vertical + horizontal

dyHighlight(highlightCircleSize = 5, highlightSeriesBackgroundAlpha = 0.2, 	hideOnMouseOut = FALSE) %>%
	dyRoller(rollPeriod = 1)

# %>% 管道函数

效果示例

  • 纽约市当地人签到数量按月份统计
month <- substr(time[],6,7)
month_count <- as.data.frame(table(month))
month_name <- c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
my_bar <- barplot(month_count$Freq , border=F , names.arg=month_name, las=2 , col=c(rgb(0.3,0.1,0.4,0.6) , rgb(0.3,0.5,0.4,0.6) , rgb(0.3,0.9,0.4,0.6) , rgb(0.3,0.9,0.4,0.6)) , ylim = c(40000,60000),main= "NewYorkers' Check-in Plot" )

  • 纽约市当地人签到数量按星期统计
library(ggplot2)
date <- substr(time[],1,10)
date <- as.Date(date)
weekday <- weekdays(date)
weekday_count <- as.data.frame(table(weekday))
order(weekday_count[,2])
# sort by weekdays
weekday_count$weekday <- factor(weekday_count$weekday, levels= c("Sunday", "Monday","Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
weekday_count[order(weekday_count$weekday), ]

当地人与旅行者签到地点的分布图

points(nyc_locchk$lng, nyc_locchk$lat, col = transparent("#F2BE54",0.9), cex = .6, pch = 19)
points(nyc_trachk$lng, nyc_trachk$lat, col = transparent("#153E5C",0.9), cex = .6, pch = 19)
text(-74.2,40.66,'Staten Island',cex = 1)
text(-74.00,40.56,'Brooklyn',cex = 1)
text(-73.86,40.92,'The Bronx',cex = 1)
text(-74.08,40.76,'Manhattan',cex = 1)
text(-73.69,40.7,'Queens',cex = 1)

# title(line = -16,'Newyorker & Traveler Check-in Plot',cex = 1.5,outer = TRUE)
legend("bottomright",legend = c("Local","Traveler"),pch = 19,cex = 1, col = c("#F2BE54","#153E5C"),bty = "n")

图片显示了旅行者和当地人签到地点的分布,黄色代表当地居民的签到地点,墨绿色代表旅行者的签到地点。直观地来看,似乎当地居民的签到地点更分散,所覆盖的面积更大而旅行者的签到地点相对来说更加集中于主要的旅游热点,纽约的曼哈顿。这些点的区位分布为游客相关设施的建设提供了一些信息。比如,在游客比较稠密的地区可以增加公共卫生设施以及游客咨询中心等。


参考文件下载:

在之后的 Task2 SWARM平台数据可视化-Follow Up 里会再挖掘这个数据集中其它有趣的信息,欢迎大家关注。