본문 바로가기

택시데이터분석

(빅데이터 처리 분석)뉴욕 택시 데이터를 수집해보자 3탄

반응형

부릉 빠방

 

 

전편을 보시려면 이쪽으로 오세요..!!

 

1탄 

https://sky-develop.tistory.com/23

 

(빅데이터 처리 분석)뉴욕 택시 데이터를 수집해보자 1탄

미국 택시데이터를 분석하여 코로나 전 후 택시 유동량을 관찰 분석하는 조그마한 프로젝트를 진행하려고 한다.! 일단 데이터를 다운로드 사이트는 요기 있다.. https://www.nyc.gov/site/tlc/about/tlc-trip

sky-develop.tistory.com

 

2탄 

https://sky-develop.tistory.com/24

 

(빅데이터 처리 분석)뉴욕 택시 데이터를 수집해보자 2탄

전편 못 보신 분들 이 링크로 전편을 확인해 주세요..! https://sky-develop.tistory.com/23 (빅데이터 처리 분석)뉴욕 택시 데이터를 수집해보자 1탄 미국 택시데이터를 분석하여 코로나 전 후 택시 유동량

sky-develop.tistory.com

 

 

 

전에는 2020년 1월 데이터만 분석하여 다음과 같은 시각화 결과 가 나왔다
영롱하군요




이번에는 좀 더 포괄적으로 2020년의 데이터를 분석을 해보았다

일단 전체적인 날짜에 pickup_datetime을 시각 해본 결과 시각화의 대참사가 일어났다.

qs = """
SELECT 
    pickup, 
    count(*) as time
FROM
    (SELECT 
        split(pickup_datetime, " ")[0] as pickup
    FROM 
        trips    
    )
GROUP BY 
    pickup
ORDER BY 
    pickup
"""
time_data = spark.sql(qs).toPandas()

import seaborn as sns 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots(figsize=(100, 9))
sns.barplot(x="pickup", y="time", data=time_data)
plt.xticks(rotation=45)
plt.title("NYC Texi 2020-01-01 ~ 2021-01-01")
plt.show()

너무.. 길어.....

 

근데!!!!!!!!!

 

보이는가?

 

보이는가? 갑자기 가파르게 곡선을 그리며 택시 유동성 대참사가 일어난 부분이 보이는가?

 

몹시 흥미로웠다. 해당 날짜를 알기 위해 저 기다란 시각화를 각 월별로 끊어서 3x4 시각화를 진행했다..

 

from typing import List

directory: str = [f"{os.getcwd()}/data/{i}" for i in os.listdir(f"{os.getcwd()}/data")][2]
filename: List[str] = [f"{directory}/{data}" for data in os.listdir(directory)]
filename.sort()

def year_read_data() -> List:
    return [spark.read.parquet(f"file:///{data}") for data in filename]

def year_data_topandas_transform(table_name: str, qs: str) -> List[SparkSession]:
    t_pickup_dat = []
    for data in year_read_data():
        data.createOrReplaceTempView(table_name)
        td = spark.sql(qs).toPandas()
        t_pickup_dat.append(td)
    return t_pickup_dat
   
def barplot_3to4_visualization(x: str, y:str, data: List,
                        n_rows: int = 3, n_cols: int = 4) -> None:
    
    fig, ax = plt.subplots(n_rows, n_cols, figsize=(30, 10))
    plt.subplots_adjust(wspace = 0.4, hspace = 0.4)
    fig.set_size_inches((80, 20))

    for i, axi in enumerate(ax.flat):
        sns.barplot(x=x, y=y, data=data[i], ax=axi)
        axi.set_title(f'taxi 2020 --> date {i+1}')
        axi.set_xticklabels(axi.get_xticklabels(), rotation=30)

    # 데이터 플롯 출력
    plt.show()
    
  
qs_2020 = """
    SELECT 
        date,
        count(*) as pickup
    FROM
        (SELECT 
            split(pickup_datetime, " ")[0] as date
        FROM 
            trips    
        )
    GROUP BY 
        date
    ORDER BY 
        date
"""
data2020_all = year_data_topandas_transform(table_name="trips", qs=qs_2020)
barplot_3to4_visualization(x="date", y="pickup", data=data2020_all)

