我去,原來 520 情人節大家都在買這款口紅!

一、案例說明

1、案例背景

520情人節,不懂送女朋友口紅色號?沒關係!Python 數據分析告訴你。

我們爬取了京東商城口紅近 4000 條口紅商品信息,並對這些口紅數據進行分析,讓大家買口紅給女朋友時有個選擇的參考,從如下幾個方面去分析:

1、哪些價格區間的口紅賣的最好?
2、口紅銷量分佈情況。
3、銷量前10的口紅有哪些?
4、銷量前10的店鋪。
5、商品價格和銷量的關係。

2、任務說明

通過 Python 爬蟲爬取了京東上所有口紅鋪的數據集 jd_data.csv。

我們希望通過該數據集,針對不同的口紅品牌和店鋪進行統計與分析,從而能夠解開我們上述疑問。

3、數據字段的說明

字段含義圖:

4、數據分析的流程

二、數據預處理

數據清洗

1、首先從csv文件中導入數據

import pandas as pd 
import matplotlib.pyplot as plt 

#讀取數據
dataframe = pd.read_csv('jd_data.csv',encoding = 'gb18030')#這裏不能使用utf-8
print(dataframe.shape)

查看下有多少行、列數據:
(3816, 6)
共有3816行,6列(上面有這六個字段說明)

2、缺失值處理

data = dataframe.dropna(how='any')
data.head()
print(data.shape)

(3610, 6)
從這裏可以看出還是有些缺失值的

對於缺失值的處理主要有兩種方法:

刪除

填充:分爲均值、中位數、衆數、附近值進行填充,還有牛頓差值法等等。
這裏偷一下懶,使用比較簡便的刪除的方式處理缺失值,畢竟缺失的不是很多。

# inplace=True表示原地修改數據集
data.dropna(axis=0, inplace=True) 

# 對刪除後缺失值後的數據集,再次進行缺失值統計
data.isnull().sum(axis=1) 

數據轉換

1、將評論的+和萬字修改

def dealComment(comm_colum):
    num = str(comm_colum).split('+')[0]
    if '萬' in num:
        if '.' in num :
            num = num.replace('.','').replace('萬','000')
        else:
            num = num.replace('.','').replace('萬','0000')
    return num
dataframe['comment'] = dataframe['comment'].apply(lambda x: dealComment_num(x))
#轉換成int類型
dataframe['comment'] = dataframe.comment.astype('int') 
data = dataframe.drop('comment',axis = 1)
print(data.head(10))

經過處理完後的數據:

數據預處理是數據分析的一項重要任務,能否得到準確的數據分析結果離不開數據預處理,下面我們開始對口紅數據進行分析吧!

三、數據分析

京東上面商品沒有銷量這一信息,我們姑且將評論數當成是銷量。

本次項目中取用了 name、price、comment、shop_name 、shop_type 這幾個字段的信息。

分別是商品標題名稱、價格、評論數、店鋪名、店鋪類型來進行分析。

1、口紅價格分佈區間

import pandas as pd 
import matplotlib.pyplot as plt

#讀取數據
data = pd.read_csv('jd_data.csv',encoding = 'gb18030')

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
plt.figure(figsize=(10,8))
price = data[data['price'] < 1000]
plt.hist(price['price'], bins=10, color='brown')
plt.xlabel('價格')
plt.ylabel('商品數量')
plt.title('價格商品分佈')
plt.show()

結果如下:

通過上圖,可以很清楚看到:

1、口紅的價格絕大多數在0-500元的區間之內,但是也有口紅的售價達到了1000元,哈哈努力掙錢吧。

2、其中200-300元價位的數量非常的高,超過了1200,而且價格超過300元的有明顯的減少趨勢,哈哈價格纔是王道。

2、銷量分佈情況

由於沒有爬取到銷量信息,所以將評論數當成銷量

#銷量分析
sale_num = data[data['comment'] > 100]
plt.figure(figsize=(10,8))
#print(len(sale_num)/len(data))  #查看下大致的區間分佈
plt.hist(sale_num['comment'], bins=20, color='blue')
plt.xlabel('銷量')
plt.ylabel('數量')
plt.title('銷量情況')
plt.show()

結果如下:
在這裏插入圖片描述
通過直方圖我們可以看到:

1、銷售量基本是在20萬以內。

