四季花园数据探索分析

数据来源 : 阳光家缘

背景

最近小区楼盘交楼了,等待了近两年的新房终于快要入住了,业主群也越来越活跃了,大家都非常期待尽快入住。

在群里的聊天中发现,发现每户的建筑面积都与合同上有些差异,且阳光家缘上已经登记并公布出来了,于是爬下了本小区(四季花园)的阳光家缘数据进行探索性分析,使用学到的数据分析知识来了解一下本小区的情况。

数据导入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import warnings
import pandas as pd
warnings.filterwarnings('ignore')
plt.style.use('seaborn-pastel')
matplotlib.matplotlib_fname()
## 导入数据
import pandas as pd
df = pd.read_csv('/Users/lihan/Documents/four_seasons.csv')
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 368 entries, 0 to 367
Data columns (total 8 columns):
楼栋          368 non-null int64
房号          368 non-null int64
类型          368 non-null object
总面积(平方米)    368 non-null float64
户型          368 non-null object
状态          368 non-null object
抵押          368 non-null object
查封          368 non-null object
dtypes: float64(1), int64(2), object(5)
memory usage: 23.1+ KB

数据集中共包含368个元素,其中包含8个变量,其中楼栋、房号、总面积属于数值型变量,其他字段属于文本离散型变量。

小区比较小,一共只有三栋楼,所以数据量不是很大,接下来,我们对数据进行一些有趣的探索。

数据清洗

1
2
# 查看数据情况
df.head()
楼栋 房号 类型 总面积(平方米) 户型 状态 抵押 查封
0 1 2501 其他 14.6774 其他 确权不可售
1 1 2401 住宅 119.4208 3房2厅 确权不可售
2 1 2402 住宅 122.2239 3房2厅 确权不可售
3 1 2403 住宅 119.6679 3房2厅 确权不可售
4 1 2404 住宅 93.9536 3房2厅 确权不可售

查看一下数据详情,这里我们发现,数据里的户型只存在两种情况“3房2厅”和“其他”。

通过面积数据可以看出,“其他”户型应该是不属于真正的可使用单位,毕竟并不存在总面积只有14个平方的房子。再观察房号可以看出,这些单位应该是属于各栋建筑的公摊部分,属于非住宅,所以我们首先需要将这些数据筛选掉。

1
2
## 筛选有效户数
df_actual = df[df["户型"] != "其他"]

而其他户型均为“3房2厅”,是因为小区里确实所有的户型均为3房2厅,只是不同户型面积有区别,这个户型确实也是刚需人群比较倾向的一个户型(侧面说明了确实是一个很小的小区,并没有多种户型可以选择)。所以,这里我们需要通过房号重构出“楼层”、“实际户型”两个变量,方便后续进行分析。

根据楼盘资料,小区的实际户型只有3种,92方、117方、120方,其中南向单位为1栋,3栋01、02

各单元与户型的对应关系如下:

楼栋\单元号 01 02 03 04 05
1 117 120 117 92 92
2 117 120 117 92 92
3 92 92 117 120 117
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 定义一个函数,通过楼栋和单元号,返回实际户型
def get_area(data):
#定义楼栋及单元号
building = str(data[0])
unit = str(data[1])[len(str(data[1]))-2:]
area = ''
#通过楼栋及单元号获取实际户型
if building == '3':
if unit in ('01','02'):
area = '92'
elif unit in ('03','05'):
area = '117'
else:
area = '120'
else:
if unit in ('04','05'):
area = '92'
elif unit in ('01','03'):
area = '117'
else:
area = '120'
return area
# 定义函数通过楼层生成楼层分类
def get_floor_type(data):
floor = float(data['楼层'])
if floor < 9:
return 1
if floor > 16:
return 3
else:
return 2
1
2
3
4
5
# 生成所有实际住宅的楼层及户型数据
df_actual["楼层"] = df_actual.apply(lambda x: str(x[1])[:len(str(x[1]))-2], axis=1)
df_actual["实际户型"] = df_actual.apply(get_area, axis=1)
df_actual.head(5)
楼栋 房号 类型 总面积(平方米) 户型 状态 抵押 查封 楼层 实际户型
1 1 2401 住宅 119.4208 3房2厅 确权不可售 24 117
2 1 2402 住宅 122.2239 3房2厅 确权不可售 24 120
3 1 2403 住宅 119.6679 3房2厅 确权不可售 24 117
4 1 2404 住宅 93.9536 3房2厅 确权不可售 24 92
5 1 2405 住宅 94.0210 3房2厅 确权不可售 24 92

