北京房租大漲?Python 6個維度,數萬條數據幫你揭秘

昨天還幻想海邊別墅的年輕人,今天可能開始對房租絕望了。

8月初,有網友在「水木論壇」發帖控訴長租公寓加價搶房引起關注。據說,一名業主打算出租自己位於天通苑的三居室,預期租金7500元/月,結果被二方中介互相抬價,硬生生抬到了10800。

過去一個月,全國熱點城市的房租如脫韁野馬。一線的房租同比漲了近20%。一夜醒來,無產青年連一塊立錐之地都懸了。

從2018下半年開始,租金海嘯洶洶來襲,資本狂歡,官方默然,房東糾結,租客尖叫。

這不是一方的過錯,而更像是一場全社會的「集體謀殺作品」。

最令人不安的是,過去房地產的那套玩法和上漲邏輯,今天正在轉移到房租上。

房租暴漲的不只是北京。

有數據顯示,7月份北京、上海、廣州、深圳、天津、武漢、重慶、南京、杭州和成都十大城市租金環比均有所上漲。其中北京、上海、深圳的租金漲幅最猛,北京7月份房租同比上漲3.1%,有小區甚至漲幅超過30%。

圖自「21世紀經濟報道」《最新房租數據出爐,你一個月要交多少錢?(附房租地圖)》一文

接下來,戀習Python通過Python大法通過獲取某網數萬條北京租房數據,給大家說說真實的房租情況。

還是老規矩,老套路(是不是有股熟悉的味道),戀習Python常用的三部曲:數據獲取、數據清洗預覽、數據分析可視化,與你一起探究最近房租的狀況。

一、數據獲取

戀習Python今日就把目前市場佔有率最高的房屋中介公司為目標,來獲取北京、上海兩大城市的租房信息。(目標鏈接:https://bj.lianjia.com/zufang/)

整體思路是:

  • 先爬取每個區域的url和名稱,跟主url拼接成一個完整的url,循環url列表,依次爬取每個區域的租房信息。

  • 在爬每個區域的租房信息時,找到最大的頁碼,遍歷頁碼,依次爬取每一頁的二手房信息。

post代碼之前簡單講一下這裡用到的幾個爬蟲Python包:

  • requests:

     就是用來請求對鏈家網進行訪問的包

  • lxml:

    解析網頁,用xpath表達式與正則表達式一起來獲取網頁信息,相比bs4速度更快

詳細代碼如下:

import

 requests

import

 time

import

 re

from

 lxml 

import

 etree

# 獲取某市區域的所有鏈接

def

 

get_areas

(url)

:

    print(

"start grabing areas"

)    essay-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, essay-headers=essay-headers)    content = etree.HTML(resposne.text)    areas = content.xpath(

"//dd[@data-index = "0"]//div[@class="option-list"]/a/text()"

)    areas_link = content.xpath(

"//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(

"開始抓取頁面"

)        get_pages(area, link)

#通過獲取某一區域的頁數,來拼接某一頁的鏈接

def

 

get_pages

(area,area_link)

:

    essay-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, essay-headers=essay-headers)    pages =  int(re.findall(

"page-data="{"totalPage":(d+),"curPage""

, resposne.text)[

0

])    print(

"這個區域有"

 + str(pages) + 

"頁"

)    

for

 page 

in

 range(

1

,pages+

1

):        url = 

"https://bj.lianjia.com/zufang/dongcheng/pg"

 + str(page)        print(

"開始抓取"

 + str(page) +

"的信息"

)        get_house_info(area,url)

#獲取某一區域某一頁的詳細房租信息

def

 

get_house_info

(area, url)

:

    essay-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, essay-headers=essay-headers)        content = etree.HTML(resposne.text)        info=[]        

for

 i 

in

 range(

30

):            title = content.xpath(

"//div[@class="where"]/a/span/text()"

)[i]            room_type = content.xpath(

"//div[@class="where"]/span[1]/span/text()"

)[i]            square = re.findall(

"(d+)"

,content.xpath(

"//div[@class="where"]/span[2]/text()"

)[i])[

0

]            position = content.xpath(

"//div[@class="where"]/span[3]/text()"

)[i].replace(

" "

""

)            

try

:                detail_place = re.findall(

"([u4E00-u9FA5]+)租房"

, content.xpath(

"//div[@class="other"]/div/a/text()"

)[i])[

0

]            

except

 Exception 

as

 e:                detail_place = 

""

            floor =re.findall(

"([u4E00-u9FA5]+)("

, content.xpath(

"//div[@class="other"]/div/text()[1]"

)[i])[

0

]            total_floor = re.findall(

"(d+)"

,content.xpath(

"//div[@class="other"]/div/text()[1]"

)[i])[

0

]            

try

:                house_year = re.findall(

"(d+)"

,content.xpath(

"//div[@class="other"]/div/text()[2]"

)[i])[

0

]            

except

 Exception 

as

 e:                house_year = 

""

            price = content.xpath(

"//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+

"
"

)            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()

二、數據清洗預覽

