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

# 使用plotly画地图import plotly.graph_objects as gomapbox_access_token = 'pk.eyJ1IjoiYmxhY2tzaGVlcHdhbGwwMzA1IiwiYSI6ImNrMHo5ZnQxYjBjbG8zbm84b3hrb25vb24ifQ.k8toDjJDsPcjdYFTSVgTsv'fig = go.Figure(go.Scattermapbox(lon = 经纬度[0],lat = 经纬度[1],mode='markers',hovertext = df[['景点类型','特色介绍']],marker=go.scattermapbox.Marker(size=7),text=df[['景点类型','特色介绍']],))fig.update_layout(mapbox_style="open-street-map")fig.update_layout(title='深圳市景点分布散点图',hovermode='closest',mapbox=dict(accesstoken=mapbox_access_token,bearing=0,center=go.layout.mapbox.Center(lat=22.483767,lon=114.549601),pitch=0,zoom=8))fig.show()py.plot(fig,filename='景点地图.html')

尝试使用pyecharts制作深圳市景点分布散点图
import pandas as pd #导入数据分析模块from pyecharts.charts import Geo #导入地理信息处理模块from pyecharts import options as opts #配置data=pd.read_excel("深圳市各区景点.xlsx")data

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()

