◆葉惠仙 游金水
(1.福建農(nóng)業(yè)職業(yè)技術(shù)學(xué)院 福建 350007 2.福建省職業(yè)技術(shù)教育中心 福建 350001)
在大數(shù)據(jù)時代,如何充分挖掘出蘊藏于數(shù)據(jù)資源中的價值正在成為各國IT 業(yè)界、學(xué)術(shù)界和政府共同關(guān)注的焦點。使用大數(shù)據(jù)技術(shù)應(yīng)用于各行各業(yè)來分析行業(yè)情況與事件趨勢已經(jīng)成為共識并且得到了廣泛應(yīng)用。隨著數(shù)據(jù)信息資源的不斷層階梯式增多,提高大數(shù)據(jù)分析技術(shù)就變得非常重要,而Python 正是這個重要的大數(shù)據(jù)應(yīng)用輔助工具,其功能強大、操作簡單、邏輯語法易懂易讀、代碼高效。所以將Python 應(yīng)用到大數(shù)據(jù)挖掘、清理、分析、可視化中非常有必要。不僅如此,Python 語言數(shù)據(jù)分析庫功能齊全,并且還提供了十分豐富的API 和工具,以便程序員能夠輕松地使用C 語言、C++、Python來編寫自己所需的擴充模塊。本文通過闡述Python 在大數(shù)據(jù)應(yīng)用技術(shù)過程中的階段應(yīng)用,來體現(xiàn)Python 相較于其他語言在大數(shù)據(jù)應(yīng)用技術(shù)中的優(yōu)勢。
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,信息技術(shù)與人類生活中的政治、經(jīng)濟、軍事、科研、醫(yī)療、生活等方方面面不斷交織融合,并且隨著時間流逝,這個數(shù)據(jù)量將呈階梯式的冗積。這也正是大數(shù)據(jù)技術(shù)滲透到社會各個方面的最好體現(xiàn)。大數(shù)據(jù)技術(shù)的發(fā)展已在以下幾個方面得以體現(xiàn):
(1)物聯(lián)網(wǎng):把所有物品通過信息傳感設(shè)備與互聯(lián)網(wǎng)連接起來,進行信息交換,以實現(xiàn)智能化識別和管理。
(2)智慧城市:運用信息和通信技術(shù)手段感測、分析、整合城市運行核心系統(tǒng)的各項關(guān)鍵信息;并對包括民生、環(huán)保、公共安全、城市服務(wù)、工商業(yè)活動在內(nèi)的各種需求做出智能響應(yīng)。
(3)增強現(xiàn)實(AR)與虛擬現(xiàn)實(VR):它利用計算機生成一種模擬環(huán)境,讓用戶創(chuàng)建和體驗一種多源信息融合的、交互式的三維動態(tài)視景和實體行為的虛擬世界的計算機仿真系統(tǒng)。
(4)區(qū)塊鏈技術(shù):是分布式數(shù)據(jù)存儲、點對點傳輸、共識機制、加密算法等計算機技術(shù)的新型應(yīng)用模式。
(5)語音識別技術(shù):語音識別技術(shù)將進入工業(yè)、家電、通信、汽車電子、醫(yī)療、家庭服務(wù)、消費電子產(chǎn)品等各個領(lǐng)域。
(6)人工智能(AI):人工智能需要被匯入很多信息才能進化,進而產(chǎn)生一些意想不到的結(jié)果。是研究、開發(fā)用于模擬、延伸和擴展人的智能的理論、方法、技術(shù)及應(yīng)用系統(tǒng)的一門新的技術(shù)科學(xué)。
(7)數(shù)字匯流:就是“內(nèi)容”與“電子商務(wù)”的匯流[1]。
大數(shù)據(jù)成為時代發(fā)展一個必然的產(chǎn)物,而這些數(shù)據(jù)猶如是蘊藏能量的煤礦資源,從性質(zhì)上可分為焦煤、無煙煤、肥煤、貧煤等,這些煤礦的挖掘成本又不相同。而大量數(shù)據(jù)的分析過程如性質(zhì)不同的煤礦,挖掘成本也不盡相同,如何將這些“大”數(shù)據(jù)挖掘出“大”價值才是贏得競爭的關(guān)鍵。而大數(shù)據(jù)時代,一切可量化,一切可分析。
Python 語言邏輯人性化、代碼編寫人性化、編程速度高效人性化。是人類思維與計算機思維的時代性的結(jié)合,完全適應(yīng)和符合現(xiàn)代計算機技術(shù)發(fā)展水平,簡化了多種文本的操作,對中文有良好的支持,還兼容多種數(shù)據(jù)類型并靈活表達集合長度。而C 語言有指針、地址等復(fù)雜的結(jié)構(gòu)元素;Java 語言對于變量須手動定義才可使用。Python語言提供了十分豐富的API 和工具,以便程序員能夠輕松地使用C語言,C++,Cython 來編寫擴充模塊。Python 編譯器本身也可以被集成到其他需要腳本語言的程序內(nèi)。其中大量函數(shù)庫編寫功能廣、質(zhì)量高、如數(shù)組計算庫NumPy、圖像繪制庫matplotlib、計算機視覺庫OpenCV、三維可視化庫VTK、醫(yī)學(xué)圖像處理庫ITK 等。
Python 語言是一個腳本語言,可直接通過運行源代碼來運行腳本程序,這使得腳本程序運行與源代碼不可分離。代碼十分簡潔易懂,主要支持面向?qū)ο笈c面向過程這種程序設(shè)計方法,不要求程序一定要通過函數(shù)封裝,代碼行數(shù)簡潔,是C 語言同樣功能的代碼行數(shù)的1/5到1/10。以每種語言的入門輸出“Hello World”為例:
Python 語言的源代碼程序就只有一行:
Print("Hello World!")
而通過C 語言編寫的程序需要先引入main()函數(shù),同樣功能的程序運行源代碼如下:
此外,Python 語言還可以編譯繪制圖形界面的程序,代碼同樣十分簡潔。例如下面所展示的可執(zhí)行程序源代碼可以通過畫筆在一筆一畫之間繪制出一棵樹的形狀:
(代碼運行注意縮進)運行結(jié)果如下圖1所示:
圖1 樹形程序示例輸出圖
從上面兩個簡單程序的實例可以看出,Python 語言與C 語言,Java 語言等相比起來能夠更好支持代碼圖形化輸出、使用更少的程序源代碼、更接近于自然語言邏輯的語法習(xí)慣。
大數(shù)據(jù)之所稱之大就是基于被分析的數(shù)據(jù)龐大,如何有效地提取并利用這些信息成為一個巨大的挑戰(zhàn)。搜索引擎(Search Engine)如Yahoo 和Google 等可輔助檢索數(shù)據(jù)信息,但存在著一定的不足,搜索引擎所返回的結(jié)果信息量涉及方方面面,沒有歸類,針對性不強;導(dǎo)致搜索引擎服務(wù)器資源與無限的網(wǎng)絡(luò)數(shù)據(jù)資源之間的沖突;針對通用性搜索引擎存在的問題,定向抓取面向特定主題需求的網(wǎng)頁資源的聚焦爬蟲應(yīng)運而生,他在實施網(wǎng)頁抓取時盡量保證只抓取與需求相關(guān)的網(wǎng)頁信息并進行處理篩選。根據(jù)需要的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接,保留有用的鏈接并將其放入等待抓取的URL 隊列[2]。所有被爬蟲抓取的網(wǎng)頁將會被系統(tǒng)存貯,進行一定的分析、過濾,并建立索引,以便之后的查詢和檢索。
Scrapy 是利用Python 語言編寫的網(wǎng)絡(luò)爬蟲框架。一個目的為了爬取網(wǎng)站內(nèi)容,提取結(jié)構(gòu)性數(shù)據(jù)而編寫的開源爬蟲應(yīng)用框架??梢赃\用在包括數(shù)據(jù)挖掘,信息處理或者存儲歷史數(shù)據(jù)等一系列的程序中。Scrapy 最初的設(shè)計目的是頁面抓取,也可以是用來獲取各種API 返回的數(shù)據(jù)[3]。在scrapy 項目中,只需寫入定制的爬蟲規(guī)則、運行即可快速獲得所需要的數(shù)據(jù)信息。
爬取網(wǎng)頁內(nèi)容代碼如下:
創(chuàng)建Scrapy 爬蟲框架需要在Python 的控制臺中輸入創(chuàng)建命令,也可以通過UI 圖形界面點擊創(chuàng)建。例如,創(chuàng)建一個爬取電影數(shù)據(jù)信息的Scrapy 爬蟲項目的命令如下:
scrapy startproject film
數(shù)據(jù)清理,用于檢測和糾正、刪除表或數(shù)據(jù)庫中的不準確或損壞的記錄。數(shù)據(jù)清除是指識別不正確,不完整,不相關(guān)或其他有問題(“臟”)的數(shù)據(jù)部分,然后替換,修改或刪除該臟數(shù)據(jù)。
(1)刪除不需要的觀測值。
在數(shù)據(jù)收集過程中,最常見的是重復(fù)觀察或多余的觀察。當從不同位置組合數(shù)據(jù)集或從客戶端接收數(shù)據(jù)時,隨著數(shù)據(jù)的重復(fù),這種觀察會大大影響效率,并且可能會增加正確或不正確的因素,從而產(chǎn)生不忠實的結(jié)果。例如,在手寫數(shù)字識別領(lǐng)域,掃描錯誤(例如污跡或非數(shù)字字符)是無關(guān)緊要的觀察結(jié)果。這樣的觀察結(jié)果是沒有用的數(shù)據(jù),可以直接刪除。
(2)修復(fù)數(shù)據(jù)集中的結(jié)構(gòu)錯誤。
結(jié)構(gòu)錯誤是指在測量,數(shù)據(jù)傳輸過程中的印刷錯誤、具有不同名稱的相同屬性、貼錯標簽的類,大小寫不一致等。例如模型應(yīng)將錯字和大小寫不一致(例如“BBBb”和“BBBB”)視為同一個類別,而不是兩個不同的類別。
(3)處理丟失的數(shù)據(jù)。
收集到的數(shù)據(jù)信息中有一個重要的是“缺少數(shù)據(jù)”。不能簡單地忽略數(shù)據(jù)集中的缺失值,須以某種方式處理丟失的數(shù)據(jù)。如刪除具有缺失值的觀察值或者根據(jù)過去或其他觀察結(jié)果估算缺失值。
Python 語言數(shù)據(jù)分析庫目前非常廣泛,從科學(xué)計算領(lǐng)域的Numpy 和Scipy 到Web 上的Django 和基于Web 的用于創(chuàng)建可視化的工具箱Plotly 到Seaborn,及專注于統(tǒng)計模型的的Seaborn。其中Numpy 和Pandas 使用頻率較高。
Numpy 是一個基于Python 的開源工具庫,支持多種數(shù)值運算。最重要的功能是該工具可以支持具有強大計算能力的大量矩陣數(shù)據(jù)操作。numpy 提供了多種數(shù)學(xué)計算工具,可用于實現(xiàn)強大的數(shù)學(xué)函數(shù),例如線性代數(shù)[4]。pandas 也是在Python 的基礎(chǔ)上開發(fā)的,該數(shù)據(jù)分析工具包是在Numpy 的基礎(chǔ)上。它提供的一維數(shù)組(series)和二維表數(shù)據(jù)結(jié)構(gòu)(DataFrame)是其核心數(shù)據(jù)模型。該數(shù)據(jù)包集成了常用的數(shù)據(jù)分析功能。例如,Pandas 庫可用于在二維數(shù)據(jù)表結(jié)構(gòu)(DataFrame)中匯總簡單的數(shù)據(jù)統(tǒng)計信息,包括具有最高值,平均值和正態(tài)分布的數(shù)據(jù)。數(shù)據(jù)預(yù)處理和分析結(jié)合了Pandas 和Numpy 工具包來有效地處理數(shù)據(jù)集。在統(tǒng)計計算結(jié)果之后,可通過清洗數(shù)據(jù),缺失的處理和消除噪音等操作進一步提取有價值的數(shù)據(jù)集。而且Pandas 還具有大量的內(nèi)置庫和一些標準數(shù)據(jù)模型,特別是對于非常高效和快速的大規(guī)模數(shù)據(jù)處理。例如,要處理數(shù)千萬行的CVS 數(shù)據(jù),使用字典處理大約需要2 分鐘,而pandas 需要不到10 秒,并且使用的代碼行也更少。在掌握并學(xué)習(xí)了如何使用這些數(shù)據(jù)分析庫之后,Python 將成為當前市場上大數(shù)據(jù)分析的首選。除了這些庫之外,Python 還具有各種軟件包資源,例如人工智能和神經(jīng)網(wǎng)絡(luò)。
數(shù)據(jù)可視化的主要目的是使圖形方式清晰有效地傳達信息。 關(guān)鍵方面和功能的直觀交流使您能夠?qū)ο鄬ο∈韬蛷?fù)雜的數(shù)據(jù)集進行詳細的洞察。 開發(fā)人員需要能夠掌握設(shè)計和功能之間的平衡,以便創(chuàng)建引人注目的數(shù)據(jù)可視化并實現(xiàn)信息傳達與溝通的效果。
(1)Python 可視化模塊
Python 中的可視化工具包括常規(guī)軟件工具和某些軟件組件。 通用軟件工具是集成開發(fā)環(huán)境(IDE),特定軟件繪圖組件是Python 繪圖庫,例如Bokeh,iPython,Matplotlib,Scipy,Numpy,Scikit-learn和Seaborn。Plotly 是一種在線分析和數(shù)據(jù)可視化工具。提供用于繪圖,分析和統(tǒng)計。該工具基于Python,具有一個用戶界面,該用戶界面使用JavaScript 和由D3.js,HTML 和CSS 制成的可視化庫。包含兼容多語言的科學(xué)制圖庫,例如Arduino,Julia,MATLAB,Python和R.最常見的可視化類型包括以下類別:比較和排名,相關(guān)性,分布,位置定位或地理數(shù)據(jù),隨時間變化的趨勢等。
(2)Python 數(shù)據(jù)可視化處理
Python 有很多繪圖包,Matplotlib 是個專門針對于數(shù)據(jù)繪圖功能設(shè)計的第三方庫,其pyplot 子庫主要用于進行各類型數(shù)據(jù)展示圖形的繪制。Matplotlib 庫將繪圖所需的各種方法和功能都封裝在函數(shù)中,為用戶提供了操作和使用上更加友好的接口。通過Matplotlib,開發(fā)者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,雷達圖條形圖,錯誤圖,散點圖等[5]。即使是繪制圖形,Python 的代碼仍舊簡短、簡潔、簡單,另初學(xué)者都能輕易看懂讀懂。以雷達圖為例,隨即抽樣了某大學(xué)一年級五位學(xué)生在五項科目考試成績的數(shù)據(jù),經(jīng)過數(shù)據(jù)清理,使用Python 來繪制多級雷達圖,即在一組同心圓上填充繪制不規(guī)則五邊形,其每個頂點到圓心的距離代表分院學(xué)生的每個科目的成績。程序運行源代碼如下:
運行結(jié)果如圖2所示。
圖2 大學(xué)生成績雷達圖
大學(xué)生科目成績?yōu)? 個屬性,設(shè)置屬性標簽radar_labels,并預(yù)設(shè)各人成績匯總數(shù)據(jù)。np.concatenate()函數(shù)用于將數(shù)據(jù)和角度的數(shù)組首尾閉合,便于調(diào)用plot()。圖形保存格式為Python 可支持的PNG類型,最后通過show()函數(shù)顯示圖形,默認圖形文件保存路徑與代碼保存路徑相同。
一個簡單的雷達圖便成功實現(xiàn),使我們更加直觀地觀察各個學(xué)生的成績情況。Python 數(shù)據(jù)可視化可以作用于廣闊的社會中各種各類的問題。在大數(shù)據(jù)時代,大規(guī)模、高緯度、非結(jié)構(gòu)化的數(shù)據(jù)層出不窮[6]。Python 具有超大型圖像、純色、高亮度、高分辨率等優(yōu)點。數(shù)據(jù)信息的實時更新,實現(xiàn)了數(shù)據(jù)的實時圖形可視化、場景可視化和實時交互,使使用者能夠更簡單明了的理解數(shù)據(jù)信息。
在大數(shù)據(jù)的背景下,使用Python 完成數(shù)據(jù)挖掘,清理和分析功能可以獲取大量具有一定真實性和準確性的信息,利用大數(shù)據(jù)本身的應(yīng)用價值,進行相關(guān)工作的探索和進一步信息參考,但是,Python語言和大數(shù)據(jù)的結(jié)合仍然有些不足,例如:
(1)數(shù)據(jù)資源的收集和保護水平有待提高。一些數(shù)據(jù)采集和存儲未標準化,完整性和質(zhì)量相對較差,記錄數(shù)據(jù)的標準化需要改進。。
(2)在某些地區(qū),大數(shù)據(jù)和Python 的集成度不高,在互聯(lián)網(wǎng)和金融等行業(yè)也很好地適應(yīng)了這一點。但是,一些傳統(tǒng)行業(yè),例如教育和文化,沒有明顯的優(yōu)勢。
當完全了解Python 函數(shù)庫的各種應(yīng)用方法后,Python 便成為大數(shù)據(jù)技術(shù)應(yīng)用程序的最合適方法。越來越多的人意識到Python 語言本身的應(yīng)用價值,將Python 應(yīng)用于大數(shù)據(jù)處理的人數(shù)將持續(xù)增長。
隨著大數(shù)據(jù)技術(shù)在生活各個領(lǐng)域的不斷發(fā)展,數(shù)據(jù)信息資源的范圍也在不斷擴大。只有通過挖掘,分析和過濾大量數(shù)據(jù)信息資源,才能發(fā)現(xiàn)大量數(shù)據(jù)信息的內(nèi)在作用。大數(shù)據(jù)時代下用Python 語言爬取,分析,處理數(shù)據(jù)的意義更加突顯,Python語言在大數(shù)據(jù)處理實踐中深深扎根,讓大數(shù)據(jù)的應(yīng)用價值更加精彩。