數據可視化的目的是為了數據分析,而非僅僅是數據的圖形化展示。
項目介紹
項目案例為電商雙11美妝數據分析,分析品牌銷售量、性價比等。
數據集包括更新日期、ID、title、品牌名、克數容量、價格、銷售數量、評論數量、店名等信息。
1、數據初步了解
運行結果
數據預處理
使用pandas庫進行數據預處理,包括查看數據特征、處理缺失值和重復值。
df.describe() #查看各數字類型特征的一些統計量
處理缺失值的方法包括填充(如用0填充)和刪除空行。
data = df.drop_duplicates(inplace = False)##去重
data.reset_index(inplace = True,drop = True)##重置行索引
data.shape
處理重復值需有充分理由,確保刪除的是無效重復數據。
data=data.fillna(0) #用0填補缺失值
data.isnull().any() #查看是否還有空值
數據分類
創建主類別和子類別,基于數據集中的關鍵詞進行分類。
關鍵詞如“美白乳”、“潤膚乳”等屬于乳液類。
分類字典包含關鍵字、主類別和子類別。
性別分類
新增“是否為男士專用”列,通過檢測關鍵詞如“男士”、“男生”等進行分類。
銷售額計算
銷售額通過銷售量和銷售單價相乘得出。
新增“銷售額”列,并計算各店鋪的銷售情況。
data['銷售額'] = data.price * data.sale_count
data.head()
數據可視化
繪制各店鋪商品數量、銷量、總銷售額和平均單價的圖表。
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = [u'SimHei'] ##顯示中文,設置字體
plt.rcParams['axes.unicode_minus'] = False ##顯示符號
plt.figure(figsize = (12,10))
# 各店鋪的商品數量
plt.subplot(2,2,1)
plt.tick_params(labelsize=15)
data['店名'].value_counts().sort_values().plot.bar()
plt.title('各品牌商品數',fontsize = 20)
plt.ylabel('商品數量',fontsize = 15)
plt.xlabel('店名')# 各店鋪的銷量
plt.subplot(2,2,2)
plt.tick_params(labelsize=15)
data.groupby('店名').sale_count.sum().sort_values().plot.bar()
plt.title('各品牌所有商品的銷量',fontsize = 20 )
plt.ylabel('商品總銷量',fontsize = 15)#各店鋪總銷售額
plt.subplot(2,2,3)
plt.tick_params(labelsize=15)
data.groupby('店名')['銷售額'].sum().sort_values().plot.bar()
plt.title('各品牌總銷售額', fontsize = 20)
plt.ylabel('商品總銷售額' , fontsize = 15)
#旋轉顯示plt.xticks(rotation=45)##補充繪圖,挖掘數據,各品牌的平均每單單價,三個銷量為0的品牌暫時不考慮
plt.subplot(2,2,4)
plt.tick_params(labelsize = 15)
avg_price=data.groupby('店名')['銷售額'].sum()/data.groupby('店名').sale_count.sum() ###每個品牌售出的商品的平均單價
avg_price.sort_values().plot.bar()
plt.title('各品牌平均每單單價', fontsize = 20)
plt.ylabel('售出商品的平均單價' , fontsize = 15)
##自適應調整子圖間距
plt.tight_layout()
使用柱形圖和餅圖展示數據,并將按價格區間將商品分為ABCD四類,并繪制銷售額占比圖。
A=avg_price[(avg_price <= 100) & (avg_price > 0) ].index
B=avg_price[(avg_price <= 200) & (avg_price > 100) ].index
C=avg_price[(avg_price <= 300) & (avg_price > 200) ].index
D=avg_price[avg_price > 300 ].index
#四類ABCD分別代表0-100,100-200,200-300,300以上平均單價區間的各品牌
sum_sale=data.groupby('店名')['銷售額'].sum()
plt.figure(figsize = (16,8))
plt.tick_params(labelsize=10)###各類、各品牌的銷售額占比
plt.subplot(1,2,1)
sum_sale_byprice=sum_sale[A].sort_values().append(sum_sale[B].sort_values()).append(sum_sale[C].sort_values()).append(sum_sale[D].sort_values())
plt.pie(x=sum_sale_byprice,labels =sum_sale_byprice.index ,colors = ['grey']*len(A)+['g']*len(B)+['y']*len(C)+['m']*len(D),autopct='%0f%%',pctdistance=0.9)###各類的平均每個店銷售額
plt.subplot(1,2,2)
plt.tick_params(labelsize = 15)
plt.bar('均價0-100元',np.mean(sum_sale[A]),color = 'grey')
plt.bar('均價100-200元',np.mean(sum_sale[B]),color = 'g')
plt.bar('均價200-300元',np.mean(sum_sale[C]),color = 'y')
plt.bar('均價300元以上',np.mean(sum_sale[D]),color = 'm')
plt.title('不同類別的平均每個店銷售額',fontsize = 20)
plt.ylabel('平均銷售額',fontsize = 20)plt.tight_layout()