基于北京二手房价数据的探索性数据分析和房价评估——数据的可视化分析

数据分析项目——北京二手房价数据分析

  • 第一步:项目设计和获取数据(获取实验的数据集!!)
  • 第二步:数据读取和数据预处理
  • 第三步:数据的可视化分析
  • 第四步:构建房价评估模型(决策树、随机森林等)

整个项目的代码和数据集获取:
https://github.com/Proberen/Data-analysis___Beijing__Houseprice

文章目录

  • 1 区域因素
    • 1.1 各区域内二手房的分布情况
    • 1.2 各区域内二手房的单价情况
    • 1.3 各区域内二手房的总价情况
  • 2 小区因素
    • 2.1 小区房源数量分布
    • 2.2 小区总房价对比
  • 3 面积因素
    • 3.1 各个面积区间内房屋的数量
    • 3.2 面积与房屋总价的关系
  • 4 户型因素
    • 4.1 户型统计
    • 4.2 户型与总价的关系
  • 5 热度、观看人数因素
    • 5.1 热度因素
    • 5.2 观看人数因素
  • 6 发布时间因素
    • 6.1 不同发布时间的房屋数量
    • 6.2 不同发布时间的房屋总价

由于图表分析无法更加直观的分析各个因素与房屋价格的关系,因此在进行数据的预处理后对数据进行可视化的分析,分析因素包括区域因素、小区因素、面积因素、户型因素、热度因素、观看人数因素、发布时间因素等。

1 区域因素

1.1 各区域内二手房的分布情况

在本数据集中共包含北京市17个区域,包括昌平区、海淀区、丰台区、朝阳区、燕郊区、大兴区、通州区、西城区、顺义区、东城区、房山区、石景山区、亦庄开发区、门头沟区、密云区、延庆区、怀柔区。

绘制柱状图:

# 获取各个区域的二手房数量(已排序)
x = data['Dist'].value_counts().index.tolist()
y = data['Dist'].value_counts().tolist()
# 绘制柱状图
bar = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
    .add_xaxis(x)
    .add_yaxis("数量", y)
    .set_global_opts(title_opts=opts.TitleOpts(title="北京市二手房的区域分布情况"),yaxis_opts=opts.AxisOpts(name="二手房数量(单位:套)"),xaxis_opts=opts.AxisOpts(name="区域",axislabel_opts={"rotate":45}))
)
bar.render_notebook()

1.2 各区域内二手房的单价情况

获取北京市二手房各个区域的所有房源信息,将各个区域内的二手房的单价求和去平均值获取到各个区域的平均房价,绘制柱状图。

# 构建一个dataframe
x = data['Dist'].unique()
y = np.arange(len(x))

for i in range(len(x)):
    price = data[data['Dist']==x[i]]['Price'].mean()
    y[i]=price

price = pd.DataFrame({'区域': x,'价格 (元/平米)': y})
# 绘制按地区分平均每平米的价格的柱状图
plt.figure(figsize=(20,10))

bar = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
    .add_xaxis(x.tolist())
    .add_yaxis("价格", y.tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="北京市二手房各个地区的平均房价对比"),yaxis_opts=opts.AxisOpts(name="二手房价格(单位:元)"),xaxis_opts=opts.AxisOpts(name="区域",axislabel_opts={"rotate":45}))
)
bar.render_notebook()


为了能够更直观的表现出每个区域内房价的差距,绘制地理热力图如图所示:

# 绘制各个城区房屋总价的热力图

# 处理区域的名字
price['区域']=price['区域']+'区'

city = (
    Map(init_opts=opts.InitOpts(width = '1200px', height='700px'))
    .add("",
         price.values,
         "北京")
    .set_global_opts(
        title_opts=opts.TitleOpts(title="北京市平均房价图"),
        visualmap_opts=opts.VisualMapOpts(
            min_=100,
            max_=200,
            is_piecewise=True,
            pieces=[
                {"min": 100000, "label": '>100000元/平米', "color": "#0000CD"},
                {"min": 80000, "max": 100000, "label": '80000-100000元/平米', "color": "#1E90FF"},
                {"min": 60000, "max": 80000, "label": '60000-80000元/平米', "color": "#1C86EE"},
                {"min": 40000, "max": 60000, "label": '40000-60000元/平米', "color": "#1874CD"},
                {"min": 0, "max": 40000, "label": '<40000元/平米', "color": "#63B8FF"}
            ],
            range_text=['高', '低']
        )
    )
)
city.render_notebook()


