zoukankan      html  css  js  c++  java
  • 只有300万预算,能在深圳买到什么样的二手房?分析20778套二手房

    前言

    白岩松曾说:“高房价正在毁掉无数年轻人的爱情,毁灭了年轻人的想象力。”尤其是北上广深这类一线城市,对于一般的工薪阶层,买房更是难上加难。前不久,DT财经写了一篇文章《我只有300万预算,能在上海买到什么样的房子?》,引起了网友广泛热议。有人不禁要问,那在深圳买房又得要多少预算呢?

    于是,为了深入了解深圳二手房交易市场,我用Pyhton采集了深圳在售20778套二手房数据并分析,试图从数据层面了解深圳二手房市场现状。

    数据探索与可视化

    深圳二手房历年走势

     

    首先,我们看一下深圳近年来二手房房价整体走势图。由图可知,2011年深圳二手房价仅为18495元/㎡,至2019年增长至62205元/㎡,增加了2.36倍。然而深圳平均工资增加不到2倍。可见,一般的工薪阶层购房压力增加也是情理之中。

    深圳二手房在售房源分布

     

    深圳二手房源主要分布在龙岗区,共计12747万套。坪山区和大鹏新区二手房源相对较少,分别为762套和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%。

    深圳在售二手房房源TOP10楼盘

     

    由图可知,龙光玖钻在售二手房数量最多,达到150个,其次是龙光玖云著,为130个房源。

    楼层数、建筑面积与房价的关系

     

    通过绘制楼层与房价、建筑面积与房价回归图可知,深圳在售二手房楼层类型分布较为分散,且楼层与房价的相关性不大,建筑面积集中分布在200㎡内,且建筑面积与房价具有较强的正相关。

    PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

     

    可以免费领取源码、项目实战视频、PDF文件等

     

    数据获取

    本次数据来源于贝壳找房,限于篇幅,以下仅提供核心代码:

    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 = []
    rule1 = re.compile("(.+层)(共(d+)层)")
    rule2 = re.compile("(d+)年建")
    rule3 = re.compile("d+室d+厅")
    rule4 = re.compile("([d.]+)平米")
    rule5 = re.compile("([d.]+)")
    
    with open("./ershoufang_shenzhen.csv", encoding="utf-8-sig") as f:
        f_csv = csv.reader(f)
        headers = next(f_csv)
        print(headers)
        for row in f_csv:
            tmp = {}
            tmp["楼盘名称"] = row[0]
            split_arr = re.sub("
    ? {2,}|?", "|", row[1]).split("|")
            for s in split_arr:
                s = s.strip()
                match = rule1.match(s)
                if match:
                    tmp["楼层类型"] = match.group(1)
                    tmp["楼层数"] = int(match.group(2))
                    continue
                match = rule2.match(s)
                if match:
                    tmp["建造时间"] = match.group(1)
                    continue
                match = rule3.match(s)
                if match:
                    tmp["户型"] = match.group(0)
                    continue
                match = rule4.match(s)
                if match:
                    tmp["建筑面积(平米)"] = float(match.group(1))
                    continue
                tmp["朝向"] = s
            split_arr = row[2].split("/")
            tmp["关注人数"] = int(split_arr[0].replace("人关注", ""))
            tmp["发布时间"] = split_arr[1].replace("发布", "")
            tmp["房价(单位:万)"] = float(row[3])
            tmp["单价(元/平米)"] = float(rule5.search(row[4]).group(1))
            result.append(tmp)
    df = pd.DataFrame(result)
    df.to_excel("result.xlsx", index=False)

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    作者:J哥

  • 相关阅读:
    高并发处理(一)页面静态化
    高并发处理(二)图片服务器分离
    五百强企业某部门视频面试题汇总
    access和sqlyog的使用
    条件查询
    primary select |||| case primary select
    win10 + ubuntu16 双系统安装
    ubuntu16 下安装python3.6 和Anaconda3
    import nltk nltk.download('reuters') [nltk_data] Error loading reuters: <urlopen error [Errno 11004] [nltk_data] getaddrinfo failed>
    共现矩阵
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13470175.html
Copyright © 2011-2022 走看看