99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時代Python告訴你:粽子甜咸之爭誰勝出?吃貨最愛買誰家的粽子?
Python告訴你:粽子甜咸之爭誰勝出?吃貨最愛買誰家的粽子?
2020-06-28
收藏

【導(dǎo)語】:今天我們來聊聊粽子,Python分析部分請看第三部分。

又到一年端午節(jié),作為中華民族的傳統(tǒng)節(jié)日,傳說粽子是為祭奠投江的屈原而傳承下來的,如今吃粽子也成了端午的主要習(xí)俗之一。除了商場出售的琳瑯滿目的粽子,各家各戶的媽媽和奶奶們也紛紛浸糯米、洗粽葉、包粽子。

粽子的包法和形狀也很有講究,除了常見的三角粽、四角粽,還長粽、塔型粽和牛角粽等等。

說到粽子的口味就更多了。粽子幾乎每年都會引發(fā)咸甜之爭,有句話說的是——吃貨不分南北,口味必分甜咸。

北方人吃粽子偏愛甜口,多以紅棗、豆沙做餡,少數(shù)也采用果脯為餡,蘸白糖或紅糖食用;

而南方青睞咸口,口味有咸肉粽、咸蛋黃粽、板栗肉粽、臘肉香腸粽、火腿粽、蝦仁粽等等。

那么哪家的粽子買得最好?大家都普遍喜歡什么口味?今天我們就用數(shù)據(jù)來盤一盤端午的粽子。

本文要點:

粽子甜咸之爭,自己包粽子選什么料?

吃貨的力量,全網(wǎng)粽子誰家賣的最好?

01粽子“甜咸之爭”

自己包粽子選什么料?

自己家包的粽子,永遠是最好吃的,相比起來外面賣的粽子都不香了。對廚藝有自信的小伙伴們大可以自己試著包包看。

那么自己包粽子,選甜口還是咸口?餡料配紅豆還是五花肉?

首先我們獲取了,美食天下網(wǎng)站關(guān)于粽子的菜譜,共460條。看看哪些菜譜最受歡迎吧。

1甜粽還是咸粽?

在甜咸之爭中,這次甜粽勝出了。

有33.04%的菜譜都是甜粽,其次22.17%才是咸粽。同時也有許多小伙伴選擇最簡單的純糯米粽,原味,這部分占比17.83%。

2食材選什么

食材方面我們看到:

無論如何糯米和粽葉都是必不可少的。

然后在咸粽方面,五花肉很多人的首選,其次咸蛋黃、香菇、排骨、臘腸等都是常見的選擇;在甜粽方面呢,紅豆蜜棗是很多人的首選。其次綠豆、豆沙、花生米、西米等也不錯。

3調(diào)料放什么

調(diào)料方面可以看到:

糖和醬油是少不了的。還花生油、蠔油等選擇。除了這些常規(guī)操作,也還有選擇抹茶粉這種創(chuàng)新的做法。

02吃貨的力量

全網(wǎng)粽子誰家賣的最好?

出于自己不會包粽子、圖方便、過節(jié)送人等考慮,直接在網(wǎng)上買粽子的人也不少。那么哪些店鋪的粽子最受大眾歡迎呢?我們分析獲取了淘寶售賣粽子商品數(shù)據(jù),共4403條。

粽子店鋪銷量TOP10

1首先在店鋪方面:

五芳齋是妥妥的霸主,粽子銷量位居第一。其次真真老老位居第二。

2粽子店鋪地區(qū)排行TOP10

這些店鋪都來自哪里?誰是真正的粽子大省呢?

經(jīng)過分析發(fā)現(xiàn),浙江一騎絕塵,粽子店鋪數(shù)量遠遠領(lǐng)先其他省份。浙江的粽子店鋪占到全網(wǎng)的67.71%。毫無爭議的大佬。

其次廣東、上海、北京分部位于第二、三、四名。

3 粽子都賣多少錢?