数据探索

先定义一个分组函数方便后续进行分组统计,定义常用的几个绘图函数,方便后续进行调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 定义一个分组函数,计算每组的人数
def group_count(data,column):
# 按照name对乘客进行分组后,每个组的人数
return data.groupby(column)['房号'].count()
# 定义一个柱状图绘图函数
def print_bar(group_data, title):
#plt.bar(title=title, facecolor='#9999ff', edgecolor='white')
ax = group_data.plot.bar(title = title, facecolor='#9999ff', edgecolor='white')
for p in ax.patches:
ax.annotate(np.round(p.get_height(),decimals=2), (p.get_x()+p.get_width()/2., p.get_height()),
ha='center', va='center', xytext=(0, 5), textcoords='offset points')
# 定义一个饼图绘图函数
def print_pie(group_data, title):
group_data.plot.pie(title=title,figsize=(6, 6),autopct='%3.1f%%',startangle = 90,legend=True)

户数及面积情况

查看各楼栋的户数情况

1
2
3
## 各楼栋户数统计
df_group_ld = group_count(df_actual,"楼栋")
print_bar(df_group_ld, title = u"每栋楼户数")
 

将数据按照总面积进行排序,查看面积情况。

1
2
# 按总面积进行排序,面积最小的三个户型
df_actual.sort_values(["总面积(平方米)"]).head(3)
楼栋 房号 类型 总面积(平方米) 户型 状态 抵押 查封 楼层 实际户型
10 1 2304 住宅 93.6701 3房2厅 确权不可售 23 92
246 2 405 住宅 93.6943 3房2厅 确权不可售 4 92
236 2 605 住宅 93.6943 3房2厅 确权不可售 6 92
1
2
# 按总面积进行排序,面积最大的三个户型
df_actual.sort_values(["总面积(平方米)"]).tail(3)
楼栋 房号 类型 总面积(平方米) 户型 状态 抵押 查封 楼层 实际户型
349 3 504 住宅 122.3650 3房2厅 确权不可售 5 120
20 1 2102 住宅 122.3890 3房2厅 确权不可售 21 120
146 2 2302 住宅 122.3979 3房2厅 确权不可售 23 120
1
2
3
## 各户型情况统计
df_group_area = group_count(df_actual,"实际户型")
print_bar(df_group_area, title = u"小区整体户型分布情况")
 

实际有效户数317户,92方共有128户,117方共有126户,120方共63户。

其中总面积最小的是1栋2304,面积大小为93.6701平,面积最大的是2栋2302,面积达到122.3979.有意思的是,整个小区中面积最大和最小的都在23楼(不同楼栋),可能只是巧合吧!

全款买房情况

整个小区以及各楼栋的全款买房情况:

1
2
3
## 小区全款和贷款买房统计
df_group_dy = group_count(df_actual,"抵押")
df_group_dy.head()
抵押
否     72
是    245
Name: 房号, dtype: int64
1
2
# 小区全款和贷款买房统计饼图
print_pie(df_group_dy, title = u"是否贷款买房")
 
1
2
3
4
## 小区各楼栋全款买房统计
df_group_dy_ld = group_count(df_actual[df_actual["抵押"] == "否"],"楼栋")
df_percent_loan_by_ld = df_group_dy_ld/df_group_ld
df_group_dy_ld.head()
楼栋
1    16
2    26
3    30
Name: 房号, dtype: int64
1
2
# 各楼栋全款买房比例
print_bar(df_percent_loan_by_ld, title = u"各楼栋全款买房比例")
 

通过数据可以看到:

整个小区共有72户属于全款买房,占总户数的22.7%,其中1栋16户,2栋26户,3栋最多,多达30户属于全款购房。

