前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >口红?剃须刀?Python告诉你,刚过去的520,大家都在送什么礼物

口红?剃须刀?Python告诉你,刚过去的520,大家都在送什么礼物

作者头像
CDA数据分析师
发布2020-05-26 16:29:53
4550
发布2020-05-26 16:29:53
举报
文章被收录于专栏:CDA数据分析师CDA数据分析师

CDA数据分析师 出品

作者:Mika

数据:真达

后期:泽龙

【导语】:今天我们来聊一聊刚过去的520,大家买得最多的都是什么?Python技术部分请看第二部分

Show me data,用数据说话

今天我们聊一聊 520的礼物

点击下方视频,先睹为快:

一年一度的520刚刚过去。

由于受疫情影响错过了今年的2月14日情人节,2020年5月20日,这个谐音为“爱你爱你我爱你”的 “世纪520”,对情侣们来说显得格外有吸引力。

网上都是婚礼、告白、结婚等甜蜜新闻,微博排行榜上的蜜都要溢出屏幕了,520简直就是大型“撒狗粮”节日。

其中,最大的狗粮来自民政局!全国各地的民政局都爆满了!

想在这天领证的新人们把民政局围得水泄不通,有人甚至凌晨4点就前往排队。

01

“世纪520”送礼物

大家都在买什么?

除了领证的,对于情侣们来说,关于520要怎么度过,改送什么礼物给心爱的ta也是关注度非常高的话题。

首先,看到知乎上关于“520送什么的话题”,我们经过分析整理发现:

知乎数据

给女朋友送什么

关于给女朋友的礼物,广大网友都提到了口红、香水、项链、手表、还有玫瑰巧克力等礼物;

给男朋友送什么

送男朋友方面,剃须刀、键盘、鼠标、游戏机等也频频被提到。

淘宝数据

那么事实究竟是怎样的呢?接下来让我们看到淘宝天猫的数据,真正做到用数据来说话。

我们搜集整理了淘宝网关于520礼物的100页商品数据,使用Python进行整理分析,经过预处理之后,一共得到3854条数据。

520大家都在买什么礼物?

我们在淘宝搜索520礼物,对得到的数据进行分析整理,从中发现:

  • 永生花、玫瑰花占了很大的比重,可以看到节日送花还是广大男性的统一选择;
  • 除此之外可以发现,施华洛世奇、潘多拉等首饰也是不错的选择;
  • 同时还有音乐盒、巧克力等礼物。

520礼物哪些店铺销量最好?

那么作为520的礼物,哪些店铺销量最好呢?

分析发现,彩妆品牌果然是妥妥的王者。

Mac名列第一,果然是小姐姐们人手一支的口红,没毛病。其次阿玛尼、ysl、Tomford、纪梵希全都榜上有名。有意思的是第二名的店铺是一家主营创意礼物的店kufire,当中从创意灯、按摩枕等礼物还不少。这也可能跟这家店搜索时页面比较靠前有关吧。

520哪些省份的人最喜欢买买买

那么520期间哪些省份的人最喜欢买买买呢?数据整理发现,广东人民拔得头筹,其次浙江、上海位列二三。

520商品价格都是多少钱

那么520期间商品的价格都是怎么分布的呢?从图中可以看到50元以下的并不多,50-200元内的商品最多。

什么价位的商品销量最好

看完了520商品的价格区间,再看看什么价位的商品销量最好。分析可以发现,200元以内的商品最受人青睐。其中0-50元销量占比达到19.21%,50-100占比20.13%。100-150和150-200的占比也不错,分别为15.88%到17.12%。

最后再看到520大家最喜欢买什么。我们分析整理了520商品的标题,得出词云发现,主要可以分为这几类;

送女生

  • 永生花、玫瑰花是广大男同胞的首要选择;
  • 彩妆、化妆品占了很大的比重,比如阿玛尼粉底液、纪梵希等等
  • 首饰、项链也是很多人的选择;

送男生

