[KT Aivle AI] 3주차. 미니프로젝트 1차(2)

hyowon·2024년 3월 21일
0

KtAivle

목록 보기
12/39

0. 개요

주제 : 서울시 공유자전거 '따릉이' 수요 예측 프로젝트
목표 : 서울시 공유자전거인 '따릉이'의 수요와 다른 변수들 간의 연관성을 분석

1. 시간대에 따라 따릉이 수요가 다를 것이다.

df = pd.read_csv('df_sbikedata.csv')

#전체 데이터의 모든 변수 확인
df.isnull().sum()

# 데이터프레임을 시간(hour) 열을 기준으로 0~6시, 6~12시, 12~18시, 18~24시로 나누기
bins = [0, 6, 12, 18, 24]
labels = ['0-6시', '6-12시', '12-18시', '18-24시']

# right = False를 하면서 24시(00시인 오른쪽 마지막 경제를 포함하지 않게 된다.)
df['time_group'] = pd.cut(df['hour'], bins=bins, labels=labels, right=False)

# 각 시간대 그룹별로 따릉이 대여량의 평균 구하기
result_df = df.groupby('time_group')['count'].mean()
df

import matplotlib.pyplot as plt
from matplotlib import font_manager

# 그래프 그리기
plt.figure(figsize=(10, 6))
result_df.plot(kind='bar', color='skyblue')
plt.title('시간대별 평균 따릉이 대여량')
plt.xticks(rotation=45)
plt.show()

2. 주말, 평일에 따라 따릉이 수요가 다를 것이다.

df = pd.read_csv('df_sbikedata.csv')

#전체 데이터의 모든 변수 확인
df.isnull().sum()


# date 컬럼을 datetime 형식으로 변환
df['date'] = pd.to_datetime(df['date'])

# date 컬럼에서 요일(월요일: 0, 일요일: 6)을 나타내는 weekday 컬럼 생성
df['weekday'] = df['date'].dt.weekday

# weekday가 5(토요일) 또는 6(일요일)이면 주말(1), 그 외에는 평일(0)로 나타내는 컬럼 생성
df['weekend'] = np.where(df['weekday'] >= 5, 1, 0)

# hour 열을 기반으로 시간대를 나누는 과정 추가
bins = [0, 6, 12, 18, 24]
labels = ['0-6시', '6-12시', '12-18시', '18-24시']
df['time_group'] = pd.cut(df['hour'], bins=bins, labels=labels, right=False)

# 주말과 평일의 시간대별 따릉이 대여량을 구하기
result_df_weekday = df[df['weekend'] == 0].groupby('time_group')['count'].mean()
result_df_weekend = df[df['weekend'] == 1].groupby('time_group')['count'].mean()

# 시각화
plt.figure(figsize=(10, 6))
result_df_weekday.plot(label='평일')
result_df_weekend.plot(label='주말')
plt.title('주말과 평일 시간대별 평균 따릉이 대여량', fontproperties=font_prop)
plt.legend(prop=font_prop)
plt.xticks(rotation=45, fontproperties=font_prop)
plt.show()

import seaborn as sns

# 시각화
plt.figure(figsize=(8, 6))
sns.barplot(x='weekend', y='count', data=df, ci=None)
plt.xlabel('주말', fontproperties=font_prop)
plt.ylabel('평균 대여량', fontproperties=font_prop)
plt.title('주말과 평일 평균 따릉이 대여량', fontproperties=font_prop)
plt.xticks(ticks=[0, 1], labels=['평일', '주말'], fontproperties=font_prop)
plt.show()

# 주말과 평일의 총 대여량 구하기
total_rental_weekday = df[df['weekend'] == 0]['count'].sum()
total_rental_weekend = df[df['weekend'] == 1]['count'].sum()

# 시각화
plt.figure(figsize=(8, 6))
plt.bar(['평일', '주말'], [total_rental_weekday, total_rental_weekend], color=['#1f77b4', '#ff7f0e'])
plt.xlabel('주말/평일', fontproperties=font_prop)
plt.ylabel('총 대여량', fontproperties=font_prop)
plt.title('주말과 평일 총 대여량 비교', fontproperties=font_prop)
plt.show()

profile
안녕하세요. 꾸준히 기록하는 hyowon입니다.

0개의 댓글