背景
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')
房屋类型分布
二手房房屋户型分布.pngdf=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
面积分布
二手房面积分布图.pngbins=[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平的数量较多。
若资金有限,可以买较早建造的房源。
网友评论