通过观察上述柱状图和热力图,可以发现北京市外围区域的平均房价普遍低于4万元每平米,同时可以观察到越接近北京市市中心房价越高,其中房价最高的地区为西城区和东城区,分别为103131元/平米和94046元/平米。

1.3 各区域内二手房的总价情况

# 绘制各个城区房屋总价的箱线图
plt.figure(figsize = (20, 10))
sns.boxplot(x='Dist',y='TotalPrice',data=data)
plt.xlabel('区域', fontsize=20) 
plt.ylabel('二手房总价', fontsize=20)
plt.title('北京市各区域二手房总价',size=20)
plt.show()


通过对北京市各区域内总房价和平均房价的分析,可以得出以下结论:越靠近北京市中心周围的二手房价格越高,同时每个区都存在很多的离群点,这符合北京市房价的现状,可以预见靠近市中心的二手房价格会越高。

2 小区因素

2.1 小区房源数量分布

通过统计,发现该组数据中二手房房源共分布在4308个小区内,其中福成上上城五期和福城上上城三季的房源数量最多,分别为158套和115套。

quarter = data['Quarters'].value_counts().to_frame().reset_index()

2.2 小区总房价对比

在对小区房源数量的统计后,对小区所有房源的总价求和取平均值进行统计如下表所示。经过排序可以发现东山墅和优山美地B区的总房价最高,都为8000万元

quarters = data['Quarters'].unique()
price = np.arange(len(quarters))

for i in range(len(quarters)):
    p = data[data['Quarters']==quarters[i]]['TotalPrice'].mean()
    price[i]=p

xiaoqu = pd.DataFrame({'小区': quarters,
    '价格(万元)': price})

# 按照价格排序
xiaoqu = xiaoqu.sort_values(by="价格(万元)",ascending=False)

基于北京二手房价数据的探索性数据分析和房价评估——数据的可视化分析_第1张图片

# 获取房价前五名的总房价
q5 = xiaoqu.head(5)
x = q5['小区']
y = q5['价格(万元)']

bar = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
    .add_xaxis(x.tolist())
    .add_yaxis("价格", y.tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="北京市小区平均房价前五名"),yaxis_opts=opts.AxisOpts(name="房价"),xaxis_opts=opts.AxisOpts(name="小区名称"))
)
bar.render_notebook()

基于北京二手房价数据的探索性数据分析和房价评估——数据的可视化分析_第2张图片

3 面积因素

3.1 各个面积区间内房屋的数量

将北京市二手房的面积划分为<50、50-100、100-150、150-200、200-250、>250六个区间

area = data['Area']
HouseType = data['HouseType']
price = data['TotalPrice']
dist = data['Dist']
Longitude = data['Longitude'] 
Latitude = data['Latitude'] 

ap = pd.DataFrame({'面积': area,
                   '房型':HouseType,
                   '区域':dist,
                   '价格':price})

绘制的北京市二手房面积数量统计柱状图

x1 = ['<50','50-100','100-150','150-200','200-250','>250']
y1 = np.zeros(6)

for i in range(len(area)):
    if area[i] <=50:
        y1[0] += 1
        continue
    if area[i] <=100:
        y1[1] += 1
        continue
    if area[i] <=150:
        y1[2] += 1
        continue
    if area[i] <=200:
        y1[3] += 1
        continue
    if area[i] <=250:
        y1[4] += 1
        continue
    if area[i] >250:
        y1[5] += 1

