首頁 > 科技

大資料告訴你:粽子甜鹹之爭誰勝出?吃貨最愛買誰家的粽子?

2021-06-15 13:39:27

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獲取了淘寶網粽子商品銷售資料和美食天下菜譜資料,進行了一下資料分析。此處展示淘寶商品分析部分程式碼。按照資料讀入-資料處理和資料視覺化流程,首先匯入我們使用的Python庫,其中pandas用於資料處理,jieba用於分詞,pyecharts用於視覺化。

# 匯入包import pandas as pd import time import jieba from pyecharts.charts import Bar, Line, Pie, Map, Pagefrom pyecharts import options as opts from pyecharts.globals import SymbolType, WarningTypeWarningType.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 4402Data 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條。

去除重複值goods_name:暫不處理shop_name:暫不處理price:暫不處理purchase_num:提取人數,注意單位萬的處理計算銷售額 = price * purchase_numlocation:提取省份# 去除重複值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()


IT145.com E-mail:sddin#qq.com