一、案例說明
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技術乾貨文章,以及不定期的分享學習資料,實用工具,面試經驗
等,當然了還有內推機會
哦,期待你的關注!