- Python與數據挖掘
- 張良均 楊海宏 何子健 楊征等
- 5110字
- 2019-01-04 06:56:27
第1章
數據挖掘概述
廣義的數據挖掘是指針對收集的大規模數據,應用整套科學工具和挖掘技術(如數據、計算、可視化、分析、統計、實驗、問題定義、建模與驗證等),從數據之中發現隱含的、對決策有參考意義的信息、價值和趨勢。因此,數據挖掘是一個橫跨多學科的計算機科學分支。強調它隸屬計算機科學范疇,是希望讀者認識到這個領域的核心需求,盡早擺脫對編程實現的恐懼,避免陷入“數據挖掘只需將模型或算法套用于數據集之上”的誤區。這也是本書的寫作目的之一。
1.1 數據挖掘簡介
隨著計算機技術的全面發展,企業生產、收集、存儲和處理數據的能力大大提高,數據量與日俱增。數據的積累實質上是企業的經驗和業務的沉淀。越來越多的企業引入“數據思維”——不只是依賴于數據的統計分析,更強調對數據進行挖掘,期待從這一“未來世界的石油”中發現潛在的價值。這一迫切的“開采”需求在世界范圍內醞釀了一次“大數據”變革。
數據挖掘的確是21世紀最具話題性的技術之一,包含數據預處理、算法應用、模型評價、結果檢驗等多個部分,并依靠其豐富的內涵向外延伸出數據分析、數據ETL、機器學習等多個領域。
1.2 工具簡介
數據挖掘軟件的歷史并不長,甚至連“數據挖掘”這個術語也是在19世紀90年代中期才正式被提出。如今,商用數據挖掘軟件和開源工具都已經非常成熟,不僅提供易用的可視化界面,還集成了數據處理、建模、評估等一整套功能。
部分開源的數據挖掘軟件,采用可視化編程的設計思路。之所以這么做,是因為它能足夠靈活和易用,更適合缺乏計算機科學知識的用戶,如WEKA和RapidMiner。
當用戶擁有較多特定的分析需求,或正在自行實現一個改進的機器學習算法時,腳本型語言如Python和R將更符合需要。同時,腳本型語言兼具運行效率和開發效率,支持敏捷型的迭代更新。
1.2.1 WEKA
用Java編寫的WEKA是一款知名的數據挖掘工作平臺,它因解決數據挖掘任務的實際需求而生,集成了大量能處理數據挖掘任務的機器學習算法,這些算法能被用戶直接應用于數據集之上。同時,WEKA允許開發者使用Java語言,調用其分析組件,基于WEKA的架構進行二次開發,融入更多的數據挖掘算法,并嵌入到軟件或者應用之中,自動完成數據挖掘任務,開發新的機器學習框架。
WEKA支持多種標準數據挖掘任務,包括數據預處理,分類、回歸分析、聚類、關聯規則等算法的應用,以及特征工程和可視化。其歡迎界面如圖1-1所示。

圖1-1 WEKA歡迎界面
1.2.2 RapidMiner
RapidMiner的目標是:“成為一個能將數據變成寶貴的戰略資產的現代平臺”,已被廣泛使用于商業應用、學術研究、教育、敏捷開發等領域。
RapidMiner是一個支持數據挖掘、文本挖掘、機器學習、商業分析等任務的集成環境,如圖1-2所示。其圖形化界面采用了類似Windows資源管理器中的樹狀結構來組織分析組件,提供500多種分析組件作為計算單元(Operator),服務于數據挖掘的各個環節,如數據預處理、變換、探索、建模、評估及結果可視化。這些計算單元有詳細的XML文件記錄。

圖1-2 RapidMiner Studio工作界面
RapidMiner是基于WEKA二次開發的應用,這意味著它可以調用WEKA中的各種分析組件。
1.2.3 Python
Python是一門編程語言。隨著NumPy、SciPy、Matplotlib和Pandas等眾多程序庫的開發,Python在科學計算和數據分析領域占據著越來越重要的地位。在大多數數據任務上,Python的運行效率已經可以媲美C/C++語言。2016年2月11日,科學家宣布:人類在去年9月首次直接探測到了引力波!引力波高峰只持續了四分之一秒,同時儀器接收了大量干擾噪聲, 需要處理的數據量以TB計,如圖1-3所示。其中,Python的GWPY模塊提供專業的數據分析支持。

