首頁>技術>

今年不知道有多少小夥伴留在工作地過年呢,雖然今年過年不能回老家,但這個年也得過,也得買年貨,給家人長輩送禮。於是我出於好奇心的想法利用爬蟲獲取某寶資料,並結合 Python 資料分析和第三方視覺化平臺來分析一下大家過年都買了哪些東西,分析結果大屏如下:

上面使用清洗好的資料後用finebi三方視覺化工具完成的。接下來是從採集到分析的實現過程。對於本文的敘述,我會分以下五步為大家講解。

分析思路爬蟲部分資料清洗資料視覺化及分析結論與建議

一、分析思路

其實就今天的資料來講,我們要做的是探索性分析。首先梳理已有的欄位,有標題(提取出品類)、價格、銷量、店鋪名、發貨地。下面來做一下詳細的維度拆分,及視覺化圖形選擇:

品類 :①品類銷量的排名前十有哪些(表格或者橫向條形圖)② 熱門(出現次數最多)品類展示(詞雲)價格:年貨的價格區間分佈情況(圓環圖,觀察佔比)銷量、店鋪名:①店鋪銷量最高的前十名有哪些(條形圖)②結合品類做聯動。比如點堅果,對應展示銷量排名的店鋪。(聯動,利用三方工具)發貨地:銷量最高的城市是哪個(地圖)

二、爬取資料

pip install selenium

安裝成功後。執行如下程式碼,輸入關鍵字"年貨",進行掃碼就可以了。等著程式慢慢採集。

# coding=utf8import refrom selenium.webdriver.chrome.options import Optionsfrom selenium import webdriverimport timeimport csv# 搜尋商品,獲取商品頁碼def search_product(key_word):    # 定位輸入框    browser.find_element_by_id("q").send_keys(key_word)    # 定義點選按鈕,並點選    browser.find_element_by_class_name('btn-search').click()    # 最大化視窗:為了方便我們掃碼    browser.maximize_window()    # 等待15秒,給足時間我們掃碼    time.sleep(15)    # 定位這個“頁碼”,獲取“共100頁這個文字”    page_info = browser.find_element_by_xpath('//div[@class="total"]').text    # 需要注意的是:findall()返回的是一個列表,雖然此時只有一個元素它也是一個列表。    page = re.findall("(\d+)", page_info)[0]    return page# 獲取資料def get_data():    items = browser.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')    for item in items:        # 引數資訊        pro_desc = item.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text        # 價格        pro_price = item.find_element_by_xpath('.//strong').text        # 銷量        buy_num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text        # 店鋪名稱        shop = item.find_element_by_xpath('.//div[@class="shop"]/a').text        # 發貨地址        address = item.find_element_by_xpath('.//div[@class="location"]').text        # print(pro_desc, pro_price, buy_num, shop, address)        with open('{}.csv'.format(key_word), mode='a', newline='', encoding='utf-8-sig') as f:            csv_writer = csv.writer(f, delimiter=',')            csv_writer.writerow([pro_desc, pro_price, buy_num, shop, address])def main():    browser.get('https://www.taobao.com/')    page = search_product(key_word)    print(page)    get_data()    page_num = 1    while int(page) != page_num:        print("+" * 100)        print("正在爬取第{}頁".format(page_num + 1))        browser.get('https://s.taobao.com/search?q={}&s={}'.format(key_word, page_num * 44))        browser.implicitly_wait(25)        get_data()        page_num += 1    print("資料爬取完畢!")if __name__ == '__main__':    key_word = input("請輸入你要搜尋的商品:")    option = Options()    browser = webdriver.Chrome(chrome_options=option, executable_path=r".\chromedriver.exe")    main()

採集結果如下:

資料準備完成,中間從標題裡提取類別過程一言難盡,很耗時,這裡建議大家直接用整理好的資料。大概思路是對標題進行分詞,命名實體識別,標記出名詞,找出類別名稱,比如堅果、茶葉等。

三、資料清洗

