链家北京二手房交易数据分析
安居客北京房地产交易数据研究
项目背景:
基于此前对机器学习和自然语言处理相关知识的学习基础,在Kaggle平台尝试了泰坦尼克号生存者预测项目以及‘Words Meets Bags of Popcorn’两个项目的深入研究。这促使我对数据分析领域产生了浓厚的兴趣;系统性地掌握了SQL技能后,并结合阅读《赤裸裸的统计学》一书的内容后,在生活中无处不在的数据现象中提炼出了许多值得深入探索的问题。
收集数据:
获取链家平台提供的北京二手房数据集,并通过建立模型并进行数据分析深入探究这些房源的特征和规律。
数据集中相关字段说明:
Region:北京的区域
Direction:房屋的朝向
District:房屋位于的商业区
Elevator:房屋是否有电梯
Garden:小区名称
Id:房屋编号
Layout:房屋格局
Price:房屋价格
Renovation:房屋装修类型
Size:房屋的大小
Year:房屋的建造年份
明确分析目标
基于二手房业务的需求方向以及个人关注的一些问题,在几个关键维度(如地理位置、房屋朝向方位、价格范围及面积大小等)展开讨论。
1.分析影响二手房房价的因素
2.北京各区二手房的数量与价格分布
数据初探
首先将待分析的数据以CSV格式读取并存储于变量numbers中,并对这些数据进行初始观察以识别其中存在的缺失值、异常值及其他基本统计特征。

通过初步分析发现共计11个特征变量,在本研究中被设定为因变量。随后进行了深入分析以进一步探索其内在关联。
将数据导入到spark_sql, 创建数据表。
import csv
with open('lianjia.csv') as f:
reader = csv.reader(f)
rows=[row for row in reader]
for r in rows[1:]:
print '\001'.join(r)
将数据写入 file://Users/liushurui/Desktop/data
- 启动spark_sql
spqrk-sql

use default;
show tables;
CREATE EXTERNAL TABLE lj(
direction STRING,
district STRING,
elevator STRING,
floor STRING,
garden STRING,
id STRING,
layout STRING,
price STRING,
region STRING,
renovation STRING,
size STRING,
year STRING
)
STORED AS TEXTFILE LOCATION 'file:///Users/liushurui/Desktop/data';
需要分别查看每个特征变量的缺失情况及其数值统计指标(如平均数、标准差、中位数等),用SQL则需逐一针对每一列进行计算。可以先用Python进行初步分析以了解数据分布特征)。
# coding:UTF-8
import pandas as pd
import numpy as np
# 导入数据
lianjia_df = pd.read_csv('~/Desktop/Lianjia.csv')
print lianjia_df.head(n=2)
print lianjia_df.info()
print lianjia_df.describe()

- 总结:一共有23677条数据,其中Elevator特征有明显的缺失值。

总结:上述分析揭示了特征值作为数值型数据的一部分所包含的重要统计信息。这些信息具体包括均值、标准差、最小值、第一和第三四分位数以及最大值等基础统计指标。通过这些简洁明了的描述可以帮助快速把握特征的基本特性,并辅助判断数据质量。以Size特性的最小观测值为例(为2平方米),这一明显不符合实际情况的极端情况提示我们应当识别并处理这些异常观测数据,在后续建模过程中予以特别关注以避免影响预测效果。
数据可视化
Region特征分析
对于区域特征,我们可以分析不同区域的房价和数量的对比。
select region, count(*) c from lj group by region order by c desc;

select r, avg(a) av from (select region r, cast(price as int)/cast(size as int) a from lj) group by r order by av desc;

从以上柱状图可以观察到:
北京市二手房市场结构:根据数量统计数据显示,在二手住宅市场中海淀、朝阳以及丰台三个区域约有3000套房源处于活跃状态这些区域属于北京市三大核心区域而昌平区紧随其后也较为活跃其余位于五环以外的区域如平谷怀柔与密云等地房源稀少
北京市二手房价格水平:根据每平米单价的统计结果可以看出西城区房价最高约为11万元/平方米这一区域位于二环内且集中了重点教育学区内房价最为高昂其次东城区约为10万元/平方米海淀区则达到8.8万元/平方米水平较低的地区多在8万元以下
思考:在北京市各区计算二手房每平方米单价时,计算平均价格的方法有两种。第一种方法是利用每套房子的价格除以面积得到单平方价格,在依据区域分组后获得各区域二手房单平方价格均值的结果;第二种方法则直接计算各区域所有二手房的价格总额与总面积总和之比来确定各区域单平方价格均值。为了进一步理解这两种方法的特点及其差异,请尝试应用第二种方法进行实际计算,并对比两种方法得出的结果。
select r, p/s avg from (select region r, sum(price) p, sum(size) s from lj group by region) order by avg desc;
结果对比:

