/shanghai_house_analyse

use tableau to analyse shanghai second hand house history deal

GNU General Public License v3.0GPL-3.0

作者

刘祥龙,转发及使用请注明出处

需求

分析上海所有地区的二手房数据,找到以下我们关注的问题的答案。

  • 找出近五年每个地区交易量最大的Top3小区
  • 近三年成交均价在300w-400w的所有板块
  • 各地区热门板块的热门房型是什么?

实现

数据清洗

首先我们需要获取到上海地区的二手房数据,这里我们采用链家的二手房销售数据,上海市总共近20w条记录。

import pandas as pd

df = pd.read_csv('上海二手房成交数据汇总.csv', header=0)
# 这里读取我们需要的字段
df_cut = df[['地区', '板块', '小区名称', '成交价格', '成交周期', '成交日期', '成交年份', '成交月份', '房屋户型']]

数据探索

df_cut.info()

df_cut.describe()

print(df_cut[0:50])

通过观察,我们发现数据有以下几个问题

问题1: 板块字段有270个空值,我们将其删除

df_cut.dropna(axis=0, subset=['板块'], inplace=True)

问题2: 房屋户型字段有车位

我们主要是考虑房屋的分析,因此我们需要剔除掉车位的记录,我们看下房屋户型有哪些值。

df_cut['房屋户型'].value_counts()
2室1厅1厨1卫    46138
2室2厅1厨1卫    37998
1室1厅1厨1卫    36228
3室2厅1厨2卫    19664
3室2厅1厨1卫     9321
1室0厅1厨1卫     6614
2室2厅1厨2卫     6529
3室1厅1厨1卫     6071
1室2厅1厨1卫     5121
2室0厅1厨1卫     3738
4室2厅1厨2卫     3235
0室0厅1厨0卫     2950
4室2厅1厨3卫     2180
3室2厅1厨3卫     1097
2室1厅0厨1卫      841
车位            766
- -- -      749
1室1厅0厨1卫      739
2室2厅0厨1卫      583
3室1厅1厨2卫      488
2室1厅1厨2卫      451
5室2厅1厨3卫      432
4室2厅1厨4卫      388
4室3厅1厨3卫      380
1室0厅1厨0卫      328
5室3厅1厨4卫      220
5室3厅1厨3卫      219
...
4室0厅0厨0卫        1
9室3厅1厨3卫        1
3室2厅2厨4卫        1
6室3厅2厨3卫        1
2室0厅1厨3卫        1
5室3厅0厨4卫        1
7室3厅2厨6卫        1
4室3厅2厨5卫        1
Name: 房屋户型, dtype: int64

我们看到下面2个取值都是无效值,我们去掉这种记录

df_cut = df_cut[~df_cut['房屋户型'].isin(['车位', '- -室- -厅'])]

问题3:成交周期里面有字符串'None'值

首先我们将这些字符串None值替换成空值NaN

df_cut['成交周期'].replace({r'None': np.NaN}, regex=True, inplace=True)

然后删除这些记录,将成交周期转换为整数类型

df_cut.dropna(axis=0, subset=['成交周期'], inplace=True)
df_cut['成交周期'] = df_cut['成交周期'].astype('int')

问题4:成交价格的最大值达到了1350亿

一套房屋在正常市场环境下,不可能卖到1350亿,我们找出数据集中大于1亿元的成交记录

print(df[df['成交价格'] > 100000000][['小区名称', '成交价格', '链家编号']])
print('数量 %d' % len(df[df['成交价格'] > 100000000].index.values))

总共有7条成交价格大于一亿元的记录,通过链家编号我们可以找到原始数据,比如第一条记录的成交价345亿,链家的原始数据也是345亿,看来应该是链家内部在录入的时候产生的问题。

通过比对,除了第2条记录价格没有问题,其余6条记录为错误数据,我们将其删除

error_price = df_cut[df_cut['成交价格'] > 100000000].index.to_list()
# 除掉第二条记录
error_price.remove(42704)
df_cut = df_cut.drop(index=error_price)

使用tableau做可视化分析

找出近五年每个地区交易量最大的Top3小区

首先我们按地区分类,然后按小区名称分类,按记录总数作为排序一句,然后增加两个筛选器,分别是成交年份、和记录总数的筛选器,成交年份选择2015年-2020年,记录总数选择1-3

完整结果如下

近三年成交均价在300w-400w的板块

通过分析,我们可以找到符合我们预算的板块有哪些,这样就更有针对性。这里的行依然选择地区和板块,列选择成交价格的平均值,增加2个筛选器,分别是成交价格平均值筛选器,筛选300w-400w和成交年份筛选器,筛选2017年到2020年这三年。

完整结果如下:

各地区热门板块的热门房型是什么?

通过找到热门板块的热门房型,我们可以更好的评估我们要入手的房型合不合适,是否方便转手等。我们可以从热门板块的房型销量走势来判断该板块的房型是否适合买入。

首先我们找到热门板块

这里取各个地区近三年交易量排名第一的板块作为热门板块

查看不同房型的销量

这里行我们选择记录总数,列选择按月的时间轴,同时增加2个筛选器,一个是房屋户型的筛选器,由于户型太多,我们值筛选我们感兴趣的户型就行,另一个筛选器是板块的筛选器,用来过滤热门板块。

这里比如我们选择看顾村的一室一厅一厨一卫、两室一厅一厨一卫、三室一厅一厨一卫,就能得到以下图像:

我们可以看出,在顾村,卖的最好的是两室一厅一厨一卫,其次是一室一厅一厨一卫,最后是三室一厅一厨一卫。通过同样的方式我们可以找出其他热门板块的热门房型销量走势。