圖1-3 利用公開引力波數據繪制波形圖
1.2.4 R
R語言是一種為統計計算和圖形顯示而設計的語言環境,是貝爾實驗室(Bell Laboratory)的Rick Becker、John Chambers和Allan Wilks開發的S語言的一種實現,包含一系列統計與圖形顯示工具,如圖1-4所示。它是由一個龐大且活躍的全球性研究型社區維護,主要包括核心的標準包和各個專業領域的第三方包,提供豐富的統計分析和數據挖掘功能。

圖1-4 R-Studio工作界面
R語言至少擁有以下優勢:①方便地從各種類型的數據源中獲取數據;②高可拓展性;③出色的統計計算功能;④頂尖水準的制圖功能;⑤不斷貢獻強大功能的開源社區。它與Python同屬數據挖掘主流編程語言,而從功能與代碼風格的角度來評價,R與MATLAB是最像的。
1.3 Python開發環境的搭建
所謂編程語言,意指“與計算機交流時使用的語言”。它是一種被標準化的交流技巧,用于連接程序員的思維和計算機的操作。學習編程語言的第一關,就是安裝和環境配置。我們必須與計算機約定如何理解代碼、指令和語法,才能夠順利地與計算機交流,賦予它復雜的功能。Python便是其中的一種“方言”。
本節將向大家詳細介紹,如何在不同的操作系統上快捷地使用Python進行編程實現。
1.3.1 Python安裝
對于新手,Python及其第三方模塊在安裝環節有許多已知的難題。比如源碼編譯的安裝方式、環境變量的配置、不同模塊之間的版本依賴問題。如果陷入其中的某一個泥潭之中,將浪費初學者大量的時間,消磨熱情。當然,如果讀者能獨立克服,就能熟悉相關的重要概念,大有裨益。
為了能讓讀者順利閱讀本書的后續內容,以及避免不必要的麻煩,我們將采用更加簡單的安裝方式。本書使用的是Python的科學計算發行版——Anaconda。除Python本身之外,Anaconda囊括了科學計算和數據分析所需的主流模塊,獨立的包管理工具Conda以及兩款不同風格的編輯器Jupyter和Spyder,具有開源精神且支持學術用途的免費額外性能提升。官方軟件下載地址為:https://www.continuum.io/downloads。
注意
本書使用的是當前主流的Python 2.7版本,有較多的網絡參考資料。截至本書完稿時,Python作者宣布Python 2.x系列將會在2020年停止更新,Python 2.7是最后一個版本。Python 3.x擁有一系列重大的更新,包括一些基礎的語法。在未來的日子里,越來越多的主流模塊將逐漸轉向Python 3.x版本。在社區真正成熟之前,我們建議入門級讀者先熟練使用Python 2.7。
1. Windows下安裝Python
Anaconda的存在使得在Windows系統中安裝Python得到極度簡化,直接前往官方網站找到對應的下載內容(圖1-5),并選擇Python 2.7對應的安裝包,注意區分32位和64位的版本。

圖1-5 Windows下Anaconda的兩個主要版本
下載后運行Anaconda的安裝程序,這里大部分的操作和一般軟件的安裝無異,需要注意的是:如圖1-6所示,Anaconda默認會自動改寫環境變量配置參數,使得用戶能在任何的路徑下使用Python命令行模式。

圖1-6 Anaconda安裝界面
如果讀者自行安裝原始的Python版本,極容易忽略這一步,從而走入思維的盲區,導致永遠不能自行安裝成功。這也是我們推薦使用科學計算發行版Anaconda的原因。
2. Linux下安裝Python
大多數Linux發行版,如CentOS、Debian、Ubuntu等,都已經自帶了Python 2.x的主程序。因此,額外安裝Anaconda需要做好管理的工作,避免兩個不同版本的Python沖突,導致不必要的錯誤。如果讀者確定內置版Python能夠兼容書中代碼,亦可不額外安裝Anaconda。
下面介紹如何安裝Anaconda,并避免與內置版的Python沖突,如圖1-7所示。本教程以Ubuntu 16.06為例。

