zara、hm、优衣库门店分布分析 您所在的位置:网站首页 gap在上海的专卖店地址 zara、hm、优衣库门店分布分析

zara、hm、优衣库门店分布分析

2023-06-19 02:44| 来源: 网络整理| 查看: 265

前阵子恰好在逛优衣库,想起来好久没在zara,hm买衣服了。就产生了分析比较一下这几家快时尚品牌的想法,那从哪方面来分析呢?考虑其他数据获取的复杂性,本次先以线下门店分布这一个侧面来看吧!本来想把GAP也纳入其中,但是数据不太好扒,就先分析这三家。

一、数据获取

本次数据获取主要来源于百度百科的门店列表。

优衣库:https://baike.baidu.com/item/%E4%BC%98%E8%A1%A3%E5%BA%93/4397542?fr=aladdin

hm:https://baike.baidu.com/item/HM/7193957

zara:https://baike.baidu.com/item/ZARA

三家百科的门店列表略有差异,利用excel与python把格式统一一下。主要包含以下几个步骤:

1) 先把三家的店铺分布直接复制粘贴到excel表格中,文件名shop_address.xlsx,包含三个sheet, sheetname分别是zara、hm、uniqlo

2)各sheet格式统一

hm与zara在百科的形式比较规范,直接粘到excel稍作简单处理即可。uniqlo(优衣库)的格式有些差异,见下图。

在同一个城市中的所有门店都在一个单元格中用逗号隔开,对其采用python处理。代码如下

data = pd.read_excel('shop_address.xlsx', sheet_name='uniqlo', header=None) df = pd.DataFrame() for i in range(data.shape[0]): city = data.iloc[i,0] shop = data.iloc[i,1] shop_list = shop.split('、') tmp = pd.DataFrame({'city':city, 'shop':shop_list}) df = pd.concat([df, tmp], axis=0) df.to_excel('shop_address.xlsx',sheet_name='uniqlo')

最终,得到格式规范的excel如下,每个sheet包含3个列,分别是city(城市)、shop(店名)、address(详细地址)。需要注意的是,uniqlo表单中只有2列:city、shop,不含address列(百度百科没有提供)。

二、地址经纬度转换

原数据已经处理干净了,分别存在3个sheet中,将其整合在一起之后就可以开始分析了。等等!眼尖的小伙伴可能发现我们的主要信息是地址,而且是字符串!如果直接使用的话其实不能充分利用这些地址信息。那么我们可以将地址转化为经纬度信息,这些令人烦躁的文字信息就转化为数字啦!

地址的经纬度转换,笔者是通过百度地图API实现的。这也是我第一次调用百度地图API,在网上搜一搜有很多教程哒,大家动动小手指,建个账户开通API调用服务(免费的),接下来就可以摩拳擦掌了!

下面是我使用地址经纬度转换函数

def get_geocode(address): ak = '把你的百度地图API调用服务的AK粘贴在这里' sk = '把你的百度地图API调用服务的SK粘贴在这里' queryStr = '/geocoding/v3/?address=%s&output=json&ak=%s' % (address,ak) # 对queryStr进行转码,safe内的保留字符不转换 encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]") # 在最后直接追加上yoursk rawStr = encodedStr + sk #计算sn sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest()) #由于URL里面含有中文,所以需要用parse.quote进行处理,然后返回最终可调用的url url = urllib.parse.quote("http://api.map.baidu.com"+queryStr+"&sn="+sn, safe="/:=&?#+!$,;'@()*[]") uh = urllib.request.urlopen(url) rst = uh.read().decode() rst = eval(rst) lng, lat = None, None if rst['status'] == 0: loc = rst['result']['location'] lng = loc['lng'] lat = loc['lat'] return lng,lat

接下来,我们指使用这个函数对所有地址进行经纬度转换,同时将三个sheet整合成一个dataframe。主要思想如下:

依次读入三个sheet到一个数据框df中,对每个df的地址列使用apply函数完成列批量转换,然后将三个数据框用concat函数拼接在一起。具体代码如下:

file_name = 'shop_adress.xlsx' sheet_name = ['zara','hm', 'uniqlo'] data = pd.read_excel(file_name, sheet_name) full_data = pd.DataFrame() for brand in sheet_name: df = data[brand] df['brand'] = brand # 加品牌列 full_address = brand + df['city'] + df['shop'] # 拼接完整地址 df['geocode'] = full_address.apply(get_geocode) # 计算经纬度 full_data = pd.concat([full_data, df], axis=0, sort=False) # 将3个表数据合为一个表 full_data['lng'] = full_data['geocode'].map(lambda x:x[0]) # 经度 full_data['lat'] = full_data['geocode'].map(lambda x:x[1]) # 纬度   三、绘制门店分布图

既然已经完成了,接下来我们来做个fancy的事情。有了经纬度我们可以来绘制门店分布地图啦!在地图上画分布是不是比绘制散点图fancy多了!

绘制地图有很多python包可以用,笔者这里采用的pyecharts包,没有安装的小伙伴们pip install pyecharts一下就可以啦。我们希望将地址的经纬度批量输入,然后调用pyecharts的相关函数就可以画出分布图。通过pyecharts官网上的说明文档找到两个与我们目的的相关函数add_coordinate、add_coordinate_json。add_coordinate一次只能加一个点在地图上,因此我们采用add_coordinate_json函数,该函数读取一个包含多条坐标(经纬度)信息的json格式文件,在地图上批量加点。

因此,首先我们需要把所有地址信息存到一个json格式文件中

geo_cities_coords= {full_data.iloc[i]['shop']:[full_data.iloc[i]['lng'], full_data.iloc[i]['lat']] for i in range(len(full_data))}

绘制地图还需要其他参数的设定,如:绘制地址区域(设为china),地图大小,点的颜色、鼠标效果等等

pieces= [ {'value': 1, 'label':'zara', 'color':'red'}, {'value': 2, 'label':'hm', 'color':'green'}, {'value': 3, 'label':'uniqlo', 'color':'yellow'}, ] geo = (Geo(). add_schema(maptype="china"). add_coordinate_json(dir_name+'shop_coords.json'). add('distribution',list(zip(attr,value))). set_series_opts(label_opts=opts.LabelOpts(is_show=False)). set_global_opts( visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=pieces, pos_left='10%'), title_opts=opts.TitleOpts(title="门店分布")) ) geo.render('门店分布.html')

最终生成一个html文件,在浏览器中打开即可看到各家品牌的门店分布情况。且可通过鼠标对地图放大缩小、查看各点信息等。

到这里,其实我们表里的所有信息都展示在了这张图里!!!后面的分析可以随时结合这张图来观察。

to be continued

========================闲聊时间========================

时间有限,今日份分析先到此为止,接下来几天笔者要去日本玩耍了,等回来再写后续吧。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有