打火机、手表、电动牙刷是许多人会选择购买的商品。

看来送什么礼物这方面跟知乎得出的结论类似,从中我们也发现到在520情人节,主要男生给女生买礼物占比较大,当然也不排除许多小姐姐们趁着520淘宝活动给自己买买买的。

02

Python教你分析

淘宝520商品数据

我们搜集整理了淘宝网关于520礼物的100页商品数据,使用Python进行整理分析。整个数据分析的过程分为以下三步:

  1. 数据获取
  2. 数据预处理
  3. 数据可视化

部分关键代码如下:

01 数据获取

此部分代码之前文章已经放过,此处暂不做赘述,爬取出来的数据以数据框的形式存储,结果如下图所示。

代码语言:javascript
复制
df.head() 

查看一下数据框的大小,可以看到一共有4404个样本。

代码语言:javascript
复制
df.info() 
代码语言:javascript
复制
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4404 entries, 0 to 4403
Data columns (total 5 columns):
goods_name      4404 non-null object
shop_name       4404 non-null object
price           4404 non-null float64
purchase_num    4404 non-null object
location        4404 non-null object
dtypes: float64(1), object(4)
memory usage: 172.1+ KB

02 数据预处理

此处我们对数据进行以下的处理以方便后续的数据分析和可视化工作:

  1. 删除重复值
  2. purchase_num字段:删除购买人数为空的记录
  3. purchase_num字段:提取数值型数据
  4. 计算销售额 = price*purchase_num
  5. location字段:提取省份数据
  6. goods_name字段:分词,提取关键词
代码语言:javascript
复制
# 导入所需包
import numpy as np 
import pandas as pd 
import time 
import re 
import jieba
import jieba.analyse
from collections import Counter
from pyecharts.charts import Bar, Map, Pie, TreeMap, WordCloud, Page
from pyecharts import options as opts 
from pyecharts.globals import SymbolType

# 读入数据
df = pd.read_excel('../data/520礼物天猫数据.xlsx') 

# 去除重复值
df.drop_duplicates(inplace=True)

# 删除购买人数为空的记录
df = df[df['purchase_num'].str.contains('人付款')]

# 购买人数
df['purchase_num'] = df['purchase_num'].str.extract('(\d+)').astype('float')
# 销售额
df['sales_volume'] = df['price'] * df['purchase_num']

# 省份处理
df['province_name'] = df.location.str[:2]

经过预处理之后,数据一共有3854条,如下所示:

代码语言:javascript
复制
df.head() 

03 数据可视化

数据可视化部分我们主要对以下几个方面信息进行分析:

520大家都买什么礼物Top10

代码实现:

代码语言:javascript
复制
data = [
    {"value": 593, "name": "永生花"},
    {"value": 340, "name": "玫瑰花"},
    {"value": 221, "name": "施华洛"},
    {"value": 114, "name": "巧克力"},
    {"value": 66, "name": "银项链"},
    {"value": 65, "name": "四叶草"},
    {"value": 65, "name": "音乐盒"},
    {"value": 65, "name": "潘多拉"},
    {"value": 59, "name": "满天星"},
    {"value": 49, "name": "康乃馨"}
] 

# 树形图
tree = TreeMap(init_opts=opts.InitOpts(width="1280px", height="720px"))
tree.add(series_name='', data=data, label_opts=opts.LabelOpts(position='inside'))
tree.set_global_opts(title_opts=opts.TitleOpts(title='520大家都买什么礼物top10'), 
                     legend_opts=opts.LegendOpts(is_show=False))
tree.render() 

520礼物商品销量Top10店铺

代码实现:

代码语言:javascript
复制
# 计算top10店铺
shop_top10 = df.groupby('shop_name')['purchase_num'].sum().sort_values(ascending=False).head(10)

# 绘制柱形图
bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px')) 
bar1.add_xaxis(shop_top10.index.tolist())
bar1.add_yaxis('', shop_top10.values.tolist()) 
bar1.set_global_opts(title_opts=opts.TitleOpts(title='520礼物商品销量Top10店铺'),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
                     visualmap_opts=opts.VisualMapOpts(max_=shop_top10.values.max())) 
