项目07城市餐饮店铺选址分析

问题

【项目07】 城市餐饮店铺选址分析

1、从三个维度“口味”、“人均消费”、“性价比”对不同菜系进行比较,并筛选出可开店铺的餐饮类型
要求:
① 计算出三个维度的指标得分
② 评价方法:
口味 → 得分越高越好
性价比 → 得分越高越好
人均消费 → 价格适中即可
③ 制作散点图,x轴为“人均消费”,y轴为“性价比得分”,点的大小为“口味得分”
绘制柱状图,分别显示“口味得分”、“性价比得分”

  • 建议用bokeh做图
    提示:
    ① 数据清洗,清除空值、为0的数据
    ② 口味指标计算方法 → 口味评分字段,按照餐饮类别分组算均值,再做标准化处理
    ③ 人均消费指标计算方法 → 人均消费字段,按照餐饮类别分组算均值,再做标准化处理
    ④ 性价比指标计算方法 → 性价比 = (口味 + 环境 + 服务)/人均消费,按照餐饮类别分组算均值,再做标准化处理
    ⑤ 数据计算之前,检查一下数据分布,去除异常值(以外限为标准)
  • 这里排除了高端奢侈餐饮的数据干扰
    ⑥ 注意,这里先分别计算三个指标,再合并数据(merge)作图,目的是指标之间的噪音数据不相互影响

答案

1

# -*- coding: utf-8 -*-
"""
Created on Tue Jul 23 11:03:15 2019

@author: HASEE
"""

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore')

from bokeh.plotting import figure,show,output_file
from bokeh.models import ColumnDataSource

'''
(1) 加载数据
'''
import os
os.chdir(r'E:\软件自学\数据分析--网易微专业\【非常重要】Python数据分析师微专业_项目资料\项目07城市餐饮店铺选址分析')
df1 = pd.read_excel('上海餐饮数据.xlsx',sheetname=0)


'''
(2) 筛选数据,只留['类别','口味','环境','服务','人均消费'],并删除null和0,得到data1
'''
data1=df1[['类别','口味','环境','服务','人均消费']]
data1.dropna(inplace=True)

#发现数据的特点,人均消费为0的数据包含了前三个字段 口味 环境 服务 =0的所有情况 
#所有只用bool索引令‘人均消费’>0即可

data1=data1[(data1['人均消费']>0)]


'''
(3) 给data1添加字段‘性价比’
''' 
data1['性价比']=(data1['口味']+data1['环境']+data1['服务'])/data1['人均消费']



'''
(4) 创建箱形图函数box 用于观察'口味','人均消费','性价比'三个字段各自的异常值
'''
def box():
        fig,axes=plt.subplots(1,3,figsize=(10,4))
        data1.boxplot(column=['口味'],ax=axes[0])
        data1.boxplot(column=['人均消费'],ax=axes[1])
        data1.boxplot(column=['性价比'],ax=axes[2])
box()


'''
(5) 创建清洗函数clear 用于清洗'口味','人均消费','性价比'三个字段各自的异常值(大于外限的数据视为异常值)
注意:三个字段的异常值不是统一的,即口味的异常数据,性价比不一定异常,所以三列要分开清洗
'''
def clear(data ,col):
    q1 = data[col].quantile(q=0.25)
    q3 = data[col].quantile(q=0.75)    
    iqr = q3-q1
    t1 = q1-3*iqr
    t2 = q3+3*iqr
    return(data[(data[col]>t1) & (data[col]<t2)][['类别',col]])

data_taste = clear(data1,'口味')
data_expend = clear(data1,'人均消费')
data_ratio = clear(data1,'性价比')

'''
(6) 创建分组标准化函数gpstd 用于将数据按照类别分类,求出每个类别‘口味','人均消费','性价比'三个字段的平均值
并对三个字段的平均值进行0-1标准化
'''
def gpstd(data,col):
    data_gp = data.groupby('类别').mean()
    data_gp[col+'_norm']=(data_gp[col]-data_gp[col].min())/(data_gp[col].max()-data_gp[col].min())
    
    #对结果按照col_norm由大到排序
    data_gp.sort_values(by =col+'_norm',inplace=True,ascending=False)
    return data_gp

