이번 필사 주제는 New York City Taxi Duration 이다.
이 대회는 뉴욕시에서 택시 여행의 총 승차 시간을 예측하는 모델을 구축하는 것이 목표이다.
AiswaryaRamachandran님의 커널을 참고하여 필사를 진행했다.
목록
New York City Taxi Duration (1)
더보기
1. 데이터 분석 준비
1) data description
2. 데이터 살펴보기
1) missing data 찾기
2) 분석을 위한 새로운 컬럼 생성
New York City Taxi Duration (2)
더보기
3. Exploratory Data Analysis
1) HeatMap
2) 시간, 요일
3) 거리, 지역, 속도
New York City Taxi Duration (3)
더보기
4. Feature Engineering
5. 모델 적용
1) 모델 세우기
2) 선형 모델 적용
3) 랜덤포레스트 적용
In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import warnings
from datetime import datetime
import calendar
from math import sin, cos, sqrt, atan2, radians
from folium import FeatureGroup, LayerControl, Map, Marker
from folium.plugins import HeatMap
import matplotlib.dates as mdates
import matplotlib as mpl
from datetime import timedelta
import datetime as dt
warnings.filterwarnings('ignore')
pd.set_option('display.max_colwidth', -1)
plt.style.use('fivethirtyeight')
import folium
from sklearn.cluster import KMeans
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
#from sklearn.preprocessing import Imputer
from sklearn.impute import SimpleImputer
from sklearn import linear_model
from sklearn.metrics import mean_squared_error
from sklearn.ensemble import RandomForestRegressor
import pickle
1. 데이터 분석 준비
In [2]:
# 데이터 불러오기
train = pd.read_csv("../data/nyc-taxi-trip-duration/train.csv")
test = pd.read_csv("../data/nyc-taxi-trip-duration/test.csv")
In [3]:
print('train shape : ', train.shape, 'test shape : ', test.shape)
In [4]:
train.head()
Out[4]:
data description
- id - 각 트립에 대한 고유 식별자
- vendor_id - 주행 기록과 연결된 제공자를 나타내는 코드
- pick_datetime - 미터기가 작동된 날짜 및 시간
- dropoff_datetime - 미터기가 해제된 날짜 및 시간
- passenger_count - 차량에 탑승한 승객 수(운전자 입력 값)
- pickup_longitude - 미터기가 걸려 있던 경도
- pickup_latitude - 미터기가 작동된 위도
- dropoff_longitude - 미터기가 해제된 경도
- dropoff_latitude - 미터기가 해제된 위도
- store_and_fwd_flag - 이 플래그는 차량이 서버와 연결되지 않았기 때문에 공급업체에 전송하기 전에 트립 레코드를 차량 메모리에 보관했는지 여부를 표시함
- Y=store and forward; N=store 및 Forward trip
- trip_timeout - 여행 기간(초)
In [5]:
train['pickup_datetime'] = pd.to_datetime(train['pickup_datetime'], format='%Y-%m-%d %H:%M:%S')
train['dropoff_datetime'] = pd.to_datetime(train['dropoff_datetime'], format='%Y-%m-%d %H:%M:%S')
train.head()
Out[5]:
2. 데이터 살펴보기
1) missing data 찾기
In [6]:
train[pd.isnull(train)].sum()
### dataset의 길이
print("Min pickup time:", min(train['pickup_datetime']))
print("Max pickup time:", max(train['pickup_datetime']))
2) 분석을 위한 새로운 컬럼 생성
pickup time에서 day, month, hour 정보를 생성
In [7]:
train['pickup_date'] = train['pickup_datetime'].dt.date
train['pickup_day'] = train['pickup_datetime'].apply(lambda x:x.day)
train['pickup_hour'] = train['pickup_datetime'].apply(lambda x:x.hour)
train['pickup_day_of_week'] = train['pickup_datetime'].apply(lambda x:calendar.day_name[x.weekday()])
train['dropoff_date'] = train['dropoff_datetime'].dt.date
train['dropoff_day'] = train['dropoff_datetime'].apply(lambda x:x.day)
train['dropoff_hour'] = train['dropoff_datetime'].apply(lambda x:x.hour)
train['dropoff_day_of_week'] = train['dropoff_datetime'].apply(lambda x:calendar.day_name[x.weekday()])
In [8]:
train.head()
Out[8]:
In [9]:
## 위도 경도 변수 소수점 이하 3자리까지 반올림
train['pickup_latitude_round3']=train['pickup_latitude'].apply(lambda x:round(x,3))
train['pickup_longitude_round3']=train['pickup_longitude'].apply(lambda x:round(x,3))
train['dropoff_latitude_round3']=train['dropoff_latitude'].apply(lambda x:round(x,3))
train['dropoff_longitude_round3']=train['dropoff_longitude'].apply(lambda x:round(x,3))
In [10]:
train.head()
Out[10]:
위도 경도를 사용하여 km 단위 거리로 계산하기
In [11]:
def calculateDistance(row):
R=6376.0 # 지구의 대략적인 반경(km)
pickup_lat = radians(row['pickup_latitude'])
pickup_lon = radians(row['pickup_longitude'])
dropoff_lat = radians(row['dropoff_latitude'])
dropoff_lon = radians(row['dropoff_longitude'])
dlon = dropoff_lon -pickup_lon
dlat = dropoff_lat -pickup_lat
a=sin(dlat /2) **2 +cos(pickup_lat)*cos(dropoff_lat)*sin(dlon/2)**2
c=2*atan2(sqrt(a), sqrt(1-a))
distance=R*c
return distance
In [12]:
train['trip_distance'] = train.apply(lambda row:calculateDistance(row), axis=1)
train.head()
Out[12]:
In [13]:
train['trip_duration_in_hour']=train['trip_duration'].apply(lambda x:x/3600)
train.head()
Out[13]:
'Competition > Kaggle' 카테고리의 다른 글
[kaggle][필사] New York City Taxi Duration (2) (0) | 2020.10.04 |
---|---|
[kaggle][필사] Statoil/C-CORE Iceberg Classifier Challenge (0) | 2020.09.25 |
[kaggle][필사] Costa Rican Household Proverty (3) (0) | 2020.09.22 |