最近想入手一臺新手機,考慮到國產手機今時不一樣往日,不管是銷量仍是話語權在世界上都足夠的份量,歐洲華爲,印度小米,美國一加,國產手機以極爲迅猛的速度攻佔世界各地的手機市場。做爲從來支持國產手機的忠實用戶,結合對國產手機的基本認知,準備從華爲、小米、OPPO、VIVO四大國產手機中作出抉擇。html
爲了可以用數據體現這四家手機產品市場的銷量、價格等真實狀況,因爲Python語言簡明便捷,小編這邊準備使用Python來對「某寶」平臺進行手機相關的數據爬取。python
數據可視化分析方面,雖然Python提供的numpy、pandas、matplotlib等第三方庫來對數據進行計算處理,同時最終生成所須要的可視化報告,可是作出的圖表缺少動態交互,圖表樣式屬性設置等方面也比較繁瑣,而且不便進行深刻的OLAP多維分析,因此這邊直接使用FineBI工具來對從「某寶」平臺爬取過來的手機數據進行數據分析統計。mysql
此次的訴求很簡單,就是想看看國產機子的銷量排名和售價狀況。web
數據層方面會先經過Python抓取到WEB端的網頁數據,以後對爬取到數據進行解析再而存儲到MYSQL數據入庫。最後應用層的數據處理、數據計算統計、圖表可視化呈現等工做全都交由咱們的FineBI工具完成。sql
1.引入相關Pyhon庫包,編寫MySQL數據入庫函數數據庫
首先新建python工程,引入本次爬取網頁數據和寫入MySQL數據庫所須要的pandas、re、request、pymysql這四個相關庫包:網頁爬蟲
import pandasimport re瀏覽器
import requestscookie
import pymysql架構
def ExecuteSQL(title,price,sales): #寫入數據到mysql數據庫
conn = pymysql.connect(host='xxx.xxx.xxx.xx', port=xxxx, user='xxxx', passwd='xxxx', db='xxxx', charset='utf8') #對應xx參數值修改爲本身數據庫的便可
cursor = conn.cursor()
# cursor.execute('CREATE TABLE MOBILE_DATA(品牌 varchar(100),價格 double,銷量 int)')
# cursor.execute('DROP TABLE MOBILE_DATA')
cursor.execute("INSERT INTO MOBILE_DATA(品牌,價格,銷量) VALUES (\'%s\',%d,\'%d\')"%(title,price,sales)) #執行SQL數據插入
print('數據插入成功!')
print(title,price,sales)
conn.commit() #提交執行命名
cursor.close() #釋放遊標對象
conn.close() #釋放數據庫鏈接對象
2.獲取網頁數據
而後以下圖所示,定義好模擬瀏覽器訪問header的值,經過編寫Python代碼用requests獲取到」某寶「平臺網頁中的request信息:
for page in range(1,7): # 循環翻頁,共7頁
url = ' https://s.taobao.com/search?q..._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) #網頁request信息獲取
3.HTML標籤解析(Script格式)
此時咱們能夠查看華爲、小米、OPPO、VIVO四大國產手機中的網頁信息,用瀏覽器自帶的F12工具檢查相關代碼便可發現,「某寶」的商品數據信息原來是存儲在Script變量中。
接下來咱們只須要使用re,按照指定的標籤格式,對整個網頁的進行數據信息查找獲取,而後將對象存儲在data中便可:
ren = re.compile('"title":"(.*?)","pic_url":"(.*?)","price":"(.*?)","trace":"(.*?)","month_sales":"(.*?)"')data = re.findall(ren, html.text)
4.MySQL數據入庫
解析好數據以後,再將解析好的數據寫入到MySQL數據庫中:data2 = pandas.DataFrame(data) #將data對象轉換爲DataFrame類型方便處理
for rows in range(1,data2.shape[0]): #循環遍歷DataFrame中的全部行數據
ExecuteSQL(data2.values[rows][0],float(data2.values[rows][2]),int(data2.values[rows][4])) #MySQL數據入庫
count=count+1 #計數器累加
print('恭喜您,數據已經所有爬取完畢,一共%d條數據!'%(count))
循環遍歷」某寶「平臺華爲、小米、OPPO、VIVO四大國產手機中的相關信息數據,頁面7頁,共計282條數據。
5.驗證數據入庫
直接經過FineBI提供的數據配置端的功能,添加SQL數據集(或者直接添加表也行),查看我和驗證剛剛爬取而且入庫的數據是否已經真正成功入庫到MySQL中。
以下圖所示,Python果真不辱使命,我要的」某寶「平臺華爲、小米、OPPO、VIVO四大國產手機中數據都已經成功寫入到了個人MySQL數據庫中了。
6.可視化分析
分爲幾個維度:
涉及到的指標也比較簡單,基本經過FineBI拖拽數據字段便可呈現可視化。
下面這個動圖,以國產四大手機銷量統計詞雲圖爲例給你們簡單展現可視化過程,其餘同理。
(想按照手機大品牌統計的話能夠直接對品牌字段用FineBI進行自定義分組便可)
小編花了10分鐘就呈現基本的分析架構,然後又花了30分鐘,加了點可視化元素美化一下。刷刷的就將我想要看的華爲、小米、OPPO、VIVO四大國產手機銷售信息以可視化的形式呈現出來了。(國產四大手機均價/總銷量排名、國產四大手機各品牌價格/銷量詞雲圖、國產四大手機各品牌價格/銷量Top十、銷售額分佈圖等)
1.淘寶網平臺中,華爲、小米、OPPO、VIVO四大國產手機總銷量爲751萬臺,總銷售額爲142.97億。其中華爲品牌佔據整體銷售額的44.40%,淘寶銷售額高達61.84億,小米、VIVO、OPPO其餘三個品牌的總銷售額分別佔據28.98%、17.90%、8.72%。
2.從國產四大手機的均價來看,VIVO和華爲分別以2167元、2021元的價格分別排在前兩位,OPPO和小米的均價分別爲1979元、1502元排在3、四位。小米手機價格相對低廉,不過市場佔有率還能夠,僅次於華爲;而VIVO、OPPO這兩款國產手機,從來被廣大用戶稱爲「廠妹機」,可是經過李易峯、彭于晏、鹿晗等明星小鮮肉和各大傳媒渠道的積極代言,吸引了無數的小迷妹粉的購買,也是搶佔了華爲手機市場的一片江山。
3.再來看看國產四大手機的各品牌價格統計,華爲MATE RS保時捷手機以9406元的價格高居首位,土豪專屬啊,這價格沒法撼動。可是值得一提的是目前在淘寶出售的華爲Mate 10價格竟然降到了3033元!記得前年入手Mate9的時候還花了4000多呢,果真手機隨着時間推移價格變化仍是挺大的。手機銷量方面,品牌銷量最高的是小米手機8,淘寶總銷量爲77萬臺(能夠經過圖表聯動查看其價格爲2352元),人氣仍是很火的。可是相比之下華爲Mate 10的高配置下的3033元的價格,讓小編徹底忍不住剁手啊,就是你啦!
網頁爬蟲數據抓取,Python數一數二。可是對於數據統計和可視化展示方面來講,操做簡單便捷、拖拽式的FineBI絕對是數據分析小白的入門上佳之選。
Python完成對網頁數據的抓取和解析存儲以後,配合FineBI強大的數據可視化呈現能力則圓滿地完成了我本次對某寶平臺四大國產手機數據的統計和分析需求,絕對良心推薦。
以上就是小編狂奔在數據可視化道路上的一些心得總結~歡迎你們共同窗習和交流。