爬取京東商品並分析


一、前言

上文,我們爬取了京東商城糖果的兩千多條商品信息。今天,我們就來對它進行分析吧!(●'◡'●)

要點:

工具:jupyter notebook

用到的庫:pandas、matplotlib、jieba

下面我們開始吧!

二、數據處理

1.數據清洗

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

import pandas as pd 

#讀取數據
dataframe = pd.read_csv('./JongDong.csv')
print(dataframe.shape)

查看下有多少條數據:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-g9khNi2g-1584540171764)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318161229715.png)]
預覽下前幾行的數據:

dataframe.head()

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aUSsZPm0-1584540171768)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318161342025.png)]
2.處理缺失數據

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

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-g6OiHiB6-1584540171769)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318161439343.png)]

可以看到,沒有缺失的數據

3.保存數據

import pymysql
from sqlalchemy import create_engine
#與mysql服務器建立連接
engine = create_engine('mysql+pymysql://root:2324507@localhost:3306/JingDong?charset=utf8')
con = engine.connect()
data.to_sql(name='candy',con=con,if_exists='append',index=False)

打開數據庫看下:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cUlwVTmw-1584540171774)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318161616247.png)]

2.預處理

根據上面獲取的信息,我們需要先對數據進行一些預處理,將評論數中的漢字''萬''轉換一下,代碼如下:

def dealComment_num(comm_colum):
    num = comm_colum.split('+')[0]
    if '萬' in num:
        if '.' in num :
            num = num.replace('.','').replace('萬','000')
        else:
            num = num.replace('.','').replace('萬','0000')
    return num
datadf['comm_num'] = datadf['comment_num'].apply(lambda x: dealComment_num(x))
#轉換成int類型
datadf['comm_num'] = datadf.comm_num.astype('int')
#去除標題中的空格
# def clean_title(comm_colum):
#     return comm_colum.replace(' ','')
# datadf['goods_title'] = datadf['title'].apply(lambda x: clean_title(x)) 
data = datadf.drop('comment_num',axis = 1)
data.head(10)

看下處理好的數據:

[外鏈圖片轉存[(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318162214299.png)]

三、分析

由於京東上面沒有銷量這一信息,我們姑且將評論數當成是銷量。本次項目中取用了price、title、comment_num、shop這幾個字段的信息。分別是價格、標題、評論數、店鋪名

3.1商品標題詞雲可視化

使用jieba分詞器,將title列中的商品標題進行切割,而后,利用了百度的一個停用詞表剔除停用詞,然后統計每個詞的頻率,並繪制詞雲

預處理:

import jieba
#將所有商品標題轉換為list
title = data.title.values.tolist()
#對標題進行分詞
title_s = []
for line in title:
    title_cut = jieba.lcut(line)
    title_s.append(title_cut)
#print(title_s)
#調入停用詞表
stopword = [line.strip() for line in open('./baidu_stopwords.txt', 'r', encoding='utf-8').readlines()]

#刪除停用詞
title_clean = []
for line in title_s:
    line_clean = []
    for word in line:
        if word not in stopword:
            line_clean.append(word)
    title_clean.append(line_clean)
#進行去重
title_clean_dist = []
for line in title_clean:
    line_dist = []
    for word in line:
        if word not in line_dist:
            line_dist.append(word)
    title_clean_dist.append(line_dist)
    
#print(title_clean_dist)
#將title_clean_dist中元素轉換成一個list
allwords_clean_dist = []
for line in title_clean_dist:
    for word in line:
        #print(world)
        allwords_clean_dist.append(word)
#將列表allwords_clean_dist 轉換為Dataframe對象
df_allwords_clean_dist = pd.DataFrame({'allwords':allwords_clean_dist})

# 對過濾_去重的詞語 進行分類匯總
word_count = df_allwords_clean_dist.allwords.value_counts().reset_index()
word_count.columns = ['word', 'count']

繪圖:

from wordcloud import WordCloud
import matplotlib.pyplot as plt
from imageio import imread
plt.figure(figsize=(20,8))
# 讀取圖片
pic = imread("./background.png")
w_c = WordCloud(font_path="simhei.ttf",
                background_color="white", 
                mask=pic, max_font_size=100,
                margin=1)
wc = w_c.fit_words({
    x[0]:x[1] for x in word_count.head(100).values
})
#顯示圖像
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
#plt.show()
plt.savefig('./jingdong/雲圖.jpg') 

結果如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RFescoXg-1584540171778)(D:\python\爬蟲\jingdong\雲圖.jpg)]
從圖中可以得出的結論:

1.零食、休閑的詞的占比比較大

2.關於糖果的類型,可以清除的看到,巧克力類型的商品最多

