Python 雙十一淘寶美妝數據分析


 

一,選題背景

如今社會因為科技的進步,各種生活方式都發生了變化。例如購物如今都是使用網上購物,而線下實體店占比很少。我們可以通過這個數據分析可以分析出購買化妝品的客戶的關注度(評論數)是多少?各產品銷量分布情況? 哪些產品的賣得最好,哪些牌子最受歡迎,哪些化妝品是大家最需要的? 不同商家之間的差異,及促銷打折力度? 模擬定價系統及推薦系統?然后商家就可以通過這個修改自家商品和優惠力度。

二、大數據分析設計方案

1.數據的內容與數據特征分析

update_time 統計時間

id 產品編號

title 產品名稱

price 交易價格

sale_count 銷量

comment_count 評論數量

2.數據分析的課程設計方案概述

(1)實現思路

通過分析網上淘寶爬來數據進行數據分析。

(2)技術難點
要分析大量數據尋找可靠真是數據。

三、數據分析步驟

1數據源

 https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1

2數據清洗

2.1重復數據處理

# 對重復數據做刪除處理
print(data.shape)
data = data.drop_duplicates(inplace=False)
print(data.shape)

 

  

 

# 此處雖然刪除了重復值,但索引未變,因此應用以下方法進行重置索引
print(data.index)
data = data.reset_index(drop=True)
print('新索引:',data.index)

2.2缺失值處理

# 查看缺失值
data.isnull().any()

# 查看數據結構
data.describe()

 

 

 

# 查看sale_count列的眾數
mode_01 = data.sale_count.mode()
print(mode_01)

# 查看comment_count列的眾數
mode_02 = data.comment_count.mode()
print(mode_02)

 

 

 

# 填充缺失值
data = data.fillna(0)
# 對空值行數求和
data.isnull().sum()

# 給商品添加分類
basic_config_data = """護膚品    套裝    套裝                            
護膚品    乳液類    乳液    美白乳    潤膚乳    凝乳    柔膚液'    亮膚乳    菁華乳    修護乳
護膚品    眼部護理    眼霜    眼部精華    眼膜                    
護膚品    面膜類    面膜                                                    
護膚品    清潔類    洗面    潔面    清潔    卸妝    潔顏    洗顏    去角質    磨砂                        
護膚品    化妝水    化妝水    爽膚水    柔膚水    補水露    凝露    柔膚液    精粹水    亮膚水    潤膚水    保濕水    菁華水    保濕噴霧    舒緩噴霧
護膚品    面霜類    面霜    日霜    晚霜    柔膚霜    滋潤霜    保濕霜    凝霜    日間霜    晚間霜    乳霜    修護霜    亮膚霜    底霜    菁華霜
護膚品    精華類    精華液    精華水    精華露    精華素                                        
護膚品    防曬類    防曬霜    防曬噴霧                                                
化妝品    口紅類    唇釉    口紅    唇彩                                            
化妝品    底妝類    散粉    蜜粉    粉底液    定妝粉     氣墊    粉餅    BB    CC    遮瑕    粉霜    粉底膏    粉底霜        
化妝品    眼部彩妝    眉粉    染眉膏    眼線    眼影    睫毛膏                                    
化妝品    修容類    鼻影    修容粉    高光    腮紅                                        
其他    其他    其他"""

# 將字符串basic_config_data 轉為字典 category_config_map
category_config_map = {}
for config_line in basic_config_data.split('\n'):
    basic_cateogry_list = config_line.strip().strip('\n').strip('    ').split('    ')
    main_category = basic_cateogry_list[0]
    sub_category = basic_cateogry_list[1]
    unit_category_list = basic_cateogry_list[2:-1]
    for unit_category in unit_category_list:
        if unit_category and unit_category.strip().strip('    '):
            category_config_map[unit_category] = (main_category,sub_category)
            
category_config_map

 