Path lib 쓸려고 했지만 나의 목표는 root directory에서 파일을 찾는 것이므로 굳이 쓸 필요는 없었다 

경로 custom을 하려면 pathlib 가 좋지만 단순하게 루트에서 파일만 찾는 것이기에 과도한 거 같아 os lib를 사용하였다.. 

 

listdir를 사용해서 해당 데이터의 순서를 for문을 이용 list compresension을 이용하여 2020년 데이터를 가져왔다. 

 

코드의 궁금한점이 있으면 질문 환영합니다 태클도 환영합니다 레알 환영 저는 코드를 발전해나가고 싶어요..

집단 지성을 경험하고싶습니다..

 

 

아무튼..!! 

이렇게 해서 시각화를 한 결과 다음과 같은 결과가 나왔다.

여기에서 3월 그래프를 잘보자
유동량이 대참사난걸 확인할 수 있다..!!

 

선 그래프로 확인해 보자..

2020년 3월

정확하게 일치한다.. 정리를 하면 월평균 80만 대의 택시 유동량이 3월 13일 부터 하강 곡선이 있고

그 이후로 보터 월 유동량이 하락한 걸 볼 수 있다..

 

2월 ~ 3월 
4월

4월부터 16만 대  3월 대비 3.5배의 유동량이 감소했다는 것이다... 
바로 코로롱으로 인한 뉴욕 shutdown이 일어난 시점이다..

1월 ~ 4월까지의 데이터를 쭉 나열해서 보면..

1월 ~ 4월 그래프

이러한 그래프를 확인할 수 있었다.  

 

 

그러면 ... 3월 에 driver pay 는 어떠한지를 확인하였다.. 유동량이 엄청나게 떨어졋을터 기사분들 pay도 떨어졌을지 않을까 생각해봤다

일단 데이터의 평균값부터 살펴보기로 했다.

ㅇㅋㅋㅋㅋㅋㅋ

 

 

 

전처리 진행하자...!!

 

qs = """
SELECT 
    TO_DATE(pickup_datetime) as pickup_datetime,
    trip_miles as trip_miles, 
    trip_time as trip_time, 
    base_passenger_fare,
    tips,
    driver_pay
FROM 
    trips
WHERE 
    base_passenger_fare BETWEEN 1 AND 30
    AND trip_miles BETWEEN 1 AND 47
    AND trip_time > 0
    AND tips BETWEEN 2 AND 100
    AND driver_pay BETWEEN 5 AND 500
"""
data = spark.sql(qs)
data.createOrReplaceTempView("data")


qs = """
SELECT 
    TO_DATE(pickup_datetime) as date,
    AVG(trip_miles) as trip_miles, 
    CAST(AVG(trip_time) as INTEGER) as trip_time, 
    CAST(AVG(base_passenger_fare) as INTEGER) as base_passenger_fare,
    AVG(tips) as tips, 
    AVG(driver_pay) as driver_pay,
    COUNT(split(pickup_datetime, " ")[0]) as pickup_datetime
FROM 
    trips
GROUP BY 
    date
ORDER BY
    date
"""
preprocessing_3_to_4 = year_data_topandas_transform(table_name="data", qs=qs)

fig, ax = plt.subplots(figsize=(16, 5))
sns.barplot(x="driver_pay", y="date", data=preprocessing_3_to_4[2], alpha=0.5,  color="blue")
plt.xticks(rotation=45)
plt.legend()
plt.show()

sns.lineplot(x="date", y="driver_pay", data=preprocessing_3_to_4[2], alpha=0.5)
plt.xticks(rotation=45)
plt.legend()
plt.show()

 

 

전처리를 진행하고 시각화를 하니 역시나 3월 15일 펜데믹이 터지고 나서 유동량 급갑으로 기사분들의 수익이 뚝떨어진걸 확인하였다 

3월 driver pay

 

 

보이는가? 1월 부터 17달러에서 출발해 급격한 하락 후  3월 1일까지 괜찮는 행보( 13~15)달러의 수입원이 있었으나 

3월15일 기점으로 수입원이 평균 4~5달러 까지 줄어드는 그래프를 발견하였다

 

 

평균 마일 당 받는 pay

평균 4마일에 12~14 를 받는걸확인하였다..

 

다음편에 계속..

반응형