data_taste_score = gpstd(data_taste,'口味')
data_expend_score = gpstd(data_expend,'人均消费')
data_ratio_score = gpstd(data_ratio,'性价比')
    
'''
(7) 将三个df合并成一个得到最终data_final
'''
data_final = pd.merge(data_taste_score,data_expend_score,left_index=True,right_index=True)
data_final = pd.merge(data_final,data_expend_score,left_index=True,right_index=True)

''' 
(8) 针对data_final bokeh画图分析 
'''
#注意bokeh作图变量名不支持中文,先做预处理将data_final的name和columns变成English
data_final.index.name = 'type'
data_final.columns = ['taste','taste_norm','expend','expend_norm','ratio','ratio_norm']

#添加circle大小--size字段:口味*40(40倍放大,否则circle太小)
#注 必须在df中修改 如果改编为columdatasource就无法修改了
data_final['size']=40*data_final['taste_norm']

#导入绘图需要的库
from bokeh.models import ColumnDataSource #导入columndatasource
from bokeh.plotting import figure,show,output_file
from bokeh.layouts import gridplot #多图联动顶层框架gridplot
from bokeh.models import HoverTool #自定义鼠标跟随提示信息
from bokeh.models.annotations import BoxAnnotation #画矩形区间

#调用output_file函数填写bokeh生成html位置 默认root_dir为当前project的位置即之前 chdir的位置
#output_file(filename, title="Bokeh Plot", mode="cdn", root_dir=None)
output_file('project7.html')


#创建columndatasource
source = ColumnDataSource(data_final)

#自定义hover @代表从source中取值 #代表自动计算
hover = HoverTool(tooltips=[
                            ('餐饮类型','@type'),
                            ('人均消费','@expend'),
                            ('性价比得分','@ratio_norm'),
                            ('口味得分','@taste_norm')
                            ])
#散点图   
fig1 = figure(plot_width = 800,plot_height = 300,title='三指标得分',
              x_axis_label='人均消费',y_axis_label='性价比得分',
              tools=[hover,'box_select,reset,xwheel_zoom,pan,crosshair,save']
              #方框选择 重置 x轴滚轮放缩 直接移动 十字光标 存储
              )


#x轴:人均消费 y轴:性价比 
fig1.circle(x='expend',y= 'ratio_norm',source=source,
            line_color='black',
            line_dash=[6,4], #调整实线、虚线长度比例
            fill_color = 'red',fill_alpha=0.6,
            size='size')

#画expand 40-80 即价格适中区间矩形,方便可视化筛选数据
price_mid_box=BoxAnnotation(left = 40, right = 80, fill_alpha =0.1,fill_color = 'navy')
fig1.add_layout(price_mid_box)
fig1.title.text_font_style = "bold"
fig1.ygrid.grid_line_dash = [6, 4]
fig1.xgrid.grid_line_dash = [6, 4]

#柱状图1 x=type y=taste_norm

#1餐饮类别提取为lst 2传入xrange才能使得x轴坐标为type文字
data_type=data_final.index.tolist()

fig2 = figure(plot_width =800 ,plot_height =300,title ='口味得分', x_range=data_type)

fig2.vbar(x='type' ,top ='taste_norm',source=source,
          width = 0.8,alpha = 0.7,color='green')

#柱状图2 x=type y=expend_norm

#1餐饮类别提取为lst 2传入xrange才能使得x轴坐标为type文字
fig3 = figure(plot_width =800 ,plot_height =300,title ='口味得分', x_range=data_type)

fig3.vbar(x='type' ,top ='expend_norm',source=source,
          width = 0.8,alpha = 0.7,color='red')

#将三张图通过gridplot顶层联动 类似ndarray写法 单层括号【a,b,c】则a,b,c三张图横向连接
#双层括号[[a],[b],[c]]则三张图纵向连接
p = gridplot([[fig1],[fig2],[fig3]])
show(p)

[外链图片转存失败(img-5veBtGKX-1566141966121)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566141395853.png)]

问题

