R 중급 ggplot2 New York Taxi cabs 그래프 그리기 [ part 2, 택시 운행 거리, 택시 운임]

    지난번 주제인 New York Taxi cabs  그래프 그리기 2번째  파트이다.   이번에도 저번 시간 시간에 했던 것을 이어서 하는 것이지만,   맨 처음 전처리 하는 과정을 오늘도 같이 가겠다. 

지난번하고 방법론은 크게 바뀐 것이 없지만,  그래도 이야기는 끝가지 정리하는 것이 좋을 것 같아 정리 하려 한다. 


New York Taxi ggplot2


🚚 뉴욕 택시 전처리 


# 뉴욕 택시 한글로 표현
  library(tidyverse)
  library(lubridate)
  library(forcats)
  library(scales)
  library(rio)
library(readxl)
library(httr)

# 파일을 불러오는 path를 url 변수로 정의      

url = "https://drive.google.com/u/0/uc?id=1d9Hi0eEvnlheBJsFGiavXxkwdcXzFKyT&export=download"
GET(url, write_disk(tf <- tempfile(fileext = ".xlsx")))
system.time( taxi <- read_excel(tf, 1L))  
##    user  system elapsed 
##   5.449   1.249   6.699
taxi <- taxi %>% 
    mutate(weekday = wday(tpep_dropoff_datetime, label = TRUE, abbr = TRUE),
           hour.trip.start = factor(hour(tpep_pickup_datetime)),
           day = factor(mday(tpep_dropoff_datetime)),
           trip.duration = as.numeric(difftime(tpep_dropoff_datetime,tpep_pickup_datetime,
                                              units = "min")),
           trip.speed = ifelse(trip.duration >=1, (trip_distance/60),NA),
           payment_type_label = fct_recode(factor(payment_type),
                                           "Credit Card" = "1",
                                           "Cash" =  "2",
                                           "No Charge" = "3",
                                           "Other" = "4"))

데이터 전처리는  저 번에 설명한 바와 같이  시간 데이터는 주,일, 시간을 전처리 하였고, 운행거리,  스피드,  지불 유형을 정리 하였다.   저번 시간에 어느 정도 설명이 되어 있었으므로 전처리는 여기 까지한다.

    

🚚 뉴욕 택시 주행 거리

   택시 주행 거리는 우리나라나 미국이나,  별 다를 것이 없다.   나는 서울에 대한 기억은 20년 전이다.  20년 전에 나는 같은 언어를 사용하지만,  사회 인프라는 다른 나라와 같은 거제도에 왔으니까?  지금 부터 이야기 하는 것은 20년 전 이야기이다.   

   서울 강남에서 친구들과 저녁에 술을 먹고 나면,   밤 12 ~ 새벽 1 시 사이에 항상 마친다.  무슨 할 말이 많다고,  저녁 7시에 만나서, 12시 까지 술을 먹었는지 알 수 없었다.  그때는 돈도 없었는데,  지금은 어떠한지는 모르겠는데,   강남에 뒷골목 호프집이  거제도 호프집 보다는 가격이 저렴 했었다.  지금은 그런데가 있는지 모르겠다.  코로나 때문에,   

어찌 되었든 그 시간 대는 대중교통 버스와 지하철이 끊기는 시간대였다.   술먹고 집에 가려는 친구들은 많이 있는데,  헉..   택시가 별로 없다.    날씨도 추운데,  그때,  택시는 장거리 가는 사람들은 우선 받았다.   우리집은 그 시간에 강남에서 택시로 20분 이내의 거리 였는데, 어찌 되었든 1시간 이상 동안 택시를 잡지 못해 애를 먹었다.  지금은 카카오 택시가 있어서 조금 다를 려냐?  카카오 택시도 사람을 가려 가면서 받는 다던데..

   미국 뉴욕이나,  서울이나  대중 교통이 끊길 경우에는 매나 마찮가지인것 같다. 

말이 길었다.  일자별 거리 중위수를 구해 보자.  일요일이 다른 요일 보다 거리가 길다. 

# 일자별 운행 거리 중위수
  taxi %>% 
    group_by(day) %>% 
    summarize(med.trip = median(trip_distance),
             weekday = weekday[1] ) %>% 
    ggplot(aes(x=day, y=med.trip)) + geom_point(aes(color=weekday), size =5) +
    geom_line(aes(group=1), linetype = 'dotted') +
    labs(x = "Day of Month",
         y = "Median Trip Distance (Miles)",
         title = "median Trip Distance by Day of Month" )


