京公网安备 11010802034615号
经营许可证编号:京B2-20210330
CDA数据分析师 出品
【导语】:今天我们来聊聊粽子,Python分析部分请看第三部分。
又到一年端午节,作为中华民族的传统节日,传说粽子是为祭奠投江的屈原而传承下来的,如今吃粽子也成了端午的主要习俗之一。除了商场出售的琳琅满目的粽子,各家各户的妈妈和奶奶们也纷纷浸糯米、洗粽叶、包粽子。
粽子的包法和形状也很有讲究,除了常见的三角粽、四角粽,还长粽、塔型粽和牛角粽等等。
说到粽子的口味就更多了。粽子几乎每年都会引发咸甜之争,有句话说的是——吃货不分南北,口味必分甜咸。
北方人吃粽子偏爱甜口,多以红枣、豆沙做馅,少数也采用果脯为馅,蘸白糖或红糖食用;
而南方青睐咸口,口味有咸肉粽、咸蛋黄粽、板栗肉粽、腊肉香肠粽、火腿粽、虾仁粽等等。
那么哪家的粽子买得最好?大家都普遍喜欢什么口味?今天我们就用数据来盘一盘端午的粽子。
本文要点:
自己包粽子选什么料?
自己家包的粽子,永远是最好吃的,相比起来外面卖的粽子都不香了。对厨艺有自信的小伙伴们大可以自己试着包包看。
那么自己包粽子,选甜口还是咸口?馅料配红豆还是五花肉?
首先我们获取了,美食天下网站关于粽子的菜谱,共460条。看看哪些菜谱最受欢迎吧。
1、吃甜粽还是咸粽?
在甜咸之争中,这次甜粽胜出了。
有33.04%的菜谱都是甜粽,其次22.17%才是咸粽。同时也有许多小伙伴选择最简单的纯糯米粽,原味,这部分占比17.83%。
2、粽子里包了什么?
食材方面我们看到:
无论如何糯米和粽叶都是必不可少的。
然后在咸粽方面,五花肉很多人的首选,其次咸蛋黄、香菇、排骨、腊肠等都是常见的选择;在甜粽方面呢,红豆蜜枣是很多人的首选。其次绿豆、豆沙、花生米、西米等也不错。
3、调料放什么?
调料方面可以看到:
糖和酱油是少不了的。还花生油、蚝油等选择。除了这些常规操作,也还有选择抹茶粉这种创新的做法。
全网粽子谁家卖的最好?
出于自己不会包粽子、图方便、过节送人等考虑,直接在网上买粽子的人也不少。那么哪些店铺的粽子最受大众欢迎呢?我们分析获取了淘宝售卖粽子商品数据,共4403条。
1、全网谁家的粽子卖得最好?
首先在店铺方面:
五芳斋是妥妥的霸主,粽子销量位居第一。其次真真老老位居第二。
2、哪个省份是粽子大省?
这些店铺都来自哪里?谁是真正的粽子大省呢?
经过分析发现,浙江一骑绝尘,粽子店铺数量远远领先其他省份。浙江的粽子店铺占到全网的67.71%。毫无争议的大佬。
其次广东、上海、北京分部位于第二、三、四名。
3、粽子都卖多少钱
粽子都卖多少钱也是消费者们最关系的了,淘宝店铺买的粽子一般一份有10个左右。分析发现,价格在一份50元以内的还是占到绝多数,全网有55.22%的粽子都在50元内。其次是50-100元的,占比24.81%。
4、不同价格粽子的销量
那么销售额方面又如何呢,什么价格的粽子卖的最好?
可以看到50-100元的粽子销售额最高,占比53.61%。其次是50元以内的,占比22.06%。毕竟从送礼品的角度,还是要一定价格考量的,太平价的不行,需要一定的档次。
5、粽子商品标题里都在说些什么?
最后,我们再看到粽子的商品标题:
整理发现,除了"粽子"、"端午"等关键词,"嘉兴"被提到的最多。看来嘉兴的粽子是真的很有名呀。
粽子馅料方面,"蛋黄"、"鲜肉"、"豆沙"都是非常热门的。同时"礼盒包装"、"送礼"、"五芳斋"等也被多次提到。
爬取淘宝粽子数据
我们使用Python获取了淘宝网粽子商品销售数据和美食天下菜谱数据,进行了一下数据分析。此处展示淘宝商品分析部分代码。按照数据读入-数据处理和数据可视化流程,首先导入我们使用的Python库,其中pandas用于数据处理,jieba用于分词,pyecharts用于可视化。
# 导入包
import pandas as pd
import time
import jieba
from pyecharts.charts import Bar, Line, Pie, Map, Page
from pyecharts import options as opts
from pyecharts.globals import SymbolType, WarningType
WarningType.ShowWarning = False
1、数据导入
# 读入数据
df_tb = pd.read_excel('../data/淘宝商城粽子数据6.23.xlsx')
df_tb.head()
查看一下数据集大小,可以看到一共有4403条数据。
df_tb.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4403 entries, 0 to 4402
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 goods_name 4403 non-null object
1 shop_name 4403 non-null object
2 price 4403 non-null float64
3 purchase_num 4403 non-null object
4 location 4403 non-null object
dtypes: float64(1), object(4)
memory usage: 172.1+ KB
2、数据预处理
我们对数据集进行以下处理,以便我们后续的可视化分析工作,经过处理之后的数据共4192条。
# 去除重复值
df_tb.drop_duplicates(inplace=True)
# 删除购买人数为空的记录
df_tb = df_tb[df_tb['purchase_num'].str.contains('人付款')]
# 重置索引
df_tb = df_tb.reset_index(drop=True)
# 提取数值
df_tb['num'] = df_tb['purchase_num'].str.extract('(d+)').astype('int')
# 提取单位
df_tb['unit'] =
df_tb.purchase_num.str.extract(r'(万)')
df_tb['unit'] = df_tb.unit.replace('万', 10000).replace(np.nan, 1)
# 重新计算销量
df_tb['true_purchase'] = df_tb['num'] * df_tb['unit']
# 删除列
df_tb = df_tb.drop(['purchase_num', 'num', 'unit'], axis=1)
# 计算销售额
df_tb['sales_volume'] = df_tb['price'] * df_tb['true_purchase']
# 提取省份
df_tb['province'] = df_tb['location'].str.split(' ').str[0]
df_tb.head()
3、数据可视化
数据可视化部分主要对以下的数据进行汇总分析,分析维度如下:
粽子店铺商品销量排行Top10
shop_top10 = df_tb.groupby('shop_name')['true_purchase'].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='粽子店铺商品销量排行Top10'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
visualmap_opts=opts.VisualMapOpts(max_=1350657.0)
)
bar1.render()
各省份粽子店铺数量排行Top10
province_top10 =
df_tb.province.value_counts()[: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='各省份粽子店铺数量排行Top10'),
visualmap_opts=opts.VisualMapOpts(max_=1000)
)
bar2.render()
浙江vs其他省份店铺粽子销量对比
names = ['浙江', '其他省份']
numbers = [3378601.0, 1611409.0]
data_pair = [list(z) for z in zip(names, numbers)]
# 绘制饼图
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie1.add('', data_pair, radius=['35%', '60%'])
pie1.set_global_opts(title_opts=opts.TitleOpts(title='浙江vs其他省份店铺粽子销量对比'),
legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie1.set_colors(['#EF9050', '#3B7BA9'])
pie1.render()
全国店铺粽子销量分布
province_num = df_tb.groupby('province')['true_purchase'].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='全国店铺粽子销量分布'),
visualmap_opts=opts.VisualMapOpts(max_=300000),
)
map1.render()
粽子都卖多少钱?
# 分箱
bins = [0,50,100,150,200,500,1000,9999]
labels = ['0-50元', '50-100元', '100-150元', '150-200元', '200-500元', '500-1000元', '1000-9999元']
df_tb['price_cut'] = pd.cut(df_tb.price, bins=bins, labels=labels, include_lowest=True)
price_num = df_tb['price_cut'].value_counts()
# 数据对
data_pair2 = [list(z) for z in zip(price_num.index.tolist(), price_num.values.tolist())]
# 绘制饼图
pie2 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie2.add('', data_pair2, radius=['35%', '60%'], rosetype='radius')
pie2.set_global_opts(title_opts=opts.TitleOpts(title='粽子都卖多少钱?'),
legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie2.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie2.set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF'])
pie2.render()
不同价格区间的销售额
# 添加列
cut_purchase = round(df_tb.groupby('price_cut')['sales_volume'].sum())
# 数据对
data_pair = [list(z) for z in zip(cut_purchase.index.tolist(),
cut_purchase.values.tolist())]
# 绘制饼图
pie3 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie3.add('', data_pair, radius=['35%', '60%'])
pie3.set_global_opts(title_opts=opts.TitleOpts(title='不同价格区间的销售额表现'),
legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie3.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie3.set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])
pie3.render()
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
初中毕业想考证,先确认“我能不能报”,再比较证书价值。学历门槛不够的证书,宣传再多也与你无关;能报但对应不上岗位的证书, ...
2026-11-02市场岗确有一批报考不设专业限制的证书,但“不限专业”只解决能不能报,真正决定值不值的是三件事:对应市场岗哪条子路径、招聘 ...
2026-11-02“大学生必考证书有哪些”这个问题,本身就藏着一个需要先拆掉的假设:似乎存在一份人人适用的必考清单。实际上,除了少数与毕业 ...
2026-11-02“最好考的一级证书”这个问题,最容易踩的坑不是选错证书,而是没先弄清“一级”在目标证书体系里到底指什么。有的体系里,一级 ...
2026-11-02“职业证书哪个含金量高”这个问题,很难用一张榜单回答。原因不复杂:证书的“含金量”取决于你拿它做什么。想进入必须持证的行 ...
2026-11-02“证件含金量排名”是搜索量很高的词,但直接给你一份“十大证书排行榜”的文章,基本可以跳过。原因很简单:证书的含金量不是单 ...
2026-11-02在校大专生能考的证书,大体分三类:通用能力类(英语等级、计算机等级、普通话水平测试)、职业技能等级类,以及部分不要求工作 ...
2026-11-02在家闲着想考个证书,最容易踩的坑是先去搜“含金量排行榜”,然后被一堆培训广告牵着走。更稳妥的顺序是反过来的:先看自己属于 ...
2026-11-02“注册类证书”不是一个可以随手列全的清单,它更像一个制度口径:通常指国家职业资格目录中设有注册管理、与执业准入挂钩的资格 ...
2026-11-02“现在考什么证有用”很难有统一答案。同一张证书,对想进会计事务所的人有用,对想做新媒体运营的人可能帮助有限;对需要评职称 ...
2026-11-02“适合女生考的证书有哪些含金量高”,这个问题里藏着两个容易走偏的前提。一是把“女生”当成职业属性,仿佛有一份统一的女性证 ...
2026-11-02先说结论:工商管理专业女生不必追“女生必考”榜单。证书有没有用,取决于它能不能对上你准备投的岗位。比较稳妥的做法,是先在 ...
2026-11-02“什么证好考又实用”这个问题,最怕两种回答:一种是列一堆“通过率高”的证书,却不告诉你考完能干什么;另一种是反过来只谈含 ...
2026-11-02“女士可以考哪些证书”并没有一份统一答案。真正决定你能考什么的,不是性别,而是三件事:你现在的身份(在校、在职还是准备转 ...
2026-11-02大专学历想考运营岗位证书,先给结论:能报的证书不少,但值得考的集中在三类——平台官方运营/投放认证、职业技能等级评价、数 ...
2026-11-02大学生判断一张证书是否重要,不用先看宣传热度,而要看四件事:它是否匹配你的目标岗位,校招时是否真用得上,在校期间是否具备 ...
2026-11-02先把结论说清楚:在校期间以2—4张核心证书为宜,其中1—2张通用底证、1—2张与目标岗位对应的方向证;高壁垒资格证只在符合报考 ...
2026-11-02大学生问证书推荐,最容易掉进的坑是“别人考什么我也考什么”。证书本身没有统一的含金量排序,同一张证,对目标岗位是硬门槛, ...
2026-11-02经管毕业生没有一张“通吃”的证书。比较有用的选择,是先按财会、金融、市场、人力、综合管理几个方向锁定目标岗位,再把证书分 ...
2026-11-02“程序员考什么证书含金量高”,没有放之四海皆准的答案。同样是“高含金量”,对后端开发、云原生工程师、数据开发和安全工程师 ...
2026-11-02