圖1-7 Anaconda安裝界面
1)前往官方網站下載對應版本的Anaconda,默認情況下,Linux會自動將下載所得文件歸檔在“下載”文件夾中。
2)假設下載所得文件在“下載”這一文件夾中,如果不是,請替換路徑,并輸入下面的命令,以執行批處理指令,安裝Anaconda。
$ bash ~/下載/Anaconda2-4.0.0-Linux-x86_64.sh
安裝過程中,將會在屏幕上打印出用戶協議許可,你需要利用Enter繼續閱讀。閱讀至文件末尾,輸入yes并敲擊Enter鍵來表示你同意以上內容并使用默認路徑開始安裝。
3)如圖1-8所示,輸入yes來確認允許Anaconda為你自動配置環境變量PATH。

圖1-8 安裝過程
4)當看到圖1-9中的歡迎信息之后,代表已經成功安裝Anaconda。然后我們執行下面的命令,將Anaconda的位置加載至環境變量PATH的開頭,使得當我們使用Python時,總是優先使用Anaconda版。

圖1-9 手動改寫優先級
$ export PATH="$HOME/anaconda2/bin:$PATH"
之后,我們可以直接輸入python,以檢查是否能夠正確使用Anaconda版的Python。
3. Mac下安裝Python
類似Windows下的安裝,Mac OS X系統用戶可以直接前往官方網站下載一個圖形化安裝程序。同時,因為OS X系統是基于UNIX內核開發的,所以我們也能夠打開終端,通過命令行的方式來安裝。這里主要敘述利用終端安裝的方法。
1)下載OS X下對應版本的Anaconda,如圖1-10所示。

圖1-10 OS X下Anaconda的兩個主要版本
注意
利用終端安裝Anaconda實際上是在進行“源碼編譯”。后續步驟中需要的是二進制文件(Command-Line Installer),而非圖形化的安裝界面(Graphical Installer)。
2)按下Alt+Space,打開Search界面,輸入terminal,單擊搜索出來的“Terminal”(終端)圖標。
3)輸入下面的命令,執行批處理指令,安裝Anaconda,如圖1-11所示。

圖1-11 OS X中安裝Anaconda
$ bash~/Downloads/Anaconda2-4.0.0-MacOSX-x86_64.sh
安裝過程中,將會在屏幕上打印出用戶協議許可,你需要利用Enter繼續閱讀。閱讀至文件末尾,輸入yes并敲擊Enter鍵來表示你同意以上內容并使用默認路徑開始安裝。
4)輸入yes來確認允許Anaconda為你自動配置環境變量PATH。
5)與Linux下安裝類似,同樣需要將Anaconda的位置加載至環境變量PATH的開頭,使得當我們使用Python時,總是優先使用Anaconda版。
$ export PATH="$HOME/anaconda2/bin:$PATH"
之后,我們可以直接輸入python,以檢查是否能夠正確使用Anaconda版的Python。
1.3.2 Python初識
1.命令行版本的Python Shell-Python(Command)
以Windows系統為例,安裝Python后,你可以在開始菜單中,找到對應的Command Line版本的Python Shell,或者同時按下Win+R鍵,輸入cmd并按回車,打開命令窗口,如圖1-12所示。在命令窗口中輸入python即可使用進入Python的命令行模式。

圖1-12 Python命令行窗口(1)
其中,可以看到對應的Python版本信息和系統信息。我們可以在標識符“>>>”后面輸入代碼,程序就會馬上返回一個結果,如圖1-13所示。

圖1-13 Python命令行窗口(2)
Python Shell是交互式Shell,交互式是指當你輸入代碼到Python Shell中時就可以動態地看到相應的返回結果。
2.帶圖形界面的Python Shell-IDLE(Python GUI)
下面將要介紹的是帶圖形界面的Python GUI。在Windows下的所有程序上搜索IDLE,就可以直接打開Python Shell-IDLE。打開后界面如圖1-14所示。