3.禮物、喜糖、女友 的詞頻比較大,說明出售的用於送禮的糖果比較多

3.2價格分布區間

我們再來看下糖果的價格分布區間(說明:大致看了下糖果價格,發現基本屬於[0-200]區間內,所以,這里只取200以內的價格進行分析)

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

結果如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Drk2h2sB-1584540171781)(D:\python\爬蟲\jingdong\價格分布.jpg)]

可以看到:價格基本在0~40的區間之內,占了總采集數據的2/3左右

3.3銷量分布情況

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

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

結果如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VrnBKjIz-1584540171783)(D:\python\爬蟲\jingdong\銷量情況.jpg)]
可以看到,銷量基本是在10萬以上。

這讓我有點好奇,我們來看下銷量最高的糖果是哪些吧

3.4銷量前10的糖果

在分析過程中,我發現數據有些詭異,出現了下面的情況

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5PoL1vEj-1584540171786)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318165204186.png)]

於是,我去excel里瞅瞅了。

圖1:46.8元的巧克力

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-l9jBhvEy-1584540171789)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318165556767.png)]

圖1:96元的巧克力

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SmMIKaZH-1584540171793)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318165522175.png)]

發現同一款商品的不同規格的銷售量是記在一起的。本來呢,這里應該對其處理一下,但圖已經畫好了,我就懶得改代碼了,偷個小懶。嘿嘿(●ˇ∀ˇ●)

為了圖更好看點,將標題進行了截取,只取前面那個小標題。代碼如下:

#取出每個商品標題的簡略信息
def get_title(item):
    title = item.split(' ')[0]
    return title

data['small_title'] = data['title'].apply(lambda x: get_title(x)) 
data1 = data.drop('title',axis = 1)
top10_candy = data1.sort_values('comm_num',ascending=False)
top10_candy.head(10)
title = top10_candy['small_title'][:10]
sale_num = top10_candy['comm_num'][: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')
plt.savefig('./jingdong/銷量前10的糖果.jpg') 

結果如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HBFWoOR3-1584540171794)(D:\python\爬蟲\jingdong\銷量前10的糖果.jpg)]

可以看到,費羅列 牌子的巧克力以165萬的銷量笑傲群雄。我最喜歡的大白兔竟然沒有上榜┭┮﹏┭┮

3.5銷量前10的店鋪

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

代碼如下:

top_shop = data.groupby('shop')['comm_num'].sum().sort_values(ascending=False)[:10]
top_shop.head(10)

plt.figure(figsize=(10,8),dpi = 80)
top_shop.plot(kind = 'bar',color='brown',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()
plt.savefig('./jingdong/銷量前10店鋪.jpg')

結果

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-orAAMVVs-1584540171798)(D:\python\爬蟲\jingdong\銷量前10店鋪.jpg)]

可以看到:箭牌京東自營旗艦店占據第一名,達2000多萬。其他前10的店鋪中也基本是京東的自營店

3.6商品價格和銷量關系

這個,我們采用散點圖的方式,看看價格和銷量的分布關系

plt.figure(figsize=(10,8))
plt.scatter(data['price'],data['comm_num'], color='blue')
plt.xlabel('價格')
plt.ylabel('銷量')
plt.title('價格、銷量的散點分布')
#plt.show()
plt.savefig('./jingdong/價格、銷量的散點分布.jpg') 

結果如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hTaSnPZX-1584540171799)(D:\python\爬蟲\jingdong\價格、銷量的散點分布.jpg)]

可以看到:價格在0-50之間的銷量是最高的,而隨着價格的增加,銷量越來越少。嗯?還有600多的糖果?

img

3.7價格和成交總額的關系

由上圖觀察,我們發現價格和銷量之間似乎有個負相關的關系,那么,我們就來建立個模型分析分析叭!

import seaborn as sns
data['sum_sale'] =  data['price']*data['comm_num']
print(data['price'].corr(data['sum_sale']))   #查看相關系數
sns.regplot(x='price', y='sum_sale', data=data, color='red')  #擬和程度不高,模型價值不大
plt.savefig('./jingdong/價格和成交總額的關系.jpg') 

結果如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-JivhsnyJ-1584540171802)(D:\python\爬蟲\jingdong\價格和成交總額的關系.jpg)]

但實際上,這個圖的價值不大,我們看下兩者的相關系數

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tbiOQ8EM-1584540171804)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200318172119859.png)]

說明我這個模型建的很失敗!嗚嗚,看來直覺都是騙人的。

img

這里就不對上面那張圖分析啦。

結語

磕磕拌拌,總算完成了這次分析。作為一枚數據分析小菜鳥,我的python之路,任重而道遠。


免責聲明!

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



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