数据分析实践--数据解析购房关键

在房地产市场中,房价受房屋特征、地理位置、时间因素等多重变量影响。本项目基于真实房屋销售数据,通过数据清洗、特征工程、统计分析与可视化,挖掘房价核心影响因素,为投资者、开发商和购房者提供数据支撑。

一、项目背景与目标

1.1 业务背景

房地产市场参与者(开发商、投资者、购房者)需精准把握房价规律:开发商需优化定价策略,投资者需评估回报率,购房者需筛选高性价比房源。本项目通过分析房屋销售数据,揭示关键影响因素。

1.2 核心目标

  • 探究房屋特征(面积、卧室数等)对房价的影响程度
  • 对比不同区域(邮政编码)的市场差异
  • 分析房龄、翻新情况等时间因素与房价的关系
  • 通过可视化直观呈现数据规律

二、数据源说明

2.1 数据字段详情

字段名 含义 数据类型 说明
id 房屋销售唯一标识 整数 唯一区分每条销售记录
date 销售日期 日期时间类型 房屋成交日期,用于时间序列分析
price 销售价格(核心指标) 数值型 房屋成交金额,单位为美元
bedrooms 卧室数量 整数 房屋卧室总数,影响居住实用性
bathrooms 浴室数量 整数 影响房屋舒适度
sqft_living 居住面积(平方英尺) 数值型 房屋内部实际居住面积,核心影响因素
sqft_lot 土地面积(平方米) 数值型 房屋所属土地总面积
floors 楼层数 整数 影响采光、视野等居住体验
waterfront 是否临水 整数(0/1) 1 = 临水,0 = 不临水,景观价值影响房价
view 景观评分 整数(0-4) 景观质量评分,越高吸引力越强
condition 房屋状况评分 整数(1-5) 房屋结构、装修维护状况
grade 房屋质量评分 整数(1-13) 建筑质量与设计水平综合评分
sqft_above 地上面积(平方米) 数值型 地面以上建筑面积
sqft_basement 地下室面积(平方米) 数值型 额外功能区域,影响实用性
yr_built 建造年份 整数 房屋建成时间,影响折旧程度
yr_renovated 翻新年份 整数 0 = 未翻新,非 0 为具体翻新年份
zipcode 邮政编码 整数 标识地理位置区域
lat/long 纬度 / 经度 数值型 精确地理位置坐标

2.2 数据规模

  • 原始数据量:约 2 万条房屋销售记录
  • 字段数量:19 个(含特征工程衍生字段)
  • 数据时间范围:2014-2015 年

三、技术栈选型

  • 数据读取与处理:Pandas、NumPy
  • 可视化:Matplotlib
  • 核心能力:数据清洗、特征工程、统计分析、时间序列分析

四、完整实现步骤

4.1 环境准备

复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 配置中文字体(解决中文显示乱码)
rcParams["font.sans-serif"] = ["SimHei"]
rcParams["axes.unicode_minus"] = False  # 解决负号显示异常

4.2 数据读取与初步探索

复制代码
# 读取数据
data = pd.read_csv("data/house_sales.csv")

# 查看数据基本信息
print("数据形状(行数×列数):", data.shape)
print("\n数据类型与非空值统计:")
data.info()
print("\n数值型字段描述性统计:")
print(data.describe().round(2))

4.3 数据清洗

4.3.1 缺失值处理
复制代码
# 统计各列缺失值数量
missing_values = data.isnull().sum()
print("缺失值统计:")
print(missing_values[missing_values > 0])

# 删除包含缺失值的行(因缺失值占比<5%,直接删除不影响整体规律)
data = data.dropna()
print("\n清洗后数据形状:", data.shape)
4.3.2 异常值处理(以房价为例)
复制代码
# 用IQR方法识别房价异常值
Q1 = data["price"].quantile(0.25)
Q3 = data["price"].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR  # 异常值下限
upper_bound = Q3 + 1.5 * IQR  # 异常值上限

