剛過去的520,大家都在送什麼禮物,Python用可視化圖告訴你

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

一年一度的520剛剛過去。

由於受疫情影響錯過了今年的2月14日情人節,2020年5月20日,這個諧音爲“愛你愛你我愛你”的 “世紀520”,對情侶們來說顯得格外有吸引力。

網上都是婚禮、告白、結婚等甜蜜新聞,微博排行榜上的蜜都要溢出屏幕了,520簡直就是大型“撒狗糧”節日。
在這裏插入圖片描述

其中,最大的狗糧來自民政局!全國各地的民政局都爆滿了!

在這裏插入圖片描述

想在這天領證的新人們把民政局圍得水泄不通,有人甚至凌晨4點就前往排隊。

在這裏插入圖片描述

在這裏插入圖片描述

一、“世紀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淘寶活動給自己買買買的。

二、Python教你分析,淘寶520商品數據

我們蒐集整理了淘寶網關於520禮物的100頁商品數據,使用Python進行整理分析。整個數據分析的過程分爲以下三步:

  • 數據獲取
  • 數據預處理
  • 數據可視化

部分關鍵代碼如下:

1. 數據獲取

此部分代碼之前文章已經放過,此處暫不做贅述,爬取出來的數據以數據框的形式存儲,結果如下圖所示。

df.head() 

在這裏插入圖片描述
查看一下數據框的大小,可以看到一共有4404個樣本。

df.info() 
<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

2. 數據預處理
此處我們對數據進行以下的處理以方便後續的數據分析和可視化工作:

  • 刪除重複值
  • purchase_num字段:刪除購買人數爲空的記錄
  • purchase_num字段:提取數值型數據
  • 計算銷售額 = price*purchase_num
  • location字段:提取省份數據
  • goods_name字段:分詞,提取關鍵詞
# 導入所需包
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條,如下所示:

df.head() 

在這裏插入圖片描述

3. 數據可視化
數據可視化部分我們主要對以下幾個方面信息進行分析:

520大家都買什麼禮物Top10
在這裏插入圖片描述

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店鋪
在這裏插入圖片描述

代碼實現:

# 計算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

在這裏插入圖片描述

代碼實現:

# 計算銷量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禮物國內各省份銷量分佈
在這裏插入圖片描述

代碼實現:

# 計算銷量
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不同價格區間的商品數量

在這裏插入圖片描述
代碼實現:

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禮物不同價格區間銷量佔比

在這裏插入圖片描述
代碼實現:

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禮物數據的全部內容啦,如果你感興趣的話,也可以自己下載了數據和代碼試試哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章