利用 Python 爬取了 37483 條上海二手房信息,我得出的結論是?

作者 | 林小呆? ??編輯?| JackTian
來源 | 杰哥的IT之旅(ID:Jake_Internet)
本文數(shù)據(jù)來源于鏈家網(wǎng),搜集時間為2020年7月23日。
本次項目使用 Scrapy-Redis 分布式爬取鏈家網(wǎng)數(shù)據(jù),請自備代理ip。完整代碼已放在文末,本文不再贅述爬蟲細節(jié),源碼中有詳細注釋。
儀表板展示

項目背景
去面試的時候被問上海二手房的一些情況,作為一個土著,我只知道上海這個區(qū)挺貴的那個區(qū)大概這個價,但是具體數(shù)值卻說不上來。所以,就有了本文。
從政策上來看,自從 2016 年國家喊出“房住不炒”的口號之后中國的房價就出現(xiàn)了明顯的降溫。2019 年國家為了“救市”又宣布了幾條政策:
2、調整公積金貸款利率,提高了二房的房貸利率,打擊市場投機需求。
3、鼓勵租售并舉,鼓勵以住房租賃為主營業(yè)務的企業(yè)買房。
4、居住證降低申請門檻新政,讓落戶買房更加容易。
5、農民購房有補助,幫助農民工朋友們省去一部分買房成本。
從經(jīng)濟上來看,2020 年上半年上海人均可支配收入以 36577 元笑傲全國,同比增長3.64%??此泼利惖臄?shù)值背后,隱藏著多少被平均的普通老百姓。

從社會上來看,2019 年我國人口出生率創(chuàng)下 1949 年以來的最低值,即使在 2016 年開放二胎政策以來,人口出生率也沒有大幅提高。
從技術上來看,中國造樓能力世界第一!“基建狂魔”豈是浪得虛名!
分析目的
2、目前上海二手房價位、房源有何特點?
3、上海各區(qū)縣的掛牌情況,找出拋壓最大的區(qū)域
數(shù)據(jù)清洗
首先我們看一下爬取的數(shù)據(jù)。維度不是太多,但是有些列我們可以拆分,例如地區(qū)、所在樓層、抵押信息等。

在對數(shù)據(jù)進行清洗前我們可以使用pandas_profiling進行快速的統(tǒng)計分析。
import?pandas_profiling
pandas_profiling.ProfileReport(data).to_file("./report/html")

根據(jù)報告內容我們可以看到本次數(shù)據(jù)總共有 37491 行,20 列,存在 7 行重復,重復占比小于 0.1%,報告繼續(xù)下拉可以看到每一列的統(tǒng)計情況。
我們需要清洗的幾點:
2、替換 None 值
3、將地區(qū)、房屋戶型、所在樓層、抵押信息進行切分合并
4、轉換數(shù)據(jù)類型
5、刪除多余字符
6、由于爬取時出現(xiàn)的錯誤,對價格列進行重新賦值
7、剔除異常數(shù)據(jù)
#?如果有重復值,則保留第一個
data.drop_duplicates(keep='first',?inplace=True)
#?替換None
data?=?data.applymap(lambda?x:?'暫無數(shù)據(jù)'?if?x?==?'None'?else?x)
#?切分地區(qū)、房屋戶型、所在樓層、抵押信息后刪除原列,將拆分出的新列合并至原data
data?=?pd.concat([data,?data['地區(qū)'].str.extract(pat='(?P<區(qū)>.*?)\s(?P<鎮(zhèn)>.*?)\s(?P<環(huán)>.*)'),
??????????????????data['房屋戶型'].str.extract(
??????????????????????pat='(?P<室>\d+)室(?P<廳>\d+)廳(?P<廚>\d+)廚(?P<衛(wèi)>\d+)衛(wèi)'),
??????????????????data['所在樓層'].str.extract(
??????????????????????pat='(?P<所處樓層>.+)\(共(?P<總層數(shù)>\d+)層\)'),
??????????????????data['抵押信息'].map(lambda?x:x.strip()).str.extract(pat='(?P<有無抵押>.{1})抵押(?P<抵押情況>.*)?')],?axis=1)
data.drop(['地區(qū)',?'所在樓層',?'抵押信息'],?axis=1,?inplace=True)
data['區(qū)']?=?data['區(qū)']+'區(qū)'
#?去除建筑面積后面的平米單位,并轉為float
data['建筑面積']?=?data['建筑面積'].map(lambda?x:?float(x[:-1]))
#?轉換數(shù)據(jù)類型
data['價格']?=?data['價格'].astype(float)
#?轉換日期類型
data['掛牌時間']?=?pd.to_datetime(data['掛牌時間'])
#?如果存在非時間類型的字符串則替換為NaT
data['上次交易']?=?pd.to_datetime(data['上次交易'],?errors="coerce")
#?存在括號幾期、某區(qū),都暫且刪除
data['小區(qū)']?=?data['小區(qū)'].str.replace("[\(\(].*?[\)\)]",?"")
#?篩選出價格小于20的數(shù)據(jù),我們可以發(fā)現(xiàn)這些房源的面積及所屬區(qū)域都是比較好的,記錄的數(shù)據(jù)可能有所錯誤
#?返回鏈家網(wǎng)站搜索這幾套房源后發(fā)現(xiàn),這些價格的單位都是"億",所以我們需要對所有數(shù)據(jù)再一次進行清洗
#?統(tǒng)一使用'萬'作為總價的單位
data['價格']?=?data['價格'].map(lambda?x:?x*10000?if?x?20?else?x)
#?計算每平米單價
data['均價']?=?round(data['價格']/data['建筑面積']*10000,?2)