bar1.render() 

520礼物商品销量省份排名Top10

代码实现:

代码语言:javascript
复制
# 计算销量top10
province_top10 = df.groupby('province_name')['purchase_num'].sum().sort_values(ascending=False).head(10)

# 条形图
bar2 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px')) 
bar2.add_xaxis(province_top10.index.tolist())
bar2.add_yaxis('', province_top10.values.tolist()) 
bar2.set_global_opts(title_opts=opts.TitleOpts(title='520礼物商品销量省份排名Top10'),
                     visualmap_opts=opts.VisualMapOpts(max_=province_top10.values.max())) 
bar2.render() 

520礼物国内各省份销量分布

代码实现:

代码语言:javascript
复制
# 计算销量
province_num = df.groupby('province_name')['purchase_num'].sum().sort_values(ascending=False) 

# 绘制地图
map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))
map1.add("", [list(z) for z in zip(province_num.index.tolist(), province_num.values.tolist())],
         maptype='china'
        ) 
map1.set_global_opts(title_opts=opts.TitleOpts(title='520礼物国内各省份销量分布'),
                     visualmap_opts=opts.VisualMapOpts(max_=province_num.quantile(0.9)),
                    )
map1.render() 

520不同价格区间的商品数量

代码实现:

代码语言:javascript
复制
def tranform_price(x):
    if x <= 50:
        return '0~50'
    elif x <= 100:
        return '50~100'
    elif x <= 150:
        return '100~150'
    elif x <= 200:
        return '150~200'
    elif x <= 250:
        return '200~250'
    elif x <= 300:
        return '250~300'
    elif x <= 500:
        return '300~500'
    elif x <= 1000:
        return '500~1000'
    elif x <= 2000:
        return '1000~2000'
    elif x <= 5000:
        return '2000~5000'
    else:
        return '5000~10000'

# 数据转换
df['price_cut'] = df.price.apply(lambda x: tranform_price(x)) 
price_num = df.price_cut.value_counts()

# 数据
x_data = ['0~50', '50~100', '100~150', '150~200', '200~250', '250~300', 
          '300~500', '500~1000', '1000~2000', '2000~5000', '5000~10000']
y_data = [395, 594, 565, 620, 212, 302, 399, 394, 273, 91, 9]

bar3 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px')) 
bar3.add_xaxis(x_data)
bar3.add_yaxis('', y_data) 
bar3.set_global_opts(title_opts=opts.TitleOpts(title='520不同价格区间的商品数量'),
                     visualmap_opts=opts.VisualMapOpts(max_=800)) 
bar3.render()

520礼物不同价格区间销量占比

代码实现:

代码语言:javascript
复制
price_cut_num = df.groupby('price_cut')['purchase_num'].sum() 
data_pair = [list(z) for z in zip(price_cut_num.index, price_cut_num.values)]

# 饼图
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
# 内置富文本
pie1.add(series_name="", 
        radius=["35%", "55%"],
        data_pair=data_pair,
        label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)")
        )
pie1.set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", pos_top='30%', orient="vertical"), 
                     title_opts=opts.TitleOpts(title='520礼物不同价格区间销量占比')) 
pie1.render() 

以上就是Python分析520礼物数据的全部内容啦,如果你感兴趣的话,也可以自己下载了数据和代码试试哦~

关注CDA数据分析师公众号

回复关键字“520

获取详细数据代码

CDA数据分析师

本文出品:CDA数据分析师(ID: cdacdacda)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CDA数据分析师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 数据获取
  • 02 数据预处理
  • 03 数据可视化
    • 520大家都买什么礼物Top10
      • 520礼物商品销量Top10店铺
        • 520礼物商品销量省份排名Top10
          • 520礼物国内各省份销量分布
            • 520不同价格区间的商品数量
              • 520礼物不同价格区间销量占比
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档