Task :
# 대도시별 예약 가능 날짜 수 통계 계산
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)
Python
복사
대도시별 예약 가능 날짜 수 통계 계산
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()
Python
복사
대도시 별 방 타입 별 예약 가능 날짜 수 통계 계산
# 대도시별 방타입별 예약 가능 날짜 수 통계 계산
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()
Python
복사
박스플롯 시각화: 대도시 별 예약 가능 일수 분포
# 박스플롯 시각화: 대도시별 예약 가능 일수 분포
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()
Python
복사
리뷰 수 1 이상일 때 데이터 확인
# 리뷰 수가 1 이상인 숙소만 필터링
# 리뷰 수가 1 이상인 숙소만 필터링
df_reviews = df[df['number_of_reviews'] > 0]
# 리뷰 수 관련 통계 계산
review_summary = {
"총 숙소 수": len(df_reviews),
"리뷰 수 평균": round(df_reviews["number_of_reviews"].mean(), 1),
"리뷰 수 중간값": df_reviews["number_of_reviews"].median(),
"리뷰 수 최솟값": df_reviews["number_of_reviews"].min(),
"리뷰 수 최댓값": df_reviews["number_of_reviews"].max(),
"상위 25% 기준값": df_reviews["number_of_reviews"].quantile(0.75),
"하위 25% 기준값": df_reviews["number_of_reviews"].quantile(0.25)
}
# 딕셔너리를 DataFrame으로 변환
review_summary_df = pd.DataFrame(list(review_summary.items()), columns=["지표", "값"])
review_summary_df
Python
복사
지표 | 값 |
0 | 총 숙소 수 |
1 | 리뷰 수 평균 |
2 | 리뷰 수 중간값 |
3 | 리뷰 수 최솟값 |
4 | 리뷰 수 최댓값 |
5 | 상위 25% 기준값 |
6 | 하위 25% 기준값 |
결과
.png&blockId=21b2dc3e-f514-818b-b72b-f9aade6351bf)




