房价的数据似乎比较敏感,今年以来连百城房价指数也不再更新了。好在现在中介的互联网平台比较完善,以下数据来自某房产中介网站,所有数据都是二手房报价。
珠海各区域的房价 区位是房价的重要因素,珠海各区的均价显示了明显的区别,横琴新区在4万元以上、香洲区集中2.5-3万之间,金湾区和斗门区集中在1-1.5万元,高栏港经济区则在1万元以下。即使进一步考察镇、街道一级的区域划分下,在这种价格的明显差异依然存在。有趣的是,从均值上看金湾区和斗门区的价格更接近,但加入房屋面积、楼层和装修情况之后,高栏港经济区的房屋价格与斗门区没有显著区别,但金湾区和斗门区有相当的差距。
房屋大小的影响 是否存在对大房子的偏好?以改善居住条件而言,如果有足够的购买力,大房子更为舒适,因此大面积的房子具有两个优点:面对更高购买力群体,以及更好的居住条件;但是小房子需要的资金规模较小,市场需求更大,也更具有流动性。那么,是否存在一个最优的面积,同时一定程度上具有两种优势? 检验结果显示,房屋面积越大单价越高,但是增加的幅度很小,每增加1平方米,价格大约上升24元,以当前均价计算,接近0.1%;不存在某个最优的面积。加入楼层和装修情况后,面积的系数下降,说明住房面积很大程度上伴随着多方面的居住条件改善。
其他因素的影响 房屋的楼层和装修情况也可能影响价格,装修情况分成毛坯、普通装修、精装修、豪华装修。结果显示,楼层和装修情况都有很明显的影响,每上升一层,价格上升294元,占均价1.5%;装修情况每提高一个层次,价格上升1262元,占均价5.6%,装修成本很大程度上体现在房屋报价中。
数据存在的问题 本文采用的数据是单家房产中介的二手房报价数据,一方面数据范围较小,只有一家平台、只包括二手房;另一方面是报价数据,并非实际成交价格,也无法看到历史趋势。此外,数据中房屋特征信息相对较少,其他如是否是学区房、交通便利程度都没能显示出来。
附:数据抓取程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 import urllib2from bs4 import BeautifulSoupfrom time import sleepimport pandas as pddef getkw (sp ): filter00=sp.findAll('span' ) ltsp=len (filter00)/2 kwlist=[] for i in range (ltsp+1 ): kwlist.append(filter00[i*2 ].string.replace('\t' ,'' ).replace('\r\n' ,'' )) if len (kwlist)<5 : kwlist.append(None ) kwname=['room' ,'area' ,'style' ,'floor' ,'year' ] return dict (zip (kwname,kwlist)) def getonerecoad (soup ): filter2=soup.findAll('p' ) filter3=filter2[2 ].findAll('span' ) hprice=int (soup.find('span' ,attrs='sale-price' ).string) title=soup.img['alt' ] addr1=filter3[1 ].findAll('a' )[0 ].string addr2=filter3[1 ].findAll('a' )[1 ].string kwgd=filter3[0 ].a.string kwstr=filter3[2 ].string areaprice=int (filter2[5 ].string[:-4 ]) dic=getkw(filter2[1 ]) dic['house-price' ]=hprice dic['title' ]=title dic['addrarea' ]=addr1 dic['addr' ]=addr2 dic['kwgd' ]=kwgd dic['kwstr' ]=kwstr dic['price' ]=areaprice if len (dic['floor' ])>4 : dic['floor1' ]=dic['floor' ][:2 ] dic['floor2' ]=int (dic['floor' ][3 :-1 ]) if dic['year' ]!=None : dic['year' ]=int (dic['year' ][:-2 ]) dic['area' ]=float (dic['area' ][:-2 ]) return dic listrecord=[] for i in range (337 ): url='http://zhuhai.qfang.com/sale/f' +str (i+1 ) print url webpage=urllib2.urlopen(url).read() soup=BeautifulSoup(webpage,'html.parser' ) filter0=soup.findAll('div' ,attrs={'id' :'cycleListings' }) filter1=filter0[0 ].findAll('li' ) for j in filter1: listrecord.append(getonerecoad(j)) print i,'---' ,len (listrecord) sleep(2 ) res=pd.DataFrame(listrecord)