2、选择一个餐饮类型,在qgis中做将上海划分成格网空间,结合python辅助做空间指标评价,得到餐饮选址位置

  • 课程这里以“素菜馆为例”
    课程数据
    ① net_population.shp → 投影坐标系,上海1km²格网内的人口密度数据
    ② road.shp → 投影坐标西,上海道路数据
    要求:
    ① 通过空间分析,分别计算每个格网内的几个指标:人口密度指标、道路密度指标、餐饮热度指标、同类竞品指标
    ② 评价方法:
    人口密度指标 → 得分越高越好
    道路密度指标 → 得分越高越好
    餐饮热度指标 → 得分越高越好
    同类竞品指标 → 得分越低越好
    综合指标 = 人口密度指标0.4 + 餐饮热度指标0.3 + 道路密度指标0.2 +同类竞品指标0.1
    ③ 最后得到较好选址的网格位置的中心坐标,以及所属区域
    • 可以用bokeh制作散点图
      提示:
      ① 道路密度指标计算方法 → 网格内道路长度
      ② 餐饮热度指标计算方法 → 网格内餐饮poi计数
      ③ 同类竞品指标计算方法 → 网格内素菜馆poi计数
      ④ 餐饮poi数据记得投影
      ⑤ 可以以“net_population.shp”为网格基础数据,做空间统计
      ⑥ 在qgis做空间统计之后,网格数据导出点数据,投影成wgs84地理坐标系,导出excel数据,在python做指标标准化等
      ⑦ 在bokeh中做散点图时,注意添加一个size字段,通过最终评分来赋值
      ⑧ 在bokeh中做散点图时,可以给TOP10的点用颜色区分

答案

2

注:所有图层和项目坐标系要统一,此处都为投影坐标系

2.1人口密度指标 → 得分越高越好(数据已给出,直接得到结果)

[外链图片转存失败(img-LOvrYbyk-1566141966122)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1564195365591.png)]

2.2 道路密度指标 → 得分越高越好(每个网格内线路总长度)

[外链图片转存失败(img-fK5u8EsI-1566141966123)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1564195842847.png)]

**[外链图片转存失败(img-Oj40xBhG-1566141966123)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1564195646447.png)]

2.3 重要的是得到以下两个参数,具体过程 1将数据导出为csv 2加载到qgis中 3用qgis进行计数

② 餐饮热度指标计算方法 → 网格内餐饮poi计数
③ 同类竞品指标计算方法 → 网格内素菜馆poi计数

2.3.1 数据另存为csv

[外链图片转存失败(img-qvsb7biW-1566141966123)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566132591074.png)]

2.3.2将csv数据添加到qgis中

注意选横纵坐标为经纬度,并且由于数据的经纬度为wgs84地理坐标系,所以加载时图层要使用wgs84,然后再将该图层按照投影坐标系导出,那么新图层的坐标内容就被转化为投影后的值了

[外链图片转存失败(img-n32BMaPZ-1566141966123)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566133496647.png)]

右键上海市餐饮数据图层–导出–另存要素为–shp文件–记得再文件名称中选好路径 参考系为投影坐标系

[外链图片转存失败(img-v1gtNDlS-1566141966124)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566133792653.png)]

2.3.3 通过计算多边形内点的个数统计餐饮热度指标

注意

1多边形图层选择线条长度 因为该图层有人口指标z 还要刚才统计好的道路长度指标length 新产生的餐饮热度指标cy_count 继续添加该图层的属性表中

2记得要在文件名称中选好路径 保存为shp文件

[外链图片转存失败(img-Mbeyu2eW-1566141966124)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566134251180.png)]

2.3.4筛选素菜的数据统计同类竞品指标

2.3.4.1打开cy_ty的属性表–使用表达式选择要素

注意字段和值中可以找到‘类别’,点击all unique可以显示所有的‘’类别条目 在里面找到素菜即可

[外链图片转存失败(img-9ktjKyal-1566141966124)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566135553146.png)]

2.3.4.2注意选择后要在属性表左下方点击显示选中要素进行查看

[外链图片转存失败(img-byX7Tjo0-1566141966124)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566135819846.png)]

2.3.4.3将这些选择的数据导出为新的shp文件 sc

注意 右键cy_ty图层 --导出–另存选中要素为(一定是选中要素!!!)

[外链图片转存失败(img-iieXHRo1-1566141966125)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566136058361.png)]

