
昨天還幻想海邊別墅的年輕人,今天可能開(kāi)始對(duì)房租絕望了。
8月初,有網(wǎng)友在“水木論壇”發(fā)帖控訴長(zhǎng)租公寓加價(jià)搶房引起關(guān)注。據(jù)說(shuō),一名業(yè)主打算出租自己位于天通苑的三居室,預(yù)期租金7500元/月,結(jié)果被二方中介互相抬價(jià),硬生生抬到了10800。
過(guò)去一個(gè)月,全國(guó)熱點(diǎn)城市的房租如脫韁野馬。一線的房租同比漲了近20%。一夜醒來(lái),無(wú)產(chǎn)青年連一塊立錐之地都懸了。
從2018下半年開(kāi)始,租金海嘯洶洶來(lái)襲,資本狂歡,官方默然,房東糾結(jié),租客尖叫。
這不是一方的過(guò)錯(cuò),而更像是一場(chǎng)全社會(huì)的“集體謀殺作品”。最令人不安的是,過(guò)去房地產(chǎn)的那套玩法和上漲邏輯,今天正在轉(zhuǎn)移到房租上。
房租暴漲的不只是北京。有數(shù)據(jù)顯示,7月份北京、上海、廣州、深圳、天津、武漢、重慶、南京、杭州和成都十大城市租金環(huán)比均有所上漲。其中北京、上海、深圳的租金漲幅最猛,北京7月份房租同比上漲3.1%,有小區(qū)甚至漲幅超過(guò)30%。
圖自“21世紀(jì)經(jīng)濟(jì)報(bào)道”《最新房租數(shù)據(jù)出爐,你一個(gè)月要交多少錢?(附房租地圖)》一文
接下來(lái),本文使用 Python 大法通過(guò)獲取某網(wǎng)數(shù)萬(wàn)條北京租房數(shù)據(jù),給大家說(shuō)說(shuō)真實(shí)的房租情況。
通過(guò)常用的三部曲:數(shù)據(jù)獲取、數(shù)據(jù)清洗預(yù)覽、數(shù)據(jù)分析可視化,與你一起探究最近房租的狀況。
一、數(shù)據(jù)獲取
今天就把目前市場(chǎng)占有率最高的房屋中介公司為目標(biāo),來(lái)獲取北京、上海兩大城市的租房信息。
(目標(biāo)鏈接:https://bj.lianjia.com/zufang/)
整體思路是:
先爬取每個(gè)區(qū)域的url和名稱,跟主url拼接成一個(gè)完整的url,循環(huán)url列表,依次爬取每個(gè)區(qū)域的租房信息。
在爬每個(gè)區(qū)域的租房信息時(shí),找到最大的頁(yè)碼,遍歷頁(yè)碼,依次爬取每一頁(yè)的二手房信息。
post代碼之前簡(jiǎn)單講一下這里用到的幾個(gè)爬蟲(chóng)Python包:
requests: 就是用來(lái)請(qǐng)求對(duì)鏈家網(wǎng)進(jìn)行訪問(wèn)的包
lxml: 解析網(wǎng)頁(yè),用xpath表達(dá)式與正則表達(dá)式一起來(lái)獲取網(wǎng)頁(yè)信息,相比bs4速度更快
詳細(xì)代碼如下:
import requests
import time
import re
from lxml import etree
# 獲取某市區(qū)域的所有鏈接
def get_areas(url):
print('start grabing areas')
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108
Safari/537.36'}
resposne = requests.get(url, headers=headers)
content = etree.HTML(resposne.text)
areas = content.xpath("http://dd[@data-index = '0']//div[@class='option-list']/a/text()")
areas_link = content.xpath("http://dd[@data-index = '0']//div[@class='option-list']/a/@href")
for i in range(1,len(areas)):
area = areas[i]
area_link = areas_link[i]
link = 'https://bj.lianjia.com' + area_link
print("開(kāi)始抓取頁(yè)面")
get_pages(area, link)
#通過(guò)獲取某一區(qū)域的頁(yè)數(shù),來(lái)拼接某一頁(yè)的鏈接
def get_pages(area,area_link):
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108
Safari/537.36'}
resposne = requests.get(area_link, headers=headers)
pages = int(re.findall("page-data=\'{\"totalPage\":(\d+),\"curPage\"", resposne.text)[0])
print("這個(gè)區(qū)域有" + str(pages) + "頁(yè)")
for page in range(1,pages+1):
url = 'https://bj.lianjia.com/zufang/dongcheng/pg' + str(page)
print("開(kāi)始抓取" + str(page) +"的信息")
get_house_info(area,url)
#獲取某一區(qū)域某一頁(yè)的詳細(xì)房租信息
def get_house_info(area, url):
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108
Safari/537.36'}
time.sleep(2)
try:
resposne = requests.get(url, headers=headers)
content = etree.HTML(resposne.text)
info=[]
for i in range(30):
title = content.xpath("http://div[@class='where']/a/span/text()")[i]
room_type = content.xpath("http://div[@class='where']/span[1]/span/text()")[i]
square = re.findall("(\d+)",content.xpath("http://div[@class='where']/span[2]/text()")[i])[0]
position = content.xpath("http://div[@class='where']/span[3]/text()")[i].replace(" ", "")
try:
detail_place = re.findall("([\u4E00-\u9FA5]+)租房", content.xpath("http://div[@class='other']/div/a/text()")[i])[0]
except Exception as e:
detail_place = ""
floor =re.findall("([\u4E00-\u9FA5]+)\(", content.xpath("http://div[@class='other']/div/text()[1]")[i])[0]
total_floor = re.findall("(\d+)",content.xpath("http://div[@class='other']/div/text()[1]")[i])[0]
try:
house_year = re.findall("(\d+)",content.xpath("http://div[@class='other']/div/text()[2]")[i])[0]
except Exception as e:
house_year = ""
price = content.xpath("http://div[@class='col-3']/div/span/text()")[i]
with open('鏈家北京租房.txt','a',encoding='utf-8') as f:
f.write(area + ',' + title + ',' + room_type + ',' + square + ',' +position+
','+ detail_place+','+floor+','+total_floor+','+price+','+house_year+'\n')
print('writing work has done!continue the next page')
except Exception as e:
print( 'ooops! connecting error, retrying.....')
time.sleep(20)
return get_house_info(area, url)
def main():
print('start!')
url = 'https://bj.lianjia.com/zufang'
get_areas(url)
if __name__ == '__main__':
main()
二、數(shù)據(jù)清洗預(yù)覽
數(shù)據(jù)共14038條,10個(gè)維度,由上圖可看出北京房源均價(jià)為9590元/月,中位數(shù)為7000。一半的房源價(jià)格在7000以下,所有房源的價(jià)格區(qū)間為[1000,250000],價(jià)格極差過(guò)大。
三、數(shù)據(jù)分析可視化
四維度-北京房租均價(jià)
接下來(lái),將北京各區(qū)域、各路段、各樓盤(pán)房屋數(shù)量、均價(jià)分布放在同一張圖上,更直觀地來(lái)看待房租。
從圖中可看出,最近,北京市各區(qū)域的房租均在6000元/月以上,其中最高區(qū)域?yàn)闁|城,均價(jià)達(dá)12463元/月。不過(guò),由于房源信息過(guò)多過(guò)雜,房屋位置、面積、樓層、朝向等對(duì)價(jià)格均有較大影響,因此,價(jià)格這個(gè)維度需要進(jìn)一步分析。
由上圖可得,各路段的均價(jià)基本都在6000以上,其中海淀北部新區(qū)的房源數(shù)最多,但均價(jià)最低,為3308元/月,這或許與海淀北部生態(tài)科技新區(qū)作為高新技術(shù)產(chǎn)業(yè)的承載區(qū)、原始創(chuàng)新策源地的研發(fā)基地,以及科技園集聚區(qū),目前已入駐華為、聯(lián)想、百度、騰訊、IBM、Oracle等近2000家國(guó)內(nèi)外知名的科技創(chuàng)新型企業(yè)有關(guān)。另一方面,海淀紫竹橋的房?jī)r(jià)竟一起沖天,其附近以博物館、體育場(chǎng)館為特色,交通便利,配套設(shè)施完善,均價(jià)較高也是情理之中。
可以看出,不同樓盤(pán)的均價(jià)浮動(dòng)很大,但都在6000/月以上。最高的甚至達(dá)到17516/月。由于每個(gè)樓盤(pán)戶型差別較大,地理位置也較為分散,因此均價(jià)波動(dòng)很大。每個(gè)樓盤(pán)具體情況還需具體分析。
附詳情代碼:
#北京路段_房屋均價(jià)分布圖
detail_place = df.groupby(['detail_place'])
house_com = detail_place['price'].agg(['mean','count'])
house_com.reset_index(inplace=True)
detail_place_main = house_com.sort_values('count',ascending=False)[0:20]
attr = detail_place_main['detail_place']
v1 = detail_place_main['count']
v2 = detail_place_main['mean']
line = Line("北京主要路段房租均價(jià)")
line.add("路段",attr,v2,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
mark_point=['min','max'],xaxis_interval=0,line_color='lightblue',
line_width=4,mark_point_textcolor='black',mark_point_color='lightblue',
is_splitline_show=False)
bar = Bar("北京主要路段房屋數(shù)量")
bar.add("路段",attr,v1,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
xaxis_interval=0,is_splitline_show=False)
overlap = Overlap()
overlap.add(bar)
overlap.add(line,yaxis_index=1,is_add_yaxis=True)
overlap.render('北京路段_房屋均價(jià)分布圖.html')
由上圖可以看出,均價(jià)在 8000-10000 之間的房屋數(shù)量最多,同時(shí) 1500-2000 這個(gè)價(jià)位之間房屋數(shù)少的可憐。
據(jù)北京市統(tǒng)計(jì)局的數(shù)據(jù),2017 年全市居民月人均可支配收入為 4769 元。另?yè)?jù) 58 同城和趕集網(wǎng)發(fā)布的報(bào)告,2017 年北京人均月租金為 2795 元。
北京租房者的房租收入比,驚人地接近 60%。很多人一半的收入,都花在了租房上,人生就這樣被鎖定在貧困線上。
統(tǒng)計(jì)數(shù)據(jù)也表明,北京租房人群收入整體偏低。47% 的租房人,年薪在 10 萬(wàn)以下。
在北京,能夠負(fù)擔(dān)得起每月 5000 元左右房租的群體,就算得上是中高收入人群。
就這樣,第一批 90 后扛過(guò)了離婚、禿頭、出家和生育,終于還是倒在了房租面前。
附詳情代碼:
#房源價(jià)格區(qū)間分布圖
price_info = df[['area', 'price']]
#對(duì)價(jià)格分區(qū)
bins = [0,1000,1500,2000,2500,3000,4000,5000,6000,8000,10000]
level = ['0-1000','1000-1500', '1500-2000', '2000-3000', '3000-4000',
'4000-5000', '5000-6000', '6000-8000', '8000-1000','10000以上']
price_stage = pd.cut(price_info['price'], bins = bins,labels = level).value_counts().sort_index()
attr = price_stage.index
v1 = price_stage.values
bar = Bar("價(jià)格區(qū)間&房源數(shù)量分布")
bar.add("",attr,v1,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
xaxis_interval=0,is_splitline_show=False)
overlap = Overlap()
overlap.add(bar)
overlap.render('價(jià)格區(qū)間&房源數(shù)量分布.html')
面積&租金分布呈階梯性
上圖可以看出,80%的房源面積集中在0-90平方米之間,也符合租客單租與合租情況,大面積的房屋很少。
面積&租金分布呈階梯性,比較符合常理。租房主力軍就是上班族了,一般對(duì)房子面積要求較低,基本集中在30平。
附詳情代碼:
#房屋面積分布
bins =[0,30,60,90,120,150,200,300,400,700]
level = ['0-30', '30-60', '60-90', '90-120', '120-150', '150-200', '200-300','300-400','400+']
df['square_level'] = pd.cut(df['square'],bins = bins,labels = level)
df_digit= df[['area', 'room_type', 'square', 'position', 'total_floor', 'floor', 'house_year', 'price', 'square_level']]
s = df_digit['square_level'].value_counts()
attr = s.index
v1 = s.values
pie = Pie("房屋面積分布",title_pos='center')
pie.add(
"",
attr,
v1,
radius=[40, 75],
label_text_color=None,
is_label_show=True,
legend_orient="vertical",
legend_pos="left",
)
overlap = Overlap()
overlap.add(pie)
overlap.render('房屋面積分布.html')
#房屋面積&價(jià)位分布
bins =[0,30,60,90,120,150,200,300,400,700]
level = ['0-30', '30-60', '60-90', '90-120', '120-150', '150-200', '200-300','300-400','400+']
df['square_level'] = pd.cut(df['square'],bins = bins,labels = level)
df_digit= df[['area', 'room_type', 'square', 'position', 'total_floor', 'floor', 'house_year', 'price', 'square_level']]
square = df_digit[['square_level','price']]
prices = square.groupby('square_level').mean().reset_index()
amount = square.groupby('square_level').count().reset_index()
attr = prices['square_level']
v1 = prices['price']
pie = Bar("房屋面積&價(jià)位分布布")
pie.add("", attr, v1, is_label_show=True)
pie.render()
bar = Bar("房屋面積&價(jià)位分布")
bar.add("",attr,v1,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
xaxis_interval=0,is_splitline_show=False)
overlap = Overlap()
overlap.add(bar)
overlap.render('房屋面積&價(jià)位分布.html')
大多數(shù)房屋年齡在10年以上
由上圖看出,房屋年齡大多集中在10-20年、25年以上,而5年以下的不到2%;不過(guò),別看這些都是老房子,最近房租變得這么猖狂?原因其中之一就是資本圈地。
這條網(wǎng)貼立馬點(diǎn)燃了大眾的情緒:“好啊,原來(lái)是這些長(zhǎng)租平臺(tái)燒錢圈地,一心只想要壟斷市場(chǎng)房源,哄抬租金,企圖賺取暴利差價(jià)!”
四、后記
拿自如舉例,表面上看跟中介公司沒(méi)啥兩樣,收了各種散盤(pán),然后集中裝修、出租、管理,因?yàn)檫\(yùn)營(yíng)成本和住房質(zhì)量提高,房租肯定有所上漲。
但更關(guān)鍵的事情在背后。自如把項(xiàng)目打包起來(lái)搞起了資產(chǎn)證券化,以租金收益權(quán)為基礎(chǔ)資產(chǎn)做擔(dān)保,投放到金融市場(chǎng)上發(fā)行國(guó)內(nèi)首單租房市場(chǎng)消費(fèi)分期類ABS,讓各路資金來(lái)認(rèn)購(gòu),每年給大家搞點(diǎn)分紅。
大量資本都在賭租房這個(gè)風(fēng)口,而前期誰(shuí)的規(guī)模越大、資源越多,以后的定價(jià)權(quán)就越大,利潤(rùn)空間就越不可想象。
這次一共從鏈家網(wǎng)上爬取 14038 條數(shù)據(jù),而那就是大概一周前,8 月 17 日北京住建委約談了幾家中介公司。
最終的結(jié)果是自如、相寓和蛋殼承諾將拿出 12 萬(wàn)間房子投入市場(chǎng)其中,自如將拿出 8 萬(wàn)間(鏈家、自如、貝殼找房,他們的實(shí)際控制人是同一個(gè)人--鏈家老板左暉)。
也就是說(shuō),平常的時(shí)候,鏈家網(wǎng)+自如一共在網(wǎng)上待租的也就是 1 萬(wàn)多套房子,但是一被約談他們就一口氣拿出了 8 萬(wàn)套房子增援??怎么增?繼續(xù)收房,讓房源更加供不應(yīng)求?
昨天買不起房,今天租不起房,如果連這樣的生活也要因?yàn)槭袌?chǎng)的不規(guī)范而被逼迫、被奪走,真的會(huì)讓人對(duì)一個(gè)城市失去希望。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10