這裡的檔案清洗幾乎用excel搞定的,資料集小,用Excel效率很高,比如這裡做了一個價格區間。到現在資料清洗已經完成(可以用三方工具做可視化了),如果大家愛折騰,可以接著往下看用Python如何進行分析。

四、資料視覺化及分析

1、讀取檔案

import pandas as pdimport matplotlib as mplmpl.rcParams['font.family'] = 'SimHei'import matplotlib.pyplot as pltfrom wordcloud import WordClouddatas = pd.read_csv('./年貨.csv',encoding='gbk')datas.head(5)

2、視覺化:繪製詞雲圖

li = []for each in datas['關鍵詞'].values:    new_list = str(each).split(',')    li.extend(new_list)def func_pd(words):    count_result = pd.Series(words).value_counts()    return count_result.to_dict()frequencies = func_pd(li)frequencies.pop('其他')plt.figure(figsize = (10,4),dpi=80)wordcloud = WordCloud(font_path="STSONG.TTF",background_color='white', width=700,height=350).fit_words(frequencies)plt.imshow(wordcloud)plt.axis("off")plt.show()

圖表說明:我們可以看到詞雲圖,熱門(出現次數最多)品類字型最大,依次是:堅果、茶葉、糕點等。

3、視覺化:繪製圓環圖

# plt.pie(x,lables,autopct,shadow,startangle,colors,explode)food_type = datas.groupby('價格區間').size()plt.figure(figsize=(8,4),dpi=80)explodes= [0,0,0,0,0.2,0.1]size = 0.3plt.pie(food_type, radius=1,labels=food_type.index, autopct='%.2f%%', colors=['#F4A460','#D2691E','#CDCD00','#FFD700','#EEE5DE'],       wedgeprops=dict(width=size, edgecolor='w'))plt.title('年貨價格區間佔比情況',fontsize=18)plt.legend(food_type.index,bbox_to_anchor=(1.5, 1.0))plt.show()

圖表說明:圓環圖和餅圖類似,代表部分相對於整體的佔比情況,可以看到0 ~ 200元的年貨大概33%左右,100 ~ 200元也是33%。說明大部分的年貨的價格趨於200以內。

4、視覺化:繪製條形圖

data = datas.groupby(by='店鋪名')['銷量'].sum().sort_values(ascending=False).head(10)plt.figure(figsize = (10,4),dpi=80)plt.ylabel('銷量')plt.title('年貨銷量前十名店鋪',fontsize=18)colors = ['#F4A460','#D2691E','#CDCD00','#EEE5DE', '#EEB4B4', '#FFA07A', '#FFD700']plt.bar(data.index,data.values, color=colors)plt.xticks(rotation=45)plt.show()

圖表說明:以上是店鋪按銷量排名情況,可以看到第一名是三隻松鼠旗艦店,看來過年大家都喜歡吃乾貨。

5、視覺化:繪製橫向條形圖

foods = datas.groupby(by='類別')['銷量'].sum().sort_values(ascending=False).head(10)foods.sort_values(ascending=True,inplace=True)plt.figure(figsize = (10,4),dpi=80)plt.xlabel('銷量')plt.title('年貨推薦購買排行榜',fontsize=18)colors = ['#F4A460','#D2691E','#CDCD00','#CD96CD','#EEE5DE', '#EEB4B4', '#FFA07A', '#FFD700']plt.barh(foods.index,foods.values, color=colors,height=1)plt.show()

圖表說明:根據類別銷量排名,排名第一是堅果,驗證了上面的假設,大家喜歡吃堅果。

五、結論與建議

淘寶熱賣年貨: 堅果,茶葉,糕點,餅乾,糖果,白酒,核桃,羊肉,海參,枸杞;年貨推薦清單(按銷量):堅果、零食、糕點、餅乾、茶葉、糖果、松子、紅棗、蛋糕、滷味、瓜子、牛奶、核桃;年貨價格參考:66%以上的年貨價格在0~200元之間;熱門店鋪:三隻老鼠、天貓超市、百草味、良品鋪子。

希望本文的內容對大家的學習或者工作能帶來一定的幫助,每天進步一點點,加油。♥

6
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 認真讀完這篇文章 Springboot原始碼其實不難