본문 바로가기
프로젝트

따릉이 대여량 예측-(1)

by ag_zero 2021. 11. 23.
728x90

데이콘에서 주최하는 학습을 위한 경진대회인 따릉이 대여량 예측을 분석해보자!

 

주제

  • 서울의 일별 온도, 습도, 강수량 등 일기 예보 데이터를 통해 따릉이 대여량을 예측해보세요.
  • 서울의 2018~2021년 4년 동안의 날씨 데이터와 2018~2020년의 따릉이 대여량 데이터가 주어집니다.
  • 이 데이터를 이용해 2021년의 따릉이 대여량을 예측해보세요.
  • 주어진 데이터 이외의 데이터는 사용 금지입니다!

2018년 4-6월, 2019년 4-6월, 2020년 4-6월 데이터를 바탕으로 2021년 데이터를 예측해야 하는 문제이다.

 

 

데이터에 결측치는 없었기 때문에 결측치 걱정은 없어서 좋았다.

train_df.isna().sum()

test_df.isna().sum()

 

 

변수들

date_time : 일별 날짜

wind_direction: 풍향 (degree)

sky_condition : 하늘 상태 (맑으면 1, 구름 많으면 3, 흐림은 4)

precipitation_form : 강수 형태 (없으면 0, 비면 1)

wind_speed : 풍속 (m/s)

humidity : 습도 (%)

low_temp : 최저 기온 ( `C)

high_temp : 최고 기온 ( `C)

Precipitation_Probability : 강수 확률 (%)

number_of_rentals : 따릉이 대여량

 

 

 

분석을 진행하면서 도메인에 대한 고민을 했다.

'자전거를 어떨 때 많이 빌리지 않을까?'

일기예보 데이터로 예측하는 것이기 때문에 어떤 날씨일 때 빌리지 않는지 생각해 보았다.

 

1. 너무 더울 때

 

2. 너무 추울 때

 

3. 비가 많이 내릴 때 ( 조금 내릴 때에는 그냥 타는 사람들도 많은 것 같다..)

-  비와 관련성이 깊은 습도는 비만 오지 않는다면 대여에 큰 영향을 끼치지 않을 것 같다고 생각했다.

-  비가 진짜 오지 않고 강수 확률 만으로는 영향을 끼치지 않을 것 같다.

 

4. 바람이 많이 불 때

-  하지만 풍향이 대여에 영향을 끼치지 않을 것 같다고 생각함.

 

5. 눈이 내릴 때

(4-6월 데이터이기 때문에 눈이 내릴 일은 없을 것 같다.) 

 

6. 요일에 따라 대여량이 다르지 않을까? 휴일이면 더 많이 이용할 것 같다. 

날짜 데이터가 object로 되어 있어 datetime을 활용해 변형해 주어야 했다.

 

train_df.dtypes

 

 

-  함수를 만들어 split으로 datetime을 분리하는 방법

def seperate_datetime(dataframe):
    
    # 년, 월, 일을 담을 빈 리스트 생성
    year = []
    month = []
    day = []
    
    # date_time 컬럼을 돌면서 date값들 쪼갠다.
    for date in dataframe.date_time:
    
     	# - 기준으로 string을 나누고 list로 만든다.
        year_point, month_point, day_point = date.split('-')
        
        year.append(int(year_point))
        month.append(int(month_point))
        day.append(int(day_point))
    
    return year, month, day

 

to_datetime을 활용해 분리하는 방법

# Object타입의 data_time 컬럼을 datetime형태로 바꿔준다.
train_df.date_time = pd.to_datetime(train_df.date_time)
test_df.date_time = pd.to_datetime(test_df.date_time)

#  datetime형태에서 각각의 년 월 일을 추출한다.
train_df['date_year'] = train_df.date_time.apply(lambda t : t.year)
train_df['month'] = train_df.date_time.apply(lambda t : t.month)
train_df['day'] = train_df.date_time.apply(lambda t : t.day)

 

- 요일 추가하기

week_day = pd.to_datetime(train_df['date_time']).dt.day_name()
train_df['week_day'] = week_day
train_df.head()

 

 

 

 

'프로젝트' 카테고리의 다른 글

사무실 내 전력량 예측 - (4)  (0) 2022.07.12
사무실 내 전력량 예측 - (3)  (0) 2022.07.12
사무실 내 전력량 예측 - (2)  (0) 2022.03.24
사무실 내 전력량 예측 (1)  (1) 2022.03.15