数据分析-37-关于德克士店铺位置数据的探索

算法学习4对1辅导论文辅导核心期刊
项目的代码和数据下载可以通过公众号滴滴我


项目描述

店铺选址分析,对于一个新店的地址选择要考虑诸多因素,如客流量,交通情况,店铺租金,周边竞店,以及根据竞店消费水平预测客单价等等,而改数据几显然只有店铺位置数据,那么我们就从这份数据来分析一下这个店铺的选址都有什么特点可作为参考

表和字段介绍

该数据表dicos_store.csv一共有3403条数据,共10个字段,分别为loc_numberstatecityneighborhoodloc_nameaddress_rawhours_of_operationphonelatitudelongitude

表数据如下:
在这里插入图片描述

1、数据读取和清洗

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

from pyecharts.charts import Bar,Line,Scatter,Grid,Map,Pie
from pyecharts import options as opts
from pyecharts.globals import ThemeType

from warnings import filterwarnings
filterwarnings('ignore')
dicos_store = pd.read_csv(r'dicos_store.csv')
print("数据大小:",dicos_store.shape)
print('列名称:',dicos_store.columns)

在这里插入图片描述

print('统计重复数据:',dicos_store[['loc_name','address_raw']].duplicated().sum())
# 删除重复数据
dicos_store.drop_duplicates(['loc_name','address_raw'],inplace = True)
print('删除重复数据后的数据大小:',dicos_store.shape)

统计重复数据: 210
删除重复数据后的数据大小: (3192, 10)

print('统计缺失值:')
dicos_store.isnull().sum()

在这里插入图片描述

处理 city列中的数据,为方便统计统一将 “市”去掉

dicos_store['city'] = dicos_store['city'].str.replace('市','')
result = dicos_store['city'].value_counts()[:10].reset_index()
result.columns = ['city','total_store']
result.sort_values(by = 'total_store',inplace = True)

b = (
    Bar()
    .add_xaxis(result['city'].tolist())
    .add_yaxis('',result['total_store'].tolist(),color = 'CadetBlue')
    .set_global_opts(title_opts = opts.TitleOpts(title = '店铺数量前十的城市'),
    xaxis_opts = opts.AxisOpts(is_show = False)) #隐藏x轴
    .set_series_opts(label_opts = opts.LabelOpts(position = 'right'))
    .reversal_axis()
)
b.render_notebook()

在这里插入图片描述

2、全国店铺的分布情况

如果您是在本地运行那么使用之前先确保已经安装了 folium ,安装语句 :pip install folium 或者 conda install folium -c conda-forge

列举folium的重要参数:

  • location经纬度,list 或者 tuple 格式,顺序为 latitude, longitude

  • zoom_start缩放值,默认为 10,值越大比例尺越小,地图放大级别越大

  • control_scaleBool型,控制是否在地图上添加比例尺,默认为 False 即不添加

  • tiles显示样式,默认 “OpenStreetMap”,也就是开启街道显示

  • crs地理坐标参考系统,默认为 “EPSG3857”

import folium
latitude = 35.3
longitude = 100.6

incidents = folium.map.FeatureGroup()
# 将数据一一添加到地图上
for lat ,lng in zip(dicos_store['latitude'],dicos_store['longitude']):
    incidents.add_child(
        folium.CircleMarker(
            [lat,lng],
            radius = 5,# 设置标记大小
            color = 'yellow', #建议设置一个亮眼的颜色
            fill = True,
            fill_color = 'red',
            fill_opacity = 0.1  #设置填充颜色的透明度
        )
    )

zh_map = folium.Map(location = [latitude,longitude],zoom_start = 5)
zh_map.add_child(incidents)

在这里插入图片描述

上图是可以放大来看的,放大后现店铺是呈一簇一簇在各个城市分布的,尤其是重庆市和成都市,如图
在这里插入图片描述
那么下图就是重点来分析重庆市

3、重庆市的店铺分布

chong_q = dicos_store[dicos_store['city']=='重庆']
latitude = 29.57
longitude = 106.55

incidents = folium.map.FeatureGroup()
for lat,lng,in zip(chong_q['latitude'],chong_q['longitude']):
    incidents.add_child(
    folium.CircleMarker(
    [lat,lng],
    radius = 5, # 设置标记大小
    color = 'yellow',
    fill = True,
    fill_color = 'red',
    fill_opacity = 0.4
    ))

cq_map = folium.Map(location = [latitude,longitude],zoom_start = 10)
cq_map.add_child(incidents)

在这里插入图片描述

4、统计重庆市各店铺间方圆1KM内的竞店数量

通过 geodesic 计算两个经纬度之间的距离,单位是 KM

chong_q['latitude_longitude'] = list(zip(chong_q['latitude'].tolist(),chong_q['longitude'].tolist()))

后续会调用到genpy包,没有安装的话,安装命令是pip install genpy

from geopy.distance import geodesic

longitude = chong_q['latitude_longitude'].tolist()
def dist_km(s):
    l_km = []
    for i in longitude:
        l = geodesic(s,i).km
        if 0< l <= 1:
            l_km.append(l)
    return l_km
chong_q['distance'] = chong_q['latitude_longitude'].apply(lambda x : dist_km(x))
chong_q['c_store'] = chong_q['distance'].apply(lambda x : len(x)) # 统计店铺数量
x_data = chong_q.groupby('c_store').c_store.count().index.astype('str') + ' 家'
y_data = chong_q.groupby('c_store').c_store.count().values.tolist()
c = (
    Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
    .add('',[list (z) for z in zip(x_data,y_data)],radius = ["30%","75%"],rosetype = 'radius')
    .set_global_opts(title_opts = opts.TitleOpts(title = '方圆1KM内的竟店数量'))
    .set_series_opts(label_opts = opts.LabelOpts(formatter ="{b} {c} ({d}%)",color = ['#0f2027'],font_size = 12))
)
c.render_notebook()

在这里插入图片描述

0家:表示店铺在 1KM内没有竟店,只有它自己,1家表示 1KM内有1家竟店即 1KM内有 2家店,以此类推;
可见 56.93% 的店铺在1KM范围内是只有它自己,并没有其他竞店,周边1KM内存在1家竞店的店铺有 28家 占 20.44% ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI研习星球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值