歡迎光臨
每天分享高質量文章

Python資料分析實戰 | 月餅之王花落誰手?

來源:戀習Python(ID:sldata2017)

中秋佳節,除了假日團圓,月餅也是頭巷尾的話題焦點今年中秋,誰的月餅呼聲最高?什麼口味的月餅雖受歡迎?

本文將與你一起爬取淘寶網全網月餅銷售資料,再經過資料分析,告訴你今年誰是“月餅之王”。不過在爬取資料與分析資料之前,插播一段月餅歷史之情。

一、月餅的歷史

據說早在殷周時期,江浙一帶就有一種紀念太師聞仲的邊薄心厚的“太師餅”,可以說是月餅的祖宗了。至於為什麼要紀念聞仲,我也不知道。

後來到了北宋,被皇家看上了,在中秋節那天吃,不得不說皇室貴族的宣傳力度果然是一般人的十倍以上,為月餅的傳播起了跨世紀的作用。


貴族們一看這玩意火了,得蹭個熱點,那給它們取個名字吧,於是想了個大名叫“月團”,小名叫“小餅”,我說你們為啥就不能把這兩個名字合併一下?

至於月餅這個名字,是直到南宋時期才第一次出現在書裡的。後面大概就是月餅一步一步憑藉自己的努力漸漸站在中秋節身邊的勵志故事了。


眾所周知:傳統的中國四大月餅包括,廣式月餅,京式月餅,蘇式月餅和潮式月餅。現在隨著時代的發展,也出現了好多新種類,比如冰皮月餅、海味月餅、冰淇淋月餅等等。

二、資料獲取

