【Python有趣打卡】杭州高德POI吃喝玩乐分析

【Python有趣打卡】杭州高德POI吃喝玩乐分析

今天跟着罗罗攀(公众号:luoluopan1)学习调用高德API
原创地址:https://mp.weixin.qq.com/s/V-S6s_pJiZHcvfcg_6EOOA

高德地图API

之前一直用的百度地图API,最近使用百度地图体验实在太差了,改用了高德地图,正好看到公众号:罗罗攀有推送python玩转高德地图的推文,今天就来试试分析下杭州的名胜古迹和美食小吃~

了解API调用方法,最快的方式就是阅读技术文档:https://lbs.amap.com/api/webservice/guide/api/search

使用API前需先申请Key,若无高德地图API账号需要先申请账号,然后根据文档的提供的服务地址和请求参数按照自己的需求修改即可,还是很简单的。

【Python有趣打卡】杭州高德POI吃喝玩乐分析

  • 举例
    需要杭州风景名胜的信息
    key=你自己的key
    types=110000 (下载高德POI分类编码即可查找自己所需的编码)
    【Python有趣打卡】杭州高德POI吃喝玩乐分析
    其中大类有以下几种:
    【Python有趣打卡】杭州高德POI吃喝玩乐分析
    【Python有趣打卡】杭州高德POI吃喝玩乐分析
    city = 杭州
    offset=20(一页展示多少调数据)
    page=1 (第几页)
url = "https://restapi.amap.com/v3/place/text?key=xxx&offset=20&page=1&types=110000&city=杭州&extensions=all"
  • 测试下
url ="https://restapi.amap.com/v3/place/text?key=xxx&offset=20&page=1&types=110000&city=杭州&extensions=all"
res = requests.get(url)
json_data = json.loads(res.text)

【Python有趣打卡】杭州高德POI吃喝玩乐分析
count是用来计算一共有多少组数据的,有了这个我就能确定我们的代码循环到什么位置就可以结束了,可以修改下页数,看看超过873后count返回什么,大概率是0。切观察到我所需要的数据都在“pois”里。

url ="https://restapi.amap.com/v3/place/text?key=XXX&offset=20&page=500&types=110000&city=杭州&extensions=all"
res = requests.get(url)
json_data = json.loads(res.text)

【Python有趣打卡】杭州高德POI吃喝玩乐分析

import requests
import json
import csv
import time

fp = open(r'C:\Users\xuxiaojielucky_i\Desktop\HZ_POI.csv','w',newline='',encoding='utf-8')
writer = csv.writer(fp)
writer.writerow(['name','type1','type2','type3','lon','lat'])

urls =["https://restapi.amap.com/v3/place/text?key=xxx=20&page={}&types=110000&city=杭州&extensions=all".format(str(i)) for i in range (1,450)]

for url in urls:
    res = requests.get(url)
    json_data = json.loads(res.text)
    count = json_data['count']
    print (count)
    if int(count) == 0:
        break      #跳出循环
    pois = json_data['pois']
    for poi in pois:
        name = poi['name']
        typ =  poi['type']
        type1 = typ.split(';')[0]
        type2 = typ.split(';')[1]
        type3 = typ.split(';')[2]
        location = poi['location']
        lon = location.split(',')[0]
        lat = location.split(',')[1]
        writer.writerow([name,type1,type2,type3,lon,lat])
    time.sleep(2)

fp.close()

【Python有趣打卡】杭州高德POI吃喝玩乐分析
哇,杭州景点还是很多的~欢迎大家来杭州!

吃喝玩乐

旅游的话最关心的当然是吃喝玩乐,分别是风景名胜、购物、餐饮三大类。
用之前的代码尝试下爬取另外两个大类的数据吧~这里就不详细讲解了,改下type就行了。

import numpy as np
import pandas as pd
data = pd.read_csv(r'C:\Users\xuxiaojielucky_i\Desktop\HZ_POI.csv',encoding='utf-8')
data.head()

PS:如果遇到解码问题可以下载notepad++转换下编码格式

data['type1'].unique()

【Python有趣打卡】杭州高德POI吃喝玩乐分析

绘制饼图

首先看下吃喝玩乐里,每种类别的占比。

type1 = data['type1'].value_counts()
type1
from pyecharts import Pie

attr = list(type1.index)
value = list(type1)
pie = Pie("",title_pos = 'center')
pie.add("",
attr,value,
radius=[40,75],
label_text_color=None,
is_lable_show=True,
legend_orient="vertical",
lengend_pos="left",
)
pie

【Python有趣打卡】杭州高德POI吃喝玩乐分析

绘制柱状图

对二级小类进行一个统计

type2 = data['type2'].value_counts()
type2

from pyecharts import Bar
attr = list(type2.index)[:10]
v1 = list(type2)[:10]
bar = Bar("")
bar.add("", attr, v1,xaxis_interval=0,xaxis_rotate=20,xaxis_margin=8,is_label_show=True)
bar

【Python有趣打卡】杭州高德POI吃喝玩乐分析

绘制热力图

这里需要用到新的库———folium
pip安装即可
【Python有趣打卡】杭州高德POI吃喝玩乐分析

df = data[data['type1'] == '餐饮服务']
df['type1'].unique()
for name, row in df1.iterrows():      #运用iterrowa对DF进行遍历
    print(row['lat'])                 #测试下

【Python有趣打卡】杭州高德POI吃喝玩乐分析

美食热力图
from folium import plugins
heatmap1 = folium.Map(location=[30.245853,120.209947], zoom_start=11)
heatmap1.add_child(plugins.HeatMap([[row["lat"],row["lon"]] for name, row in df1.iterrows()]))
heatmap1
heatmap1 = folium.Map(location=[30.245853,120.209947], zoom_start=11)

folium.Map()即为folium中绘制地图图层的基本函数
location=[30.245853,120.209947] 是指定的中心坐标即为杭州
zoom_start表示初始地图的缩放尺寸,数值越大放大程度越大
经纬度查询:https://lbs.amap.com/console/show/picker (杭州要写杭州市)

folium.Marker([30.245853,120.209947], popup='<i>Mt. Hood Meadows</i>').add_to(heatmap1)

通过folium.Marker()方法,创建了一个简单的标记小部件

具体的学习可以参考:
https://www.cnblogs.com/feffery/p/9282808.html
https://linux.cn/article-8987-3.html
【Python有趣打卡】杭州高德POI吃喝玩乐分析

风景名胜热力图
df2 = data[data['type1'] == '风景名胜']
from folium import plugins
heatmap2 = folium.Map(location=[30.245853,120.209947], zoom_start=11)
folium.Marker([30.245853,120.209947], popup='<i>Mt. Hood Meadows</i>').add_to(heatmap2)
heatmap2.add_child(plugins.HeatMap([[row["lat"],row["lon"]] for name, row in df2.iterrows()]))
heatmap2

【Python有趣打卡】杭州高德POI吃喝玩乐分析