地理视角下的北京租房选择

中国航天


前言

在老学长的建议下,毕业后选择了自如,最近又经历了一次换房风波,这勾起了我的好奇心,在北京到底怎样租房才是最划算的,哪些地方属于“禁区”,哪些又是“宝地”,于是就想着挖一挖北京租房的一些小猫腻,为自己和将来要租房的人提供参考。今天就先看看北京哪些地区属于租房“禁区”。走~


数据准备

我们通过高德地图先获取了北京市五环线的最大外接矩形坐标,再利用自如提供的的数据接口,得到北京五环范围内790个小区的最低合租信息。其实他在地图上长这样:
自如
这种看不到有用的信息,我们把五环内的所有数据放一块,再加工一下就变成了这样:

街道ID所在街道最低价格经度纬度
1111030000000佳世苑小区1390116.12853339.723864
1111060000000蓝光星华海悦城1260116.12463639.732086
1184370000000房山超级蜂巢2790116.12928939.723603
数据下载,点这里

二、数据获取

  • 利用网络数据通常需要找到可访问的数据地址,自如提供了地图数据服务,需要在点击请求中找到数据的请求地址,例如:

https://www.ziroom.com/map/room/listmin_lng=116.190081&max_lng=116.554003&min_lat=39.77811&max_lat=40.025685&zoom=18

  • 找到后搜索结果一般如下:其中的包含关键的经纬度信息,之后只需要用代码整理请求结果(一般为JSON格式)就行。
    自如后台返回信息

1.数据获取源码

引入依赖:

import pandas as pd ##处理excel文件数据
import csv
import requests
import json
from tqdm import tqdm
## 北京市租房数据提取范围
min_lng=116.190081
min_lat=39.77811
max_lng=116.554003
max_lat=40.025685

获取总页数,自如通过页来控制显示条目数,每页展示20条数据:

## 请求地址
url='https://www.ziroom.com/map/room/list?min_lng={}&max_lng={}&min_lat={}&max_lat={}&zoom=18'.format(min_lng,max_lng,min_lat,max_lat)
## 发送请求,请求结果放入response,headers数据请求时的浏览器头文件,提供是模拟为浏览器请求
response  = requests.get(url,headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
    'Referer':'https://www.ziroom.com/map/'
      })
data_json =json.loads(response.text)
page = data_json['data']['pages']
page

##创建最后的csv结果文件
out = open('./北京/beijing.csv','a', newline='')
## 将结果文件执行为写入状态
csv_write = csv.writer(out,dialect='excel')
## 结果数据中写入第一行,第一行通常为表中各项题目,如 '名称','描述','价格'
csv_write.writerow(['名称','描述','价格','单位','地址','所在街道','街道ID'])
## 自如通过页来控制显示条目数,每页展示20条数据,需要通过遍历页码来得到所有数据
for i in range(page+1):
    url='https://www.ziroom.com/map/room/list?min_lng={}&max_lng={}&min_lat={}&max_lat={}&zoom=18&p={}'.format(min_lng,max_lng,min_lat,max_lat,i)
    response  = requests.get(url,headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
        'Referer':'https://www.ziroom.com/map/'
          })
    data_json =json.loads(response.text)
    ## 将请求结果中需要的数据整理出来
    for datajsons in data_json['data']['rooms']:
        datajson = str(datajsons)
        datajsoni = eval(datajson)

        name=datajsoni['name']
        desc=datajsoni['desc']
        price=datajsoni['price']
        price_unit=datajsoni['price_unit']
        location=datajsoni['location'][0]['name']
        resblock_name=datajsoni['resblock_name']
        resblock_id =datajsoni['resblock_id']

        string = [name,desc,price,price_unit,location,resblock_name,resblock_id]
        ## 逐行写入最后csv文件中
        csv_write.writerow(string)
out.close()

利用天地图API对beijing.csv矢量化:

import pandas as pd
import urllib.parse
file_data = pd.read_excel('./北京/beijing.xlsx',sheet_name='beijing')
out = open('./北京/beijing.csv','a', newline='')
csv_write = csv.writer(out,dialect='excel')
csv_write.writerow(['名称','描述','价格','单位','地址','所在街道','街道ID','lon','lat'])
for index,data_each in file_data.iterrows():
    url_poi='http://api.tianditu.gov.cn/geocoder?ds={/"keyWord/":/"北京市'+str(data_each[5])+str(data_each[4])+'/"}&tk=你的KEY'
    response  = requests.get(url_poi).text
    data = eval(response)
    if index >= 0:
        print(index)
        try:
            location=data['location']
            s=[data_each[0],data_each[1],data_each[2],data_each[3],data_each[4],data_each[5],data_each[6],location['lon'],location['lat']]
            csv_write.writerow(s)
        except:
            s=[data_each[0],data_each[1],data_each[2],data_each[3],data_each[4],data_each[5],data_each[6],0,0]
            csv_write.writerow(s)
out.close()

获取结果:
在这里插入图片描述

2.通过GIS软件处理矢量数据

有了价格数据和坐标信息,就可以利用GIS工具进行处理,得到最终的价格分布图:
价格分布图


总结

根据自如数据显示,北京租房价格最高区域大致分布在北京西站、马家堡、潘家园、得胜门、林崒桥。可以看出这五个地区较周边区域价格抬升过快,以后不能在这附近租房了,图中红绿颜色仅代表地形,还有部分低价后续探索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

褑引

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值