2.3.4.4矢量–分析工具–计算多边形内点

多边形要使用计数(就是刚才计算过餐饮count的图层)

[外链图片转存失败(img-6DWNExyU-1566141966125)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566137162162.png)]

查看执行完成的计数2图层 发现此图层已经有 人口密度 道路长度 餐饮密度 素材密度四个指标

[外链图片转存失败(img-gsyLjAj6-1566141966125)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566137270000.png)]

2.3.5给每一个网格添加质心 从而给每个方格添加经纬度坐标(注意此步骤要将图层另存为wgs84)

2.3.5.1将计数2属性表中Count字段(方格内道路数量)删去

首先将属性表变成编辑模式 然后删除Count字段

[外链图片转存失败(img-LkWuXGLU-1566141966126)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566137555993.png)]

2.3.5.2 将计数2图层导出为wgs84坐标系,并命名为result

[外链图片转存失败(img-O43yM0gp-1566141966126)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566137664124.png)]

2.3.5.3 为网格添加质心并另存为shp result_zx

矢量–几何工具–质心

[外链图片转存失败(img-sZHg8K93-1566141966126)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566137953124.png)]

2.3.5.4 为result_zx(质心)图层添加经纬度

打开属性表–字段计算器

注 $x $y在几何图形中

[外链图片转存失败(img-UtBK90zk-1566141966127)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566138111229.png)]

[外链图片转存失败(img-cSyQFHTK-1566141966127)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566138197176.png)]

至此属性表得到最终的gis结果 z为人口密度 length为道路密度 cy_count为餐饮密度 sc_count为素菜馆密度 lng lat为经纬度

[外链图片转存失败(img-K05Nt2WV-1566141966127)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566138239194.png)]

全选后粘贴进excel 保存为 data2

[外链图片转存失败(img-Q1MXhtVt-1566141966128)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566138454162.png)]

第一列 无意义 可以删掉

2.4由此再次进入python 对data2数据进行标准化以及绘图

-- coding: utf-8 --

“”"
Created on Sun Aug 18 22:59:51 2019

@author: HASEE
“”"

‘’’
2、选择一个餐饮类型,在qgis中做将上海划分成格网空间,结合python辅助做空间指标评价,得到餐饮选址位置

  • 课程这里以“素菜馆为例”
    课程数据
    ① net_population.shp → 投影坐标系,上海1km²格网内的人口密度数据
    ② road.shp → 投影坐标西,上海道路数据
    要求:
    ① 通过空间分析,分别计算每个格网内的几个指标:人口密度指标、道路密度指标、餐饮热度指标、同类竞品指标
    ② 评价方法:
    人口密度指标 → 得分越高越好
    道路密度指标 → 得分越高越好
    餐饮热度指标 → 得分越高越好
    同类竞品指标 → 得分越低越好
    综合指标 = 人口密度指标0.4 + 餐饮热度指标0.3 + 道路密度指标0.2 +同类竞品指标0.1
    ③ 最后得到较好选址的网格位置的中心坐标,以及所属区域
    • 可以用bokeh制作散点图
      提示:
      ① 道路密度指标计算方法 → 网格内道路长度
      ② 餐饮热度指标计算方法 → 网格内餐饮poi计数
      ③ 同类竞品指标计算方法 → 网格内素菜馆poi计数
      ④ 餐饮poi数据记得投影
      ⑤ 可以以“net_population.shp”为网格基础数据,做空间统计
      ⑥ 在qgis做空间统计之后,网格数据导出点数据,投影成wgs84地理坐标系,导出excel数据,在python做指标标准化等
      ⑦ 在bokeh中做散点图时,注意添加一个size字段,通过最终评分来赋值
      ⑧ 在bokeh中做散点图时,可以给TOP10的点用颜色区分

‘’’

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings(‘ignore’)

#导入绘图需要的库
from bokeh.models import ColumnDataSource #导入columndatasource
from bokeh.plotting import figure,show,output_file
from bokeh.layouts import gridplot #多图联动顶层框架gridplot
from bokeh.models import HoverTool #自定义鼠标跟随提示信息