# 筛选正常范围数据
data = data[(data["price"] >= lower_bound) & (data["price"] <= upper_bound)]
print(f"房价正常范围:[{lower_bound:.2f}, {upper_bound:.2f}]")
print("去除异常值后数据形状:", data.shape)

4.4 特征工程

复制代码
# 1. 日期类型转换(便于时间序列分析)
data["date"] = pd.to_datetime(data["date"])

# 2. 衍生特征:房屋使用年限(销售年份 - 建造年份)
data["age"] = data["date"].dt.year - data["yr_built"]

# 3. 衍生特征:是否翻新(0=未翻新,1=已翻新)
data["is_renovated"] = data["yr_renovated"].apply(lambda x: 1 if x > 0 else 0)

# 查看衍生特征效果
print("衍生特征前5行数据:")
print(data[["date", "yr_built", "age", "yr_renovated", "is_renovated"]].head())

4.5 核心分析与可视化

4.5.1 房价分布分析
复制代码
# 绘制房价分布直方图
plt.figure(figsize=(10, 6))
plt.hist(data["price"], bins=30, edgecolor="black", alpha=0.7)
plt.title("房屋价格分布直方图", fontsize=14)
plt.xlabel("价格(美元)", fontsize=12)
plt.ylabel("房屋数量", fontsize=12)
plt.grid(axis="y", alpha=0.3)
plt.show()

# 输出房价核心统计指标
price_stats = data["price"].agg(["mean", "median", "std", "min", "max"]).round(2)
print("房价核心统计指标:")
print(price_stats)
4.5.2 房屋特征与房价相关性分析
复制代码
# 筛选数值型字段计算相关性
numeric_cols = data.select_dtypes(include=[np.number]).columns
correlation = data[numeric_cols].corr()

# 查看与房价相关性Top5的特征
price_corr = correlation["price"].sort_values(ascending=False)
print("与房价相关性Top5特征:")
print(price_corr[1:6].round(3))  # 排除自身相关性

# 绘制相关性热力图(聚焦核心特征)
core_features = ["price", "sqft_living", "grade", "sqft_above", "bedrooms", "age", "is_renovated"]
plt.figure(figsize=(10, 8))
plt.imshow(correlation.loc[core_features, core_features], cmap="coolwarm", interpolation="nearest")
plt.colorbar(label="相关系数")
plt.xticks(range(len(core_features)), core_features, rotation=45)
plt.yticks(range(len(core_features)), core_features)
plt.title("核心特征相关性热力图", fontsize=14)

# 在热力图中添加相关系数数值
for i in range(len(core_features)):
    for j in range(len(core_features)):
        plt.text(j, i, f"{correlation.loc[core_features[i], core_features[j]]:.2f}",
                 ha="center", va="center", color="white" if abs(correlation.loc[core_features[i], core_features[j]]) > 0.5 else "black")
plt.tight_layout()
plt.show()
4.5.3 区域差异分析(按邮政编码)
复制代码
# 按邮政编码分组,计算核心指标
zipcode_stats = data.groupby("zipcode").agg({
    "price": "mean",
    "sqft_living": "mean",
    "bedrooms": "mean"
}).round(2)
zipcode_stats.columns = ["平均房价", "平均居住面积", "平均卧室数"]

# 筛选房价Top10的邮政编码
top10_zipcode = zipcode_stats.sort_values("平均房价", ascending=False).head(10)
print("房价Top10邮政编码区域:")
print(top10_zipcode)

# 可视化Top10区域平均房价
plt.figure(figsize=(12, 6))
top10_zipcode["平均房价"].plot(kind="bar", color="steelblue")
plt.title("房价Top10邮政编码区域平均房价", fontsize=14)
plt.xlabel("邮政编码", fontsize=12)
plt.ylabel("平均房价(美元)", fontsize=12)
plt.xticks(rotation=45)
plt.grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.show()
4.5.4 时间因素分析(房龄、翻新)
复制代码
# 1. 房龄与房价关系
plt.figure(figsize=(10, 6))
plt.scatter(data["age"], data["price"], alpha=0.5, color="orange")
plt.title("房屋使用年限与房价关系", fontsize=14)
plt.xlabel("使用年限(年)", fontsize=12)
plt.ylabel("房价(美元)", fontsize=12)
plt.grid(alpha=0.3)
plt.show()

