주제 : 서울시 공유자전거 '따릉이' 수요 예측 프로젝트
목표 : 서울시 공유자전거인 '따릉이'의 수요와 다른 변수들 간의 연관성을 분석
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()
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()