Chapter 10 leaflet
데이터는 저번시간에 사용한 자료를 이용하겠습니다.
json 파일로 되어 있으므로 이를 받아서 읽고 visualizaton을 해보도록 하겠습니다. 필요한 package를 다운로드 받아 보겠습니다.
if(!require(jsonlite)) install.packages('jsonlite')
if(!require(ggmap)) install.packages('ggmap')
if(!require(ggplot2)) install.packages('ggplot2')
library(jsonlite)
library(ggmap)
library(ggplot2)
library(tidyverse)
다운로드 경로가 아래와 같이 되었네요. 여기서 location
을 가져와서 위도와 경도를 설정하고 그 위치에 맞게 점을 표시하려고 합니다.
#map_data = fromJSON("data/Takeout/Location History/Location History.json")
위도와 경도를 생성해 주는 data step을 진행하고, 50000건의 정보만 남기겠습니다.
#map_data$locations
= map_data$locations
locations = locations %>%
loc_dat1 mutate(lat = latitudeE7/1e7,
lng = longitudeE7/1e7) %>%
mutate(year = str_sub(timestampMs, 1, 2),
month= str_sub(timestampMs, 3, 4))
= loc_dat1 %>%
loc_dat_sample slice(1:50000)
10.1 leaflet
leaflet 지도 자료를 사용하겠습니다. 무료이고 시각화를 위해서는 충분한 자료입니다. 한국 데이터에 위에서 만들었던 위도와 경도를 사용하겠습니다.
library(leaflet)
= c("korea")
popu = loc_dat_sample$lng
lng = loc_dat_sample$lat lat
한국 지도 불러오기
연구실 근처를 불러오겠습니다.
leaflet() %>%
setView(lng = 126.91,
lat = 37.56,
zoom = 13) %>%
addTiles()
leaflet(loc_dat_sample) %>%
setView(lng = 126.91,
lat = 37.56,
zoom = 13) %>%
addTiles() %>%
#addMarkers(lng = lng, lat = lat)
addCircleMarkers(lng = lng, lat = lat,
radius = 2,
color = "red",
stroke = FALSE,
fillOpacity = 0.5)
10.2 위치와 시간표시
google drive_auth
이후 과정입니다. 상기 부분이 않되는 경우는 앞 쳅터를 공부하고 오시기 바랍니다.
if(!require('googledrive')) install.packages('googledrive')
library(googledrive)
drive_auth()
<- drive_ls(path = '/Takeout/',
ls pattern = "*.*")
ls$name[1]
ls$id[1]
ls
<- tempfile(fileext =".zip")
temp <- drive_download(as_id(ls$id[1]),
data1 path = temp,
overwrite = TRUE)
<- unzip(temp, exdir =paste0(getwd(), "/data")) out
# library ---------------
if(!require(jsonlite)) install.packages('jsonlite')
if(!require(ggmap)) install.packages('ggmap')
if(!require(ggplot2)) install.packages('ggplot2')
if(!require(tidyverse)) install.packages('tidyverse')
if(!require(leaflet)) install.packages('leaflet')
library(jsonlite)
library(ggmap)
library(ggplot2)
library(tidyverse)
library(leaflet)
= fromJSON("data/Takeout/Location History/Semantic Location History/2021/2021_APRIL.json")
map_data
# lon, lat, activity, time
# activity and its' time
= cbind(map_data$timelineObjects$activitySegment$activityType,
dat $timelineObjects$activitySegment$duration)
map_data# location time
= map_data$timelineObjects$placeVisit$duration$startTimestampMs
LoStTime = map_data$timelineObjects$placeVisit$duration$endTimestampMs
LoEnTime # time stamp function (google epoch to R time)
= function(x){
ft as.POSIXct(as.numeric(x)/1000, origin = "1970-01-01")
}# data step
= dat %>% tibble() %>%
dat1 mutate(StTime = ft(startTimestampMs),
EnTime = ft(endTimestampMs)) %>%
select(-startTimestampMs, -endTimestampMs) %>%
mutate(
lat = map_data$timelineObjects$placeVisit$location$latitudeE7/1e7,
lng = map_data$timelineObjects$placeVisit$location$longitudeE7/1e7,
place = map_data$timelineObjects$placeVisit$location$name
%>%
) mutate(LoStTime = ft(LoStTime),
LoEnTime = ft(LoEnTime))
leaflet() %>%
setView(lng = 126.91,
lat = 37.56,
zoom = 13) %>%
addTiles() %>%
addCircleMarkers(lng = dat1$lng,
lat = dat1$lat,
radius = 10,
color ="red",
stroke = FALSE,
fillOpacity = 0.5)
## Warning in validateCoords(lng, lat, funcName): Data contains 140 rows with
## either missing or invalid lat/lon values and will be ignored
leaflet() %>%
setView(lng = 126.91,
lat = 37.56,
zoom = 13) %>%
addTiles() %>%
addMarkers(lng = dat1$lng,
lat = dat1$lat,
clusterOptions = markerClusterOptions(),
popup = paste(dat1$place,"<br>" ,dat1$LoStTime)
)
## Warning in validateCoords(lng, lat, funcName): Data contains 140 rows with
## either missing or invalid lat/lon values and will be ignored