이번에 활용한 데이터는 앞에서 사용했던 공유자전거 데이터입니다.
해당 데이터에는 각 바이크 운행기록에 대여 장소와 반납 장소에 대한 위도,경도 정보를 포함하고 있습니다.
앞서 각 station별 대여횟수와 반납횟수를 막대그래프로 시각화 했다면,
이번 포스팅에서는 지도 위에 빈도에 따라 크기를 달리하여 시각화하고 싶었습니다.
먼저 데이터를 불러옵니다.
bike<-read.csv("sharebike.csv")
str(bike)
library(ggmap)
library(devtools)
library(ggplot2)
이후 필요한 라이브러리를 불러오고 앞서 google API키를 등록합니다.
register_google(key = "각자의 구글 API 키를 넣어주세요")
이제 많은 데이터 중에서 필요한 컬럼만을 가져옵니다.
library(dplyr)
head(bike)
bike_start<-bike %>%
select(Trip.ID,
Trip.Route.Category,
Passholder.Type,
Starting.Station.ID,
Starting.Station.Latitude,
Starting.Station.Longitude)
bike_end<-bike %>%
select(Trip.ID,
Trip.Route.Category,
Passholder.Type,
Ending.Station.ID,
Ending.Station.Latitude,
Ending.Station.Longitude)
저는 데이터를 2개로 분할하여 저장했습니다.
Starting station ID와 위도 경도.
Ending station ID와 위도 경도를 따로 분할했습니다.
bike_start$lat<-bike_start$Starting.Station.Latitude
bike_start$lon<-bike_start$Starting.Station.Longitude
bike_end$lat<-bike_end$Ending.Station.Latitude
bike_end$lon<-bike_end$Ending.Station.Longitude
bike_start_sample<-head(bike_start,100)
bike_end_sample<-head(bike_end, 100)
컬럼의 이름이 너무 길다보니, 간단하게 줄여 새로운 컬럼을 생성했습니다.
이부분에서는 기존이름을 바꿔도 상관없습니다.
이 방식대로 하면 컬럼이 증가하다보니 데이터가 커지게 됩니다.
이후에 head를 사용해 데이터 1행부터 100행까지
총 100개에 대한 운행기록을 불러와 샘플로 저장했습니다.
str(bike)라는 명령어를 입력해보면 대략 12만 개의 행을 확인할 수 있습니다.
12만 개를 모두 쓰려고 했더니 제 랩탑에서는 감당이 안되어,
부득이하게 100개만 저장합니다.
또 이렇게 랜덤하지 않게 데이터를 추출하면
향후 이 데이터를 활용해 데이터분석을 진행할 경우
통계적인 오류가 발생할 가능성이 많지만, 이러한 형태로 진행된다고만 이해해주세요.
head(bike_start_sample)
la<-get_googlemap('Losangeles',zoom=14,maptype="roadmap")
la2<-ggmap(la)+geom_point(data=bike_start_sample,
aes(x=lon,
y=lat,
size=Starting.Station.ID),
alpha=0.3,
color="red")
la2
LA시내의 지도를 la라는 변수로 저장하고
거기에 geom_point라는 함수를 사용해 위도와 경도를 지정하고,
크기는 스테이션 ID로 지정합니다. 이러면 빈도에 따라 사이즈가 적용됩니다.
la2를 입력하게 되면 다음과 같은 지도를 확인할 수 있습니다.
같은 방식으로 반납이 이루어진 데이터를 진행해봅니다.
la3<-ggmap(la)+geom_point(data=bike_end_sample,
aes(x=Ending.Station.Longitude,
y=Ending.Station.Latitude,
size=Ending.Station.ID), alpha=0.3, color="blue")
la3
동일한 방식으로 입력을 하게 된다면 반납이 행해진 장소와 빈도에 따른 크기를 지도 위에서 확인할 수 있습니다.
다음 목표는 이런 시각화 지도를 인터렉티브 지도로 만들어 줌인, 줌아웃 등의 기능과 함께
마우스 포인트 이동에 따라 각 포인트의 디테일한 수치를 확인할 수 있게 만들어보려고합니다...
무한구글링할 예정
아 그리고 shiny 라이브러리를 활용해 웹에서도 시각화 정보를 확인할 수 있게 하려고 합니다.
shiny 어렵더라구요...
해당 포스팅에 질문 있으시면 댓글 남겨주세요 ^^
'R programming' 카테고리의 다른 글
Hypothesis Testing (0) | 2019.05.08 |
---|---|
[leaflet패키지] 지도에 인터렉티브한 정보 표시하기 (0) | 2019.04.29 |
R에서 ggmap 불러오기(Google API 등록과정) (6) | 2019.04.05 |
로지스틱 회귀분석-환자들 생존예측 (예제 따라하기) (0) | 2019.04.04 |
2016년도 진료내역을 통한 상위 질병 확인해보기(2) (0) | 2019.03.14 |