结论:两组数据的最终结果相近水平,并且能够说明各地区房价大小较为均衡。
Size特征分析
从房屋面积特征的角度出发,我们可以研究其数量分布情况,并探讨其与房屋价格之间的影响关系。
size分布
select size s, count(*) from lj group by s order by s;
按照size大小排序后,结果如下:

问题:实际运行结果与预期不符,在深入排查后发现,在创建数据表的过程中,所有字段在数据表中都被错误地设置了string数据类型而导致排序时严格按照字符串顺序进行处理。
解决:通过调整Hive SQL中的数据类型设置
select cast(size as int) s, count(*) from lj group by s order by s;
按照size大小排序后,结果如下:

总结:对sql的数据类型有了更深的理解。

根据观察到的折线图显示,在房子大小这个维度上存在过多的不同取值范围。尽管能够大致了解数据的整体表现特征(总体呈现一种上升趋势),但具体到各个面积区间内的分布情况则并不明显(大多数观测点集中在60至100平方米之间)。值得注意的是,在这种情况下数据点分布过于集中(各个面积区间的数量差异悬殊),导致这一现象可能导致分析结果不够清晰(无法直观反映不同区间之间的差异)。在结合机器学习模型进行特征工程时需要注意这一问题(特别是针对那些数值型特征而言),因为这类指标往往具有较高的离散程度(即数值范围较大),这在一定程度上会影响模型的表现效果(尤其是在特征缩放方面)。因此,在后续的数据预处理阶段建议对这些指标进行标准化处理(通过归一化操作使得其取值范围被限制在统一的标准范围内)。具体实施方法是将原始数值转换为其标准化后的值(即通过减去均值后再除以标准差来实现)这样不仅能够消除量纲的影响还能使模型在训练过程中更加稳定和收敛得更快
预处理工作:基于最初的数据显示,观察到size属性的最大取值为1019,并基于对房屋面积相关知识的理解,在确保数据质量的前提下,建议首先剔除所有size超过500的数据点,并在后续分析中采用归一化方法以消除量纲差异的影响。

select cast(cast(size as int)/10 as int)*10 s, count(*) c from lj group by s having s < 400 order by s;
- 归一化后结果展示:

- 对比上图,在归一化处理后的数据呈现更为明确的趋势。具体而言,在20个单位为一组的情况下,房屋面积数量的分布呈现出更为清晰的变化趋势。
- 总结:通过分析上图可知,在北京市区大多数二手房面积均不超过160平方米(即小于160平方米),随后呈现明显的长尾特征,在200~500平方米范围内的房产可能属于用于二手交易的别墅类型。
Size与Price分布

通过分析Size与Price的散点图,研究发现Size特征与Price之间呈现出明显的线性关系,符合常识预期:面积越大,价格越高。然而,在数据中存在明显偏离规律的两点值得关注:一是面积不足10平方米却价格高达4000万元以上的情况;二是面积接近1000平方米却价格显著低于市场预期的情况。这些异常情况值得进一步调查分析的情况
#####情况一:Size < 10
select region, direction, district, elevator, floor, garden, id, layout, price, renovation, size, year from lj where cast(size as int) < 10;
得到以下数据:

通过分析发现该组数据涉及别墅领域;其余三类关键属性(即装修状况)也均存在异常;异常现象的产生主要源于别墅建筑结构的独特性;字段定义与传统意义上的二手房与之不同;导致采集的数据出现位置偏移问题。
#####情况二:size > 1000
select region, direction, district, elevator, floor, garden, id, layout, price, renovation, size, year from lj where cast(size as int) > 1000;


- 分析显示该异常案例属于非典型民用住宅建筑结构类型。
- 剔除这些超出预期的数据样本
- 对价格字段进行一次取均值的预处理操作
- 剔除这些超出预期的数据样本
select cast(size as int) s, avg(price) from lj group by s order by s;

总结:借助numbers软件中的趋势分析工具生成的曲线图形基本上呈现为一条直线。虽然originally属于numbers软件的功能库,但这种分析方法本质上对应于机器学习中的线性回归模型。
Layout特征分析
对于Layout特征分析,可以统计不同户型的房子的数量。
统计后的结果如图:


