白岩松曾说:“高房价正在毁掉无数年轻人的爱情,毁灭了年轻人的想象力。”尤其是北上广深这类一线城市,对于一般的工薪阶层,买房更是难上加难。前不久,DT财经写了一篇文章《我只有300万预算,能在上海买到什么样的房子?》,引起了网友广泛热议。有人不禁要问,那在深圳买房又得要多少预算呢?
于是,为了更加深入了解深圳房产交易市场,我用Pyhton采集了深圳在售20778套二手房数据并分析,试图从数据层面了解深圳二手房市场现状。
首先,我们用可视化图表看下分析的结果:
首先,我们看一下深圳近年来二手房房价整体走势图。由图可知,2011年深圳二手房价位18495元/㎡,仅仅9年时间,至2019年二手房价增长至62205元/㎡,增加了2.36倍。然而深圳平均工资增加不到2倍。可见,一般的工薪阶层购房压力增加也是情理之中。
深圳二手房源主要分布在龙岗区,共计12747万套。光明区和大鹏新区二手房源相对较少,分别为382套和340套。
从深圳在售的二手房均价来看,南山区均价最高,高达81241元/㎡,其次是福田区和罗湖区,二手房均价分别为72114元/㎡和53070元/平方米。光明区房价最低,为22893元/㎡。
在深圳买一套二手房到底要花多少钱?我们分析了二手房的价位,从图中可以看到总价在300-500万内的最多,占比达到30.53%。500-800万的占比29.85%。300万以下的占比17.84%。
这些二手房的房龄都有多久了呢?由图可知,房龄在15-20年的最多,占比23.37%,其次是房龄在10-15年,占比21.51%。5年以内的仅占比17.63%。
深圳二手房中,3室2厅、2室1厅和3室1厅的二手房源数量最多,5室以上的房源较少。影响二手房房价的因素很多,居室越多房价不一定就更高,由图可知,1室0厅的均价也达到了75121元/㎡。
深圳在售二手房中,朝南的房源占比最大,达31.72%,朝东南和西南次之,分别为26.10%和8.94%。
由图可知,龙光玖钻在售二手房数量最多,达到150个,其次是龙光玖云著,为130个房源。
通过绘制楼层与房价、建筑面积与房价回归图可知,深圳在售二手房楼层类型分布较为分散,且楼层与房价的相关性不大,建筑面积集中分布在200㎡内,且建筑面积与房价具有较强的正相关。
本次数据来源于贝壳找房,以下为数据获取完整代码:
from fake_useragent import UserAgent
import csv
import time
import random
import requests
import traceback
from lxml import etree
def parse_page(parse):
items = parse.xpath('//div[@class="address"]')
try:
for item in items:
name = ''.join(item.xpath('./div[1]/div/a/text()')).strip()
#print(name)
yangshi = ''.join(item.xpath('./div[2]/text()')).strip()
#print(yangshi)
guanzhu = ''.join(item.xpath('./div[3]/text()')).strip()
#print(guanzhu)
zongjia = ''.join(item.xpath('./div[5]/div[1]/span/text()')).strip()
# print(zongjia)
danjia = ''.join(item.xpath('./div[5]/div[2]/span/text()')).strip()
# print(danjia)
data = {
'name':name,
'yangshi':yangshi,
'guanzhu':guanzhu,
'zongjia':zongjia,
'danjia':danjia
}
# print(data)
try:
with open('ershoufang_shenzhen.csv','a', encoding='utf_8_sig', newline='') as fp:
fieldnames = ['name','yangshi','guanzhu','zongjia','danjia']
writer = csv.DictWriter(fp, fieldnames = fieldnames)
writer.writerow(data)
except Exception:
print(traceback.print_exc())
except Exception:
print(traceback.print_exc())
def main():
district_list = ['luohuqu', 'futianqu','nanshanqu', 'yantianqu','baoanqu', 'longgangqu','longhuaqu', 'guangmingqu','pingshanqu', 'dapengxinqu'] #地区
for district in district_list:
for page in range(1,101): #页数控制
url = 'https://sz.ke.com/ershoufang/{0}/pg{1}/'.format(district, page)
# print(url)
response = requests.request("GET", url, headers = headers)
print(response.status_code)
if response.status_code == 200:
re = response.content.decode('utf-8')
print("正在提取" + district +'第' + str(page) + "页")
time.sleep(random.uniform(1, 2))
print("-" * 80)
# print(re)
parse = etree.HTML(re) # 解析网页
num = ''.join(parse.xpath('//*[@id="beike"]/div[1]/div[4]/div[1]/div[2]/div[1]/h2/span/text()'))
print(num)
parse_page(parse)
if int(num) == 0:
break
if __name__ == '__main__':
ua = UserAgent(verify_ssl=False)
headers = {"User-Agent": ua.random}
time.sleep(random.uniform(1, 2))
main()
本次数据清洗主要用到正则表达式,以下为数据清洗完整代码:
import csv, re
import pandas as pd
result = []
floor_type_rule = re.compile("(.+?)\(共(\d+)层\)")
nums_rule = re.compile("([\d\.]+)")
with open("./ershoufang_shenzhen.csv", encoding="utf-8-sig") as f:
f_csv = csv.reader(f)
for row in f_csv:
tmp = []
tmp.append(row[0])
cell = re.sub(" *\n *", "|", row[1])
cell = re.sub(" *\|+ *", "|", cell)
cell_splits = cell.split("|")
if len(cell_splits) == 4:
cell_splits.insert(1, "")
match = floor_type_rule.match(cell_splits[0])
tmp.append(match.group(1))
tmp.append(int(match.group(2)))
match = nums_rule.match(cell_splits[1])
if match:
tmp.append(match.group(1))
else:
tmp.append(None)
tmp.append(cell_splits[2])
search = nums_rule.search(cell_splits[3])
tmp.append(float(search.group(1)))
tmp.append(cell_splits[4])
split_arr = row[2].split("/")
tmp.append(int(split_arr[0].replace("人关注", "")))
tmp.append(split_arr[1].replace("发布", ""))
tmp.append(float(row[3]))
tmp.append(float(nums_rule.search(row[4]).group(1)))
result.append(tmp)
df = pd.DataFrame(
result,
columns=[
"楼盘名称",
"楼层类型",
"楼层数",
"建造时间(年)",
"户型",
"建筑面积(平米)",
"朝向",
"关注人数",
"发布时间",
"房价(万)",
"单价(元/平米)",
],
)
df
欢迎关注公众号菜J学Python,我们坚持认真写Python基础,幽默写Python实战。你可在公众号后台免费领取相关学习资料或学习交流。