<aside> 📌 Task :
</aside>
import pandas as pd
# 대도시별 예약 가능 날짜 수 통계 계산
availability_stats = df.groupby('neighbourhood_group')['availability_365'].agg(
숙소수='count',
평균예약가능일수=lambda x: round(x.mean(), 1),
최소예약가능일수='min',
최대예약가능일수='max'
).reset_index()
# 컬럼명 보기 좋게 변경
availability_stats.columns = ['neighbourhood_group', '숙소 수', '평균 예약 가능 일수', '최소 예약 가능 일수', '최대 예약 가능 일수']
# 결과 확인
print(availability_stats)

import pandas as pd
import matplotlib.pyplot as plt
# 대도시별 예약 가능 날짜 수 통계 계산
availability_stats = df.groupby('neighbourhood_group')['availability_365'].agg(
숙소수='count',
평균예약가능일수=lambda x: round(x.mean(), 1),
최소예약가능일수='min',
최대예약가능일수='max'
).reset_index()
# 시각화
plt.figure(figsize=(10, 6))
bars = plt.bar(availability_stats['neighbourhood_group'], availability_stats['평균예약가능일수'])
# 막대 위에 수치 라벨 표시
for bar, value in zip(bars, availability_stats['평균예약가능일수']):
plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 2, f'{value}', ha='center', va='bottom')
plt.title('📅 대도시별 평균 예약 가능 일수')
plt.xlabel('대도시 (neighbourhood_group)')
plt.ylabel('평균 예약 가능 일수')
plt.ylim(0, availability_stats['평균예약가능일수'].max() + 20)
plt.tight_layout()
plt.show()

# 대도시별 방타입별 예약 가능 날짜 수 통계 계산
availability_stats_by_room = df.groupby(['neighbourhood_group', 'room_type'])['availability_365'].agg(
숙소수='count',
평균예약가능일수='mean',
최소예약가능일수='min',
최대예약가능일수='max'
).reset_index()
# 소수점 1자리로 반올림
availability_stats_by_room['평균예약가능일수'] = availability_stats_by_room['평균예약가능일수'].round(1)
# 시각화
plt.figure(figsize=(14, 7))
sns.barplot(
data=availability_stats_by_room,
x='neighbourhood_group',
y='평균예약가능일수',
hue='room_type'
)
# 수치 표시
for i, bar in enumerate(plt.gca().containers):
plt.bar_label(bar, fmt='%.1f', label_type='edge', fontsize=9)
plt.title('🏙️ 대도시별 방타입별 평균 예약 가능 일수')
plt.xlabel('대도시 (neighbourhood_group)')
plt.ylabel('평균 예약 가능 일수 (availability_365)')
plt.xticks(rotation=45)
plt.legend(title='방 타입')
plt.tight_layout()
plt.show()

# 박스플롯 시각화: 대도시별 예약 가능 일수 분포
plt.figure(figsize=(12, 6))
sns.boxplot(x='neighbourhood_group', y='availability_365', data=df)
plt.title('📦 대도시별 예약 가능 일수 분포 (Boxplot)')
plt.xlabel('대도시 (neighbourhood_group)')
plt.ylabel('예약 가능 일수 (availability_365)')
plt.ylim(0, df['availability_365'].max() * 1.05)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