本次数据可视化采用Numbers软件进行分析,在分析过程中对原始数据进行了标准化处理并对统计数据进行了精确计算的基础上
综上所述,在数据分析中认识到数据可视化的方法应当尽可能多样化。为此需要深入理解各类统计图表的特点与适用场景,并熟练掌握它们各自的优缺点及其适用条件;通过这种能力训练可以让他人能够直观地识别出数据蕴含的关键信息与潜在关系。这一原则有助于提升数据分析的效果。
总结:通过分析图表数据可以看出,在不同部门之间采用多样化的办公空间布局模式时会遇到一些特殊配置的情况。例如除了常见的两间办公室加一间会议室的比例之外还有一些较为不规范的设计如9间办公室加3个会议室这样的结构以及4间办公室完全没有会议室的情况(即4室0厅)。其中两间办公室配一间会议室的比例仍然是最常见的配置模式。
改进:进一步观察发现,在当前系统中存在大量的Layout类型的特征数量非常有限只有1到2种左右的情况这会导致生成的布局方案过于密集使得整体布局显得拥挤杂乱难以一目了然。因此建议将这些特征进行汇总并单独归类为其他类型布局以提高布局方案的整体清晰度和实用性。

Renovation特征分析
为了深入研究房屋装修特征的本质问题,在二手房装修市场中我们可以关注其数量结构,并探讨其与价格之间的关系。
Renovation特征数量分布
select renovation r, count(*) c from lj group by r order by c desc;
可视化结果:

意识到 Renovation 装修特征中存在南北之分这一特性,并且该特性能归类为朝向特性;然而,在柱状图中无法直接观察到其数量的具体数值;于是尝试以饼图的形式重新呈现数据以便于直观了解各部分所占比例。

从饼状图中可以看出南北特征的数据占比仅为2%。在统计学研究中发现,在数据分析过程中采用百分数相比使用绝对数值与相对数值更能直接地体现其具体值及其实际意义。
探究:南北朝向的表现形式是什么?具体表现为:在爬取过程中存在字段信息空缺的情况(可能导致该方向特征的出现),因此需要采取措施剔除相关数据)。
select renovation r, count(*) c from lj group by r having r != '南北' order by c desc;


Renovation与price的关系
select renovation r, avg(price) p from lj group by r order by p desc;

根据图表数据可以看出,在二手房市场中精装房的占比约为50%,而在价格排名中毛坯房的平均售价位居榜首、紧随其后的是精装房
Elevator特征分析(重难点)
对于有无电梯特征,可以分析一下北京各个区域电梯数量的TGI。
在进行数据概览的过程中,我们注意到Elevator特征存在显著数量的缺失值.这会对我的分析带来较大的挑战.
select elevator e,count(*) from lj group by e;

Elevator缺失值数量为:8237
面对这么多缺失值该怎么办?在具体情况下需要综合评估各种因素后决定采用何种补救措施。常用的方法包括均值和中位数填充法、直接删除以及基于其他特征建立模型进行预测等多种方式。在我的思考过程中,最初倾向于采用补救措施中的填充法。然而,在分析数据属性时发现,“电梯是否存在”这一属性属于非数值型变量,并不具备均值或中位数值可言。因此,在此情况下我想到了另一种替代方法:
根据生活经验及楼层分布情况判断某小区是否有电梯时,默认依据是否超过6层这一标准进行分类:通常超过6层的建筑物都会有电梯而低于或等于6层的则普遍没有电梯配置。
在模型构建过程中由于总会面临数据不足的问题因此需要通过合理的假设来补充缺失信息以使分析过程更加完整:假设与实际情况越接近带来的误差也会越小。
基于此方法论我们可以将分割线设定在9层以上:若某一居民区存在高于9层的商品房或拥有电梯住户则该小区的所有缺失值应被标记为有电梯;反之则维持原有缺失值不变。
这种改进方案相较于简单的二分法更为灵活但又不会过度简化问题带来的不确定性。
Floor特征分析
对Floor特征而言,在研究二手房市场时可探究各楼层对应的交易量分布情况,并同时考察楼层设置对其价格水平的影响程度
Floor特征数量分布
select cast(floor as int) f,cast(count(*) as int) c from lj group by f order by f
可视化结果:

分析:根据图表数据可以看出,在各层二手房数量中以6层为最高点位,并呈现出显著的增长态势。
- 改进:可以对楼层的数量求和,这样可以看到楼层数量的增长趋势。

总结:通过求和图表可以看出,在第5至第6层之间呈现了显著的陡峭式增长;这表明第6层层位的二手房数量最高;同时可以看出大部分位于28层层位及以下;而29至57楼层次之间的房源数量相对稀少。
Year特征分析
在二手房买卖交易中,买方通常会对房屋建造年份与其产权年限这一因素给予特别关注。对于该特征(Year),可以从建筑时间和房价之间的关系出发,并结合尺寸特征来界定老破小房屋类型。以此为基础研究全市及市区各区域老破旧房屋群组的TGI比例分布情况,并进而探讨不同区域的老破旧房屋群组在TGI指标上的差异。
(注)Year与price的分布关系
北京市各区域老破小TGI比例分布
select cast(year as int) y, count(*) c from lj group by y order by y;