bar = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
    .add_xaxis(x1)
    .add_yaxis("数量", y1.tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="北京市二手房面积/数量统计"),
                    yaxis_opts=opts.AxisOpts(name="数量"),
                     xaxis_opts=opts.AxisOpts(name="面积区间"))
)
bar.render_notebook()

3.2 面积与房屋总价的关系

plt.figure(figsize=(20,10))
rng = np.random.RandomState(0)
colors = rng.rand(22152)
plt.scatter(area, price,c=colors,alpha = 0.9)
plt.colorbar()
plt.title('北京二手房的面积分布')
plt.xlabel('面积')
plt.ylabel('价格')
plt.show()

4 户型因素

4.1 户型统计

HouseType.value_counts().to_frame().reset_index()

绘制北京市二手房各个房型的数量柱状图

HouseNum = HouseType.value_counts().to_frame().reset_index()
plt.figure(figsize=(20,10))
sns.barplot(y='index',x='HouseType',data=HouseNum)
plt.title('北京市二手房各房型数量',size=30)
plt.ylabel('房型',size=20)
plt.xlabel('数量',size=20)
plt.show()

4.2 户型与总价的关系

在对各个户型的房屋数量进行统计后,对户型和房屋总价进行统计,绘制柱状图如下图所示。其中15室3厅的总价最高,1室0厅等房型的总价偏低。

# 获取数据
HousePrice = data.groupby(['HouseType'])['TotalPrice'].mean().to_frame().reset_index()
plt.figure(figsize=(50,20))
sns.barplot(x='HouseType',y='TotalPrice',data=HousePrice)
plt.title('北京市二手房各房型总价',size=30)
plt.xlabel('房型',size=20)
plt.ylabel('单价(单位:万元)',size=20)
plt.show()

5 热度、观看人数因素

5.1 热度因素

plt.figure(figsize=(20,10))
rng = np.random.RandomState(0)
colors = rng.rand(22152)
plt.scatter(data.PeopleNumber, data.TotalPrice,c=colors,alpha = 0.9)
plt.colorbar()
plt.title('北京二手房的热度与房价的关系',size=20)
plt.xlabel('关注人数(单位:人)',size=20)
plt.ylabel('价格(单位:万元)',size=20)
plt.show()

数据集中记录了在网站中房源关注的人数,经过统计热度与总房价的关系如下图所示,可以发现房价越低的房源热度越高。

5.2 观看人数因素

plt.figure(figsize=(20,10))
rng = np.random.RandomState(0)
colors = rng.rand(22152)
plt.scatter(data.WatchNumber, data.TotalPrice,c=colors,alpha = 0.9)
plt.colorbar()
plt.title('北京二手房的看房人数与房价的关系',size=20)
plt.xlabel('看房人数(单位:人)',size=20)
plt.ylabel('价格(单位:万元)',size=20)
plt.show()

数据集中记录了在网站中房源线下看房的人数,经过统计观看人数与总房价的关系如下图所示,可以发现房价越低的房源看房人数越多。

6 发布时间因素

6.1 不同发布时间的房屋数量

通过不同发布时间房屋数量的统计,绘制北京市二手房不同发布时间的房屋数量柱状图,发现其中发布30天左右的房屋数量较多。

Time = data['ReleaseTime'].value_counts().to_frame().reset_index()
plt.figure(figsize=(20,10))
sns.barplot(x='index',y='ReleaseTime',data=Time)
plt.title('北京市二手房不同发布时间的房屋数量',size=20)
plt.ylabel('数量',size=20)
plt.xlabel('发布时间',size=20)
plt.show()

6.2 不同发布时间的房屋总价

plt.figure(figsize=(20,10))
sns.barplot(x='ReleaseTime',y='TotalPrice',data=data)
plt.title('北京市二手房不同发布时间的房屋总价',size=20)
plt.show()

通过绘制北京市二手房不同发布时间的房屋总价柱状图,可以发现发布时间越长的二手房房价越高,特别是一年左右发布的房源房价都偏高,因此该因素可以作为分析房价的重要因素。

你可能感兴趣的:(数据分析,数据可视化,数据分析,机器学习)