# 2. 翻新情况与房价对比
renovation_stats = data.groupby("is_renovated")["price"].agg(["mean", "median", "count"]).round(2)
renovation_stats.index = ["未翻新", "已翻新"]
print("翻新情况与房价对比:")
print(renovation_stats)

# 可视化翻新情况对房价的影响
plt.figure(figsize=(8, 6))
renovation_stats[["mean", "median"]].plot(kind="bar", color=["lightblue", "coral"])
plt.title("翻新与未翻新房屋价格对比", fontsize=14)
plt.xlabel("房屋状态", fontsize=12)
plt.ylabel("价格(美元)", fontsize=12)
plt.legend(["平均房价", "中位房价"])
plt.grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.show()
4.5.5 时间序列分析(年度房价趋势)
复制代码
# 按年份分组计算平均房价
yearly_price = data.groupby(data["date"].dt.year)["price"].mean().round(2)
print("年度平均房价趋势:")
print(yearly_price)

# 可视化年度房价趋势
plt.figure(figsize=(10, 6))
yearly_price.plot(kind="line", marker="o", linewidth=2, markersize=8, color="green")
plt.title("2014-2015年平均房价趋势", fontsize=14)
plt.xlabel("年份", fontsize=12)
plt.ylabel("平均房价(美元)", fontsize=12)
plt.grid(alpha=0.3)
plt.xticks(yearly_price.index)
plt.tight_layout()
plt.show()

4.6 关键结论提炼

  1. 房价核心影响因素:居住面积(sqft_living)、房屋质量评分(grade)与房价相关性最强(相关系数 > 0.6),是定价核心变量。
  2. 区域差异:Top10 区域平均房价是整体均值的 1.8 倍,地理位置对房价影响显著。
  3. 时间因素:房龄与房价呈弱负相关(相关系数 - 0.23),翻新房屋平均房价比未翻新高 15% 以上。
  4. 市场趋势:2014-2015 年房价呈稳步上升趋势,年涨幅约 5%。

五、项目价值

  • 开发商:可重点优化居住面积和房屋质量,针对高价值区域(Top10 邮政编码)制定高端定价策略。
  • 投资者:优先选择房龄 < 10 年、未翻新但具备翻新潜力的房源,性价比更高。
  • 购房者:相同预算下,可重点关注非临水但居住面积大的房源,兼顾实用性与性价比。
相关推荐
叫我:松哥1 天前
基于 Flask 的音乐推荐与可视化分析系统,包含用户、创作者、管理员三种角色,集成 ECharts 进行数据可视化,采用混合推荐算法
开发语言·python·信息可视化·flask·echarts·pandas·推荐算法
电商API_180079052471 天前
获取淘宝商品视频API教程:从授权到落地实战
大数据·数据库·人工智能·数据分析·音视频
Aloudata1 天前
企业落地 ChatBI,如何构建可信可靠的数据底座?
数据分析·chatbi·data agent
城数派1 天前
我国省市县三级逐日、逐月和逐年降水数据(Shp/Excel格式)1960-2024年
大数据·数据分析·excel
qq_12498707531 天前
基于Hadoop的黑龙江旅游景点推荐系统的设计与实现(源码+论文+部署+安装)
大数据·hadoop·分布式·python·信息可视化
雨大王5121 天前
汽车制造质量大数据分析如何助力企业创新发展?
数据分析·汽车·制造
青春不败 177-3266-05201 天前
基于R语言生物信息学大数据分析与绘图技术应用
数据分析·r语言·生物信息·生信·高通量
龙腾AI白云1 天前
10分钟了解向量数据库(3)
pandas·scipy