本文就以淘寶網上的月餅為標的,來獲取最近全國各地近段時間月餅銷售情況。(標的連結:https://s.taobao.com/search?q=月餅)



工具&模組:

工具:Python3.7+Sublime Text

模組:requests、jieba、matplotlib、wordcloud、imread、pandas、numpy 等。


目的主要是透過對資料的分析,來看看不同關鍵詞word對應的sales的統計、月餅價格以及銷量的分佈情況、以及不同省份的月餅銷量情況。


詳情程式碼如下:

import requests
import re

#下載網頁
def get_html_text(url):
   try:
       res = requests.get(url,timeout=30)
       res.raise_for_status()
       res.encoding = res.apparent_encoding
       return res.text
   except:
       return ""

#解析網頁並儲存資料    
def parse_page(html):
   try:
       plt = re.findall(r'"view_price":"[d.]*"', html)
       tlt = re.findall(r'"raw_title":".*?"', html)
       loc = re.findall(r'"item_loc":".*?"', html)
       sale = re.findall(r'"view_sales":".*?"', html)
       #print(plt)
       for i in range(len(plt)):
           price = eval(plt[i].split(':')[1])
           title = eval(tlt[i].split(':')[1])
           location = eval(loc[i].split(':')[1])
           location = location.split(' ')[0]
           sales = eval(sale[i].split(':')[1])
           sales = re.match(r'd+',sales).group(0)
           print(price)
           with open("月餅資料.txt",'a',encoding='utf-8') as f:
               print(f)
               f.write(title+','+price+','+sales+','+location+' ')
   except:
       print("")

def main():
   goods="月餅"
   depth=100
   start_url = 'https://s.taobao.com/search?q=' + goods
   for i in range(depth):
       try:
           url = start_url + '&s;=' + str(44 * i)
           print('url=',url)
           html = get_html_text(url)
           parse_page(html)
       except:
           continue

main()

知識點:Response物件的屬性


  • r.status_code HTTP請求的傳回狀態,200表示連線成功,404表示失敗 ;

  • r.text HTTP響應內容的字串形式,即url對應的頁面內容;

  • r.encoding 從HTTP essay-header中猜測的響應內容編碼方式;

  • r.apparent_encoding 從內容中分析出的響應內容編碼方式(備選編碼方式);

三、資料清洗預覽


由上圖可以看出,全網月餅的均價在90元左右,最貴月餅價高達9999元,最高銷量為355444(資料為當前爬取資料為準)

四、資料分析視覺化

廣式月餅風采依舊,蛋黃、蓮蓉口味深受最愛



結論:


廣式月餅、禮盒裝佔比很高;從口味上來看,蛋黃口味佔比很高,比蓮蓉,五仁都高,其他口味豆沙、水果、火腿等次之;從品牌商家來看,北京稻香村、廣東華美排名靠前;從禮盒裝、企業、員工、團購、批發來看,淘寶網也是企業採購月餅送員工的渠道之一。


詳情程式碼如下:

import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from pyecharts import Geo,Style,Line,Bar,Overlap
from wordcloud import WordCloud, ImageColorGenerator
from os import path
from pylab import mpl
import jieba

f = open(r"C:UsersAdministratorDesktop月餅資料.txt",encoding='utf-8')

df = pd.read_csv(f,sep=',',names=['title','price','sales','location'])

title = df.title.values.tolist()

#對每個標題進行分詞
title_s = []

for line in title:
   title_cut = jieba.lcut(line)
   title_s.append(title_cut)

title_clean = []

#停用詞表
stopwords = ["月餅","禮品","口味","禮盒","包郵","【","】","送禮","大",
"中秋節","中秋月餅","2","餅","蓉","多","個","味","斤","送"," ","老",
"北京","雲南","網紅老"]

#剔除停用詞表
for line in title_s:
   line_clean = []
   for word in line:
       if word not in stopwords:
           line_clean.append(word)
   title_clean.append(line_clean)

title_clean_dist = []

#進行去重
for line in title_clean:
   line_dist = []
   for word in line:
       if word not in line_dist:
           line_dist.append(word)
   title_clean_dist.append(line_dist)

allwords_clean_dist = []
for line in title_clean_dist:
   for word in line:
       allwords_clean_dist.append(word)

df_allwords_clean_dist = pd.DataFrame({'allwords':allwords_clean_dist})

#對過濾_去重詞語進行彙總統計
word_count = df_allwords_clean_dist.allwords.value_counts().reset_index()
word_count.columns = ['word','count']

backgroud_Image = plt.imread('1.jpg')

wc = WordCloud(width=1024,height=768,background_color='white',

   mask=backgroud_Image,font_path="C:simhei.ttf",max_font_size=400,
   random_state=50)

wc = wc.fit_words({x[0]:x[1] for x in word_count.head(100).values})

plt.imshow(wc,interpolation='bilinear')
plt.axis("off")
plt.show()

d = path.dirname(__file__)

wc.to_file(path.join(d,"yuebing.png"))

知識點:


font_path : string //字型路徑,需要展現什麼字型就把該字型路徑+字尾名寫上,如:font_path = ‘黑體.ttf’;

mask : nd-array or None (default=None) //如果引數為空,則使用二維遮罩繪製詞雲。如果 mask 非空,設定的寬高值將被忽略,遮罩形狀被 mask 取代。 除全白(#FFFFFF)的部分將不會繪製,其餘部分會用於繪製詞雲。如:bg_pic = imread(‘讀取一張圖片.png’), 背景圖片的畫布一定要設定為白色(#FFFFFF),然後顯示的形狀為不是白色的其他顏色。可以用ps工具將自己要顯示的形狀複製到一個純白色的畫布上再儲存,就ok了;

stopwords : set of strings or None //設定需要遮蔽的詞,如果為空,則使用內建的STOPWORDS ;

background_color : color value (default=”black”) //背景顏色,如background_color=’white’,背景顏色為白色; 

max_font_size : int or None (default=None) //顯示的最大的字型大小 ;

fit_words(frequencies) //根據詞頻生成詞雲(frequencies,為字典型別)


不同關鍵詞word對應的sales之和的統計分析


(說明:例如 詞語 ‘廣式’,則統計商品標題中含有‘廣式’一詞的商品的銷量之和,即求出具有‘廣式’風格的商品銷量之和)


由上圖可以看出:禮盒裝、廣式、蛋黃、蓮蓉、五仁、稻香村、華美等關鍵詞靠前,也再次驗證了廣式月餅堪稱月餅之王,實際付款人高達近700萬,廣式月餅可謂是風采依舊。雖然廣式月餅起源於廣州,但憑藉其鬆軟的餅皮和多元豐富的餡料,實際已經在全國各地流行開來,成為名副其實的“月餅之王”。


詳情程式碼如下:

w_s_sum = []
for w in word_count.word:
   i = 0
   s_list = []
   for t in title_clean_dist:
       if w in t:
           s_list.append(df.sales[i])
       i+= 1
   w_s_sum.append(sum(s_list))

df_w_s_sum = pd.DataFrame({'w_s_sum':w_s_sum})
df_word_sum = pd.concat([word_count,df_w_s_sum],axis=1,ignore_index=True)
df_word_sum.columns = ['word','count','w_s_sum']
df_word_sum.sort_values('w_s_sum',inplace=True,ascending=True)
df_w_s = df_word_sum.tail(30)

attr = df_w_s['word']
v1 = df_w_s['w_s_sum']

bar = Bar("月餅關鍵詞銷量分佈圖")

bar.add("關鍵詞",attr,v1,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,

   xaxis_interval=0,is_splitline_show=False)

overlap = Overlap()

overlap.add(bar)

overlap.render('月餅關鍵詞_銷量分佈圖.html')

多數商品銷量為3000以下,佔比高達90%


由上圖看出,銷售量在10萬以上的寥寥無幾,共8種,其中銷售量30萬以上就有6款。當今網紅經濟下,爆品為王,一款獨大;正所謂網紅就是營銷,爆品就是產品,有了好的產品再經過營銷的運作就能產生十倍的放大效益, 如果沒有好的產品,光有營銷企業也難以長久。要利用網紅經濟來打造爆款,選擇爆款一定要有自己的特色,在銷售的過程中,客戶的評價對產品的搜尋排序和客戶下單轉化起著至關重要的作用;


消費降級?均價在10-100元佔比50%


商品數量隨著價格總體呈現下降階梯形勢,價格越高,在售的商品越少;低價位商品居多,價格在10-100之間的商品最多,100-200之間的次之,價格8000以上的商品較少。

詳情程式碼如下:

f = open(r"C:UsersAdministratorDesktop月餅資料.txt",encoding='utf-8')

df = pd.read_csv(f,sep=',',names=['title','price','sales','location'])

print(df.sort_values(by='price'))

price_info = df[['price','location']]

bins = [0,10,50,100,150,200,300,500,1000,5000,8000]
level = ['0-10','10-50', '50-100','100-150' ,'150-200', '200-500','500-1000','1000-5000','5000-8000','8000以上']

price_stage = pd.cut(price_info['price'], bins = bins,labels = level).value_counts().sort_index()
print(price_stage)

attr = price_stage.index
v1 = price_stage.values

bar = Bar("價格區間&月餅種類數量分佈")
bar.add("",attr,v1,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
   xaxis_interval=0,is_splitline_show=False)

overlap = Overlap()
overlap.add(bar)
overlap.render('價格區間&月餅種類數量分佈.html')

後記:


由上圖可看出,全網Top15中,廣式口味佔80%,全國各地都在賣廣式月餅。月餅種類那麼多,為何偏偏是廣式月餅橫行中國?廣式月餅外層是糖漿皮,以小麥粉、糖漿、植物油、鹼水等原料製作烘烤而成,這並非中國傳統的糕餅技藝,這與廣式月餅的起源有關。廣東流行中秋月餅比中國其他地區的時間更晚,要遲到晚清時期。在此之前,廣州沙面地區已因鴉片戰爭變為英、法租界,各類西餅店紛紛踏上廣州地界。以糖漿皮包裹烘烤而成的廣式月餅,其實是學習西式糕點作法的產物。


廣式月餅能一統天下,最重要的一條是廣式月餅的原料,這個原料就是蓮蓉。早在1889年,當時廣州城西的一家叫“蓮香樓”的糕酥店,將蓮子熬成蓮蓉作餡料,做成的酥餅清香可口,大受歡迎。後來,蓮香樓的生產者將這種蓮蓉餡料的餅點定型為月餅,逐漸形成後來的廣式月餅。



●編號516,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

人工智慧與大資料技術

更多推薦18個技術類公眾微信

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