저번 포스팅에 이어서 데이터 시각화를 이어서 진행하겠습니다.
저번 데이터분석에서 signup_app이 주로 Web일 때 예약할 가능성이 높음을 확인할 수 있었습니다.
그럼 이번엔 signup_app과 첫 예약한 장소 Destination이 어떠한 관계를 가지고 있는지 확인해보도록 하겠습니다.
코드 먼저 보겠습니다.
#destination_country table stats by signup app
t = table(airbnb$signup_app, airbnb$country_destination)
print(signif(t / rowSums(t) * 100, digits=2))
확률(%)로 보기 위해 t/rowSum(t)*100 과 같은 작업을 추가한 것입니다.
결과는 아래와 같습니다.
한눈에 보기 쉽게 그래프로 한번 그려보겠습니다.
d = as.data.frame(t / rowSums(t))
names(d) = c("signup_app", "destination_country", "Freq")
d %>%
ggplot(aes(signup_app, Freq, fill=destination_country)) + geom_bar(stat="identity")
역시 그래프가 더 눈에 잘 들어오는 것 같습니다!
보시면 알겠지만 Web이 아닌 Mobile과 같은 app을 사용했을 때 예약을 안한 경우(NDF)가 더 많음을 알 수 있습니다.
대부분의 나라에서 모바일을 사용한 것 보다 Web을 이용해 첫예약을 한 경우가 2배 가까지 많습니다.
그럼 이제 날짜별로 어느 나라에 방문자가 많은지 알아보겠습니다.
데이터가공 포스팅에서 계정을 만든 날짜 , 첫 예약을 한 날짜를 기준으로 년,월,주,일에 관한 변수를 새로 생성했습니다.
보통 날짜와 여행을 어떻게 연결시킬 수 있을까요??
대부분 여름 혹은 겨울 휴가 시즌, 연말 시즌 등에 많이 가는 나라, 도시 or 인기있는 나라, 도시가 있을 것이라고 추측할 수 있습니다.
그럼 년도별, 주단위로 보다는 월별로 어느 나라에 예약이 많이 되었는지 보면 좋을거 같네요!
date_account_created을 이용해 생성한 month를 이용하여 Destination과 상관관계를 확인해보겠습니다.
코드는 아래와 같습니다.
#View count of each country_destination by data_account_created.month
fig.dac_mon <- ggplot(airbnb, aes(date_account_created.month, fill=country_destination))
fig.dac_mon <- fig.dac_mon + geom_bar(position="identity", alpha=1.0)
fig.dac_mon <- fig.dac_mon + scale_y_log10()
fig.dac_mon + facet_wrap(~country_destination)
우선 fig.dac_mon 변수에 destination에 따라 계정생성 month를 저장합니다.
그리고 geom_bar을 이용하여 막대그래프로 표현하는데 alpha를 1.0로 설정하여 색을 진하게 표현했습니다.
그리고 log를 사용하여 한눈에 보기 쉽게 scale을 수정했습니다.
결과를 확인해보겠습니다.
그래프가 꽤 이쁘게 나왔네요!
나라마다 조금 차이가 있지만 대체적으로 5,6월에 가입한 고객이 많이 예약을 한 것 같습니다.
6월 이후에는 전체적으로 예약수가 줄어든 나라가 많네요!
다른 나라들은 거의 다 유사한데 호주(AU)는 조금 다른 양상을 보이고 있습니다.
아마 호주는 다른 나라들과 계절이 반대이기 때문에다른 양상을 보이고 있지 않나.. 하는 조심스러운 추측을 해볼 수 있습니다. (물론 다른 이유가 있을 수 있습니다)
이제 age를 한번 살펴보겠습니다.
먼저 전체 연령대가 어떻게 분포되어있는지 확인해보겠습니다. 10세이상 100세 이하인 사용자를 기준으로 나타내겠습니다.
# View age chart between 10 and 100
airbnb %>% ggplot(aes(age)) + xlim(10, 100) + geom_bar()
20대와 30대가 대부분을 차지하고 있습니다.
위 그래프를 확인해보니 70세 이상의 고객은 거의 없는것으로 보입니다.
이를 반영하여 앞으로 age 변수를 사용할 땐 70세 이하의 사용자로 설정하겠습니다.
앞서 해온 것 처럼 이번엔 age와 Destination의 관계를 살펴보겠습니다.
# View count of age between 14 and 70
not.na <- !is.na(airbnb$age)
fig.age <- ggplot(airbnb[not.na,], aes(age, fill=country_destination))
fig.age <- fig.age + geom_bar(position="identity", alpha=0.5)
fig.age <- fig.age + xlim(14, 70)
fig.age <- fig.age + scale_y_log10()
fig.age + facet_wrap(~country_destination)
대부분의 나라가 전체 인구 분포와 유사한것으로 보입니다.
특이한 점은 포르투갈(PT)의 경우 다른 나라보다 40대이상의 고객이 훨씬 적은 경향이 보이네요.
이번엔 위 Age와 Destination 관계를 BoxPlot을 통해 표현해보겠습니다.
BoxPlot을 이용하면 전체 데이터분포를 더 잘 파악할 수 있고 어디에 데이터가 분포되어있는지 Outlier의 존재 유무등을 파악할 수 있습니다.
코드는 아래와 같습니다.
# between 10 and 70
fig.age.bx <- ggplot(airbnb, aes(x=country_destination, y=age))
fig.age.bx <- fig.age.bx + geom_boxplot(aes(colour=country_destination))
fig.age.bx <- fig.age.bx + ylim(10, 70)
fig.age.bx
모든 나라에서 20~30대가 많이 집중되어 있습니다.
영국(GB)가 연령대가 조금 높은 편이고, 스페인(ES)가 조금 낮은 편이네요.
중위값은 모든 나라에서 박스의 아래쪽에 있는 것으로 보아 젊은 연령대가 Airbnb를 더 많이 사용하고 있음을 알수 있습니다.
이와 같이 여러 변수들간의 관계를 시각화 하면서 어떤 관계가 있는지 유추해 볼 수 있습니다.
물론 유추하는 것 뿐이지, 정확한 의미를 파악하기 위해서는 여러 통계적 기법을 통해 분석해야 할 것입니다.
이것으로 시각화를 마치고 다음 장부터는 Tensorflow를 통해 위 데이터를 학습하고 예측하는 과정을 진행하겠습니다.
감사합니다!
'Computer Science > 프로젝트' 카테고리의 다른 글
Airbnb New User Bookings 데이터 시각화 - Kaggle Project(3) (0) | 2017.11.10 |
---|---|
Airbnb New User Bookings 데이터 읽기 및 가공 - Kaggle Project(2) (0) | 2017.11.09 |
Airbnb New User Bookings - Kaggle Project(1) (0) | 2017.10.31 |