2、3栋全款购房的土豪最多,可能与2、3栋较早发售有关,早早关注楼盘的土豪们在发售一开始便早早下手全款拿下了。而2、3栋的全款购房比例也达到了26%和28%,相比之下1栋只有15%的业主属于全款购房,3栋属于当之无愧的小区第一土豪楼。

全款买房户型及楼层分析

1
2
3
# 全款买房楼层分析
df_group_dy_floor = group_count(df_actual[df_actual["抵押"] == "否"],"楼层")
print_pie(df_group_dy_floor, title = u"全款购房的楼层分布情况")
 

可以看到,全款买房的楼层基本上以高层居多,绝大部分集中在8-19,由于数据中楼层过于分散,我们对数据进行处理。根据高层选楼的经验,一般业内将大于1/3总楼层,小于2/3总楼层的视为较好楼层,根据这个经验以及实际情况,我们对数据进行相关处理将本小区楼层划分成三类:

  1. 低楼层3-8楼
  2. 中楼层9-16楼
  3. 高楼层17-24楼
1
2
3
4
5
6
# 根据楼层获得楼层分类
df_actual["楼层分类"] = df_actual.apply(get_floor_type, axis=1)
# 全款买房楼层分类
df_group_dy_floor_type = group_count(df_actual[df_actual["抵押"] == "否"],"楼层分类")
print_pie(df_group_dy_floor_type, title = u"全款购房的楼层分布情况")
 
1
2
# 款买房楼层分类数量
print df_group_dy_floor_type
楼层分类
1    18
2    34
3    20
Name: 房号, dtype: int64
1
2
3
# 全款买房户型分布
df_group_dy_area = group_count(df_actual[df_actual["抵押"] == "否"],"实际户型")
print_pie(df_group_dy_area, title = u"全款购房的实际户型分布情况")
 
1
2
# 全款购房和整体的户型对比
pd.crosstab(df_actual["实际户型"], df_actual["抵押"]).plot.bar(stacked=True)
<matplotlib.axes._subplots.AxesSubplot at 0x115ad5410>
 
1
2
3
# 全款购房和整体的户型对比
pd.concat([df_group_dy_area, df_group_area, df_group_dy_area/df_group_area], axis=1)
房号 房号 房号
实际户型
117 41 126 0.325397
120 12 63 0.190476
92 19 128 0.148438

全款购房楼层情况

可以看到,全款购房的所有72户单位中,有34户近一半是第2类楼层,即9-16楼,占比达到了47.2%。其次是17-24楼的第3类楼层,共20户,占比27.8%,最少的则是3-8楼的第1类楼层,共18户,占比为25.0%。

如果我们将第2、3类楼层均视为中高层单位,则全款购房的单位中,共有75%属于中高层单位,由此我们可以看出,土豪们还是比较倾向于中高层单位的,这与我们购房时的常见情况也吻合。一般来说,同一栋楼,楼层越高价格是越贵的,可惜这里我们没有各单位的成交价格,否则应该可以使用线性回归找出楼层与价格之间的线性关系。

全款购房户型情况

根据数据可以看出,全款购房的户型分布里,117方户型表现突出,是属于最多土豪购入的户型。

按全款购房情况来看:

在全款购房的72户中,117方的户型共41户,占所有全款购房的户数的56.9%.

其次是92方户型,共19户,占所有全款购房的户数的26.4%.

最后是120方户型,共12户,占所有全款购房的户数的16.7%.

按整体情况来看:

小区内117方的户型共有126户,其中全款购房41户,占比32.53%

120方户型共有63户,其中全款购房12户,占比19.04%

92方户型共128户,其中全款购房19户,占比14.84%

总结

四季花园总体来看属于小型社区,不过小也有小的好处,业主少也更能记得住邻居们,相处起来更容易!

小区的户型较少,整体来说只有92、117、120三个户型,其中土豪出没几率最高的是117户型。

此小区的实际情况中,117方户型确实属于小区最好的户型,基本都能做到南北对流,属于小区里的紧俏盘,看来土豪们的眼光也是非常不错。以后在小区里散步的时候要注意了,如果是117方户型的邻居,每3个里面就有一个是全款购房的土豪哦,哈哈哈!!!