我用 Python 分析了一波熱賣年貨,原來(lái)大家都在買這些東西急但?

今年不知道有多少小伙伴留在原地過(guò)年澎媒,雖然今年過(guò)年不能回老家,但這個(gè)年也得過(guò)波桩,也得買年貨戒努,給家人長(zhǎng)輩送禮。于是我出于好奇心的想法利用爬蟲獲取某寶數(shù)據(jù)镐躲,并結(jié)合 Python 數(shù)據(jù)分析和第三方可視化平臺(tái)來(lái)分析一下大家過(guò)年都買了哪些東西储玫,分析結(jié)果大屏如下:

上面使用清洗好的數(shù)據(jù)后用 finebi 第三方可視化工具完成的。接下來(lái)是用 Python 的實(shí)現(xiàn)過(guò)程萤皂,對(duì)于本文的敘述撒穷,主要分為以下五步:

  • 分析思路

  • 爬蟲部分

  • 數(shù)據(jù)清洗

  • 數(shù)據(jù)可視化及分析

  • 結(jié)論與建議

一、分析思路

其實(shí)就今天的數(shù)據(jù)來(lái)講裆熙,我們主要做的是探索性分析端礼;首先梳理已有的字段,有標(biāo)題(提取出品類)入录、價(jià)格蛤奥、銷量、店鋪名纷跛、發(fā)貨地喻括。下面來(lái)做一下詳細(xì)的維度拆分以及可視化圖形選擇:

品類:

  • 品類銷量的 TOP 10 有哪些?(表格或者橫向條形圖)

  • 熱門(出現(xiàn)次數(shù)最多)品類展示贫奠;(詞云)

價(jià)格:年貨的價(jià)格區(qū)間分布情況唬血;(圓環(huán)圖望蜡,觀察占比)

銷量、店鋪名:

  • 店鋪銷量最高的 TOP 10 有哪些拷恨?(條形圖)

  • 結(jié)合品類做聯(lián)動(dòng)脖律,比如點(diǎn)堅(jiān)果,對(duì)應(yīng)展示銷量排名的店鋪腕侄;(聯(lián)動(dòng)小泉,利用三方工具)

發(fā)貨地:銷量最高的城市有哪些?(地圖)

二冕杠、爬取數(shù)據(jù)

爬取主要利用 selenium 模擬點(diǎn)擊瀏覽器微姊,前提是已經(jīng)安裝 selenium 和瀏覽器驅(qū)動(dòng),這里我是用的 Google 瀏覽器分预,找到對(duì)應(yīng)的版本號(hào)后并下載對(duì)應(yīng)的版本驅(qū)動(dòng)兢交,一定要對(duì)應(yīng)瀏覽器的版本號(hào)。

pip install selenium

安裝成功后笼痹,運(yùn)行如下代碼配喳,輸入關(guān)鍵字"年貨",進(jìn)行掃碼就可以了凳干,等著程序慢慢采集晴裹。

# coding=utf8  
import re  
from selenium.webdriver.chrome.options import Options  
from selenium import webdriver  
import time  
import csv  
  
  
# 搜索商品,獲取商品頁(yè)碼  
def search_product(key_word):  
    # 定位輸入框  
    browser.find_element_by_id("q").send_keys(key_word)  
    # 定義點(diǎn)擊按鈕救赐,并點(diǎn)擊  
    browser.find_element_by_class_name('btn-search').click()  
    # 最大化窗口:為了方便我們掃碼  
    browser.maximize_window()  
    # 等待15秒涧团,給足時(shí)間我們掃碼  
    time.sleep(15)  
    # 定位這個(gè)“頁(yè)碼”,獲取“共100頁(yè)這個(gè)文本”  
    page_info = browser.find_element_by_xpath('//div[@class="total"]').text  
    # 需要注意的是:findall()返回的是一個(gè)列表净响,雖然此時(shí)只有一個(gè)元素它也是一個(gè)列表少欺。  
    page = re.findall("(\d+)", page_info)[0]  
    return page  
  
  
