最近想入手一臺(tái)新手機(jī),考慮到國產(chǎn)手機(jī)今時(shí)不同往日,無論是銷量還是話語權(quán)在世界上都足夠的分量,歐洲華為,印度小米,美國一加,國產(chǎn)手機(jī)以極為迅猛的速度攻占世界各地的手機(jī)市場(chǎng)。作為歷來支持國產(chǎn)手機(jī)的忠實(shí)用戶,結(jié)合對(duì)國產(chǎn)手機(jī)的基本認(rèn)知,準(zhǔn)備從華為、小米、OPPO、VIVO四大國產(chǎn)手機(jī)中做出抉擇。
為了能夠用數(shù)據(jù)體現(xiàn)這四家手機(jī)產(chǎn)品市場(chǎng)的銷量、價(jià)格等真實(shí)情況,由于Python語言簡(jiǎn)明便捷,小編這邊準(zhǔn)備使用Python來對(duì)“某寶”平臺(tái)進(jìn)行手機(jī)相關(guān)的數(shù)據(jù)爬取。
數(shù)據(jù)可視化分析方面,雖然Python提供的numpy、pandas、matplotlib等第三方庫來對(duì)數(shù)據(jù)進(jìn)行計(jì)算處理,同時(shí)最終生成所需要的可視化報(bào)告,但是做出的圖表缺乏動(dòng)態(tài)交互,圖表樣式屬性設(shè)置等方面也比較繁瑣,并且不便進(jìn)行深入的OLAP多維分析,所以這邊直接使用FineBI工具來對(duì)從“某寶”平臺(tái)爬取過來的手機(jī)數(shù)據(jù)進(jìn)行數(shù)據(jù)分析統(tǒng)計(jì)。
這次的訴求很簡(jiǎn)單,就是想看看國產(chǎn)機(jī)子的銷量排名和售價(jià)情況。
數(shù)據(jù)層方面會(huì)先通過Python抓取到WEB端的網(wǎng)頁數(shù)據(jù),之后對(duì)爬取到數(shù)據(jù)進(jìn)行解析再而存儲(chǔ)到MYSQL數(shù)據(jù)入庫。最后應(yīng)用層的數(shù)據(jù)處理、數(shù)據(jù)計(jì)算統(tǒng)計(jì)、圖表可視化呈現(xiàn)等工作全都交由我們的FineBI工具完成。
1.引入相關(guān)Pyhon庫包,編寫MySQL數(shù)據(jù)入庫函數(shù)
首先新建python工程,引入本次爬取網(wǎng)頁數(shù)據(jù)和寫入MySQL數(shù)據(jù)庫所需要的pandas、re、request、pymysql這四個(gè)相關(guān)庫包:
import pandas
import re
import requests
import pymysql
def ExecuteSQL(title,price,sales): #寫入數(shù)據(jù)到mysql數(shù)據(jù)庫
conn = pymysql.connect(host='xxx.xxx.xxx.xx', port=xxxx, user='xxxx', passwd='xxxx', db='xxxx', charset='utf8') #對(duì)應(yīng)xx參數(shù)值修改成自己數(shù)據(jù)庫的即可
cursor = conn.cursor()
# cursor.execute('CREATE TABLE MOBILE_DATA(品牌 varchar(100),價(jià)格 double,銷量 int)')
# cursor.execute('DROP TABLE MOBILE_DATA')
cursor.execute("INSERT INTO MOBILE_DATA(品牌,價(jià)格,銷量) VALUES ('%s',%d,'%d')"%(title,price,sales)) #執(zhí)行SQL數(shù)據(jù)插入
print('數(shù)據(jù)插入成功!')
print(title,price,sales)
conn.commit() #提交執(zhí)行命名
cursor.close() #釋放游標(biāo)對(duì)象
conn.close() #釋放數(shù)據(jù)庫連接對(duì)象
2.獲取網(wǎng)頁數(shù)據(jù)
然后如下圖所示,定義好模擬瀏覽器訪問header的值,通過編寫Python代碼用requests獲取到”某寶“平臺(tái)網(wǎng)頁中的request信息:
for page in range(1,7): # 循環(huán)翻頁,共7頁
url = 'https://s.taobao.com/search?q=%E6%89%8B%E6%9C%BA&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&cps=yes&ppath=2176%3A136877751%3B2176%3A3244779%3B2176%3A91621%3B2176%3A39862256%3B2176%3A28247'
header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
'cookie':'thw=cn; t=be73ea5ec1ffbeb254d0a3535dd00415; cna=HqWrEpIZeG4CAbYSAEIb6bav; hng=CN%7Czh-CN%7CCNY%7C156; miid=596160490770762658; lgc=%5Cu5815%5Cu843D%5Cu4E4B%5Cu6CEAa; tracknick=%5Cu5815%5Cu843D%5Cu4E4B%5Cu6CEAa; tg=0; uc2=wuf=https%3A%2F%2Ftrade.tmall.com%2Fdetail%2ForderDetail.htm%3Fbiz_order_id%3D104827474284154168%26forward_action%3D; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; uc3=sg2=VWxidJMT8gLCYBc%2BxP5FJdYe9%2FXfUvq2%2Byf0cFWq90Q%3D&nk2=1RSXayUHM0Sl&id2=UUpkvTJ9k5HsSA%3D%3D&vt3=F8dBzLbVzPYkPml1NZk%3D&lg2=W5iHLLyFOGW7aA%3D%3D; uss=VvioJOfdaT365u5YugXSKrRnG47jUQQG9UQvstfUu5fjcHD0zxGQLEmn; _cc_=VFC%2FuZ9ajQ%3D%3D; mt=ci=67_1; tk_trace=oTRxOWSBNwn9dPy4KVJVbutfzK5InlkjwbWpxHegXyGxPdWTLVRjn23RuZzZtB1ZgD6Khe0jl%2BAoo68rryovRBE2Yp933GccTPwH%2FTbWVnqEfudSt0ozZPG%2BkA1iKeVv2L5C1tkul3c1pEAfoOzBoBsNsJySQJwqIKz2kX83uPP5e4iE9t1ZpHdHZkk218jfUuTKISIEGrGMtBctY%2B2vMCmzCRVhIqleLIl%2BRRQHs4ekW3wNcZhDfwkkQzp9RF7kjYiNbNLTbo2mRCr3Wf97aW%2FfC72uuEf9Tcc6cNT9QCiB0y7NxqzS4M5NvMkxl5KoKbA%2BorLqu5Y9jpCfT31RlA%3D%3D; cookie2=1c16eb46ef00c015dd101f731c258d77; _tb_token_=8de4c4560b63; v=0; alitrackid=www.taobao.com; lastalitrackid=www.taobao.com; swfstore=107855; JSESSIONID=ED726367865542B7BA84D801D1C72812; isg=AhcXOlKpAS4SKIXa0x_6AhsZpovNTcSrwSKOp2lEKOZNmDfacSx7DtWyjg59; uc1=cookie14=UoTdf1DFLRnICg%3D%3D',
'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'path':'/search?q=%E6%89%8B%E6%9C%BA&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306'} #定義模擬瀏覽器訪問header的值
html = requests.request('GET', url, headers=header) #網(wǎng)頁request信息獲取
3.HTML標(biāo)簽解析(Script格式)
此時(shí)我們可以查看華為、小米、OPPO、VIVO四大國產(chǎn)手機(jī)中的網(wǎng)頁信息,用瀏覽器自帶的F12工具檢查相關(guān)代碼即可發(fā)現(xiàn),“某寶”的商品數(shù)據(jù)信息原來是存儲(chǔ)在Script變量中。
接下來我們只需要使用re,按照指定的標(biāo)簽格式,對(duì)整個(gè)網(wǎng)頁的進(jìn)行數(shù)據(jù)信息查找獲取,然后將對(duì)象存儲(chǔ)在data中即可:
ren = re.compile('"title":"(.*?)","pic_url":"(.*?)","price":"(.*?)","trace":"(.*?)","month_sales":"(.*?)"')
data = re.findall(ren, html.text)
4.MySQL數(shù)據(jù)入庫
解析好數(shù)據(jù)之后,再將解析好的數(shù)據(jù)寫入到MySQL數(shù)據(jù)庫中:
data2 = pandas.DataFrame(data) #將data對(duì)象轉(zhuǎn)換為DataFrame類型方便處理
for rows in range(1,data2.shape[0]): #循環(huán)遍歷DataFrame中的所有行數(shù)據(jù)
ExecuteSQL(data2.values[rows][0],float(data2.values[rows][2]),int(data2.values[rows][4])) #MySQL數(shù)據(jù)入庫
count=count+1 #計(jì)數(shù)器累加
print('恭喜您,數(shù)據(jù)已經(jīng)全部爬取完畢,一共%d條數(shù)據(jù)!'%(count))
循環(huán)遍歷”某寶“平臺(tái)華為、小米、OPPO、VIVO四大國產(chǎn)手機(jī)中的相關(guān)信息數(shù)據(jù),頁面7頁,共計(jì)282條數(shù)據(jù)。
5.驗(yàn)證數(shù)據(jù)入庫
直接通過FineBI提供的數(shù)據(jù)配置端的功能,添加SQL數(shù)據(jù)集(或者直接添加表也行),查看我和驗(yàn)證剛剛爬取并且入庫的數(shù)據(jù)是否已經(jīng)真正成功入庫到MySQL中。
如下圖所示,Python果然不辱使命,我要的”某寶“平臺(tái)華為、小米、OPPO、VIVO四大國產(chǎn)手機(jī)中數(shù)據(jù)都已經(jīng)成功寫入到了我的MySQL數(shù)據(jù)庫中了。
6.可視化分析
分為幾個(gè)維度:
涉及到的指標(biāo)也比較簡(jiǎn)單,基本通過FineBI拖拽數(shù)據(jù)字段即可呈現(xiàn)可視化。
下面這個(gè)動(dòng)圖,以國產(chǎn)四大手機(jī)銷量統(tǒng)計(jì)詞云圖為例給大家簡(jiǎn)單展示可視化過程,其他同理。
(想按照手機(jī)大品牌統(tǒng)計(jì)的話可以直接對(duì)品牌字段用FineBI進(jìn)行自定義分組即可)
小編花了10分鐘就呈現(xiàn)基本的分析架構(gòu),而后又花了30分鐘,加了點(diǎn)可視化元素美化一下。刷刷的就將我想要看的華為、小米、OPPO、VIVO四大國產(chǎn)手機(jī)銷售信息以可視化的形式呈現(xiàn)出來了。(國產(chǎn)四大手機(jī)均價(jià)/總銷量排名、國產(chǎn)四大手機(jī)各品牌價(jià)格/銷量詞云圖、國產(chǎn)四大手機(jī)各品牌價(jià)格/銷量Top10、銷售額分布圖等)
1.淘寶網(wǎng)平臺(tái)中,華為、小米、OPPO、VIVO四大國產(chǎn)手機(jī)總銷量為751萬臺(tái),總銷售額為142.97億。其中華為品牌占據(jù)總體銷售額的44.40%,淘寶銷售額高達(dá)61.84億,小米、VIVO、OPPO其他三個(gè)品牌的總銷售額分別占據(jù)28.98%、17.90%、8.72%。
2.從國產(chǎn)四大手機(jī)的均價(jià)來看,VIVO和華為分別以2167元、2021元的價(jià)格分別排在前兩位,OPPO和小米的均價(jià)分別為1979元、1502元排在三、四位。小米手機(jī)價(jià)格相對(duì)低廉,不過市場(chǎng)占有率還可以,僅次于華為;而VIVO、OPPO這兩款國產(chǎn)手機(jī),歷來被廣大用戶稱為“廠妹機(jī)”,但是通過李易峰、彭于晏、鹿晗等明星小鮮肉和各大傳媒渠道的積極代言,吸引了無數(shù)的小迷妹粉的購買,也是搶占了華為手機(jī)市場(chǎng)的一片江山。
3.再來看看國產(chǎn)四大手機(jī)的各品牌價(jià)格統(tǒng)計(jì),華為MATE RS保時(shí)捷手機(jī)以9406元的價(jià)格高居首位,土豪專屬啊,這價(jià)格無法撼動(dòng)。但是值得一提的是目前在淘寶出售的華為Mate 10價(jià)格居然降到了3033元!記得前年入手Mate9的時(shí)候還花了4000多呢,果然手機(jī)隨著時(shí)間推移價(jià)格變化還是挺大的。手機(jī)銷量方面,品牌銷量最高的是小米手機(jī)8,淘寶總銷量為77萬臺(tái)(可以通過圖表聯(lián)動(dòng)查看其價(jià)格為2352元),人氣還是很火的。但是相比之下華為Mate 10的高配置下的3033元的價(jià)格,讓小編完全忍不住剁手啊,就是你啦!
網(wǎng)頁爬蟲數(shù)據(jù)抓取,Python首屈一指。但是對(duì)于數(shù)據(jù)統(tǒng)計(jì)和可視化展現(xiàn)方面來說,操作簡(jiǎn)單便捷、拖拽式的FineBI絕對(duì)是數(shù)據(jù)分析小白的入門上佳之選。
Python完成對(duì)網(wǎng)頁數(shù)據(jù)的抓取和解析存儲(chǔ)之后,配合FineBI強(qiáng)大的數(shù)據(jù)可視化呈現(xiàn)能力則圓滿地完成了我本次對(duì)某寶平臺(tái)四大國產(chǎn)手機(jī)數(shù)據(jù)的統(tǒng)計(jì)和分析需求,絕對(duì)良心推薦。
以上就是小編狂奔在數(shù)據(jù)可視化道路上的一些心得總結(jié)~歡迎大家共同學(xué)習(xí)和交流。
聯(lián)系客服