大家好,欢迎来到 Crossin的编程教室 !
今天带大家做一个爬虫+数据可视化的案例:
上海市的所有停车场分布可视化展示
01
数据采集
上海市路政局的官网上有一个停车管理页面,我们可以从上面爬取下来相应的停车场数据。
从上图我们可以看出,数据是以XHR的形式进行存储在网页中,我们在之前的文章已经详细的介绍过这类网站的爬取方法了,有兴趣的读者可以看看这篇文章。我们直接展示核心代码:
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读取合并后的影评数据并预览。
import pandas as pd
df = pd.read_excel('上海停车场数据.xlsx',names=['编号','停车场名称','地址'])
print(df.head())
02
删除重复数据
在爬取过程中可能会有一些重复的数据,我们需要将其剔除。
df.drop_duplicates()
03
查看数据类型
查看字段类型和缺失值情况,符合可视化需要,无需另做处理。
df.info()
03
经纬度转换
因为我们爬取下来的只有停车场的地址,我们在进行可视化的时候,需要的是该地址的经纬度坐标,所以,我们要对其进行转化。
现在很多人都喜欢用百度地图、高德地图的api接口来进行转化,但是这些接口,每天只能转化一定数量的地址,我们这里有3601个,用那个地图接口都不可以一次性转化。
那么我们就要换种方法来对其进行转化了。Python有一个可以进行地理经纬度转化的库——geocoder,我们可以用它来进行对地理位置的经纬度进行转化。
首先是安装这个库。
pip install geocoder
安装好后,我们进行转化,代码如下:
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)
让我们看看转化后的效果:
df = pd.read_excel('上海停车场数据.xlsx',names=['停车场名称','地址','经度','维度'])
print(df.head())
查看一下数据类型:
df.info()
04
可视化展示
我们先用tableau对这些停车场位置进行可视化展示。
上海市的停车场主要集中在市中心的几个区,且区里也是越靠近中心,停车场位置越多。相反,越远离市中心,停车场的数量越少。
我们再来看看用folium画的热力图。
与上面得到的结论是一致的。
05
小结
1. 本文介绍了如何爬取上海市停车场数据、转化其地理位置经纬度坐标和进行可视化展示,有兴趣的读者可以尝试一下。
2. 本文仅供学习参考,大家勿做其他用途。
3. 获取本文相关代码,请点击下方公众号名片,回复关键字 停车场
如果文章对你有帮助,欢迎转发/点赞/收藏~
作者:志斌
来源:志斌的python笔记
本文分享自 Crossin的编程教室 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!