时隔一年,想不到自己去年写的爬虫还能用,于是就加了几行代码,改成了多进程,开了20个进程跑了这个爬虫。
去年各地做了一件让人比较震惊的事情,印象中好几个地方做了平台,要求房屋中介做数据接入。好处是数据多,缺点是数据质量一般。
上一次爬取数据的时候是2017年11月23日,这次爬取是2018年11月25日。
代码不说爬虫,只说分析。相当于pandas.DataFrame的使用教程。df2017或者df2018都是DataFrame的类型。
看看2017年挂网的供应信息
len(df2017) # 32670
df2017.shape #(32670, 49)
看看2018年的供应信息,由于可能出现重复信息,所以我们要查重。
df2018 = df2018[~df2018.duplicated()]
之后2018年的数量为47340条。
但到底有多少套房挂出来了呢,上述信息是一套房子在多个中介中挂网。好在数据中有个fwtybh(房屋统一编号)的字段。
df2018[~df2018['fwtybh'].duplicated()]
df2017同上处理,2017和2018分别为19592,30144。
看了下杭州链家上,它自己挂了26446套。数据差异会有多种原因,一方面是2017年末的时候它刚推出,数据录入不全,2018年末的时候它有已经成交但是没删除的数据。
根据页面显示,本次爬虫只爬了一半。总的来说,这类网站的质量不高。
大类类比的话,我们取这些字段:挂牌价,房屋面积,小区名称,房屋统一编号。因为单套房屋肯定比不来,很少出现一套房屋交易后马上又挂网的情形。
好了,来看看挂网的热点小区,2017年的
df2017[~df2017['fwtybh'].duplicated()].groupby('xqmc')['accountid'].count().sort_values(ascending=False)[:20]
同理2018年的,数据可能会有误,比如我就不知道啥是运河路小区……一大波临平和闲林的小区上榜。
最重要的是价格,我们无法直接拿房屋对比,但是我们可以拿房屋报价的均价来对比。
df2017['dj'] = df2017['wtcsjg'] / df2018['jzmj'] # 报价/建筑面积,获取单价
df17 = df2017.groupby('xqmc').agg({'accountid': np.size, 'dj': np.median}).reset_index() #生成小区名称、出售套数、单位平方中位数的DataFrame
同理生成df18。
如果一个小区想要出售的业主太少,那么也不予考虑……我们将这个神奇数字定为7
mg = pd.merge(df17, df18, on='xqmc',how='inner', suffixes=('_2017', '_2018'))#合并两种数据,通过小区名称关联。
mg[(mg['accountid_2017'] > 7) & (mg['accountid_2018'] > 7)] # 筛选小区在售套数在2017年和2018年均超过7套的。
mg[mg['dj_2017'] > mg['dj_2018']] # 表示2017年报价单价比2018年高的。
数据显示,2017年报价单价比2018年低的是523, 2017年报价单价比2018年高的是319。
抽样画图对比:
mg.set_index('xqmc').sample(50)[['dj_2017','dj_2018']].plot(kind='bar')
50个小区抽样
蓝色是2017年单价,黄色是2018年单价。
===========================
伪结论:高价房价格回归,市区老破小升值,低价房消失。余杭及临平房产大规模入市。
今年的调控,总的来讲,没有太多的槽点,基本达成目标。
别看2018比2017同小区报价高的是523,报价低的是319,几乎等于0.6。毕竟一年度成交活跃,以房地产的流动性,下一年度该小区的供应少了,可能在同小区的单价就会高些。