从图表中可以看出,在1987年至2013年间内新建房屋数量持续攀升;而到了2014年后新建房屋数量急剧下降。
基于图表和之前的房屋面积特征分析结果,在开展相关分析前,需要对"老破小"下一个定义,并建立假设后进行后续分析。此次定义为:房屋面积小于40平方米且建造年份早于1990年,符合以下两个标准的房屋即为老破小。
select size s, year y from lj where size < 40 and year < 1990;
- 全市老破小的TGI:58/23677 = 0.00244963
北京市各区域老破小TGI分布:

分析:在北京市内分布较为集中的西城区与东城区等大区中,“老破小”的TGI值显著高于整体水平。进一步说明这些区域在北京市内的比例较高。值得注意的是,在上述分析中发现西城区与东城区的具体指标表现最为突出。此外,在其他未被重点考察的区域中,“老破小”的占比则相对较低。
Direction特征
针对Direction特征,在研究房屋朝向的数量分布情况时,我们可以通过分析其与房价的变化规律之间的关联来获取有用信息。
Direction的数量分布
select direction d, count(*) c from lj group by d order by c desc;

通过查看数据显示存在多处脏数据,在分析过程中发现朝向名称分类不统一,并且还有一些面积数值标注错误的数据需要修正。应将这些不符合规范的数据予以剔除。

从上表可知南北朝向的二手房数量最多。
Direction的数量与价格分布
select direction d, count(*) c from lj group by d order by c desc;


结合上面的图表数据画一个双y轴图:

通过双轴图可以在同一维度上对比不同特征的分布情况。
从以上图表可以看出南北朝向房屋数量最多。
南北朝向房屋通透、采光良好,满足购房需求。
开发商在建造房屋时通常会尽量增加南北朝向的房屋。
在价格分布上,东西南北四个方向的价格最高,在这种情况下通常被认为是别墅区。
东、西、南、北四个单方向房价均偏低。


分析:通过观察图表,在方向保持一致时(即同向分布的情况下),房价与面试得分之间仍呈正相关关系。这一发现与我们之前绘制房价与面积散点图所得出的结果完全一致。
District特征
对District 特征进行深入分析和研究具有重要意义。首先需要对商业区与价格的空间分布进行考察其空间分布特征;其次应从中提取所有相关特征指标并筛选出房价最高的前十个区域;最后则需探讨其影响因素。


- 分析:从图表中可以看出,万柳的房子均价是最高的。
展开查看万柳二手房的其他信息:
select direction, district, elevator, floor, garden, layout, price, renovation, size, year from lj where district = '万柳';

经分析对比可知,表中各特征间的关系与先前研究结果基本一致.值得注意的是,在网络上查询发现有关万柳房价的相关讨论显示其价格异常高昂.周边环境方面,则主要集中在高端社区圈层内.这些区域内的若干小区普遍以高收入家庭为主群居群体,并且房屋建筑规模普遍较大.社区内部配套设施较为完善,距离城市主干道较近,邻近市中心区域.
综上所述:通过对上述数据和图表的考察可以看出,在现有研究条件下,二手房房价的影响因素分析仍存在诸多局限性。具体而言,在提取能够反映房屋价值的关键特征方面仍需进一步探索和完善相关理论模型和评估指标。例如,在某些情况下需要考虑的因素包括:如是否是学区房、交通是否便利等因素。
项目总结:
Region特征:北京二手房均价和数量分布呈中心辐射状
在Size特征方面,在北京市内大多数二手住宅的建筑面积均不超过160平方米,并呈现出明显的线性关联。
Layout特征:2室1厅的房屋格局数量最多
Renovation特征:精装房数量最多,毛坯房价格最高
Floor特征:6层的房屋数量最多,大多数房屋均在28层以下
Year特征:西城区和东城区二手房老破小数量占比远超全市水平
Direction特征:南北朝向的二手房数量最多,价格和朝向的个数成正比
District特征:对于二手房房价的准确定位需要更多的特征数据
思考
综合来看,在运用Sql语言对链家北京市二手房交易数据进行全面的数据分析后,在算法设计和性能优化方面也取得了一定的进步与认识:然而,在优化空间方面仍存在诸多待提升之处:
提升对python爬虫技术的应用能力
