1. import pandas as pd
    2. import datetime
    3. import numpy as np
    1. df = pd.read_excel ("深圳市旅游景点分类信息.xlsx", encoding = "utf8", sep="\t")
    2. df
    1. # 因excel表index排列出错,特色介绍本应该是景点地址
    2. # for循环出景点地址
    3. jingdian = df["特色介绍"]
    4. jingdianloc = jingdian.to_list()
    5. for i in jingdianloc:
    6. print(i)
    1. 深圳市盐田区盐葵路大梅沙段148
    2. 深圳市福田区红荔路6030
    3. 深圳市南山区滨海侨城东立交桥
    4. 深圳市福田区红岭中路1001
    5. 深圳市石岩镇龙腾路龙眼山村
    6. ...
    1. # 将高德API经纬度转换封装成函数
    2. import requests
    3. def geolocation(address):
    4. url="https://restapi.amap.com/v3/geocode/geo?parameters"
    5. params={
    6. "key":"14dc3151f80e56462d23f40d60cfa779",
    7. "address":address,
    8. "city":"深圳"
    9. }
    10. r=requests.get(url,params=params)
    11. return r.json()
    1. # 将for循环的地址放入函数
    2. # 条件判断筛选空值
    3. import time
    4. import pprint
    5. from random import random
    6. 区域=list()
    7. 经纬度=list()
    8. for i in jingdianloc:
    9. #time.sleep(3+8*random())
    10. geocode=geolocation(i)
    11. #pprint.pprint(geocode["geocodes"])
    12. if geocode["geocodes"] == []:
    13. 经纬度.append("请求经纬度失败")
    14. 区域.append("转换为区域失败")
    15. elif geocode["geocodes"][0]["district"] ==[]:
    16. 区域.append("转换为区域失败")
    17. elif geocode["geocodes"][0]["location"] ==[]:
    18. print("经纬度为空")
    19. 经纬度.append("请求经纬度失败")
    20. #pprint.pprint(geocode)
    21. # if geocode[0]==" ":
    22. # print("无法转为经纬度")
    23. else:
    24. #print(geocode["geocodes"][0]["location"])
    25. 经纬度.append(geocode["geocodes"][0]["location"])
    26. 区域.append(geocode["geocodes"][0]["district"])
    27. # #print(geocode)
    28. print(区域)
    29. 经纬度
    1. ['盐田区', '福田区', '福田区', '福田区', '宝安区', '龙岗区', '罗湖区', '罗湖区', '南山区', '福田区', '南山区', '南山区', '罗湖区', '南山区', '罗湖区', '宝安区', '福田区', '福田区', '福田区', '宝安区', '福田区', '罗湖区', '罗湖区', '龙岗区', '宝安区', '南山区', '龙岗区', '南山区', '南山区', '坪山区', '龙岗区', '宝安区', '宝安区', '龙岗区', '南山区', '龙华区', '宝安区', '福田区', '宝安区', '宝安区', '龙岗区', '宝安区', '宝安区', '盐田区', '龙岗区', '南山区', '罗湖区', '盐田区', '宝安区', '南山区', '罗湖区', '龙岗区', '宝安区', '坪山区', '福田区', '南山区', '宝安区', '南山区', '南山区'
    2. ['114.305390,22.591909',
    3. '114.059540,22.554738',
    4. '113.999061,22.524585',
    5. '114.102312,22.545610',
    6. '113.947761,22.667096',
    7. '114.519418,22.534233',
    8. '114.145968,22.574510',
    9. '114.120795,22.570192',
    10. '113.922703,22.549282',
    11. '114.077552,22.544760',
    12. '113.976208,22.541246',
    13. '113.927233,22.535035',
    14. ......
    1. # 将区域放入原表格
    2. df['景点所属区域'] = 区域
    3. df
    1. #将经纬度赋为loc
    2. #列表变为表格看看数量
    3. #将经纬度拆分为经度和维度
    4. loc = 经纬度
    5. loc=pd.DataFrame(loc)
    6. 经纬度 = loc[0].str.split(',',expand=True)
    7. 经纬度

    酒店经纬度.png

    1. # 使用plotly画地图
    2. import plotly.graph_objects as go
    3. mapbox_access_token = 'pk.eyJ1IjoiYmxhY2tzaGVlcHdhbGwwMzA1IiwiYSI6ImNrMHo5ZnQxYjBjbG8zbm84b3hrb25vb24ifQ.k8toDjJDsPcjdYFTSVgTsv'
    4. fig = go.Figure(go.Scattermapbox(
    5. lon = 经纬度[0],
    6. lat = 经纬度[1],
    7. mode='markers',
    8. hovertext = df[['景点类型','特色介绍']],
    9. marker=go.scattermapbox.Marker(
    10. size=7
    11. ),
    12. text=df[['景点类型','特色介绍']],
    13. ))
    14. fig.update_layout(mapbox_style="open-street-map")
    15. fig.update_layout(
    16. title='深圳市景点分布散点图',
    17. hovermode='closest',
    18. mapbox=dict(
    19. accesstoken=mapbox_access_token,
    20. bearing=0,
    21. center=go.layout.mapbox.Center(
    22. lat=22.483767,
    23. lon=114.549601
    24. ),
    25. pitch=0,
    26. zoom=8
    27. )
    28. )
    29. fig.show()
    30. py.plot(fig,filename='景点地图.html')

    景点地图.png

    景点地图.html

    尝试使用pyecharts制作深圳市景点分布散点图

    1. import pandas as pd #导入数据分析模块
    2. from pyecharts.charts import Geo #导入地理信息处理模块
    3. from pyecharts import options as opts #配置
    4. data=pd.read_excel("深圳市各区景点.xlsx")
    5. data

    pyecharts数据.png

    data=pd.read_excel("深圳市各区景点.xlsx")  #读取数据
    geo_sight_coord={data['景点类型'][i].strip(): [data['lon'][i], data['lat'][i]] for i in range(len(data))} #构造位置字典数据
    data_pair=[(data['景点类型'][i].strip(), data['开放时间'][i]) for i in range(len(data))] #构造项目租金数据
    
    g=Geo() #地理初始化
    g.add_schema(maptype="深圳") #限定深圳市范围
    for key, value in geo_sight_coord.items(): #对地理点循环
        g.add_coordinate(key, value[0], value[1]) #追加点位置
    
    g.add("", data_pair, symbol_size=8) #追加项目名称和租金
    g.set_series_opts(label_opts=opts.LabelOpts(is_show=False), type='scatter')  #星散点图scatter
    
    pieces = [
            {'max': 100, 'label': '<100', 'color': '#00B2EE'},
            {'min': 101, 'max': 200, '101~200': 'zhongdeng', 'color': '#71C671'},
            {'min': 201, 'max':400, '201~400': 'xingjiabi', 'color': '#CD4F39'},
            {'min': 401,  'label': '400+', 'color': '#FF0000'} # 有下限无上限
             ]
    
    g.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=pieces), title_opts=opts.TitleOpts(title="深圳各区景点分布")) #办公项目分布图
    
    
    # make_snapshot(snapshot, g.render("深圳市各区美食.html"), "深圳市各区美食.png") 
    
    g.render_notebook()
    

    pyecharts1.png
    深圳各区景点分布.html