#调用output_file函数填写bokeh生成html位置 默认root_dir为当前project的位置即之前 chdir的位置
#output_file(filename, title=“Bokeh Plot”, mode=“cdn”, root_dir=None)
output_file(‘project7.2.html’)
‘’’
(1) 加载数据
‘’’
import os
os.chdir(r’E:\软件自学\数据分析–网易微专业\【非常重要】Python数据分析师微专业_项目资料\项目07城市餐饮店铺选址分析’)
data2 = pd.read_excel(‘data.xlsx’,sheetname=0)

‘’’
(2) 指标标准化
‘’’

data2[‘rkmd_norm’] = (data2[‘Z’]-data2[‘Z’].min())/(data2[‘Z’].max()-data2[‘Z’].min()) # 人口密度指标标准化
data2[‘cyrd_norm’] = (data2[‘cy_count’]-data2[‘cy_count’].min())/(data2[‘cy_count’].max()-data2[‘cy_count’].min()) # 餐饮热度指标标准化
data2[‘tljp_norm’] = (data2[‘sc_count’].max()-data2[‘sc_count’].max()-data2[‘sc_count’].min()) # 同类竞品指标标准化
data2[‘dlmi_norm’] = (data2[‘LENGTH’]-data2[‘LENGTH’].min())/(data2[‘LENGTH’].max()-data2[‘LENGTH’].min()) # 道路密度指标标准化

data2[‘final_score’] = data2[‘rkmd_norm’]*0.4 + data2[‘cyrd_norm’]*0.3 + data2[‘tljp_norm’]*0.1 + data2[‘dlmi_norm’]*0.2
#将数据按照finalscore进行排序,并且按照此顺序重新编制index
data_final_q2 = data2.sort_values(by = ‘final_score’,ascending=False).reset_index()

‘’’
(3) 制作空间散点图
‘’’
#添加size字段 数值为finalscore的20倍
data_final_q2[‘size’]=data_final_q2[‘final_score’]*20

#添加color字段 将前十名变成红色 其他变成蓝色
data_final_q2[‘color’] = ‘green’
data_final_q2.iloc[:10][‘color’] = ‘red’

source = ColumnDataSource(data_final_q2)

创建ColumnDataSource数据

hover = HoverTool(tooltips=[(“经度”, “@lng”),
(“纬度”, “@lat”),
(“最终得分”, “@final_score”),
]) # 设置标签显示内容
p = figure(plot_width=800, plot_height=800,
title=“空间散点图” ,
tools=[hover,‘box_select,reset,wheel_zoom,pan,crosshair’])

构建绘图空间

p.square(x = ‘lng’,y = ‘lat’,source = source,
line_color = ‘black’,fill_alpha = 0.5,
size = ‘size’,color = ‘color’)
p.ygrid.grid_line_dash = [6, 4]
p.xgrid.grid_line_dash = [6, 4]

散点图

# -*- coding: utf-8 -*-
"""
Created on Sun Aug 18 22:59:51 2019

@author: HASEE
"""

'''
2、选择一个餐饮类型,在qgis中做将上海划分成格网空间,结合python辅助做空间指标评价,得到餐饮选址位置
* 课程这里以“素菜馆为例”
课程数据
① net_population.shp → 投影坐标系,上海1km²格网内的人口密度数据
② road.shp → 投影坐标西,上海道路数据
要求:
① 通过空间分析,分别计算每个格网内的几个指标:人口密度指标、道路密度指标、餐饮热度指标、同类竞品指标
② 评价方法:
   人口密度指标 → 得分越高越好
   道路密度指标 → 得分越高越好
   餐饮热度指标 → 得分越高越好
   同类竞品指标 → 得分越低越好
   综合指标 = 人口密度指标*0.4 + 餐饮热度指标*0.3 + 道路密度指标*0.2 +同类竞品指标*0.1
③ 最后得到较好选址的网格位置的中心坐标,以及所属区域
   * 可以用bokeh制作散点图
提示:
① 道路密度指标计算方法 → 网格内道路长度
② 餐饮热度指标计算方法 → 网格内餐饮poi计数
③ 同类竞品指标计算方法 → 网格内素菜馆poi计数
④ 餐饮poi数据记得投影
⑤ 可以以“net_population.shp”为网格基础数据,做空间统计
⑥ 在qgis做空间统计之后,网格数据导出点数据,投影成wgs84地理坐标系,导出excel数据,在python做指标标准化等
⑦ 在bokeh中做散点图时,注意添加一个size字段,通过最终评分来赋值
⑧ 在bokeh中做散点图时,可以给TOP10的点用颜色区分

'''

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore')