def func1(row):
    sub_type = ''   #子類別
    main_type = '' #主類別
    exist = False
    # 遍歷item_name_cut 里每個詞語
    for temp in row:
        # 如果詞語包含在category_config_map里面,打上子類和主類標簽
        if temp in category_config_map:
            sub_type = category_config_map.get(temp)[1]
            main_type = category_config_map.get(temp)[0]
            exist = True
            break
    if not exist:
        sub_type= '其他'
        main_type = '其他'
        
    return [sub_type, main_type]
# 將子類別sub_type新增為一列
data['sub_type'] = data['item_name_cut'].map(lambda r:func1(r)[0])
# 將主類別main-type新增為一列
data['main_type'] = data['item_name_cut'].map(lambda r:func1(r)[1])
data.head()

# 保存清理好的數據為Excel格式
data.to_excel('./clean_beautymakeup.xlsx',sheet_name='clean_data')

三、大數據分析過程及采用的算法

導入第三方庫

# 結巴分詞庫
import jieba 
# jieba.load_userdict('addwords.txt')
title_cut = []
for i in data.title:
    j = jieba.lcut(i)
    title_cut.append(j)
    
# 對標題進行分詞,新增item_name_cut列
data['item_name_cut'] = title_cut
data[['title','item_name_cut']].head()

 

4數據可視化

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

data.columns

 

 

 4.1各品牌SKU屬

 

plt.rcParams['font.sans-serif']=['SimHei']  #指定默認字體  
plt.rcParams['axes.unicode_minus']=False  #解決負號'-'顯示為方塊的問題

plt.figure(figsize=(12,7))
# 計算各店鋪的商品數量
data['店名'].value_counts().sort_values(ascending=False).plot.bar(width=0.8,alpha=0.6,color='b')

plt.title('各品牌SKU數',fontsize=18)
plt.ylabel('商品數量',fontsize=14)
plt.show()

 

 

悅詩風吟的商品數量最多,其次為佰草集、歐萊雅

4.2品牌總銷售和總銷售額

fig,axes = plt.subplots(1,2,figsize=(12,10))

ax1 = data.groupby('店名').sale_count.sum().sort_values(ascending=True).plot(kind='barh',ax=axes[0],width=0.6)
ax1.set_title('品牌總銷售量',fontsize=12)
ax1.set_xlabel('總銷售量')

ax2 = data.groupby('店名')['銷售額'].sum().sort_values(ascending=True).plot(kind='barh',ax=axes[1],width=0.6)
ax2.set_title('品牌總銷售額',fontsize=12)
ax2.set_xlabel('總銷售額')

plt.subplots_adjust(wspace=0.4)
plt.show()

 

 

 

相宜本草的銷售量和銷售額都是最高的。銷量第二至第五,分別為美寶蓮、悅詩風吟、妮維雅、歐萊雅;銷售額第二至第五,分別為歐萊雅、佰草集、美寶蓮、悅詩風吟。 寶蓮、悅詩風吟、歐萊雅都在銷量、銷售額前五中。

4,3各類的銷售量,銷售額情況

fig,axes = plt.subplots(1,2,figsize=(18,12))

data1 = data.groupby('main_type')['sale_count'].sum()
ax1 = data1.plot(kind='pie',ax=axes[0],autopct='%.1f%%', # 設置百分比的格式,這里保留一位小數
pctdistance=0.8, # 設置百分比標簽與圓心的距離
labels= data1.index,
labeldistance = 1.05, # 設置標簽與圓心的距離
startangle = 60, # 設置餅圖的初始角度
radius = 1.2, # 設置餅圖的半徑
counterclock = False, # 是否逆時針,這里設置為順時針方向
wedgeprops = {'linewidth': 1.2, },# 設置餅圖內外邊界的屬性值
textprops = {'fontsize':16, 'color':'k','rotation':80}, # 設置文本標簽的屬性值
)
ax1.set_title('主類別銷售量占比',fontsize=20)