일자별 주행 거리 ggplot2


시간대별 거리는 역시나, 새벽이나 밤시간대이다.   그런데,  밤시간대는 서울과 다를 것 같다.   서울에는 밤시간대에도 많이 막히던데.. 

# 시간대 별 가장 긴 운행거리 중위수를 아래와 같이 그린다.  
  taxi %>% 
    group_by(hour.trip.start) %>% 
    summarize(med.trip = median(trip_distance)) %>% 
    ggplot(aes(x = hour.trip.start, y = med.trip)) +
    geom_point(size =3) +
    geom_line(aes(group = 1), linetype = 'dotted')
시간대변 운행 거리 ggplot2


요일 단위로 거리 패턴을 보았지만, 역시나,  요일과 관계없이,  밤이나 새벽 시간대, 주행 거리가 길다. 

# 저녁이나 새벽 시간대  긴 거리를 운행하지만,  낮시간대는 짧은 거리를 운행 한다.
  taxi %>% 
    group_by(weekday, hour.trip.start) %>% 
    summarize(med.trip=median(trip_distance)) %>% 
    ggplot(aes(x=hour.trip.start, y=med.trip, group = weekday, color = weekday))+
    geom_point(size = 3) +
    geom_line(size = 0.5) +
    facet_wrap(~weekday, nrow =1) +
    theme(legend.position = "none") +
    scale_x_discrete(breaks = c(0, 3, 6, 9, 12, 15, 18, 21))

요일 시간대별 주행거리 패턴 ggplot2



🚚 뉴욕 택시 요금 

   택시 요금 매우 중요하다.  우리나라에서는 지역 불문 하고,  밤이나, 새벽 시간대에는 할증을 받는데,  어느 시간대 요금을 많이 받는지 궁금 하다. 

 요금에 대한 분포는 현금과 카드는 비슷 한데,  분포의 크기는 매우 다르다.  즉 카드를 사람들이 많이 사용한 것이다. 
#   요금에 대한 분포는  현금이가 카드가 거의 비슷 한데,  크기는 다르다.   
  taxi %>% 
    filter(payment_type_label %in% c('Credit Card', 'Cash')) %>% 
    ggplot(aes(x = fare_amount, fill = payment_type_label)) + geom_histogram()+
    facet_wrap(~payment_type_label) + xlim(0,75) +
    theme(legend.position = "none")


카드와 현금의 분포



일단위로 데이터를 보면, 요금은  일요일에는 요금을 많이 받고,  토요일에는 적게 받는 패턴이 보인다.  
# 일자별 택시 요금에 대한 시계열 그래프이다. 
  taxi %>% 
    filter(fare_amount < 100) %>% 
    group_by(day) %>% 
    summarize(mean.fare = mean(fare_amount),
              weekday = weekday[1]) %>% 
    ggplot(aes(x=day, y=mean.fare)) + geom_point(aes(color=weekday), size =5) +
    geom_line(aes(group=1), linetype = 'dotted') +
    labs(x = 'Day of Month',
         y = 'Mean Fare ($)',
         title = 'Mean Fare Amount by Day of Month')

일자별 요일을 추가해서 그린 그래프 ggplot2


역시 장거리 여행 할 때,  요금을 많이 내며 요금 중위수가 크다.  

# 결재 유형/ 요일별 요금 내는 패턴을 그리는 그래프이다. 
  taxi %>% 
    filter(fare_amount < 100, payment_type_label %in% c('Credit Card', 'Cash')) %>% 
    group_by(weekday, hour.trip.start, payment_type_label) %>% 
    summarize(mean.fare = mean(fare_amount)) %>% 
    ggplot(aes(x = hour.trip.start, y = mean.fare, color = payment_type_label, group = payment_type_label))+
    geom_point(size = 2) + geom_line() +
    facet_wrap(~weekday, nrow =1) +
    scale_x_discrete(breaks = c(0, 6, 12, 18)) +
    labs( y = 'Mean Fare($)',
          x = 'Hour of Trip Start',
          title = 'Mean Fares by Time Day and Weekday')

요일 시간대 별 카드와 현금 결재 시계열 데이터 ggplot2 



New York Taxi cabs 그래프 그리기는 여기 까지이고,  좀 더 자세한 정보를 보려면, 아래를 클릭 하여 내용을 보면 된다. 





댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...