markdown复制## 1. 项目概述:纽约Airbnb数据全流程分析实战
最近在Kaggle上发现一份有趣的纽约市Airbnb开放数据集,包含了2019年近4.9万条房源信息。作为数据从业者,我决定用这个真实数据集演示完整的数据分析流程——从原始数据下载到最终可视化呈现。这个案例特别适合想学习Python数据分析的新手,整个过程涉及数据清洗、异常值处理、特征工程和业务洞察等核心环节。
数据集包含16个字段,涵盖房源位置、价格、评论等关键信息。我们将重点关注三个核心问题:哪些区域房源最受欢迎?不同房型价格分布有何差异?如何识别潜在的异常房源?通过这个项目,你不仅能掌握pandas、seaborn等工具的使用技巧,更能学会如何从杂乱数据中提取商业价值。
## 2. 数据准备与环境配置
### 2.1 数据集获取与初探
数据集来自Kaggle的"New York City Airbnb Open Data",包含布鲁克林、曼哈顿等五大区的房源信息。下载解压后得到一个CSV文件(约25MB),建议使用Jupyter Notebook进行分析。
```python
# 基础工具包导入
import numpy as np # 数值计算
import pandas as pd # 数据处理
import seaborn as sns # 可视化
import matplotlib.pyplot as plt # 绘图
%matplotlib inline
# 解决显示问题
pd.set_option('display.max_columns', None) # 显示所有列
pd.set_option('display.max_rows', 100) # 显示100行
pd.set_option('display.width', 200) # 不自动换行
2.2 数据加载与初步检查
加载数据时我遇到了路径问题——Windows系统需要使用双反斜杠或原始字符串。建议新手使用绝对路径时注意转义字符:
python复制# 两种安全的路径写法
airbnb = pd.read_csv("C:\\Users\\YourName\\Desktop\\AB_NYC_2019.csv") # 转义写法
# 或
airbnb = pd.read_csv(r"C:\Users\YourName\Desktop\AB_NYC_2019.csv") # 原始字符串
初次查看数据建议使用三个方法:
head()查看前几行info()检查数据类型和缺失值describe()获取数值统计
python复制print(airbnb.info())
输出显示有6个字段存在缺失值,其中last_review缺失最严重(约20%),这为我们后续清洗指明了方向。
3. 数据清洗与预处理
3.1 缺失值处理策略
面对缺失值,我们需要区分不同类型采取相应策略:
| 字段名称 | 缺失比例 | 处理方案 | 理由 |
|---|---|---|---|
| name | 0.03% | 删除列 | 对分析无价值 |
| host_name | 0.04% | 删除列 | 涉及隐私且无关分析 |
| last_review | 20.5% | 删除列 | 与reviews_per_month强相关 |
| reviews_per_month | 20.5% | 填充0 | 无评论即视为0次/月 |
实操代码:
python复制# 删除非必要列
airbnb.drop(['id','host_name','last_review'], axis=1, inplace=True)
# 填充评论数为0
airbnb.fillna({'reviews_per_month':0}, inplace=True)
# 验证处理结果
assert airbnb.isnull().sum().sum() == 0 # 确保无剩余缺失值
3.2 异常值检测与处理
通过箱线图发现minimum_nights存在极端值(最大1250天),这明显不符合短租业务逻辑。我的处理原则是:
- 保留原始数据副本供回溯
- 对明显错误数据设置合理上限(365天)
- 记录处理过程便于审计
python复制# 创建处理副本
airbnb_clean = airbnb.copy()
# 限制最短租期不超过1年
airbnb_clean.loc[airbnb_clean['minimum_nights'] > 365, 'minimum_nights'] = 365
# 可视化对比
fig, axes = plt.subplots(1,2, figsize=(12,4))
airbnb['minimum_nights'].plot.box(ax=axes[0]).set_title('处理前')
airbnb_clean['minimum_nights'].plot.box(ax=axes[1]).set_title('处理后')
经验提示:价格字段也需要类似处理,实际分析中发现有0元和9999美元的极端值,建议使用分位数截断法:
python复制q99 = airbnb['price'].quantile(0.99) airbnb_clean = airbnb_clean[airbnb_clean['price'] <= q99]
4. 探索性数据分析(EDA)
4.1 区域受欢迎度分析
通过两个互补指标评估房源热度:
- 评论总数(正向指标)
- 年均可用天数(负向指标)
python复制# 按行政区分组计算指标
reviews_by_area = (airbnb_clean.groupby('neighbourhood_group')['number_of_reviews']
.sum().sort_values(ascending=False))
availability_by_area = (airbnb_clean.groupby('neighbourhood_group')['availability_365']
.mean().sort_values())
可视化呈现技巧:使用对比子图增强可读性
python复制plt.figure(figsize=(12,5))
plt.subplot(121)
sns.barplot(x=reviews_by_area.index, y=reviews_by_area.values, palette="Blues_d")
plt.title('Total Reviews by Area')
plt.subplot(122)
sns.barplot(x=availability_by_area.index, y=availability_by_area.values, palette="Reds_d")
plt.title('Average Available Days')
plt.tight_layout()
分析结论:
- 布鲁克林在评论量上领先(约120万条)
- 曼哈顿房源最难订(年均可用仅112天)
- 斯塔滕岛两项指标都最低,可能因为地理位置偏远
4.2 价格分布与房型关系
不同房型价格差异显著,使用小提琴图展示分布:
python复制plt.figure(figsize=(10,6))
sns.violinplot(x='room_type', y='price', data=airbnb_clean[airbnb_clean['price']<500],
scale='count', inner='quartile')
plt.ylim(0,300)
plt.title('Price Distribution by Room Type')
关键发现:
- 整套房价格中位数约160美元
- 独立房间约70美元
- 共享房间最便宜(约50美元)
5. 高级分析与业务洞察
5.1 价格-地理位置热力图
使用hexbin可视化价格与经纬度的关系:
python复制plt.figure(figsize=(12,8))
plt.hexbin(x=airbnb_clean['longitude'], y=airbnb_clean['latitude'],
C=airbnb_clean['price'], gridsize=50, cmap='YlOrRd', reduce_C_function=np.median)
plt.colorbar(label='Median Price')
plt.title('Geographical Price Distribution')
这张图清晰显示出:
- 曼哈顿中城和金融区是高价房聚集地
- 布鲁克林高地附近形成次级高价区
- 机场周边价格明显洼地
5.2 多维度交叉分析
使用透视表分析不同区域房型组合的价格:
python复制pd.pivot_table(airbnb_clean, values='price', index='neighbourhood_group',
columns='room_type', aggfunc=np.median)
输出表格显示:
- 曼哈顿整套房比布鲁克林贵约25%
- 各区域共享房间价差最小
- 皇后区的独立房间性价比最高
6. 项目复盘与经验总结
在整个分析过程中,有几个关键点值得特别注意:
- 数据清洗阶段:
- 缺失值处理需要结合业务逻辑,简单删除可能损失信息
- 异常值修正要保留修改记录,方便后续验证
- 可视化技巧:
- 组合图表比单一图表更能说明问题
- 适当设置坐标轴范围(如price<500)可以让模式更清晰
- 分析深度:
- 基础统计只能发现表面现象
- 交叉分析和地理编码能揭示深层规律
这个项目完整展示了数据分析的标准流程,相关技术可以直接迁移到电商、房地产等领域。对于想进一步探索的同学,建议尝试:
- 构建价格预测模型(使用随机森林/XGBoost)
- 加入外部数据(如地铁站点、景点位置)
- 进行时间序列分析(按月份拆分数据)
所有代码和数据集已整理在GitHub仓库,需要完整版的朋友可以私信获取。在实际业务中应用这些方法时,记得根据具体场景调整分析维度——比如针对投资决策应该更关注收益率而非绝对价格。
code复制