數據共14038條,10個維度,由上圖可看出北京房源均價為9590元/月,中位數為7000。一半的房源價格在7000以下,所有房源的價格區間為[1000,250000],價格極差過大。

三、數據分析可視化

四維度-北京房租均價

接下來,戀習Python將北京各區域、各路段、各樓盤房屋數量、均價分布放在同一張圖上,更直觀地來看待房租

從圖中可看出,最近,北京市各區域的房租均在6000元/月以上,其中最高區域為東城,均價達12463元/月。不過,由於房源信息過多過雜,房屋位置、面積、樓層、朝向等對價格均有較大影響,因此,價格這個維度需要進一步分析。

由上圖可得,各路段的均價基本都在6000以上,其中海淀北部新區的房源數最多,但均價最低,為3308元/月,這或許與海淀北部生態科技新區作為高新技術產業的承載區、原始創新策源地的研發基地,以及科技園集聚區,目前已入駐華為、聯想、百度、騰訊、IBM、Oracle等近2000家國內外知名的科技創新型企業有關。另一方面,海淀紫竹橋的房價竟一起衝天,其附近以博物館、體育場館為特色,交通便利,配套設施完善,均價較高也是情理之中。

可以看出,不同樓盤的均價浮動很大,但都在6000/月以上。最高的甚至達到17516/月。由於每個樓盤戶型差別較大,地理位置也較為分散,因此均價波動很大。每個樓盤具體情況還需具體分析。

附詳情代碼:

#北京路段_房屋均價分布圖

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(

"北京主要路段房租均價"

)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(

"北京主要路段房屋數量"

)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(

"北京路段_房屋均價分布圖.html"

)

由上圖可以看出,均價在8000-10000之間的房屋數量最多,同時1500-2000這個價位之間房屋數少的可憐。

據北京市統計局的數據,2017年全市居民月人均可支配收入為4769元。另據58同城和趕集網發布的報告,2017年北京人均月租金為2795元。

北京租房者的房租收入比,驚人地接近60%。很多人一半的收入,都花在了租房上,人生就這樣被鎖定在貧困線上。

統計數據也表明,北京租房人群收入整體偏低。47%的租房人,年薪在10萬以下。在北京,能夠負擔得起每月5000元左右房租的群體,就算得上是中高收入人群。就這樣,第一批90後扛過了離婚、禿頭、出家和生育,終於還是倒在了房租面前。

附詳情代碼:

#房源價格區間分布圖

price_info = df[[

"area"

"price"

]]

#對價格分區

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.indexv1 = price_stage.valuesbar = Bar(

"價格區間&房源數量分布"

)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(

"價格區間&房源數量分布.html"

)

面積&租金分布呈階梯性

上圖可以看出,80%的房源面積集中在0-90平方米之間,也符合租客單租與合租情況,大面積的房屋很少。

面積&租金分布呈階梯性,比較符合常理。租房主力軍就是上班族了,一般對房子面積要求較低,基本集中在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.indexv1 = s.valuespie = 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"

)

#房屋面積&價位分布

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(

"房屋面積&價位分布布"

)pie.

add

(

""

, attr, v1, is_label_show=True)pie.render()bar = Bar(

"房屋面積&價位分布"

)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(

"房屋面積&價位分布.html"

)

大多數房屋年齡在10年以上

由上圖看出,房屋年齡大多集中在10-20年、25年以上,而5年以下的不到2%;不過,別看這些都是老房子,最近房租變得這麼猖狂?原因其中之一就是資本圈地。

這條網貼立馬點燃了大眾的情緒:「好啊,原來是這些長租平台燒錢圈地,一心只想要壟斷市場房源,哄抬租金,企圖賺取暴利差價!」

四、後記

拿自如舉例,表面上看跟中介公司沒啥兩樣,收了各種散盤,然後集中裝修、出租、管理,因為運營成本和住房質量提高,房租肯定有所上漲。

但更關鍵的事情在背後。自如把項目打包起來搞起了資產證券化,以租金收益權為基礎資產做擔保,投放到金融市場上發行國內首單租房市場消費分期類ABS,讓各路資金來認購,每年給大家搞點分紅。

大量資本都在賭租房這個風口,而前期誰的規模越大、資源越多,以後的定價權就越大,利潤空間就越不可想像。