2、銷售量在10萬以內的佔了絕大多數

3、還有極個別的店鋪銷量竟然超過了100萬

3、銷售前10的口紅

#銷售前10的口紅
#抽取商品標題的簡略信息
def get_title(item):
    title = item.split(' ')[0]
    return title

data['small_name'] = data['name'].apply(lambda x: get_title(x)) 
data1 = data.drop('name',axis = 1)
top10Lipstick = data1.sort_values('comment',ascending=False)
print(top10Lipstick.head(10))
title = top10Lipstick['small_name'][:10]
sale_num = top10Lipstick['comment'][:10]
plt.figure(figsize=(10,8),dpi = 80) 
plt.bar(range(10),sale_num,width=0.6,color='red')
plt.xticks(range(10),title,rotation=45)
#plt.ylim((9,9.7))   #設置y軸座標
plt.ylabel('數量') 
plt.xlabel('標題')  
plt.title('銷量前10的糖果')
for x,y in enumerate(list(sale_num)):   
    plt.text(x,float(y)+0.01,y,ha='center')

結果如下:

可以發現,排名前三位的是:

1、京東國際魅可(MAC)經典脣膏 子彈頭口紅3g Chili 小辣椒色

商品鏈接:https://item.jd.hk/4564204.html

商品圖片

2、【520禮物】中國風口紅套裝禮盒女頤和園同款脣膏脣釉學生非小樣彩妝 口紅套裝(6支)

商品鏈接:https://item.jd.com/33051756368.html

商品圖片

3、【520禮物】迪奧(Dior)烈豔藍金脣膏-啞光999# 3.5g 傳奇紅(口紅 正紅色 傳奇紅 贈精美禮盒)

商品鏈接:https://item.jd.com/61602677875.html

商品圖片

4、銷量前10的店鋪

分析完銷量前10的商品後,我們再來看下銷量前10的店鋪:
代碼如下:

#銷量前10的店鋪
top_shop = data.groupby('shop_name')['comment'].sum().sort_values(ascending=False)[:10]
print(top_shop.head(10))

plt.figure(figsize=(10,8),dpi = 80)
top_shop.plot(kind = 'bar',color='red',width= 0.6)
plt.ylabel('數量')
plt.xlabel('店鋪名')  
plt.title('銷量前10的店鋪') 
plt.xticks(rotation=45)
for x,y in enumerate(list(top_shop)): 
    plt.text(x,float(y)+0.1,y,ha='center')
plt.show()

結果如下:

由上圖可以看到:

1、MAC魅可海外自營專區 佔據第一名,達 1365308的銷售量,而且基本前10的店鋪銷量都在5萬以上。

2、前三名都基本達到了130多萬

3、前10名中有5個是京東自營

5、商品價格和銷量的關係

我們採用散點圖的方式,看看價格和銷量的分佈關係

plt.figure(figsize=(10,8))
plt.scatter(data['price'],data['comment'], color='blue')
plt.xlabel('價格')
plt.ylabel('銷量')
plt.title('價格、銷量的散點分佈')
plt.show()

結果如下:

可以看出:

隨着價格的升高銷量會減小,而且價格在400內,對銷量的影響不大,證明絕大多數人的口紅消費區間在0-400元之間,但是最貴的竟然達到了近1700元,哈哈,貧窮限制了我的想象。

四、總結

經過這次小小的數據分析,還是學到了許多的。作爲一名小白,還有許多要學習:

  • 數據清洗,它是能分析出正確結果的保證;
  • 如何挖掘數據不同維度間的聯繫等;

不足:本次數據分析還有許多需要完善的地方:

  • 比如分析不同類型的店鋪佔比店鋪;
  • 不同類型的店鋪之間的銷量對比;
  • 由於本次沒有爬取評論數據,沒有做情感分析;

數據分析之路還很漫長,加油!


今天的推薦不知道大家喜歡嗎?如果你喜歡,請在文章底部留言點贊,以表示對我的支持,你們的留言點贊是我持續更新的動力哦,感謝大家!

1、點個贊,讓更多的人看到這篇文章,順便激勵下我,嘻嘻。

2、關注我的原創微信公衆號「傑哥的IT之旅」專注於IT技術乾貨文章,以及不定期的分享學習資料,實用工具,面試經驗等,當然了還有內推機會哦,期待你的關注!
在這裏插入圖片描述

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