從上面的散點圖我們可以看出右邊有一個異常點,建筑面積4702平米,總價68萬,我返回鏈家網(wǎng)查詢該套房源發(fā)現(xiàn)在網(wǎng)站上他就是這么標價的。而同小區(qū)的價格如下所示。

該區(qū)域的均價都在 14000元/平米~20000元/平米,所以認為是鏈家網(wǎng)數(shù)據(jù)錄入出現(xiàn)了問題。我們需要剔除掉該數(shù)據(jù)。
描述性分析

2、數(shù)據(jù)的統(tǒng)計周期是 2013-01-18 2020-07-24
3、上海目前出售的二手房面積從 13 平米 ~ 1663.1 平米不等
4、根據(jù)爬取數(shù)據(jù)來看上海最貴的二手房均價為 319960.62 元/平米,整體均價為 56466.26 元/平米
均價超過 30 萬元/平米的房源到底在哪里?

可以看到掛牌的四套花園洋房均價超過 30 萬元/平米,掛牌時間都已經(jīng)挺久的了。大家可能對興國路不大熟悉,但是相信大家在不少拍攝背景為上海的影視劇中都見到過一幢大樓。

沒錯,就是武康大樓,最早稱為“諾曼底公寓”,而我們更喜歡叫它“九層樓”,這已經(jīng)是清除了電線后的模樣,其實我小時候的印象是這樣的。

電線編織如蜘蛛網(wǎng),這才是老底子的上海味道。
“九層樓”所處位置是個六岔路口,大家若要打卡請注意安全不要停留在路中間。旁邊的武康路也是一條很有歷史底蘊的“名人路”。
熱門商圈
hot_list?=?['四川北路',?'中山公園',?'漕河涇',?'徐家匯',?'陸家嘴',?'南京西路',
????????????'南京東路',?'人民廣場',?'淮海中路',?'虹橋',?'北外灘',?'新天地',?'靜安寺']
hot?=?data[data['鎮(zhèn)'].isin(hot_list)].groupby(by='鎮(zhèn)')['均價'].agg(
????['mean',?'count']).sort_values(by='count',?ascending=True)
pyc.Bar().add_xaxis(hot.index.to_list()).add_yaxis(series_name="",?yaxis_data=hot['count'].tolist(),?label_opts=opts.LabelOpts(is_show=False)).reversal_axis(
).set_global_opts(title_opts=opts.TitleOpts(title="熱門商圈掛牌數(shù)",?subtitle="崇明區(qū)缺少相應房源數(shù)據(jù);數(shù)據(jù)截至2020年7月\n數(shù)據(jù)來源:鏈家網(wǎng)?"),?toolbox_opts=opts.ToolboxOpts()).render_notebook()


中山公園在售 674 套,均價 72750 元/平米,算是幾個地塊中比較便宜的了。