粽子都賣多少錢也是消費者們最關(guān)系的了,淘寶店鋪買的粽子一般一份有10個左右。分析發(fā)現(xiàn),價格在一份50元以內(nèi)的還是占到絕多數(shù),全網(wǎng)有55.22%的粽子都在50元內(nèi)。其次是50-100元的,占比24.81%。

4不同價格粽子銷量

那么銷售額方面又如何呢,什么價格的粽子賣的最好?

可以看到50-100元的粽子銷售額最高,占比53.61%。其次是50元以內(nèi)的,占比22.06%。畢竟從送禮品的角度,還是要一定價格考量的,太平價的不行,需要一定的檔次。

5粽子標題詞云

最后,我們再看到粽子的商品標題:

整理發(fā)現(xiàn),除了"粽子"、"端午"等關(guān)鍵詞,"嘉興"被提到的最多??磥砑闻d的粽子是真的很有名呀。

粽子餡料方面,"蛋黃"、"鮮肉"、"豆沙"都是非常熱門的。同時"禮盒包裝"、"送禮"、"五芳齋"等也被多次提到。

03用Python教你

爬取淘寶粽子數(shù)據(jù)

我們使用Python獲取了淘寶網(wǎng)粽子商品銷售數(shù)據(jù)和美食天下菜譜數(shù)據(jù),進行了一下數(shù)據(jù)分析。此處展示淘寶商品分析部分代碼。按照數(shù)據(jù)讀入-數(shù)據(jù)處理和數(shù)據(jù)可視化流程,首先導(dǎo)入我們使用的Python庫,其中pandas用于數(shù)據(jù)處理,jieba用于分詞,pyecharts用于可視化。


# 導(dǎo)入包

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數(shù)據(jù)導(dǎo)入

# 讀入數(shù)據(jù)

df_tb = pd.read_excel('../data/淘寶商城粽子數(shù)據(jù)6.23.xlsx')

df_tb.head()

查看一下數(shù)據(jù)集大小,可以看到一共有4403條數(shù)據(jù)。

df_tb.info()

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數(shù)據(jù)預(yù)處理

我們對數(shù)據(jù)集進行以下處理,以便我們后續(xù)的可視化分析工作,經(jīng)過處理之后的數(shù)據(jù)共4192條。

去除重復(fù)值

goods_name:暫不處理

shop_name:暫不處理

price:暫不處理

purchase_num:提取人數(shù),注意單位萬的處理

計算銷售額 = price * purchase_num

location:提取省份


# 去除重復(fù)值

df_tb.drop_duplicates(inplace=True)

# 刪除購買人數(shù)為空的記錄

df_tb = df_tb[df_tb['purchase_num'].str.contains('人付款')]

# 重置索引

df_tb = df_tb.reset_index(drop=True)

# 提取數(shù)值

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數(shù)據(jù)可視化

數(shù)據(jù)可視化部分主要對以下的數(shù)據(jù)進行匯總分析,分析維度如下:

粽子店鋪商品銷量排行

各省份粽子店鋪數(shù)量排行

各省份粽子銷量分布

粽子都賣多少錢?

不同價格區(qū)間的銷售額分布?

粽子的食材

商品標題詞云圖

粽子店鋪商品銷量排行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()


各省份粽子店鋪數(shù)量排行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='各省份粽子店鋪數(shù)量排行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=":geybsqlxm7mc%"))

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()

# 數(shù)據(jù)對

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=":geybsqlxm7mc%"))

pie2.set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF'])

pie2.render()


不同價格區(qū)間的銷售額


# 添加列

cut_purchase = round(df_tb.groupby('price_cut')['sales_volume'].sum())

# 數(shù)據(jù)對

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='不同價格區(qū)間的銷售額表現(xiàn)'),

legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))

pie3.set_series_opts(label_opts=opts.LabelOpts(formatter=":geybsqlxm7mc%"))

pie3.set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])

pie3.render()


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }