美文网首页
海口二手房-数据分析-python

海口二手房-数据分析-python

作者: rrroi | 来源:发表于2018-10-31 17:01 被阅读0次

    背景

    2018年国家政策下达—海南全岛建立自由贸易区,再加上限购政策,海南房价必将有所变动。

    分析主题

    该篇主要分析海口二手房的价格。

    数据来源及使用工具

    数据是用八爪鱼从安居客上爬下来的。推荐使用八爪鱼,比较方便简单。

    处理分析工作用的是jupyter

    数据清理

    1.首先读取数据,查看数据
    data=pd.read_excel('海口二手房201808交易信息.xlsx')
    data.head(3)
    
    房屋描述 建筑面积(平方米)    小区  \
    0  白沙门公园  珍珠裕苑 2房1厅带阳台  采光好     68平方米  珍珠裕苑   
    1    秀英区 水晶城 3房2厅2卫 毛坯 南北通透    117平方米   水晶城   
    2   美湖美舍:凤翔东路,一线湖景精装两房,南北通透     74平方米    暂无   
    
                                             区域   建造时间  房屋类型 房本年限  \
    0  美兰-\n\t\t\t\t\t\t海甸-\n\t\t\t\t\t\t海景路72号  2006年  普通住宅  满二年   
    1     龙华-\n\t\t\t\t\t\t滨海-\n\t\t\t\t\t\t海濂路  2012年  普通住宅  满二年   
    2          -\n\t\t\t\t\t\t-\n\t\t\t\t\t\t暂无  2013年  普通住宅  满二年   
    
                             房屋户型 房屋朝向      所在楼层        房屋单价 装修成都   所属公司  \
    0  2室\n\t\t\t\t1厅\n\t\t\t\t1卫    北  高层(共13层)  17941 元/m²  精装修   帝城地产   
    1  3室\n\t\t\t\t2厅\n\t\t\t\t2卫   南北  中层(共25层)  17948 元/m²   毛坯  瑞熙房地产   
    2  2室\n\t\t\t\t2厅\n\t\t\t\t1卫   南北  低层(共15层)  21081 元/m²  精装修  宏兴红房产   
    
               所属门店                                               核心卖点  \
    0        帝城地产总店  核心卖点:位置:海口市美兰区海甸岛六东路户型:2房2厅2阳台1卫面积:68平米售价:122万...   
    1  瑞熙房地产金贸分店...  本次为您推荐水晶城186万3室2厅2卫毛坯:恒湿恒温、告别空调暖气时代!恒湿恒温、科技住宅!...   
    2  宏兴红房产滨江帝景...  图一线湖景房【座落位置】位于凤翔路【美湖美舍】2014年小区,花园大小区【楼层】电梯5楼总高...   
    
                                                    小区配置  
    0  交通便利:周边有公交车站,可方便换乘。商业配套:超市,银行,市场等教育:小学,中学医疗:完善...  
    1  位置:小区地理位置,绿化率高,居民素质高配套:有健身器材,小型篮球场,可供小区居民使用车位:...  
    2                              小区侧门直达湿地公园,带有泳池,健身设施等  
    
    
    2.去除数据中的\n、\t
    def dropstring(dataframe,name,stringBefore,stringAfter):
        name=dataframe[name]
        name=name.replace(stringBefore,stringAfter)
        return name
    
    data['区域']=data.apply(dropstring,axis = 1,name='区域',stringBefore='\n\t\t\t\t\t\t',stringAfter='')
    data['房屋户型']=data.apply(dropstring,axis = 1,name='房屋户型',stringBefore='\n\t\t\t\t',stringAfter='')
    
    房屋描述 建筑面积(平方米)    小区            区域   建造时间  房屋类型 房本年限  \
    0  白沙门公园  珍珠裕苑 2房1厅带阳台  采光好     68平方米  珍珠裕苑  美兰-海甸-海景路72号  2006年  普通住宅  满二年   
    1    秀英区 水晶城 3房2厅2卫 毛坯 南北通透    117平方米   水晶城     龙华-滨海-海濂路  2012年  普通住宅  满二年   
    
         房屋户型 房屋朝向      所在楼层        房屋单价 装修成都   所属公司          所属门店  \
    0  2室1厅1卫    北  高层(共13层)  17941 元/m²  精装修   帝城地产        帝城地产总店   
    1  3室2厅2卫   南北  中层(共25层)  17948 元/m²   毛坯  瑞熙房地产  瑞熙房地产金贸分店...   
    
                                                    核心卖点  \
    0  核心卖点:位置:海口市美兰区海甸岛六东路户型:2房2厅2阳台1卫面积:68平米售价:122万...   
    1  本次为您推荐水晶城186万3室2厅2卫毛坯:恒湿恒温、告别空调暖气时代!恒湿恒温、科技住宅!...   
    
                                                    小区配置  
    0  交通便利:周边有公交车站,可方便换乘。商业配套:超市,银行,市场等教育:小学,中学医疗:完善...  
    1  位置:小区地理位置,绿化率高,居民素质高配套:有健身器材,小型篮球场,可供小区居民使用车位:...  
    
    3.去重
    data=data.drop_duplicates()
    data.iloc[:,0].size #查看一共有多少条数据
    
    数据量.png
    4.修改下列名
     下一步要去除数据(建筑面积、房屋单价等)中多余的文字,所以先重新给列命名
    
    data.columns=['房屋描述','建筑面积(平方米)','小区','区域','建造时间(年)',
                            '房屋类型','房本年限','房屋户型','房屋朝向','所在楼层',
                            '房屋单价(元/m²)','装修程度','所属地产公司','所属门店',
                            '核心卖点','小区配置']
    
    5.将数据中多余文字去除
    data['建筑面积(平方米)']=data.apply(dropstring,axis = 1,name='建筑面积(平方米)',stringBefore='平方米',stringAfter='')
    data['建造时间(年)']=data.apply(dropstring,axis = 1,name='建造时间(年)',stringBefore='年',stringAfter='')
    data['房屋单价(元/m²)']=data.apply(dropstring,axis = 1,name='房屋单价(元/m²)',stringBefore='元/m²',stringAfter='')
    
    预览数据.png
    6.分割区域字段
    name=data['区域'].str.split('-',expand=True)
    name.columns=['区','街道名称','街道驻地']
    data=data.join(name)
    del data['区域']
    data.head(2)
    
    预览数据.png
    7.修改数据类型
    data.dtypes
    
    房屋描述          object
    建筑面积(平方米)     object
    小区            object
    区域            object
    建造时间(年)       object
    房屋类型          object
    房本年限          object
    房屋户型          object
    房屋朝向          object
    所在楼层          object
    房屋单价(元/m²)    object
    装修程度          object
    所属地产公司        object
    所属门店          object
    核心卖点          object
    小区配置          object
    区             object
    街道名称          object
    街道驻地          object
    dtype: object
    
    data['建筑面积(平方米)']=data['建筑面积(平方米)'].astype('float16')
    data['房屋单价(元/m²)']=data['房屋单价(元/m²)'].astype('float32')
    data['建造时间(年)']=data['建造时间(年)'].astype('float16')
    
    data.dtypes
    
    房屋描述           object
    建筑面积(平方米)     float16
    小区             object
    建造时间(年)       float16
    房屋类型           object
    房本年限           object
    房屋户型           object
    房屋朝向           object
    所在楼层           object
    房屋单价(元/m²)    float32
    装修程度           object
    所属地产公司         object
    所属门店           object
    核心卖点           object
    小区配置           object
    区              object
    街道名称           object
    街道驻地           object
    dtype: object
    dtype: object
    
    8.增加新列

    要修改完单价和建筑面积的数据类型之后,才能用来相乘

    data['总价(万元)']=data.apply(lambda x:
                                   x['建筑面积(平方米)']*x['房屋单价(元/m²)']/10000,
                                   axis=1)
    
    data.dtypes
    
    房屋描述           object
    建筑面积(平方米)     float16
    小区             object
    建造时间(年)       float16
    房屋类型           object
    房本年限           object
    房屋户型           object
    房屋朝向           object
    所在楼层           object
    房屋单价(元/m²)    float32
    装修程度           object
    所属地产公司         object
    所属门店           object
    核心卖点           object
    小区配置           object
    区              object
    街道名称           object
    街道驻地           object
    总价(万元)        float64
    dtype: object
    
    9.去除区字段中存在空字符的行
      将空字符用nan替代,再将其去除
    
    data['区'].replace('',np.nan,inplace=True)
    data['区'].isna()
    
    0       False
    1       False
    2        True
    3       False
    4       False
    5       False
    6        True
    
            ...  
    
    Name: 区, Length: 3758, dtype: bool
    
    data.dropna(axis=0, how='any', thresh=None, subset=['区'], inplace=True)
    
    data.iloc[:,0].size
    
    3691
    
    10.去除非海口市的数据
    data['区'].value_counts()
    
    美兰     1110
    龙华      943
    秀英      690
    琼山      673
    澄迈县     121
    文昌市      76
    临高县      28
    其他       19
    儋州市      17
    琼海市      14
    Name: 区, dtype: int64
    
    data=data[data['区'].isin(['美兰','龙华','秀英','琼山'])]
    
    data['区'].value_counts()
    
    美兰    1110
    龙华     943
    秀英     690
    琼山     673
    Name: 区, dtype: int64
    
    data.iloc[:,0].size
    
    3416
    
    11.查看数据中的缺失率
    data[data.isna().values==True]
    
    数据预览.png
    def showMissingValueInfo(dataframe):   
        df=pd.DataFrame()
        name=[]
        mcount=[]
        mrate=[]
        for i in dataframe.columns:
            MissingCount=len(data)-data[i].count()
            rate='%.2f%%'%((MissingCount/len(data))*100)
            name.append(i)
            mcount.append(MissingCount)
            mrate.append(rate)
            #print(i,'缺失数量:',MissingCount,'缺失比例:',rate)
        df['字段']=name
        df['缺失数量']=mcount
        df['缺失率']=mrate
        return df.T
    
    showMissingValueInfo(data)
    
    数据预览.png

    主要是’所属地产公司‘、’所属门店‘的数据缺失,确实量不大,暂不处理。
    ‘小区配置’用来做词云,丢失一条数据,没有影响。

    描述统计分析

    data.describe()
    
    统计汇总.png

    由图可看出,建筑面积、房屋房屋单价都在合理范围内。

    各区域二手房数量

    海口市2018年8月各区二手房占比.png

    可以看出美兰区、龙华区相对来说二手房数量较多。

    fig = plt.figure(figsize=(8,8))
    plt.pie(areacount,labels=areacount.index,labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
                                    startangle = 90,pctdistance = 0.6,counterclock=False,colors=['#FFE600','#99CC66','#94FF4D','#CCFF99'],
                                    textprops={'fontsize':16, 'color': 'black'})
    plt.axis('equal')
    plt.legend(loc="upper right",fontsize=10,bbox_to_anchor=(1.1,1.05),borderaxespad=1.3)
    plt.title("海口市2018年8月各区域二手房占比",size=22)
    plt.savefig('海口市2018年8月各区域二手房占比.png')
    

    各区域二手房均价

    海口市2018年8月各区二手房房屋均价.png

    结合统计汇总,可以看出来海口各区域房价相差不大。

    area=data.groupby(['区']).mean()
    unitprice=area['房屋单价(元/m²)'].round().sort_values()
    unitprice
    
    区
    琼山    16503.0
    龙华    16728.0
    美兰    17099.0
    秀英    18154.0
    Name: 房屋单价(元/m²), dtype: float32
    
    x=unitprice.index
    plt.figure(figsize=(7,5),dpi=80)
    unitprice_area=plt.bar(x,unitprice,alpha=1,width=0.4,color='#CCFF99')
    plt.ylim([0,20000])
    plt.xlabel('区域',size=14)
    plt.ylabel('二手房房屋均价(元/m²)',size=14)
    plt.yticks(fontsize=14)
    plt.xticks(fontsize=14)
    plt.title('海口市2018年8月各区二手房房屋均价',size=18)
    for x in unitprice_area:
        height = x.get_height()
        plt.text(x.get_x() + x.get_width() / 2, height+1, int(height), ha="center", va="bottom",size=14)
    plt.savefig('海口市2018年8月各区二手房房屋均价.png')
    

    房屋类型分布

    二手房房屋户型分布.png
    df=pd.DataFrame()
    df1=pd.DataFrame()
    df=data['房屋户型'].value_counts()
    df1=df[df>=100]
    df1
    
    3室2厅2卫    1052
    2室2厅1卫     830
    3室2厅1卫     507
    4室2厅2卫     250
    1室1厅1卫     241
    2室1厅1卫     139
    2室2厅2卫     109
    Name: 房屋户型, dtype: int64
    
    plt.figure(figsize=(10,6),dpi=80)
    plt.ylim(0,1200)
    plt.xlabel('房屋户型',size=14)
    plt.ylabel('数量',size=14)
    plt.yticks(fontsize=14)
    plt.xticks(fontsize=14)
    plt.title('二手房房屋户型分布',size=18)
    houseType=plt.bar(df1.index,df1,alpha=1,width=0.5,color='#CCFF99')
    for x in houseType:
       height = x.get_height()
       plt.text(x.get_x() + x.get_width() / 2, height+15, int(height), ha="center", va="bottom",size=14)
    plt.savefig('二手房房屋户型分布.png')
    

    小区分布

    df2=data['小区'].groupby([data['区'],data['小区']]).count()
    df2[df2>20].sort_values(ascending=False)
    
    区   小区    
    龙华  观澜湖九里     35
    琼山  观澜湖观园     32
    美兰  宝安江南城     29
    琼山  佳元江畔人家    29
    龙华  昌茂花园      27
    美兰  恒大美丽沙     27
    和平城市广场    27
    Name: 小区, dtype: int64
    

    面积分布

    二手房面积分布图.png
    bins=[0, 50, 100, 150, 200, 250, 300, 400, 650]
    area_labels=['0-50','50-100','100-150','150-200','200-250','250-300','300-400','400-650']
    df1=pd.cut(data['建筑面积(平方米)'],bins,labels=area_labels)
    df2=df1.groupby(df1).count()
    df2
    
    plt.figure(figsize=(8,5))
    houseArea=plt.barh(df2.index,df2,color='#549a36',alpha=1,align='center')
    plt.ylabel('面积区间(平方米)',size=16)
    plt.xlabel('数量',size=16)
    plt.title('二手房面积分布图',size=18)
    plt.yticks(fontsize=16)
    plt.xticks(fontsize=16)
    plt.legend(['数量(间)'], loc='upper right')
    plt.grid(color='#CCFF99',linestyle='--', linewidth=0.3,axis='x',alpha=1)
    plt.xlim(0,1800)
    for x in houseArea:
       width = x.get_width()
       print(x.get_y() + x.get_height() / 2, width+15, int(width))
       plt.text(width+60,x.get_y()+0.15 ,  int(width), ha="center", va="bottom",size=16)
    plt.savefig('二手房面积分布图')
    

    聚类分析

    house_type = np.array(data[['房屋单价(元/m²)','建造时间(年)', '建筑面积(平方米)']])
    #设置质心数量为3
    k_model=KMeans(n_clusters=3)
    clf=k_model.fit(house_type)
    center=pd.DataFrame(clf.cluster_centers_,columns=['房屋单价(元/m²)','建造时间(年)', '建筑面积(平方米)'])
    center
    
    聚类分析.png

    将此套房源数据进行聚类,可以得出建造年代和房屋价格的关系。

    总结

    通过数据分析可以得出,龙华区和美兰区的二手房数量偏多,且房价适中。3室2厅2卫和2室2厅1卫的房型数量较多,可见该两套房型的需求也大。面积在50平—100平和100平—150平的数量较多。
    若资金有限,可以买较早建造的房源。

    相关文章

      网友评论

          本文标题:海口二手房-数据分析-python

          本文链接:https://www.haomeiwen.com/subject/bhnmnftx.html