圖1-14 Python GUI
我們同樣可以在這個界面上輸入代碼,結果和在Command Line上輸入的結果一樣。但在這個界面上我們可以通過菜單欄的File -> New File創建Python腳本,在Python腳本上寫多行代碼,保存為.py文件后并運行該腳本,而在Command Line上運行多行代碼只能一行接著一行輸入并按回車輸出,顯得十分繁瑣。運行Python腳本實際上也是按順序運行每行的代碼,運行腳本后將回到Python GUI界面,這時候Python已經存儲腳本運行后的數據,我們可以在界面上繼續輸入代碼,如圖1-15所示。本書的代碼都會放在Python腳本中,方便讀者閱讀和運行。

圖1-15 Python GUI腳本界面
3.第三方Python IDE
IDE是集成開發環境(Integrated Development Environment)的英文簡稱。而第三方IDE通常聚合了更強大的功能,包括代碼版本管理、項目代碼管理、代碼自動補全等。PyCharm就是這樣一個跨平臺的、多功能的集成開發環境,主要分為免費社區版(見圖1-16)和付費商業版。

圖1-16 PyCharm社區版
如圖1-17所示,在選擇創建項目以及確定項目存儲路徑之后,我們能看到一個清晰簡潔的界面。左側欄是項目管理窗口,負責組織Python實現的項目中所涉及的全部代碼和數據文件。右邊是正式的編輯區。在選擇創建新的Python File之后,將能配合內置的自動補全、代碼提示、調試運行功能進行代碼的編輯、改正和優化。同時,它還能自動結合Git進行代碼版本控制。有興趣的讀者可以自行查找資料。當我們需要做一個大型項目,代碼量較多時,用帶有項目管理功能的PyCharm會更加方便。

圖1-17 PyCharm新建Python File
1.3.3 與讀者的約定
1.排版格式說明
本書的示例代碼格式分為兩種,一種是Python IDLE的命令行代碼,帶有“>>>”。命令行代碼可能馬上會返回結果,這個結果會緊貼在命令行代碼的下一行,結果的輸出不帶有“>>>”。
例如:
>>>x = 1 >>>x 1
另一種格式是帶有上下分隔線的代碼清單,這種格式用于展示某個完整的知識點。為讀者閱讀方便,當代碼清單出現輸出語句時,我們都把輸出結果放在下一行,并用注釋“# result:”標示 。如代碼清單1-1所示:
代碼清單1-1 某個知識點
print 1 # result: 1 print 'Hello Python' # result: Hello Python
其中“1-1”表示第1章第1個代碼清單。為了敘述方便,一個完整的程序可能被拆分到多個代碼清單中,在同一小節中的后續代碼中,有可能會沿用先前已聲明的變量。
2.示例代碼使用說明
本書默認支持的Python版本為2.7.11,其中書中講解的模塊對應的版本號如表1-1所示。
表1-1 模塊版本說明

本書附件資源按照章節組織,在代碼附件的目錄下會有第1章、第2章、第3章等子章節目錄。在章節目錄下包含了2個文件夾:“示例程序”文件夾和“上機實驗”文件夾。“示例程序”文件夾包含3個子目錄:code、data、tmp。其中,code包含正文中每個章節的全部代碼清單;data包含代碼清單中所使用的數據文件;tmp文件夾中包含示例程序運行的結果文件。在部分章節中,上述3個文件夾可能為空。“上機實驗”文件夾主要針對每章最后的上機實驗,給出了上機實驗的參考答案。其子目錄結構與示例程序一致。
讀者下載附件資源后,直接使用Python運行對應的代碼腳本(.py)即可觀察結果。值得注意的是,使用Anaconda的讀者只需保持目錄結構即可完整運行程序,自行安裝Python的讀者,請確保你的模塊版本與表1-1一致。
1.4 小結
本章著重介紹了數據挖掘及推薦使用的數據挖掘工具,旨在讓讀者對數據挖掘形成初步感覺,逐漸培養成熟的大局觀。其次,深入介紹并對比了多種工具,如WEKA, Python等,從宏觀角度把握不同工具的特點和特性。本書是基于Python講解,所以最后又重點介紹了Python開發環境的搭建,展示了三類主流操作系統的完整安裝過程,并介紹了三種編寫腳本的風格,還向讀者說明了本書的正確使用方式,以幫助讀者更好地閱讀本書。