戶型
huxing?=?data['房屋戶型'].where(data['房屋戶型'].isin(
????['2室1廳1廚1衛(wèi)',?'1室1廳1廚1衛(wèi)',?'2室2廳1廚1衛(wèi)',?'3室2廳1廚2衛(wèi)',?'3室1廳1廚1衛(wèi)',?'2室1廳1廚2衛(wèi)']),?other='其他',?errors='ignore')
pyc.Pie(init_opts=opts.InitOpts(height='600px',?width='600px')).add(series_name='房屋戶型',?data_pair=huxing.value_counts().items(),?radius=(100,?150),?rosetype="radius",?label_opts=opts.LabelOpts(
????is_show=True,?formatter="\n{c}套\ngo7utgvlrp%")).set_global_opts(title_opts=opts.TitleOpts(title="上海二手房掛牌房屋戶型",?subtitle="崇明區(qū)缺少相應房源數(shù)據(jù);數(shù)據(jù)截至2020年7月\n數(shù)據(jù)來源:鏈家網(wǎng)?"),?toolbox_opts=opts.ToolboxOpts()).render_notebook()
上海二手房掛牌的戶型千奇百怪,但還是以兩室戶居多,一室戶偏少。
二手房價位
data['房價分層']?=?pd.cut(data['價格'],?bins=[-np.inf,?100,?300,?500,?800,?1000,?np.inf],?right=True,
??????????????????????labels=['100萬以內',?'100-300萬',?'300-500萬',?'500-800萬',?'800-1000萬',?'1000萬及以上'])
pyc.Pie(init_opts=opts.InitOpts(height='500px',?width='500px')).add(series_name="房價",?data_pair=data['房價分層'].value_counts().items(),?radius=(100,?150),?rosetype=True,?label_opts=opts.LabelOpts(
????formatter="\n{c}套\ngo7utgvlrp%")).set_global_opts(title_opts=opts.TitleOpts(title="上海房價分層",?subtitle="崇明區(qū)缺少相應房源數(shù)據(jù);數(shù)據(jù)截至2020年7月\n數(shù)據(jù)來源:鏈家網(wǎng)?"),?toolbox_opts=opts.ToolboxOpts()).render_notebook()
100 萬以內想在上海買套房基本是不可能的了??梢酝Q崗考慮一下。同志們努把力,100-300 萬有 13000 多套房源等著你!
房屋所屬環(huán)線
pyc.Pie(init_opts=opts.InitOpts(height='500px',?width='500px')).add(series_name="環(huán)線",?data_pair=data['環(huán)'].replace("",?"暫無數(shù)據(jù)").value_counts().items(),?radius=(100,?150),?rosetype=True,?label_opts=opts.LabelOpts(
????formatter="\n{c}套\ngo7utgvlrp%")).set_global_opts(title_opts=opts.TitleOpts(title="二手房所屬環(huán)線",?subtitle="崇明區(qū)缺少相應房源數(shù)據(jù);數(shù)據(jù)截至2020年7月\n數(shù)據(jù)來源:鏈家網(wǎng)?"),?toolbox_opts=opts.ToolboxOpts()).render_notebook()
外環(huán)外的房源明顯是最多的,很可能是外環(huán)外房價偏低,所以比較火熱吧,我們繼續(xù)向下看。
上海均價地圖
pyc.Map(init_opts=opts.InitOpts(height='500px',?width='500px')).add(maptype="上海",?series_name="均價",?data_pair=[list(i)?for?i?in?data[data['掛牌時間'].dt.year?==?2020].groupby(by=['區(qū)'])['均價'].mean().apply(round).items()],?is_map_symbol_show=False,?is_selected=True,?label_opts=opts.LabelOpts(
????is_show=False)).set_global_opts(tooltip_opts=opts.TooltipOpts(formatter=":{c}元/平米"),?visualmap_opts=opts.VisualMapOpts(max_=100000,?pos_right='5%',?pos_bottom='20%',?is_calculable=True),?title_opts=opts.TitleOpts(title="2020年上半年上海二手房均價圖",?subtitle="崇明區(qū)缺少相應房源數(shù)據(jù);數(shù)據(jù)截至2020年7月\n數(shù)據(jù)來源:鏈家網(wǎng)?"),?toolbox_opts=opts.ToolboxOpts(),?legend_opts=opts.LegendOpts(is_show=False)).render_notebook()
看看中間那紅彤彤的區(qū)域,市中心的價格遠遠高于市區(qū)外。
掛牌量

雖然從上圖來看上海二手房掛牌量逐年遞增,但是考慮到數(shù)據(jù)爬取日期為2020年7月23日,可能前些年掛牌的二手房已經(jīng)出售,所以爬取不到掛牌信息。故不能由此判斷今年二手房市場較往年更活躍。

今年一二月受疫情影響,上海二手房掛牌量較低,隨著疫情情況緩和,從三月起上海二手房掛牌量逐漸增加。2020年上半年6月份的掛牌量是最大的。

從交叉表來看,2020年1月1日至2020年7月23日鏈家網(wǎng)上已經(jīng)掛牌 24673 套二手房。其中嘉定、閔行、寶山等區(qū)的拋壓較大,7月浦東的掛牌量激增。
所以驗證了上面外環(huán)外拋售房源較多的現(xiàn)象。
均價

雖然上海房價呈現(xiàn)著下跌趨勢,但我還是買不起。

2020年上半年上海二手房均價在55100元/平米附近波動,4月份更是跌至54150元/平米。


看看這可愛的漸變色,黃浦區(qū)這房價,一年賺的錢還不夠買個廁所的。

用折線圖來看看趨勢,好像各區(qū)都挺平緩的,浦東新區(qū)倒是在四月份之后有所上漲,虹口區(qū)在七月也有一小波上漲。
總結
2、除了虹口區(qū)以外各區(qū)的二手房均價在第二季度都趨于緩和。
3、100萬以下的房源幾乎所剩無幾,主要價位集中在100-300萬。
4、外環(huán)外的房源占比較大,是因為嘉定、閔行、寶山等區(qū)的掛牌量較高。
5、單身貴族喜歡的一室一廳房源僅剩下15.65%,連二手房房型的意思都是叫你趕緊找對象!
END
公眾號后臺回復:「上海二手房數(shù)據(jù)」可獲取本文完整數(shù)據(jù)
由于微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:
(1)點擊頁面最上方“小詹學Python”,進入公眾號主頁。
(2)點擊右上角的小點點,在彈出頁面點擊“設為星標”,就可以啦。
感謝支持,比心。