data2 = data.groupby('sub_type')['sale_count'].sum()
ax2 = data2.plot(kind='pie',ax=axes[1],autopct='%.1f%%', 
pctdistance=0.8, 
labels= data2.index,
labeldistance = 1.05,
startangle = 230, 
radius = 1.2, 
counterclock = False, 
wedgeprops = {'linewidth': 1.2, },
textprops = {'fontsize':16, 'color':'k','rotation':80}, 
)

ax2.set_title('子類別銷售量占比',fontsize=20)

# 設置坐標標簽
ax1.set_xlabel(..., fontsize=16,labelpad=38.5)
ax1.set_ylabel(..., fontsize=16,labelpad=38.5)
ax2.set_xlabel(..., fontsize=16,labelpad=38.5)
ax2.set_ylabel(..., fontsize=16,labelpad=38.5)
plt.subplots_adjust(wspace=0.4)
plt.show()

 

從主類別銷售量占比情況來看,護膚品的銷量遠大於化妝品;

從子類別銷售量占比情況來看,底妝類、口紅類在化妝品中銷量最多,清潔類、化妝水、面霜類在護膚品中銷量最多。

plt.figure(figsize=(18,8))
sns.barplot(x='店名',y='sale_count',hue='main_type',data=data,saturation=0.75,ci=0)
plt.title('各品牌各總類的總銷量', fontsize=20)
plt.ylabel('銷量',fontsize=16)
plt.xlabel('店名',fontsize=16)
plt.text(0,78000,'注:此處也可使用堆疊圖,對比效果更直觀',
         verticalalignment='top', horizontalalignment='left',color='gray', fontsize=10)
# 設置刻度字體大小

plt.xticks(fontsize=16,rotation=45)
plt.yticks(fontsize=16)
plt.show()

 

plt.figure(figsize=(18,8))
sns.barplot( x = '店名',
y = '銷售額',hue = 'main_type',data =data,saturation = 0.75,ci=0,)
plt.ylabel('銷售額',fontsize=16)
plt.xlabel('店名',fontsize=16)
plt.title('各品牌各總類的總銷售額',fontsize=20)
# 設置刻度字體大小
plt.xticks(fontsize=16,rotation=45)
plt.yticks(fontsize=16)
plt.show()

 

 

plt.figure(figsize = (16,6))
sns.barplot( x = '店名',
y = 'sale_count',hue = 'sub_type',data =data,saturation = 0.75,ci=0)
plt.title('各品牌各子類的總銷量')
plt.ylabel('銷量')
plt.show()

 

plt.figure(figsize = (14,6))
sns.barplot( x = '店名',
y = '銷售額',hue = 'sub_type',data =data,saturation = 0.75,ci=0)
plt.title('各品牌各子類的總銷售額')
plt.ylabel('銷售額')
plt.show()

 

4.4各品牌熱度

plt.figure(figsize = (12,6))
data.groupby('店名').comment_count.mean().sort_values(ascending=False).plot(kind='bar',width=0.8)
plt.title('各品牌商品的平均評論數')
plt.ylabel('評論數')
plt.show()

 

 

plt.figure(figsize=(18,12))

x = data.groupby('店名')['sale_count'].mean()
y = data.groupby('店名')['comment_count'].mean()
s = data.groupby('店名')['price'].mean()
txt = data.groupby('店名').id.count().index

sns.scatterplot(x,y,size=s,hue=s,sizes=(100,1500),data=data)

for i in range(len(txt)):
    plt.annotate(txt[i],xy=(x[i],y[i]))
    
plt.ylabel('熱度')
plt.xlabel('銷量')

plt.legend(loc='upper left')
plt.show()

 

 

 4.5各品牌價格

plt.figure(figsize=(18,10))
sns.boxplot(x='店名',y='price',data=data)
plt.ylim(0,3000)#如果不限制,就不容易看清箱型,所以把Y軸刻度縮小為0-3000
plt.show()

 

data.groupby('店名').price.sum()
avg_price=data.groupby('店名').price.sum()/data.groupby('店名').price.count()
avg_price

 

 

plt.figure(figsize=(18,10))

x = data.groupby('店名')['sale_count'].mean()
y = data.groupby('店名')['銷售額'].mean()
s = avg_price
txt = data.groupby('店名').id.count().index