# 獲取數(shù)據(jù)  
def get_data():  
    # 通過(guò)頁(yè)面分析發(fā)現(xiàn):所有的信息都在items節(jié)點(diǎn)下  
    items = browser.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')  
    for item in items:  
        # 參數(shù)信息  
        pro_desc = item.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text  
        # 價(jià)格  
        pro_price = item.find_element_by_xpath('.//strong').text  
        # 付款人數(shù)  
        buy_num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text  
        # 旗艦店  
        shop = item.find_element_by_xpath('.//div[@class="shop"]/a').text  
        # 發(fā)貨地  
        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("正在爬取第{}頁(yè)".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("數(shù)據(jù)爬取完畢!")  
  
  
if __name__ == '__main__':  
    key_word = input("請(qǐng)輸入你要搜索的商品:")  
    option = Options()  
    browser = webdriver.Chrome(chrome_options=option,  
                               executable_path=r"C:\Users\cherich\AppData\Local\Google\Chrome\Application\chromedriver.exe")  
    main()  

采集結(jié)果如下:

數(shù)據(jù)準(zhǔn)備完成馋贤,中間從標(biāo)題里提取類別過(guò)程比較耗時(shí)赞别,建議大家直接用整理好的數(shù)據(jù)。

大概思路是對(duì)標(biāo)題進(jìn)行分詞配乓,命名實(shí)體識(shí)別仿滔,標(biāo)記出名詞,找出類別名稱犹芹,比如堅(jiān)果崎页、茶葉等。

三腰埂、數(shù)據(jù)清洗

這里的文件清洗幾乎用 Excel 搞定飒焦,數(shù)據(jù)集小,用 Excel 效率很高,比如這里做了一個(gè)價(jià)格區(qū)間牺荠。到現(xiàn)在數(shù)據(jù)清洗已經(jīng)完成(可以用三方工具做可視化了)翁巍,如果大家愛(ài)折騰,可以接著往下看用 Python 如何進(jìn)行分析休雌。

四灶壶、數(shù)據(jù)可視化及分析

1、讀取文件

import pandas as pd  
import matplotlib as mpl  
mpl.rcParams['font.family'] = 'SimHei'  
from wordcloud import WordCloud  
from ast import literal_eval  
import matplotlib.pyplot as plt  
datas = pd.read_csv('./年貨.csv',encoding='gbk')  
datas  

2杈曲、可視化:詞云圖

li = []  
for each in datas['關(guān)鍵詞'].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()  

圖表說(shuō)明:我們可以看到詞云圖驰凛,熱門(出現(xiàn)次數(shù)最多)品類字體最大,依次是:堅(jiān)果担扑、茶葉恰响、糕點(diǎn)等。

3魁亦、可視化:繪制圓環(huán)圖

# plt.pie(x,lables,autopct,shadow,startangle,colors,explode)  
food_type = datas.groupby('價(jià)格區(qū)間').size()  
plt.figure(figsize=(8,4),dpi=80)  
explodes= [0,0,0,0,0.2,0.1]  
size = 0.3  
plt.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('年貨價(jià)格區(qū)間占比情況',fontsize=18)  
plt.legend(food_type.index,bbox_to_anchor=(1.5, 1.0))  
plt.show()  

圖表說(shuō)明:圓環(huán)圖和餅圖類似渔隶,代表部分相對(duì)于整體的占比情況羔挡,可以看到0 ~ 200元的年貨大概33%左右洁奈,100 ~ 200元也是33%。說(shuō)明大部分的年貨的價(jià)格趨于200以內(nèi)绞灼。

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()  

圖表說(shuō)明:以上是店鋪按銷量排名情況,可以看到第一名是三只松鼠旗艦店低矮,看來(lái)過(guò)年大家都喜歡吃干貨印叁。

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('年貨推薦購(gòu)買排行榜',fontsize=18)  
colors = ['#F4A460','#D2691E','#CDCD00','#CD96CD','#EEE5DE', '#EEB4B4', '#FFA07A', '#FFD700']  
plt.barh(foods.index,foods.values, color=colors,height=1)  
plt.show()  

圖表說(shuō)明:根據(jù)類別銷量排名军掂,排名第一是堅(jiān)果轮蜕,驗(yàn)證了上面的假設(shè),大家喜歡吃堅(jiān)果蝗锥。

結(jié)論與建議

淘寶熱賣年貨: 堅(jiān)果跃洛,茶葉,糕點(diǎn)终议,餅干汇竭,糖果,白酒穴张,核桃细燎,羊肉,海參皂甘,枸杞玻驻;

年貨推薦清單(按銷量):堅(jiān)果、零食偿枕、糕點(diǎn)璧瞬、餅干佛析、茶葉、糖果彪蓬、松子寸莫、紅棗、蛋糕档冬、鹵味膘茎、瓜子、牛奶酷誓、核桃披坏;

年貨價(jià)格參考:66%以上的年貨價(jià)格在0~200元之間;

熱門店鋪:三只老鼠盐数、天貓超市棒拂、百草味、良品鋪?zhàn)樱?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玫氢,一起剝皮案震驚了整個(gè)濱河市帚屉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漾峡,老刑警劉巖攻旦,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異生逸,居然都是意外死亡牢屋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門槽袄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烙无,“玉大人,你說(shuō)我怎么就攤上這事遍尺〗乜幔” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵狮鸭,是天一觀的道長(zhǎng)合搅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)歧蕉,這世上最難降的妖魔是什么灾部? 我笑而不...
    開(kāi)封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮惯退,結(jié)果婚禮上赌髓,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好锁蠕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布夷野。 她就那樣靜靜地躺著,像睡著了一般荣倾。 火紅的嫁衣襯著肌膚如雪影斑。 梳的紋絲不亂的頭發(fā)上沛豌,一...
    開(kāi)封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天发魄,我揣著相機(jī)與錄音泰偿,去河邊找鬼。 笑死铸豁,一個(gè)胖子當(dāng)著我的面吹牛灌曙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播节芥,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼在刺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了头镊?” 一聲冷哼從身側(cè)響起蚣驼,我...
    開(kāi)封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拧晕,沒(méi)想到半個(gè)月后隙姿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厂捞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了队丝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靡馁。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖机久,靈堂內(nèi)的尸體忽然破棺而出臭墨,到底是詐尸還是另有隱情,我是刑警寧澤膘盖,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布胧弛,位于F島的核電站,受9級(jí)特大地震影響侠畔,放射性物質(zhì)發(fā)生泄漏结缚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一软棺、第九天 我趴在偏房一處隱蔽的房頂上張望红竭。 院中可真熱鬧,春花似錦、人聲如沸茵宪。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)稀火。三九已至暖哨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凰狞,已是汗流浹背鹿蜀。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留服球,地道東北人茴恰。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像斩熊,于是被迫代替她去往敵國(guó)和親往枣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355