#导入绘图需要的库
from bokeh.models import ColumnDataSource #导入columndatasource
from bokeh.plotting import figure,show,output_file
from bokeh.layouts import gridplot #多图联动顶层框架gridplot
from bokeh.models import HoverTool #自定义鼠标跟随提示信息

#调用output_file函数填写bokeh生成html位置 默认root_dir为当前project的位置即之前 chdir的位置
#output_file(filename, title="Bokeh Plot", mode="cdn", root_dir=None)
output_file('project7.2.html')
'''
(1) 加载数据
'''
import os
os.chdir(r'E:\软件自学\数据分析--网易微专业\【非常重要】Python数据分析师微专业_项目资料\项目07城市餐饮店铺选址分析')
data2 = pd.read_excel('data.xlsx',sheetname=0)

'''
(2) 指标标准化
'''

data2['rkmd_norm'] = (data2['Z']-data2['Z'].min())/(data2['Z'].max()-data2['Z'].min()) # 人口密度指标标准化
data2['cyrd_norm'] = (data2['cy_count']-data2['cy_count'].min())/(data2['cy_count'].max()-data2['cy_count'].min()) # 餐饮热度指标标准化
data2['tljp_norm'] = (data2['sc_count'].max()-data2['sc_count'].max()-data2['sc_count'].min()) # 同类竞品指标标准化
data2['dlmi_norm'] = (data2['LENGTH']-data2['LENGTH'].min())/(data2['LENGTH'].max()-data2['LENGTH'].min()) # 道路密度指标标准化


data2['final_score'] = data2['rkmd_norm']*0.4 + data2['cyrd_norm']*0.3 + data2['tljp_norm']*0.1 + data2['dlmi_norm']*0.2
#将数据按照finalscore进行排序,并且按照此顺序重新编制index
data_final_q2 = data2.sort_values(by = 'final_score',ascending=False).reset_index()

'''
(3) 制作空间散点图
'''
#添加size字段 数值为finalscore的20倍
data_final_q2['size']=data_final_q2['final_score']*20

#添加color字段 将前十名变成红色 其他变成蓝色 
data_final_q2['color'] = 'green'
data_final_q2.iloc[:10]['color'] = 'red'

source = ColumnDataSource(data_final_q2)
# 创建ColumnDataSource数据

hover = HoverTool(tooltips=[("经度", "@lng"),
                            ("纬度", "@lat"),
                            ("最终得分", "@final_score"),
                           ])  # 设置标签显示内容
p = figure(plot_width=800, plot_height=800,
                title="空间散点图" , 
                tools=[hover,'box_select,reset,wheel_zoom,pan,crosshair']) 
# 构建绘图空间

p.square(x = 'lng',y = 'lat',source = source,
         line_color = 'black',fill_alpha = 0.5,
        size = 'size',color = 'color')
p.ygrid.grid_line_dash = [6, 4]
p.xgrid.grid_line_dash = [6, 4]
# 散点图
show(p)

over = HoverTool(tooltips=[(“经度”, “@lng”),
(“纬度”, “@lat”),
(“最终得分”, “@final_score”),
]) # 设置标签显示内容
p = figure(plot_width=800, plot_height=800,
title=“空间散点图” ,
tools=[hover,‘box_select,reset,wheel_zoom,pan,crosshair’])

构建绘图空间

p.square(x = ‘lng’,y = ‘lat’,source = source,
line_color = ‘black’,fill_alpha = 0.5,
size = ‘size’,color = ‘color’)
p.ygrid.grid_line_dash = [6, 4]
p.xgrid.grid_line_dash = [6, 4]

散点图

show§




[外链图片转存失败(img-7VjRxcZt-1566141966128)(C:\Users\HASEE\AppData\Roaming\Typora\typora-user-images\1566141790139.png)]

你可能感兴趣的:(项目07城市餐饮店铺选址分析)