sns.scatterplot(x,y,size=s,sizes=(100,1500),marker='v',alpha=0.5,color='b',data=data)

for i in range(len(txt)):
    plt.annotate(txt[i],xy=(x[i],y[i]),xytext = (x[i]+0.2, y[i]+0.2))  #在散點后面增加品牌信息的標簽
    
plt.ylabel('銷售額')
plt.xlabel('銷量')

plt.legend(loc='upper left')
plt.show()

from matplotlib.pyplot import MultipleLocator
plt.figure(figsize = (12,6))
day_sale=data.groupby('day')['sale_count'].sum()
day_sale.plot()
plt.grid(linestyle="-.",color="gray",axis="x",alpha=0.5)
x_major_locator=MultipleLocator(1)  #把x軸的刻度間隔設置為1,並存在變量里
ax=plt.gca()  #ax為兩條坐標軸的實例
ax.xaxis.set_major_locator(x_major_locator)
#把x軸的主刻度設置為1的倍數
plt.xlabel('日期(11月)',fontsize=12)
plt.ylabel('銷量',fontsize=12)
plt.show()

f,[ax1,ax2]=plt.subplots(1,2,figsize=(12,6))
gender_data.groupby('店名').sale_count.sum().sort_values(ascending=True).plot(kind='barh',width=0.8,ax=ax1)
ax1.set_title('男士護膚品銷量排名')

gender_data.groupby('店名').銷售額.sum().sort_values(ascending=True).plot(kind='barh',width=0.8,ax=ax2)
ax2.set_title('男士護膚品銷售額排名')

