爬取上海3601个停车场位置,并进行可视化展示

2021-07-27 15:27:52 浏览数 (3)


大家好,欢迎来到 Crossin的编程教室 !

今天带大家做一个爬虫 数据可视化的案例:

上海市的所有停车场分布可视化展示

01

数据采集

上海市路政局的官网上有一个停车管理页面,我们可以从上面爬取下来相应的停车场数据。

从上图我们可以看出,数据是以XHR的形式进行存储在网页中,我们在之前的文章已经详细的介绍过这类网站的爬取方法了,有兴趣的读者可以看看这篇文章。我们直接展示核心代码:

代码语言:javascript复制
import requests
headers = {
   'Connection': 'keep-alive',
   'Accept': 'application/json, text/javascript, */*; q=0.01',
   'X-Requested-With': 'XMLHttpRequest',
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36',
   'Content-Type': 'application/json',
   'Referer': 'http://183.194.241.192:8080/Search/Parking',
   'Accept-Language': 'zh-CN,zh;q=0.9',
}
params = (
   ('order', 'asc'),
   ('offset', '0'),
   ('limit', '20'),
)
response = requests.get('http://183.194.241.192:8080/Search/SearchGarage', headers=headers, params=params, cookies=cookies, verify=False)


for i in response.json()['data']:
   with open("上海市停车场数据.csv", 'a',newline='',encoding='utf-8') as f:
       wirter = csv.writer(f)
       wirter.writerow([i['GarageId'],i['GarageName'],i['GarageAddress']])

02

数据清洗

01

导入停车场数据

用pandas读取合并后的影评数据并预览。

代码语言:javascript复制
import pandas as pd
df = pd.read_excel('上海停车场数据.xlsx',names=['编号','停车场名称','地址'])
print(df.head())

02

删除重复数据

在爬取过程中可能会有一些重复的数据,我们需要将其剔除。

代码语言:javascript复制
df.drop_duplicates()

03

查看数据类型

查看字段类型和缺失值情况,符合可视化需要,无需另做处理。

代码语言:javascript复制
df.info()

03

经纬度转换

因为我们爬取下来的只有停车场的地址,我们在进行可视化的时候,需要的是该地址的经纬度坐标,所以,我们要对其进行转化。

现在很多人都喜欢用百度地图、高德地图的api接口来进行转化,但是这些接口,每天只能转化一定数量的地址,我们这里有3601个,用那个地图接口都不可以一次性转化。

那么我们就要换种方法来对其进行转化了。Python有一个可以进行地理经纬度转化的库——geocoder,我们可以用它来进行对地理位置的经纬度进行转化。

首先是安装这个库。

代码语言:javascript复制
pip install geocoder

安装好后,我们进行转化,代码如下:

代码语言:javascript复制
for i in range(2,3603):

   B = sheet[f'B{i}']
   C = sheet[f'C{i}']

   jingwei_1 = geocoder.arcgis('上海市' B.value)
   jingwei_2 = geocoder.arcgis('上海市' C.value)

让我们看看转化后的效果:

代码语言:javascript复制
df = pd.read_excel('上海停车场数据.xlsx',names=['停车场名称','地址','经度','维度'])
print(df.head())

查看一下数据类型:

代码语言:javascript复制
df.info()

04

可视化展示

我们先用tableau对这些停车场位置进行可视化展示。

上海市的停车场主要集中在市中心的几个区,且区里也是越靠近中心,停车场位置越多。相反,越远离市中心,停车场的数量越少。

我们再来看看用folium画的热力图。

与上面得到的结论是一致的。

05

小结

1. 本文介绍了如何爬取上海市停车场数据、转化其地理位置经纬度坐标和进行可视化展示,有兴趣的读者可以尝试一下。

2. 本文仅供学习参考,大家勿做其他用途。

3. 获取本文相关代码,请点击下方公众号名片,回复关键字 停车场

如果文章对你有帮助,欢迎转发/点赞/收藏~

作者:志斌

来源:志斌的python笔记


1 人点赞