這次戀習Python一共從鏈家網上爬取14038條數據,而那就是大概一周前,8月17日北京住建委約談了幾家中介公司。最終的結果是自如、相寓和蛋殼承諾將拿出12萬間房子投入市場其中,自如將拿出8萬間(鏈家、自如、貝殼找房,他們的實際控制人是同一個人--鏈家老闆左暉。

也就是說,平常的時候,鏈家網+自如一共在網上待租的也就是1萬多套房子,但是一被約談他們就一口氣拿出了8萬套房子增援??怎麼增?繼續收房,讓房源更加供不應求?

昨天買不起房,今天租不起房,如果連這樣的生活也要因為市場的不規範而被逼迫、被奪走,真的會讓人對一個城市失去希望。

作者:丁彥軍

來源:戀習Python(ID:sldata2017)

關注公眾賬號

飛馬會

飛馬會

AI人工智慧/大數據/技術管理等人員學習交流園地

往期福利

關注飛馬會公眾號,回復對應關鍵詞打包下載學習資料;

回復「入群」,加入飛馬網AI、大數據、項目經理學習群,和優秀的人一起成長!

回復

 

數字「1」

下載從入門到研究,人工智慧領域最值得一讀的10本資料(附下載)

回復 

數字「2」

機器學習 & 數據科學必讀的經典書籍,內附資料包!

回復 

數字「3」

走進AI & ML:從基本的統計學到機器學習書單(附PDF下載)

回復 

數字「4」

了解人工智慧,30份書單不容錯過(附電子版PDF下載)

回復

 

數字「5」

大數據學習資料下載,新手攻略,數據分析工具、軟體使用教程

回復

 

數字「6」

AI人工智慧:54份行業重磅報告匯總(附下載)

回復

 

數字「7」

TensorFlow介紹、安裝教程、圖像識別應用(附安裝包/指南)

回復 

數字「8」

大數據資料全解析(352個案例+大數據交易白皮書+國內外政策匯篇)

回復 

數字「9」

乾貨 | 薦讀10本大數據書籍(初級/中級/高級)成為大數據專家!

回復 

數字「10」

麥肯錫160頁報告:2030年全球將可能8億人要被機器搶飯碗

回復 

數字「11」

50本書籍大禮包:AI人工智慧/大數據/Database/Linear Algebra/Python/機器學習/Hadoop

回復 

數字「12」

小白| Python+Matlab+機器學習+深度神經網路+理論+實踐+視頻+課件+源碼,附下載!

回復 

數字「13」

大數據技術教程+書籍+Hadoop視頻+大數據研報+科普類書籍

回復 

數字「14」

小白| 機器學習和深度學習必讀書籍+機器學習實戰視頻/PPT+大數據分析書籍推薦!

回復 

數字「15」

大數據hadoop技術電子書+技術理論+實戰+源代碼分析+專家分享PPT

回復 

數字「16」

100G Python從入門到精通!自學必備全套視頻教程+python經典書籍!

回復 

數字「17」

【乾貨】31篇關於深度學習必讀論文匯總(附論文下載地址)

回復 

數字「18」

526份行業報告+白皮書:AI人工智慧、機器人、智能出行、智能家居、物聯網、VR/AR、 區塊鏈等(附下載)

回復 

數字「19」

800G人工智慧學習資料:AI電子書+Python語言入門+教程+機器學習等限時免費領取!

回復 

數字「20」

17張思維導圖,一網打盡機器學習統計基礎(附下載)

回復 

數字「21」

收藏 |7本 Matlab入門經典教程書籍,不可錯過!

回復 

數字「22」

吳恩達新書,教你構建機器學習項目:《Machine Learning Yearning》

回復 

數字「23」

機器學習:怎樣才能做到從入門到不放棄?(內含福利)

回復 

數字「24」

限時下載 | 132G編程資料:Python、JAVA、C,C++、機器人編程、PLC,入門到精通~

回復 

數字「25」

限資源 | 177G Python/機器學習/深度學習/演算法/TensorFlow等視頻,涵蓋入門/中級/項目各階段!

回復 

數字「26」

人工智慧入門書單推薦,學習AI的請收藏好(附PDF下載)

回復 

數字「27」

資源 | 吳恩達斯坦福CS230深度學習課程全套資料放出(附下載)

回復 

數字「28」

懂這個技術的程序員被BAT瘋搶...(內含資料包)

回復 

數字「29」

乾貨 | 28本大數據/數據分析/數據挖掘電子書合集免費下載!

回復 

數字「30」

領取 | 100+人工智慧學習、深度學習、機器學習、大數據、演算法等資料,果斷收藏!

回復 

數字「31」

2G谷歌機器學習25講速成課全集(中文版),限時下載

回復 

數字「32」

Matlab安裝包+教程視頻,讓你從入門到精通!

回復 

數字「33」

程序員去阿里面試,沒想到過程如此壯烈 (內含資料包)

回復 

人工智慧

下載《FMI人工智慧與大數據峰會嘉賓演講PPT》

回復

 

AI  江湖

下載《十大AI江湖領域》

回復 

ML實踐

下載《機器學習實踐經驗指導(英文版)》

回復 

DL論文

下載《深度學習100篇以上論文資料》

回復 

演算法     

下載

《數據挖掘十大經典演算法》

回復 

6.10     

下載《6.10餓了么&飛馬網項目管理實踐PPT》

資深程序員想轉行嗎?點擊

「閱讀原文」


推薦閱讀:

Supervisor是一枚大坑
Python史上最全數據類型,拿走不謝!
入門:用Python抓取網頁上的免費賬號(五)
Python文學家為Python寫的一首詞?(附中英文版)
python基礎-循環(while)

TAG:Python | 北京 | 數據 | 維度 |