plt.subplots_adjust(wspace=0.4)
plt.show()

 

 5完整代碼

  1 import pandas as pd
  2 import numpy as np
  3 
  4 data = pd.read_csv('雙十一淘寶美妝數據.csv')
  5 data.head()
  6 # 對重復數據做刪除處理
  7 print(data.shape)
  8 data = data.drop_duplicates(inplace=False)
  9 print(data.shape)
 10 # 此處雖然刪除了重復值,但索引未變,因此應用以下方法進行重置索引
 11 print(data.index)
 12 data = data.reset_index(drop=True)
 13 print('新索引:',data.index)
 14 # 查看缺失值
 15 data.isnull().any()
 16 # 查看數據結構
 17 data.describe()
 18 # 查看sale_count列的眾數
 19 mode_01 = data.sale_count.mode()
 20 print(mode_01)
 21 # 查看comment_count列的眾數
 22 mode_02 = data.comment_count.mode()
 23 print(mode_02)
 24 # 填充缺失值
 25 data = data.fillna(0)
 26 # 對空值行數求和
 27 data.isnull().sum()
 28 # 給商品添加分類
 29 basic_config_data = """護膚品    套裝    套裝                            
 30 護膚品    乳液類    乳液    美白乳    潤膚乳    凝乳    柔膚液'    亮膚乳    菁華乳    修護乳
 31 護膚品    眼部護理    眼霜    眼部精華    眼膜                    
 32 護膚品    面膜類    面膜                                                    
 33 護膚品    清潔類    洗面    潔面    清潔    卸妝    潔顏    洗顏    去角質    磨砂                        
 34 護膚品    化妝水    化妝水    爽膚水    柔膚水    補水露    凝露    柔膚液    精粹水    亮膚水    潤膚水    保濕水    菁華水    保濕噴霧    舒緩噴霧
 35 護膚品    面霜類    面霜    日霜    晚霜    柔膚霜    滋潤霜    保濕霜    凝霜    日間霜    晚間霜    乳霜    修護霜    亮膚霜    底霜    菁華霜
 36 護膚品    精華類    精華液    精華水    精華露    精華素                                        
 37 護膚品    防曬類    防曬霜    防曬噴霧                                                
 38 化妝品    口紅類    唇釉    口紅    唇彩                                            
 39 化妝品    底妝類    散粉    蜜粉    粉底液    定妝粉     氣墊    粉餅    BB    CC    遮瑕    粉霜    粉底膏    粉底霜        
 40 化妝品    眼部彩妝    眉粉    染眉膏    眼線    眼影    睫毛膏                                    
 41 化妝品    修容類    鼻影    修容粉    高光    腮紅                                        
 42 其他    其他    其他"""
 43 
 44 # 將字符串basic_config_data 轉為字典 category_config_map
 45 category_config_map = {}
 46 for config_line in basic_config_data.split('\n'):
 47     basic_cateogry_list = config_line.strip().strip('\n').strip('    ').split('    ')
 48     main_category = basic_cateogry_list[0]
 49     sub_category = basic_cateogry_list[1]
 50     unit_category_list = basic_cateogry_list[2:-1]
 51     for unit_category in unit_category_list:
 52         if unit_category and unit_category.strip().strip('    '):
 53             category_config_map[unit_category] = (main_category,sub_category)
 54             
 55 category_config_map
 56 def func1(row):
 57     sub_type = ''   #子類別
 58     main_type = '' #主類別
 59     exist = False
 60     # 遍歷item_name_cut 里每個詞語
 61     for temp in row:
 62         # 如果詞語包含在category_config_map里面,打上子類和主類標簽
 63         if temp in category_config_map:
 64             sub_type = category_config_map.get(temp)[1]
 65             main_type = category_config_map.get(temp)[0]
 66             exist = True
 67             break
 68     if not exist:
 69         sub_type= '其他'
 70         main_type = '其他'
 71         
 72     return [sub_type, main_type]
 73 # 將子類別sub_type新增為一列
 74 data['sub_type'] = data['item_name_cut'].map(lambda r:func1(r)[0])
 75 # 將主類別main-type新增為一列
 76 data['main_type'] = data['item_name_cut'].map(lambda r:func1(r)[1])
 77 data.head()
 78 # 保存清理好的數據為Excel格式
 79 data.to_excel('./clean_beautymakeup.xlsx',sheet_name='clean_data')
 80 # 結巴分詞庫
 81 import jieba 
 82 # jieba.load_userdict('addwords.txt')
 83 title_cut = []
 84 for i in data.title:
 85     j = jieba.lcut(i)
 86     title_cut.append(j)
 87 # 對標題進行分詞,新增item_name_cut列
 88 data['item_name_cut'] = title_cut
 89 data[['title','item_name_cut']].head()
 90 import matplotlib.pyplot as plt
 91 import seaborn as sns
 92 %matplotlib inline
 93 data.columns
 94 plt.rcParams['font.sans-serif']=['SimHei']  #指定默認字體  
 95 plt.rcParams['axes.unicode_minus']=False  #解決負號'-'顯示為方塊的問題
 96 
 97 plt.figure(figsize=(12,7))
 98 # 計算各店鋪的商品數量
 99 data['店名'].value_counts().sort_values(ascending=False).plot.bar(width=0.8,alpha=0.6,color='b')
