首页 / 资讯中心 / 文章详情

纽约Airbnb数据分析实战:从清洗到建模

纽约Airbnb数据分析实战:从清洗到建模 ★ FEATURED ARTICLE
1. 项目背景与数据价值纽约市作为全球最热门的旅游目的地之一其短租市场一直保持着极高的活跃度。Airbnb作为共享经济模式的代表平台在这里积累了海量的房源信息和交易数据。这些数据就像一座未经开采的金矿蕴含着房东定价策略、游客偏好趋势、区域商业价值等宝贵信息。我最近完整走通了一个从原始数据到可视化分析的全流程项目使用的正是纽约市Airbnb的开放数据集。这个数据集包含了2019年约5万条房源信息涵盖曼哈顿、布鲁克林等五大行政区。每条记录包含价格、房型、评价分数等40多个字段足够我们挖掘出许多有意思的洞察。提示Kaggle平台上的这个数据集更新至2023年但考虑到数据一致性建议初学者先使用2019年的经典版本练手。2. 数据准备与清洗实战2.1 原始数据概览下载解压后我们会得到三个CSV文件listings.csv详细房源信息reviews.csv用户评价记录calendar.csv房源预订日历重点处理的是listings.csv其核心字段包括[id, name, host_id, neighbourhood_group, room_type, price, minimum_nights, number_of_reviews, last_review, reviews_per_month, availability_365]2.2 数据清洗四步法第一步处理缺失值# 检查缺失比例 df.isnull().sum()/len(df)*100 # 评价相关字段缺失严重 reviews_per_month 20.5% last_review 20.5%对于评价字段我选择用0填充缺失值因为缺失很可能代表没有评价记录df.fillna({reviews_per_month:0}, inplaceTrue)第二步格式转换价格字段原始为$150这样的字符串需要转换为数值df[price] df[price].str.replace($,).str.replace(,,).astype(float)第三步异常值处理发现有些房源标价$9999明显不符合常理# 绘制价格分布箱线图 sns.boxplot(xdf[price]) plt.show() # 过滤掉价格500美元的极端值 df df[df[price] 500]第四步特征工程创建新特征price_per_person人均价格df[price_per_person] df[price] / df[accommodates]3. 探索性分析(EDA)关键发现3.1 区域价格对比使用seaborn绘制各行政区价格分布plt.figure(figsize(10,6)) sns.boxplot(xneighbourhood_group, yprice, datadf) plt.title(Price Distribution by Borough) plt.show()3.2 房型市场份额df[room_type].value_counts().plot.pie(autopct%1.1f%%)发现整套公寓占比58.3%私人房间占37.2%说明纽约Airbnb以整租为主。3.3 价格影响因素计算各特征与价格的相关系数corr_matrix df[[price, accommodates, bathrooms, bedrooms, beds]].corr() sns.heatmap(corr_matrix, annotTrue)结果显示卧室数量(bedrooms)与价格相关性最高(r0.53)。4. 机器学习建模实战4.1 特征选择选择6个关键特征features [neighbourhood_group, room_type, accommodates, bedrooms, bathrooms, minimum_nights]4.2 数据预处理使用ColumnTransformer处理分类变量from sklearn.compose import ColumnTransformer preprocessor ColumnTransformer( transformers[ (cat, OneHotEncoder(), [neighbourhood_group, room_type]) ])4.3 模型训练与评估采用随机森林回归from sklearn.ensemble import RandomForestRegressor model Pipeline(steps[ (preprocessor, preprocessor), (regressor, RandomForestRegressor(n_estimators100)) ]) # 5折交叉验证 scores cross_val_score(model, X, y, cv5, scoringneg_mean_squared_error) print(RMSE平均得分:, np.sqrt(-scores).mean())最终模型在测试集上达到RMSE68.2意味着平均预测误差约68美元。5. 可视化仪表板开发使用Plotly Dash构建交互式看板import dash from dash import dcc, html app dash.Dash() app.layout html.Div([ dcc.Graph(idprice-distribution), dcc.Dropdown( idneighbourhood-filter, options[{label: i, value: i} for i in df[neighbourhood_group].unique()], multiTrue ) ]) app.callback( Output(price-distribution, figure), [Input(neighbourhood-filter, value)] ) def update_graph(selected_neighbourhoods): filtered_df df if not selected_neighbourhoods else \ df[df[neighbourhood_group].isin(selected_neighbourhoods)] return px.box(filtered_df, xneighbourhood_group, yprice)6. 商业洞察与建议通过分析我们得出三个关键结论定价策略曼哈顿studio公寓的合理价格区间应为$120-$180/晚每增加一个卧室可溢价约$65。运营建议布鲁克林房源若想提高竞争力应将minimum_nights设置在3天以下并确保availability_365 200天。投资方向皇后区Astoria区域的整租公寓目前存在价格洼地平均价格比相邻区域低15-20%。7. 项目复盘与经验总结数据质量方面原始数据存在约20%的评价信息缺失需要合理填充价格字段包含货币符号和逗号需特殊处理警惕极端值对分析结果的影响建模心得随机森林对这类数据表现优于线性回归地理特征(经纬度)加入模型可提升3-5%准确率评价文本情感分析可作为下一步优化方向可视化技巧Plotly的交互式筛选非常实用地图可视化建议使用folium库避免在仪表板中放置超过5个图表这个项目完整展示了从原始数据到商业价值挖掘的全流程其中最关键的是保持对数据质量的敏感度。我发现在清洗阶段花费的时间往往能节省后续大量的调试成本。下次我会尝试加入更多时间序列分析方法比如研究价格随季节波动的规律。
阅读完成 · 觉得有帮助?
咨询建站