본문 바로가기
Computer Science/프로젝트

Airbnb New User Bookings 데이터 시각화 - Kaggle Project(4)

by sy.cho__ 2017. 11. 11.

저번 포스팅에 이어서 데이터 시각화를 이어서 진행하겠습니다.


저번 데이터분석에서 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를 통해 위 데이터를 학습하고 예측하는 과정을 진행하겠습니다.

감사합니다!

반응형