李傳科,肖自乾
(海南軟件職業(yè)技術(shù)學(xué)院 海南 瓊海 571400)
隨著互聯(lián)網(wǎng)的快速發(fā)展和廣泛運(yùn)用,網(wǎng)絡(luò)數(shù)據(jù)呈現(xiàn)爆炸性增長(zhǎng),并且隨著時(shí)間的推移,網(wǎng)絡(luò)數(shù)據(jù)的沉淀和冗余,產(chǎn)生大量無效數(shù)據(jù),導(dǎo)致人們對(duì)于有效信息的獲取變成一種挑戰(zhàn),因此大數(shù)據(jù)技術(shù)成為各行各業(yè)的轉(zhuǎn)型方向[1]。而Python作為數(shù)據(jù)分析領(lǐng)域的最佳選擇語言,其跨平臺(tái)、靈活簡(jiǎn)單的特性,加上Python在數(shù)據(jù)分析方面擁有極為豐富的外部庫,為大數(shù)據(jù)分析運(yùn)用提供了重要保障。本文利用Python技術(shù)實(shí)現(xiàn)數(shù)據(jù)搜集、分析和整理,并以可視化方式將抽象數(shù)據(jù)通過圖表呈現(xiàn),使得人們更加便捷和直觀地獲取到需求數(shù)據(jù)。
本文研究以網(wǎng)頁為基礎(chǔ)數(shù)據(jù),采用Python技術(shù),根據(jù)業(yè)務(wù)實(shí)現(xiàn)流程可分為3部分:數(shù)據(jù)采集、數(shù)據(jù)分析、數(shù)據(jù)可視化,具體的應(yīng)用實(shí)現(xiàn)流程見圖1。
圖1 應(yīng)用實(shí)現(xiàn)流程圖
在網(wǎng)頁數(shù)據(jù)采集技術(shù)中,網(wǎng)絡(luò)爬蟲(又稱網(wǎng)絡(luò)蜘蛛)是十分關(guān)鍵的組成部分,其通過提取互聯(lián)網(wǎng)特定頁面內(nèi)容實(shí)現(xiàn)網(wǎng)頁數(shù)據(jù)信息的收集。網(wǎng)絡(luò)爬蟲主要借助Python技術(shù)中的scrapy爬蟲框架,基本流程為:抓取數(shù)據(jù)—解析數(shù)據(jù)—存儲(chǔ)數(shù)據(jù)[2],創(chuàng)建爬蟲框架包括items.py、piplines.py、Middlewares.py、settings.py等py文件,項(xiàng)目程序結(jié)構(gòu)見圖2。
圖2 scrapy爬蟲程序結(jié)構(gòu)圖
(1)items.py文件用于實(shí)現(xiàn)封裝需要爬取的各個(gè)網(wǎng)頁字段,定義繼承scrapy.Item類,并將所有需要爬取的網(wǎng)頁中不同節(jié)點(diǎn)字段定義為nodeName = scrapy.Field()類型即可。
(2)piplines.py文件中建立ExamplePipline類并實(shí)現(xiàn)process_item(self,item,spider) 方法用于處理爬取到的每個(gè)Item,把Item存儲(chǔ)到字典中。
(3)Middlewares.py作為中間層文件,可以分為spider middleware和downloader middleware兩類,用于處理爬取網(wǎng)頁的網(wǎng)絡(luò)請(qǐng)求和響應(yīng),可以設(shè)置一些代理IP等。
(4)settings.py是配置文件,其中很多模塊默認(rèn)是注釋掉的,當(dāng)需要使用的時(shí)候,根據(jù)注釋提示,編寫自己的內(nèi)容,比如設(shè)置請(qǐng)求和響應(yīng)的中間層,指定操作數(shù)據(jù)的Pipeline類等。
基于以上項(xiàng)目結(jié)構(gòu),可以創(chuàng)建spider_name.py文件用于建立對(duì)應(yīng)的scrapy.Spider類,并生成parse(self,response)方法,在parse方法中利用Response對(duì)象進(jìn)行response.xpath()或者response.css()方法進(jìn)行頁面數(shù)據(jù)的解析提取。
最后,要存儲(chǔ)json數(shù)據(jù),需要?jiǎng)?chuàng)建.json文件,把網(wǎng)頁爬取到的數(shù)據(jù)通過json.dumps()方法處理存儲(chǔ)為json數(shù)據(jù)文件。
數(shù)據(jù)處理分析主要目的是使用適當(dāng)?shù)慕y(tǒng)計(jì)、分析方法對(duì)網(wǎng)頁抓取的大量數(shù)據(jù)進(jìn)行過濾、匯總。Python中進(jìn)行數(shù)據(jù)分析庫很多,根據(jù)不同的數(shù)據(jù)集使用不同的處理方法。本應(yīng)用主要針對(duì)網(wǎng)頁信息使用Pandas進(jìn)行json數(shù)據(jù)處理和jieba文本分詞匯總分析。
網(wǎng)頁爬取的數(shù)據(jù)存儲(chǔ)為json格式文件,json文件每一行內(nèi)容都是以字典格式存儲(chǔ)的字符串,其中字典的鍵(key)為爬取到的網(wǎng)頁節(jié)點(diǎn)名稱,值(value)是對(duì)應(yīng)的節(jié)點(diǎn)內(nèi)容。為方便處理json數(shù)據(jù)集,可借助Python中pandas庫的read_json()方法讀取json數(shù)據(jù)集內(nèi)容,再根據(jù)字典中的鍵(key)來獲取對(duì)應(yīng)的值(value),寫入到data.txt文檔中。導(dǎo)入json數(shù)據(jù)集代碼如下。
jieba是目前最好的 Python中文分詞組件,通過使用jieba分詞對(duì)數(shù)據(jù)提煉出的文本進(jìn)行分詞,統(tǒng)計(jì)次數(shù)出現(xiàn)最多的詞語,支持3種分詞模式:精確模式、全模式、搜索引擎模式。導(dǎo)入的數(shù)據(jù)集使用jieba.lcut()方法針對(duì)txt文檔中的詞語進(jìn)行分詞,分別統(tǒng)計(jì)匯總關(guān)鍵詞出現(xiàn)頻率數(shù)[3]。使用jieba進(jìn)行高頻詞統(tǒng)計(jì)代碼如下。
數(shù)據(jù)可視化是一種利用分析理論和可視化界面來幫助用戶解釋復(fù)雜數(shù)據(jù)的技術(shù),數(shù)據(jù)可視化是數(shù)據(jù)挖掘途徑的重要手段。這里主要應(yīng)用Python中常用的兩個(gè)數(shù)據(jù)可視化組件:Matplotlib和Pyecharts[4-5]。
Matplotlib是Python中最基礎(chǔ)的Python可視化庫,作為Python較出色和較常用的繪圖軟件,matplotlib有一套仿照MATLAB的函數(shù)形式的繪圖接口,在matplotlib的pyplot子模塊中,常用的導(dǎo)入形式為import matplotlib.pyplot as plt。繪圖之前,需要使用figure對(duì)象創(chuàng)建窗口對(duì)象,畫布通過figsize的參數(shù)來指定畫布大小。Matplotlib中常用的函數(shù)繪制圖形包括:plot()繪制折線圖、bar()繪制柱狀圖、barh()繪制直方圖、pie()繪制餅圖、scatter()繪制散點(diǎn)圖、boxplot()繪制箱線圖等。
示例使用Matplotlib繪制餅圖展示海南東部市縣人口占比見圖3,代碼如下。
圖3 示例代碼對(duì)應(yīng)的餅狀效果圖
Pyecharts是一款將python與echarts結(jié)合的強(qiáng)大第三方數(shù)據(jù)可視化工具集,echarts是百度的一個(gè)開源的數(shù)據(jù)可視化工具,能夠展示出更加美觀的圖表,而且是純Javascript圖表庫,能夠在PC端和移動(dòng)設(shè)備上流暢運(yùn)行,兼容當(dāng)前絕大部分瀏覽器,是目前商業(yè)級(jí)數(shù)據(jù)圖表展示的重要工具。
目前,v1版本以上的pyecharts通過pyecharts.charts模塊導(dǎo)入,常用的繪圖庫有:Bar柱狀圖、Pie餅圖、Boxplo箱型圖、Line折線圖、Radar雷達(dá)圖、EffectScatter動(dòng)態(tài)散點(diǎn)圖、Map動(dòng)態(tài)地圖等。圖4為示例Pyecharts實(shí)現(xiàn)海南各市縣人才招聘數(shù)據(jù)的動(dòng)態(tài)散點(diǎn)圖,代碼如下。
圖4 示例代碼對(duì)應(yīng)的動(dòng)態(tài)散點(diǎn)圖
未來屬于大數(shù)據(jù)時(shí)代,Python技術(shù)在大數(shù)據(jù)分析運(yùn)用中的優(yōu)勢(shì)越來越明顯,大大提高了數(shù)據(jù)采集和數(shù)據(jù)分析的效率,并且數(shù)據(jù)可視化的應(yīng)用,也成為大數(shù)據(jù)分析過程中非常重要的展示手段。綜上所述,本文合理運(yùn)用Python和相關(guān)第三方庫,全面闡述和示例了基于網(wǎng)頁數(shù)據(jù)的抓取、分析及可視化的技術(shù)應(yīng)用,對(duì)于大數(shù)據(jù)分析運(yùn)用提供了較好的學(xué)習(xí)和借鑒價(jià)值。