当前位置:   article > 正文

【PythonPlanet】二手房产成交数据分析_二手房数据分析案例python

二手房数据分析案例python

一、项目概况

该项目是使用Python对北京二手房经纪人成交数据进行分析的一个综合实例,包括pandas/numpy/matplotlib绘图的应用,涉及到数据读取、清洗、离散化等处理,使用了分组分析、假设验证分析和相关性分析等分析方法。

分析目标:

  1. 分析北京二手房成交价格分布
  2. 分析成交量超过一亿的经纪人及其相关因素
  3. 寻找每个经纪人成交总价最高的5条记录

二、数据概况

数据涵盖2011年-2016之间,北京二手房经纪人的成交数据,共约16万2千条成交记录,包括比较全面的信息。
数据字段如下图:
图片

三、数据读取与合并

3.1 数据读取

如下图,数据源包括7个csv文件。
在这里插入图片描述
为了读取上述7个文件,我们可以使用循环读取数据,读取的方法是read_csv。同时,因为数据编码方式不同,所以要设定读取的编码方式。读取结果如下图,我们获得了7个list。
在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
data_list = []
for i in range(1,8):
    try:
        data = pd.read_csv('./fangchan/lianjia{}.csv'.format(i),encoding = 'utf-8')  # encoding默认是utf-8,可省略
    except:
        data = pd.read_csv('./fangchan/lianjia{}.csv'.format(i),encoding = 'gbk')
    finally:
        data_list.append(data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.2 数据合并

前面我们已经读取了7个csv文件数据,并放在了data_list这个列表中。现在要合并数据,合并的类型是增加行,所以使用pd.concat。

data = pd.concat(data_list)
  • 1

在这里插入图片描述

四、成交价格分布分析

在成功读取与合并数据之后,我们查看下数据各字段的类型。代码和效果如下:

data.info()
  • 1

在这里插入图片描述

4.1 数据类型转换

接下来我们想分析下成交单价,但是现在的数据类型是object,不便于分析,要进行转换和调整。先提取出成交单价这一列,删除null值,替换掉“元/平”,转换数据类型为float,单位转换为万元(保留两位小数点)。完成后我们赋值给变量dj,观察最大值、最小值和平均值。其中,最小值有等于0的,需要去除这部分“脏数据”。

dj = data.cjdanjia.dropna().map(lambda x: round(float(x.replace('元/平',''))/10000,2))
dj = dj[dj > 0]
  • 1
  • 2

在这里插入图片描述

4.2数据离散化分析

为了直观查看成交单价的分布情况,我们按照0到2万、2到4万、一直到16万,对数据进行离散化处理。然后使用绘图查看分布情况。

bins= [0,2,4,6,8,10,16]
pd.cut(dj,bins).value_counts().plot.barh(figsize = (12,6))
  • 1
  • 2

在这里插入图片描述
从上图我们可以看出,成交价格主要分布在2-4万和4-6万之间。(注意数据成交时间是在2016年之前)

五、分析成交量超过一亿的经纪人及其相关因素

我们先查看下成交量超过一亿的经纪人有哪些。然后,我们分析下这些成交量高的经纪人的相关因素。我们假设从业年限对成交量有影响,待会通过数据来进行验证。

5.1 分组运算

我们要使用到分组运算,根据经纪人姓名、版块信息来分组计算出成交总金额超过一亿的经纪人。

bj_zongjia = data.groupby(['bankuai','xingming'])['cjzongjia'].sum()
bj_zongjia[bj_zongjia > 10000]
  • 1
  • 2

在这里插入图片描述
以上是我们得到的结果。根据分析的结果,如果买房可以相应考虑找对应版块的经纪人,这些人业务经验相对丰富。

5.2 透视表

透视表:
所谓透视,就是动态的改变表的布局,以方便我们分析数据,比如说,重新制定数据的行或者列,数据透视表会按照新的不知计算或汇总数据。
了解了透视表,接下里我们对数据按照经纪人姓名和从业年限对其成交总价进行透视。

data.pivot_table('cjzongjia',index = 'xingming',columns = 'congyenianxian',aggfunc = 'sum')
  • 1

在这里插入图片描述
然后,使用布尔值运算,判断从业年限5年以上的经纪人中,成交总价超过一亿的有多少人。

(data_nx > 10000).sum()
  • 1

在这里插入图片描述

5.3 pandas绘图

使用饼图来展示结果:

plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
(data_nx > 10000).sum().plot.pie(figsize = (6,6))
  • 1
  • 2

在这里插入图片描述
通过上面这张图可以很明显的看到,从业5年以上的经纪人成交总价超过一亿的是最多的,其次是4-5年。
考虑到数据中原有经纪人从业年限分布情况:

plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
data.groupby(['congyenianxian'])['xingming'].count().plot.pie(figsize = (6,6))
  • 1
  • 2

在这里插入图片描述
两相对比可以看出,从业年限和成交总价成正相关,也就是从业年限长的经纪人,成交量相对也会高。

六、寻找每个经纪人成交总价最高的5条记录

最后,我们想看看针对每个经纪人,根据他们的成交总价来找出前5条成交记录情况。

6.1 对分组应用自定义函数

首先,我们要自定义一个函数,来找出分组里前5条记录。

def top(group,n = 5):
    return group.sort_values('cjzongjia',ascending = False)[:n]
  • 1
  • 2

6.2 取出每个经纪人前5条的记录

定义好函数后,我们把数据按照经纪人姓名进行分组,然后取出成交总价最高的5条。

data.groupby('xingming').apply(top)
  • 1

在这里插入图片描述

七、禅定时刻

总结一下今天的内容。
我们获得了一份北京二手房的成交记录数据,并从三个方面进行了初步分析,分别是:

  • 分析北京二手房成交价格分布
  • 分析成交量超过一亿的经纪人及其相关因素
  • 寻找每个经纪人成交总价最高的5条记录

运用到的知识点包括:

  • 数据的读取与合并
  • 数据清理和类型转换
  • 数据离散化处理分析
  • 数据分组、布尔值取数
  • 透视表和pandas绘图
  • 自定义函数的运用

希望以上内容对你有帮助。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/192414
推荐阅读
相关标签
  

闽ICP备14008679号