100 
101 plt.title('各品牌SKU數',fontsize=18)
102 plt.ylabel('商品數量',fontsize=14)
103 plt.show()
104 fig,axes = plt.subplots(1,2,figsize=(12,10))
105 
106 ax1 = data.groupby('店名').sale_count.sum().sort_values(ascending=True).plot(kind='barh',ax=axes[0],width=0.6)
107 ax1.set_title('品牌總銷售量',fontsize=12)
108 ax1.set_xlabel('總銷售量')
109 
110 ax2 = data.groupby('店名')['銷售額'].sum().sort_values(ascending=True).plot(kind='barh',ax=axes[1],width=0.6)
111 ax2.set_title('品牌總銷售額',fontsize=12)
112 ax2.set_xlabel('總銷售額')
113 
114 plt.subplots_adjust(wspace=0.4)
115 plt.show()
116 fig,axes = plt.subplots(1,2,figsize=(18,12))
117 
118 data1 = data.groupby('main_type')['sale_count'].sum()
119 ax1 = data1.plot(kind='pie',ax=axes[0],autopct='%.1f%%', # 設置百分比的格式,這里保留一位小數
120 pctdistance=0.8, # 設置百分比標簽與圓心的距離
121 labels= data1.index,
122 labeldistance = 1.05, # 設置標簽與圓心的距離
123 startangle = 60, # 設置餅圖的初始角度
124 radius = 1.2, # 設置餅圖的半徑
125 counterclock = False, # 是否逆時針,這里設置為順時針方向
126 wedgeprops = {'linewidth': 1.2, },# 設置餅圖內外邊界的屬性值
127 textprops = {'fontsize':16, 'color':'k','rotation':80}, # 設置文本標簽的屬性值
128 )
129 ax1.set_title('主類別銷售量占比',fontsize=20)
130 
131 data2 = data.groupby('sub_type')['sale_count'].sum()
132 ax2 = data2.plot(kind='pie',ax=axes[1],autopct='%.1f%%', 
133 pctdistance=0.8, 
134 labels= data2.index,
135 labeldistance = 1.05,
136 startangle = 230, 
137 radius = 1.2, 
138 counterclock = False, 
139 wedgeprops = {'linewidth': 1.2, },
140 textprops = {'fontsize':16, 'color':'k','rotation':80}, 
141 )
142 
143 ax2.set_title('子類別銷售量占比',fontsize=20)
144 
145 # 設置坐標標簽
146 ax1.set_xlabel(..., fontsize=16,labelpad=38.5)
147 ax1.set_ylabel(..., fontsize=16,labelpad=38.5)
148 ax2.set_xlabel(..., fontsize=16,labelpad=38.5)
149 ax2.set_ylabel(..., fontsize=16,labelpad=38.5)
150 plt.subplots_adjust(wspace=0.4)
151 plt.show()
152 plt.figure(figsize=(18,8))
153 sns.barplot(x='店名',y='sale_count',hue='main_type',data=data,saturation=0.75,ci=0)
154 plt.title('各品牌各總類的總銷量', fontsize=20)
155 plt.ylabel('銷量',fontsize=16)
156 plt.xlabel('店名',fontsize=16)
157 plt.text(0,78000,'注:此處也可使用堆疊圖,對比效果更直觀',
158          verticalalignment='top', horizontalalignment='left',color='gray', fontsize=10)
159 # 設置刻度字體大小
160 
161 plt.figure(figsize=(18,8))
162 sns.barplot( x = '店名',
163 y = '銷售額',hue = 'main_type',data =data,saturation = 0.75,ci=0,)
164 plt.ylabel('銷售額',fontsize=16)
165 plt.xlabel('店名',fontsize=16)
166 plt.title('各品牌各總類的總銷售額',fontsize=20)
167 # 設置刻度字體大小
168 plt.xticks(fontsize=16,rotation=45)
169 plt.yticks(fontsize=16)
170 plt.show()
171 
172 plt.xticks(fontsize=16,rotation=45)
173 plt.yticks(fontsize=16)
174 plt.show()
175 plt.figure(figsize = (16,6))
176 sns.barplot( x = '店名',
177 y = 'sale_count',hue = 'sub_type',data =data,saturation = 0.75,ci=0)
178 plt.title('各品牌各子類的總銷量')
179 plt.ylabel('銷量')
180 plt.show()
181 plt.figure(figsize = (14,6))
182 sns.barplot( x = '店名',
183 y = '銷售額',hue = 'sub_type',data =data,saturation = 0.75,ci=0)
184 plt.title('各品牌各子類的總銷售額')
185 plt.ylabel('銷售額')
186 plt.show()
187 plt.figure(figsize = (12,6))
188 data.groupby('店名').comment_count.mean().sort_values(ascending=False).plot(kind='bar',width=0.8)
189 plt.title('各品牌商品的平均評論數')
190 plt.ylabel('評論數')
191 plt.show()
192 plt.figure(figsize=(18,12))
193 x = data.groupby('店名')['sale_count'].mean()
194 y = data.groupby('店名')['comment_count'].mean()
195 s = data.groupby('店名')['price'].mean()
196 txt = data.groupby('店名').id.count().index
197 sns.scatterplot(x,y,size=s,hue=s,sizes=(100,1500),data=data)
198 for i in range(len(txt)):
199     plt.annotate(txt[i],xy=(x[i],y[i]))
200 plt.ylabel('熱度')
201 plt.xlabel('銷量')
202 plt.legend(loc='upper left')
203 plt.show()
204 #查看價格的箱型圖
205 plt.figure(figsize=(18,10))
206 sns.boxplot(x='店名',y='price',data=data)
207 plt.ylim(0,3000)#如果不限制,就不容易看清箱型,所以把Y軸刻度縮小為0-3000
208 plt.show()
209 data.groupby('店名').price.sum()
210 avg_price=data.groupby('店名').price.sum()/data.groupby('店名').price.count()
211 avg_price
212 fig = plt.figure(figsize=(12,6))
213 avg_price.sort_values(ascending=False).plot(kind='bar',width=0.8,alpha=0.6,color='b',label='各品牌平均價格')
214 y = data['price'].mean()
215 plt.axhline(y,0,5,color='r',label='全品牌平均價格')
216 plt.ylabel('各品牌平均價格')
217 plt.title('各品牌產品的平均價格',fontsize=24)
218 plt.legend(loc='best')
219 plt.show()
220 plt.figure(figsize=(18,10))
221 x = data.groupby('店名')['sale_count'].mean()
222 y = data.groupby('店名')['銷售額'].mean()
223 s = avg_price
224 txt = data.groupby('店名').id.count().index
225 sns.scatterplot(x,y,size=s,sizes=(100,1500),marker='v',alpha=0.5,color='b',data=data)
226 for i in range(len(txt)):
227     plt.annotate(txt[i],xy=(x[i],y[i]),xytext = (x[i]+0.2, y[i]+0.2))  #在散點后面增加品牌信息的標簽
228 plt.ylabel('銷售額')
229 plt.xlabel('銷量')
230 plt.legend(loc='upper left')
231 plt.show()
232 
233 f,[ax1,ax2]=plt.subplots(1,2,figsize=(12,6))
234 gender_data.groupby('店名').sale_count.sum().sort_values(ascending=True).plot(kind='barh',width=0.8,ax=ax1)
235 ax1.set_title('男士護膚品銷量排名')
236 
237 gender_data.groupby('店名').銷售額.sum().sort_values(ascending=True).plot(kind='barh',width=0.8,ax=ax2)
238 ax2.set_title('男士護膚品銷售額排名')
239 
240 plt.subplots_adjust(wspace=0.4)
241 plt.show()
242 
243 from matplotlib.pyplot import MultipleLocator
244 plt.figure(figsize = (12,6))
245 day_sale=data.groupby('day')['sale_count'].sum()
246 day_sale.plot()
247 plt.grid(linestyle="-.",color="gray",axis="x",alpha=0.5)
248 x_major_locator=MultipleLocator(1)  #把x軸的刻度間隔設置為1,並存在變量里
249 ax=plt.gca()  #ax為兩條坐標軸的實例
250 ax.xaxis.set_major_locator(x_major_locator)
251 #把x軸的主刻度設置為1的倍數
252 plt.xlabel('日期(11月)',fontsize=12)
253 plt.ylabel('銷量',fontsize=12)
254 plt.show()

6總結

 

通過數據分析我們可以得出美妝類別中護膚品銷量遠大於化妝品,其中清潔類、化妝水、面霜等基礎護膚類銷量最高;

男士購買美妝集中在護膚品類,其中妮維雅品牌是最受男士喜愛的品牌;

價格和熱度對銷售量有關聯,平價基礎產品是大多數消費者的選擇;

其中還有一些可以更優代碼調試因為代碼理解不夠還有能力問題沒有最終執行出來,但是在過程中還是學會了許多優秀代碼,還要多學習這些知識。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM