본문 바로가기

DA_DS_AI_ML/Data Analysis

[Data Analysis] Uber Trips Analysis using Python

반응형

본 포스팅은 아래 링크의 내용을 기반으로 작성되었습니다.

 

Uber Trips Analysis using Python

In this article, I will take you through Uber trips analysis using Python. Data Science Project on Uber Trips analysis using Python.

thecleverprogrammer.com

 

이번 포스팅은 우버의 주행 을 분석해보는 내용입니다.

 

먼저 필요한 패키지를 설치합니다.

 

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

 

데이터 처리를 위한 판다스, 시각화를 위한 matplotlib, seaborn을 import합니다.

 

 

data = pd.read_csv("uber.csv")
data["Date/Time"] = data["Date/Time"].map(pd.to_datetime) 
data.head()

 

제공되는 csv 파일형태의 uber 데이터셋을 불러오기 위해 read_csv를 이용합니다.

Date/Time 컬럼의 데이터를 모두 datetime 형태로 바꿔주기 위해 map 함수를 이용해 형변환을 합니다.

그리고 data.head()를 통해 상위 데이터 몇줄만 띄웁니다.

 

 

data["Day"] = data["Date/Time"].apply(lambda x: x.day)
data["Weekday"] = data["Date/Time"].apply(lambda x: x.weekday())
data["Hour"] = data["Date/Time"].apply(lambda x: x.hour)
print(data.head())

 

이번에는 날짜, 요일, 시간을 각각 만들어 각각 컬럼에 저장합니다.

apply를 통해 행에 한 줄씩 접근할 수 있게 설정하였고, pandas에서 제공되는 day, weekday, hour를 통해 원하는 형태의 값으로 변환한 뒤 lambda 익명함수를 통해  값을 각 행에 저장할 수 있게 합니다.

 

 

 

이번 포스팅에서는 seaborn을 이용한 데이터 시각화를 진행합니다.

 

sns.set(rc={'figure.figsize':(12, 10)})
sns.distplot(data["Day"])

 

먼저 plot을 그릴 화면의 사이즈를 정합니다. rc는 dictionary 형태로 스타일을 지정할 수 있는 파라미터입니다. 그래서 figure.figsize를 통해 사이즈를 지정합니다.

그리고 날짜인 Day 컬럼을 히스토그램으로 나타내보겠습니다.

 

더보기

히스토그램이란 ?

도수분포표를 그래프로 나타낸 것.

즉, 계급(구간)을 가로축(x축)에 도수(count?)를 세로축에 두는 형태의 차트를 말한다.

 

주어진 Uber 데이터는 9월의 데이터인데요, 일정한 주기로 이용의 증감이 보입니다.

아무래도 출퇴근이 있는 주중과 쉬는 주말의 차이이겠죠!

 

sns.distplot(data["Hour"])

 

이번에는 Hour 컬럼으로 시간대별 이용을 보겠습니다.

차트는 동일하게 히스토그램을 이용합니다.

 

24시간을 기준으로 우버 사용을 보았을 때 전반적으로 오전에 한 번 증가했다가 저녁에 한 번 더 크게 증가한 뒤 밤에는 감소하는 형태를 보여줍니다.

오전에 외출할 때 우버를 이용한 뒤 저녁에 귀가할 때 이용하는 형태인 것 같네요.

저녁에는 다들 피곤해서 그런지 오전보다 더 많이 사용한 결과가 보입니다.

 

sns.distplot(data["Weekday"])

 

마지막으로 Weekday인 요일을 확인해보겠습니다.

 

 

weekday로 요일을 반환할 경우 일요일인 0부터 토요일인 6까지 변환 됩니다.

 

이번에는 변수들간에 어떤 상관관계가 있는지 시각화를 통해 확인해보겠습니다!

 

# Correlation of Weekday and Hour
df = data.groupby(["Weekday", "Hour"]).apply(lambda x: len(x))
df = df.unstack()
sns.heatmap(df, annot=False)

 

먼저 데이터를 상관관계 분석을 위해 조작합니다.

이 분석에서 보고 싶은 상관관계는 요일과 시간의 상관성입니다. 

그래서 Weekday와 Hour 컬럼을 기준으로 데이터를 그룹핑 한 뒤 (groupby), 그룹마다 크기를 새롭게 df라는 데이터프레임에 저장합니다.

이후 df 프레임을 재정렬 하기 위해 unstack 함수를 이용하였습니다.

unstack 함수는 r의 cast의 역할을 한다고 생각하면 됩니다.

이렇게 재구성된 함수를 히트맵을 통해 상관관계를 보여줍니다.

 

 

색이 진해질수록 상관관계가 약한 것이고, 색이 연할수록 상관관계가 강한 것을 의미합니다.

확실히 평일 저녁시간에 많은 사람이 uber를 이용한다는걸 알 수 있네요!

 

 

data.plot(kind='scatter', x='Lon', y='Lat', alpha=0.4, s=data['Day'], label='Uber Trips',
figsize=(12, 8), cmap=plt.get_cmap('jet'))
plt.title("Uber Trips Analysis")
plt.legend()
plt.show()

 

이번에는 위경도에 따른 우버 이용자들을 시각화 하여 어떤 지역에서 많이 사용하는지 알아봅니다.

kind파라미터에 scatter라는 값을 이용해 시각화를 합니다.

주어진 uber 데이터는 미국 데이터이기 때문에 위경도도 미국이 기준이라 숫자만 보고는 어느 지역에서 많이 이용하는지 알기는 어려웠습니다.

그래서 가장 많이 모여있는 지역은 위도 40.6~41.1, 경도 -74.0~73.7정도가 되겠네요.

알고보니 이 지역은 뉴욕 멘하튼이라고 합니다!

 

 

이렇게 간단하게 Uber데이터를 시각화 하는 방법을 알아보았습니다.

 

따라서 이번 분석의 결과는 다음과 같습니다.

1. 평일 퇴근시간에 이용자가 많습니다.

2. 주말보다 주중 이용자가 많습니다.

3. 미국은 뉴욕의 사용자가 많음을 알 수 있습니다.

 

 


본 포스팅은 모두의 연구소 I love data 랩에서 진행하였습니다.

 

전체 코드는 아래 colab 노트북에서 확인해주세요

 

i_love_date_week1.ipynb

Colaboratory notebook

colab.research.google.com

 

반응형