版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python數(shù)據(jù)分析預(yù)處理基礎(chǔ)目錄TOC\o"1-3"\h\u1367第1章概述 3290481.1Python數(shù)據(jù)預(yù)處理 3325061.2開發(fā)工具與環(huán)境 6101641.3實(shí)戰(zhàn)案例:第一個(gè)中文分詞程序 1594591.4小結(jié) 1817759第2章Python科學(xué)計(jì)算工具 19246562.1NumPy 1932822.2SciPy 26311012.3Pandas 38241522.4小結(jié) 6027366第3章數(shù)據(jù)采集與存儲(chǔ) 61第1章概述日常生活中每天都在產(chǎn)生數(shù)據(jù),這些原始數(shù)據(jù)存在數(shù)據(jù)不完整、數(shù)據(jù)不一致、數(shù)據(jù)異常等情況,嚴(yán)重影響數(shù)據(jù)的質(zhì)量,甚至可能導(dǎo)致利用上的偏差,因此數(shù)據(jù)預(yù)處理技術(shù)應(yīng)運(yùn)而生。本章首先概述數(shù)據(jù)預(yù)處理,讓讀者對(duì)其有一個(gè)整體的認(rèn)識(shí);然后介紹Python數(shù)據(jù)預(yù)處理的開發(fā)工具與運(yùn)行環(huán)境;最后結(jié)合中文分詞的實(shí)戰(zhàn)案例,讓讀者了解數(shù)據(jù)預(yù)處理的工作流程。Python數(shù)據(jù)預(yù)處理什么是數(shù)據(jù)預(yù)處理大數(shù)據(jù)與人工智能時(shí)代離不開海量的原始數(shù)據(jù)做支撐,這些原始數(shù)據(jù)存在數(shù)據(jù)不完據(jù)變換和數(shù)據(jù)降維,目的是挖掘數(shù)據(jù)背后的應(yīng)用價(jià)值和社會(huì)價(jià)值。數(shù)據(jù)預(yù)處理通俗地理解就是將原始數(shù)據(jù)轉(zhuǎn)化為機(jī)器可以認(rèn)知的數(shù)據(jù)形式,以適應(yīng)相關(guān)技術(shù)或者算法模型。比如新聞分類案例中,原始數(shù)據(jù)是一篇篇的新聞文本,分類器并不能直接處理,需要對(duì)新聞文本分詞、去除干擾詞、提取詞特征、詞特征轉(zhuǎn)化、詞特征降維等操作,分類器才能對(duì)數(shù)據(jù)進(jìn)行學(xué)習(xí)優(yōu)化,實(shí)現(xiàn)工程應(yīng)用。數(shù)據(jù)缺失值、數(shù)據(jù)錯(cuò)誤值等一系列問(wèn)題,經(jīng)過(guò)數(shù)據(jù)預(yù)處理后的數(shù)據(jù)能夠達(dá)到數(shù)據(jù)完整干凈、數(shù)據(jù)特征比重合適、數(shù)據(jù)特征維度合理、數(shù)據(jù)無(wú)缺失值等優(yōu)點(diǎn),使數(shù)據(jù)利用更加準(zhǔn)確、高質(zhì)。為什么要做數(shù)據(jù)預(yù)處理早期互聯(lián)網(wǎng)時(shí)代數(shù)據(jù)量較少,主要存儲(chǔ)在數(shù)據(jù)庫(kù)、文件系統(tǒng)等介質(zhì)中,其數(shù)據(jù)分析主要靠人工統(tǒng)計(jì)完成。隨著網(wǎng)絡(luò)的普及,海量數(shù)據(jù)應(yīng)運(yùn)而生,依舊采用人工統(tǒng)計(jì)方法對(duì)數(shù)據(jù)處理已不合時(shí)宜。伴隨著計(jì)算能力和硬件設(shè)施的提升,先前的算法理論(如神經(jīng)網(wǎng)絡(luò)等)有了用武之地,使得計(jì)算機(jī)處理海量數(shù)據(jù)成為當(dāng)今數(shù)據(jù)分析人員的主要工作。在大數(shù)據(jù)與人工智能的時(shí)代,甚至未來(lái)的一段時(shí)間,不管是無(wú)人駕駛還是智能機(jī)器的是來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)。異源數(shù)據(jù)也是最原始的數(shù)據(jù),包括人們?cè)诰W(wǎng)上的任何行為記錄。這些行為絕大多數(shù)是正確的,但是也可能存在錯(cuò)誤。比如,有時(shí)候收集數(shù)據(jù)的設(shè)備可能出故障;或者是人為輸入錯(cuò)誤;數(shù)據(jù)傳輸中的錯(cuò)誤;命名約定或所用的數(shù)據(jù)代碼不一致導(dǎo)致的錯(cuò)誤,等等。如何對(duì)這些原始數(shù)據(jù)進(jìn)行預(yù)處理來(lái)提高數(shù)據(jù)質(zhì)量?如何通過(guò)高質(zhì)量的數(shù)據(jù)來(lái)挖掘數(shù)據(jù)背后的價(jià)值?這就是為什么要做數(shù)據(jù)預(yù)處理的直觀原因之一。數(shù)據(jù)價(jià)值挖掘的研究工作大多都集中在算法的探討,而忽視對(duì)數(shù)據(jù)本身的研究。事實(shí)上,數(shù)據(jù)預(yù)處理對(duì)挖掘數(shù)據(jù)價(jià)值十分重要,一些成熟的算法對(duì)其處理的數(shù)據(jù)集合都有一定的要求:比如數(shù)據(jù)的完整性好、冗余性小、屬性的相關(guān)性小等。數(shù)據(jù)預(yù)處理是數(shù)據(jù)建模的重要一環(huán),且必不可少,要挖掘出有效的知識(shí),必須為其提供干凈、準(zhǔn)確、簡(jiǎn)潔的數(shù)據(jù)。實(shí)際應(yīng)用系統(tǒng)中收集的數(shù)據(jù)通常是“臟”數(shù)據(jù)。沒有高質(zhì)量的數(shù)據(jù),就沒有高質(zhì)量的挖掘結(jié)果。數(shù)據(jù)預(yù)處理的工作流程構(gòu)建新聞分類器時(shí),如何正確有效地將不同數(shù)據(jù)源中的信息整合到一起,直接影響到分類器的最終結(jié)果,數(shù)據(jù)預(yù)處理正是解決這一問(wèn)題的有力方案。數(shù)據(jù)預(yù)處理包含以下幾個(gè)方面:數(shù)據(jù)采集。指的是從網(wǎng)頁(yè)、文件庫(kù)、數(shù)據(jù)庫(kù)等多渠道采集數(shù)據(jù),這些數(shù)據(jù)主要以結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化的形式存在。數(shù)據(jù)集成。指的是將從多個(gè)數(shù)據(jù)源中獲取到的數(shù)據(jù)結(jié)合起來(lái)并統(tǒng)一存儲(chǔ)。數(shù)據(jù)清理。指的是通過(guò)填寫缺失的值、光滑噪聲數(shù)據(jù)、識(shí)別或刪除離群點(diǎn)并解決不一致性來(lái)清理數(shù)據(jù)。數(shù)據(jù)轉(zhuǎn)換。指的是按照預(yù)先設(shè)計(jì)好的規(guī)則對(duì)抽取的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,如把數(shù)據(jù)壓縮到0.0~1.0區(qū)間。數(shù)據(jù)歸約。數(shù)據(jù)歸約技術(shù)可以用來(lái)得到數(shù)據(jù)集的歸約表示,它雖然小得多,但仍然接近于保持原數(shù)據(jù)的完整性。數(shù)據(jù)預(yù)處理的應(yīng)用場(chǎng)景大數(shù)據(jù)和人工智能技術(shù)能夠?qū)㈦[藏于海量數(shù)據(jù)中的信息和知識(shí)挖掘出來(lái),為人類的社會(huì)經(jīng)濟(jì)活動(dòng)提供依據(jù),從而提高各個(gè)領(lǐng)域的運(yùn)行效率。其應(yīng)用領(lǐng)域較為廣泛,包括以下領(lǐng)域:商業(yè)智能技術(shù)。政府決策技術(shù)。電信數(shù)據(jù)信息處理與挖掘技術(shù)。電網(wǎng)數(shù)據(jù)信息處理與挖掘技術(shù)。氣象信息分析技術(shù)。環(huán)境監(jiān)測(cè)技術(shù)。警務(wù)云應(yīng)用系統(tǒng)(視頻/網(wǎng)絡(luò)監(jiān)控、智能交通、反電信詐騙、指揮調(diào)度等公安信息系統(tǒng))。大規(guī)模基因序列分析比對(duì)技術(shù)。信息挖掘技術(shù)。影視制作渲染技術(shù)。其他各種行業(yè)的云計(jì)算和海量數(shù)據(jù)處理應(yīng)用技術(shù)等。開發(fā)工具與環(huán)境Anaconda介紹與安裝Anaconda是一種Python語(yǔ)言的免費(fèi)增值開源發(fā)行版,用于進(jìn)行大規(guī)模數(shù)據(jù)處理、預(yù)測(cè)分析和科學(xué)計(jì)算,致力于簡(jiǎn)化包的管理和部署。Anaconda包含了Conda、Python在內(nèi)的超過(guò)180個(gè)科學(xué)包及其依賴項(xiàng)。Anaconda使用軟件包管理系統(tǒng)Conda進(jìn)行包管理。Anaconda的優(yōu)點(diǎn)Anaconda是一個(gè)用于科學(xué)計(jì)算的Python發(fā)行版,支持Linux、Mac、Windows系統(tǒng),提供了包管理與環(huán)境管理的功能,可以很方便地解決多版本Python并存、切換以及各種第三方包的安裝問(wèn)題。Anaconda利用工具/命令Conda來(lái)進(jìn)行Package和Environment的管理,并且已經(jīng)包含了Python和相關(guān)的配套工具。這里先解釋一下Conda、Anaconda這些概念的差別。Conda可以理解為一個(gè)工具,也是一個(gè)可執(zhí)行命令,其核心功能是包管理與環(huán)境管理。包管理與pip的使用類似,環(huán)境管理則允許用戶方便地安裝不同版本的Python并可以快速切換。Anaconda則是一個(gè)打包的集合,里面預(yù)裝好了Conda、某個(gè)版本的Python、眾多包(Package)、科學(xué)計(jì)算工具等,所以也稱為Python的一種發(fā)行版。其實(shí)還有Miniconda,顧名思義,它只包含最基本的內(nèi)容——Python與Conda,以及相關(guān)的必須依賴項(xiàng),對(duì)于存儲(chǔ)空間要求嚴(yán)格的用戶Miniconda是一個(gè)不錯(cuò)的選擇。其有以下優(yōu)點(diǎn):開源。安裝過(guò)程簡(jiǎn)單。高性能使用Python和R語(yǔ)言。免費(fèi)的社區(qū)支持。Conda包管理。1,000+開源庫(kù)安裝AnacondaAnaconda安裝包下載地址為:https://\h/download/,進(jìn)入下載頁(yè)面會(huì)顯示出Python3.0以上版本和Python2.0兩種版本,如圖1-1所示。關(guān)于Python3和Python2的區(qū)別請(qǐng)查看網(wǎng)址:\h/python/python-2x-3x.html)。推薦下載Python3.0以上版本,請(qǐng)讀者根據(jù)自己的操作系統(tǒng)是32位還是64位選擇對(duì)應(yīng)的版本下載。本書是基于Windows10操作系統(tǒng)安裝的。安裝Anaconda集成環(huán)境,雙擊下載后的Anaconda安裝文件,如圖1-2所示。然后一直單擊“Next”按鈕,直到完成配置(環(huán)境變量自動(dòng)配置),配置完成后,查看是否安裝成功。打開主菜單->所有應(yīng)用查看安裝,出現(xiàn)如圖1-3則表示安裝成功。圖1-1不同Anaconda版本圖1-2Anaconda安裝按WIN+R組合鍵輸入“cmd”命令以啟動(dòng)命令行環(huán)境,然后輸入“conda –V”查版本號(hào),如圖1-4所示。圖1-3安裝后的Anaconda圖1-4查看Anaconda版本可以看到本機(jī)Anaconda版本是4.5.12,上文介紹了其集成了諸多科學(xué)包及其依賴項(xiàng),看看具體包括哪些?在“命令提示符”環(huán)境下,輸入“condalist”,運(yùn)行結(jié)果如圖1-5所示(截取部分包)。圖1-5查看Anaconda預(yù)安裝包里面有一個(gè)包名為“pip”,這個(gè)包和Linux的包安裝命令是一樣的,當(dāng)需要安裝第三方包的時(shí)候,直接使用這個(gè)命令即可,比如,需要進(jìn)行中文分詞,會(huì)依賴Python的分詞包jieba,可以執(zhí)行如下命令:pipinstalljiebapipinstalljieba如圖1-6所示。
圖1-6pip安裝結(jié)巴分詞包如果不想使用這個(gè)包了,也可以直接卸載掉,命令如下:pipuninstalljiebapipuninstalljieba如圖1-7所示。圖1-7pip卸載結(jié)巴分詞包至此,完成了Anaconda的安裝配置以及包文件的自定義下載。需要注意的是,Anaconda自身集成了Python、pip、nltk、NumPy、Matplotlib等一系列常用包。現(xiàn)在,已經(jīng)可以使用Python了,考慮到熟悉Python開發(fā)的人員,常用Pycharm開發(fā)工具,熟悉Java的開發(fā)人員常用Eclipse開發(fā)工具,熟悉C#的開發(fā)人員常用VS開發(fā)工具,因此只要將Anaconda集成到PyDev、Pycharm、Eclipse、VS等編譯環(huán)境中即可??傊珹naconda是一款極為簡(jiǎn)便的集成軟件包,可以將其與Sublime、PyCharm、MyEclipse、VisualStudio等編譯環(huán)境很巧妙地融合起來(lái)(本書采用Anaconda+Sublime Text),也可以方便地導(dǎo)入第三方工包,從而極大地簡(jiǎn)化軟件開發(fā)工作的流程。SublimeTextSublimeText簡(jiǎn)介SublimeText是一款跨平臺(tái)的文本編輯器,同時(shí)支持Windows、Linux、MacOSX等操作系統(tǒng)和基于Python的插件。SublimeText是專有軟件,可通過(guò)包(Package)擴(kuò)充本身的功能。大多數(shù)的包使用自由軟件授權(quán)發(fā)布,并由社區(qū)構(gòu)建和維護(hù)。SublimeText是由程序員Jon Skinner于2008年1月份開發(fā)出來(lái)的,它最初被設(shè)計(jì)為一個(gè)具有豐富擴(kuò)展功能Vim。它具有漂亮的用戶界面和強(qiáng)大的功能,例如代碼縮略圖、Python的插件、代碼段等。還可自定義鍵綁定、菜單和工具欄。Sublime Text的主要功能包括:拼寫檢查、書簽、完整的PythonAPI、Goto功能、即時(shí)項(xiàng)目切換、多選擇、多窗口,等等。Sublime Text支持眾多編程語(yǔ)言,并支持語(yǔ)法上色。內(nèi)置支持的編程語(yǔ)言包含:ActionScript、AppleScript、ASP、batch C++、C#、Clojure、CSS、D、Diff、Erlang、Go、Graphviz 、Groovy、Haskell、HTML、Java、JSP、JavaScript、JSON、LaTeX、Lisp、Lua、Makefiles、Markdown、MATLAB、Objective-C、OCaml、Perl、PHP、Python、R、Rails、Regular 、reStructuredText、Ruby、Scala、shellscripts(Bash)、SQL、Tcl、Textile、XML、XSL和YAML。用戶可通過(guò)下載外掛支持更多的編程語(yǔ)言。SublimeText的優(yōu)點(diǎn)SublimeText主要有如下優(yōu)點(diǎn):主流前端開發(fā)編輯器。文本功能強(qiáng)大。支持編譯功能且可在控制臺(tái)看到輸出。內(nèi)嵌Python解釋器支持插件開發(fā)以達(dá)到可擴(kuò)展目的。PackageControl(包控制):SublimeText支持的大量插件可通過(guò)其進(jìn)行管理。SublimeText的安裝本文介紹SublimeWindows10系統(tǒng)下的安裝配置,關(guān)于Linux和MacOS下的安裝基本一致,讀者可自行嘗試。Sublime Text 3安裝包下載地址是\h/3。單擊該網(wǎng)址進(jìn)入SublimeText主頁(yè),選擇對(duì)應(yīng)的操作系統(tǒng)與版本,如圖1-8所示。圖1-8下載SublimeText3雙擊下載好的SublimeText3工具包,出現(xiàn)如圖1-9所示的界面。圖1-9安裝Sublime一直單擊Next圖1-10所示。圖1-10安裝完成Sublime安裝插件PackageControl。①自動(dòng)安裝PackageControl。打開https://packagecontrol.io/installation,復(fù)制SublimeText3中的代碼,如圖1-11所示。圖1-11安裝插件PackageControl按“Ctrl+`”組合鍵,將上述文本代碼內(nèi)容復(fù)制粘貼到文本框中,按Enter即可。如圖1-12所示。圖1-12執(zhí)行PackageControl代碼②如果PackageControl官網(wǎng)無(wú)法打開,也可以手動(dòng)安裝PackageControl。在百度網(wǎng)盤下載Package Control的安裝包(鏈接:/s/14hs2-OF5L_l8UHKUkPGayQ)提取碼:m7a9。下載完成后里面包含兩個(gè)文件分別是:文件1:PackageControl.sublime-package文件2:channel_v3.json然后,打開Sublime存放插件的目錄:在SublimeText→Preference→BrowsePackages...找到“InstalledPackages”文件夾,并將以上兩個(gè)文件復(fù)制進(jìn)去,然后重啟,如圖1-13所示。圖1-13存放Sublime插件最后,在Sublime下打開Preference→PackageSettings→PackageControl→Setting-User,添加如下代碼,如圖1-14所示。圖1-14配置Sublime插件成功安裝后,在SublimeText3中同時(shí)按住Ctrl+Shift+P組合鍵。最終安裝成功,如圖1-15所示。圖1-15安裝所需插件單擊“Package Control:Install Package”進(jìn)入查找Python環(huán)境配置插件“SublimeREPL”,下載安裝完成后,單擊“Preferences->BrowsePackage...”查看安裝的包,如圖1-16所示。圖1-16安裝運(yùn)行環(huán)境單擊“PackageControl:InstallPackage”查找Python環(huán)境配置插件Anaconda,如圖1-17所示。圖1-17集成Anaconda自定義快捷鍵配置。打開Preferences→KeyBindings輸入如下代碼,其中,F(xiàn)5運(yùn)行程序,F(xiàn)6切換IDEL工具,Ctrl+D自定義刪除行,其他快捷鍵是通用的,網(wǎng)上有很多快捷鍵的資料,這里不再贅述。激活版本:HelpEnterLICENSE。至此,完成了SublimeText3的安裝配置工作,有關(guān)詳細(xì)插件安裝的說(shuō)明,請(qǐng)參考網(wǎng)址:\h/news/view/26d731,有關(guān)快捷鍵的使用,請(qǐng)查看網(wǎng)址:/a/1190000004463984。注意讀者也可以使用PyCharm、Eclipse等常用的Python開發(fā)工具。實(shí)戰(zhàn)案例:第一個(gè)中文分詞程序在數(shù)據(jù)處理工作中,分詞是一項(xiàng)必不可少的工作,本節(jié)使用SublimeText完成第一個(gè)分詞案例。下面介紹什么是中文分詞及實(shí)現(xiàn)方法。中文分詞中文沒有一個(gè)形式上的分界符,雖然英文也同樣存在短語(yǔ)的劃分問(wèn)題,不過(guò)在詞這一層上,中文比英文要復(fù)雜得多,也困難得多。例如:英文句子:Iamastudent.中文意思:我是一名學(xué)生。由于英文的語(yǔ)言使用習(xí)慣,通過(guò)空格很容易拆分出單詞,而中文字詞界限模糊,往往不容易區(qū)別哪些是“字”、哪些是“詞”,這也是為什么要把中文詞語(yǔ)進(jìn)行切分的原因。中文分詞的發(fā)展與英文為代表的印歐語(yǔ)系語(yǔ)言相比,中文由于繼承自古代漢語(yǔ)的傳統(tǒng),詞語(yǔ)之間常沒有分隔。古代漢語(yǔ)中除了聯(lián)綿詞和人名、地名等,詞通常是單個(gè)漢字,所以當(dāng)時(shí)沒有分詞書寫的必要。而現(xiàn)代漢語(yǔ)中雙字或多字詞逐漸增多,一個(gè)字已經(jīng)不再等同于一個(gè)詞了。在中文里,“詞”和“詞組”邊界模糊,現(xiàn)代漢語(yǔ)的基本表達(dá)單元雖然為“詞”,且以雙字或者多字詞居多,但由于人們認(rèn)識(shí)水平的不同,對(duì)詞和短語(yǔ)的邊界還很難去區(qū)分。例如:“對(duì)隨地吐痰者給予處罰”,“隨地吐痰者”本身是一個(gè)詞還是一個(gè)短語(yǔ),不同的人會(huì)有不同的標(biāo)準(zhǔn),同樣的,“海上”“酒廠”等即使是同一個(gè)人也可能做出不同的判斷。如果漢語(yǔ)真的要分詞書寫,必然會(huì)出現(xiàn)混亂,難度也很大。中文分詞的方法其實(shí)不局限于中文應(yīng)用,也被應(yīng)用于英文處理,例如幫助判別英文單詞的邊界等。中文分詞的用途中文分詞是文本處理的基礎(chǔ),對(duì)于輸入的一段中文,成功地進(jìn)行中文分詞,可以達(dá)到電腦自動(dòng)識(shí)別語(yǔ)句含義的效果。中文分詞技術(shù)屬于自然語(yǔ)言處理技術(shù)的范疇,目前在自然語(yǔ)言處理技術(shù)中,中文處理技術(shù)比西文處理技術(shù)要落后很大一截,而許多西文的處理方法中文卻不能直接采用,就是因?yàn)橹形谋仨氂蟹衷~這道工序。中文分詞是中文信息處理的基礎(chǔ),搜索引擎就是中文分詞的一個(gè)應(yīng)用,其他的比如機(jī)器翻譯(MachineTranslation)、語(yǔ)音合成、自動(dòng)分類、自動(dòng)摘要、自動(dòng)校對(duì)等,都需要用到分詞。因?yàn)橹形男枰衷~,可能會(huì)影響一些研究,但同時(shí)也為一些企業(yè)帶來(lái)機(jī)會(huì),因?yàn)閲?guó)外的計(jì)算機(jī)處理技術(shù)要想進(jìn)入中國(guó)市場(chǎng),首先也是要解決中文分詞問(wèn)題。中文分詞對(duì)于搜索引擎來(lái)說(shuō),最重要的并不是找到所有的結(jié)果,因?yàn)樵谏习賰|的網(wǎng)頁(yè)中找到所有結(jié)果沒有太多的意義,也沒有人能看得完;相反,最重要的是把最相關(guān)的結(jié)果排在最前面,這也稱為相關(guān)度排序。中文分詞的準(zhǔn)確與否,常常直接影響到對(duì)搜索結(jié)果的相關(guān)度排序。從定性分析的角度來(lái)看,搜索引擎的分詞算法不同、詞庫(kù)的不同都會(huì)影響頁(yè)面的返回結(jié)果。實(shí)例介紹本節(jié)實(shí)現(xiàn)一個(gè)有趣的應(yīng)用。將電影《流浪地球》中的經(jīng)典句子“道路千萬(wàn)條,安全第一條;行車不規(guī)范,親人兩行淚?!边M(jìn)行中文分詞。這里需要使用第三方工具包結(jié)巴(jieba)來(lái)實(shí)現(xiàn)。結(jié)巴實(shí)現(xiàn)中文分詞打開SublimeText并在根目錄PyDataPreprocessing下創(chuàng)建Chapter1文件夾,然后在Chapter1下面創(chuàng)建CutWords.py文件并打開。在編輯代碼之前,先查看一下jieba包能否正常導(dǎo)入。按住Alt+Shift+2組合鍵進(jìn)行分屏,然后按F6鍵進(jìn)入PythonIDE環(huán)境下,成功導(dǎo)入后如圖1-18所示。圖1-18SublimeText下運(yùn)行PythonIDE圖1-18說(shuō)明jieba包已經(jīng)成功導(dǎo)入,編寫如下代碼(源代碼見:Chapter1/CutWords.py):代碼說(shuō)明:其中第1行是對(duì)中文編碼進(jìn)行設(shè)置;第3-7行是注釋信息;第9行導(dǎo)入jieba分詞模塊;第14行的調(diào)用jieba模塊中的cut方法對(duì)字符串分詞,數(shù)據(jù)以列表(List)形式返回;第15行是格式化分詞結(jié)果,將List數(shù)據(jù)轉(zhuǎn)化為String數(shù)據(jù)打印出來(lái)。運(yùn)行代碼查看結(jié)果,如圖1-19所示。圖1-19中文分詞的結(jié)果小結(jié)主要介紹了什么是數(shù)據(jù)預(yù)處理,為什么要做數(shù)據(jù)預(yù)處理,之后介紹了數(shù)據(jù)預(yù)處理的工作流程和應(yīng)用場(chǎng)景,使讀者對(duì)數(shù)據(jù)預(yù)處理有一個(gè)整體認(rèn)識(shí)。工欲善其事必先利其器,選擇合適的開發(fā)工具有助于更高效的工作,Anaconda+SublimeText就是一組不錯(cuò)的搭檔。當(dāng)然,讀者也可以使用PyCharm、MyEclipse、VisualStudio等開發(fā)工具。下一章將介紹Python數(shù)據(jù)預(yù)處理的幾個(gè)科學(xué)庫(kù)。第2章Python科學(xué)計(jì)算工具Python語(yǔ)言及其應(yīng)用可謂如火如荼,讀者應(yīng)該對(duì)它們并不陌生。本章主要針對(duì)科學(xué)計(jì)算工具包NumPy、SciPy、Pandas分別從包的簡(jiǎn)介、安裝、特點(diǎn)和常見方法幾個(gè)方面進(jìn)行介紹。科學(xué)技術(shù)工具不僅在數(shù)據(jù)預(yù)處理中使用,在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域都有著廣泛的應(yīng)用。NumPyNumPy是Python語(yǔ)言常用的科學(xué)計(jì)算工具包,本節(jié)主要介紹NumPy的安裝和特點(diǎn)以及NumPy的數(shù)組、NumPy的數(shù)學(xué)函數(shù)、NumPy的線性代數(shù)和NumPyIO操作等內(nèi)置模塊(源代碼見:Chapter2/NumpyDome.py)。NumPy的安裝和特點(diǎn)NumPy(官網(wǎng):\h/,如圖2-1所示),是Python語(yǔ)言的一個(gè)擴(kuò)展程序庫(kù)它支持大量的維度數(shù)組與矩陣運(yùn)算,此外也提供大量的數(shù)學(xué)函數(shù)庫(kù)。NumPy的前身Numeric最早是由JimHugunin與其他協(xié)作者共同開發(fā),2005年,TravisOliphant在Numeric中結(jié)合了另一個(gè)同性質(zhì)的程序庫(kù)Numarray的特色,并加入了其他擴(kuò)展而開發(fā)了NumPy。圖2-1NumPy官網(wǎng)NumPy的安裝方法一 Anaconda已經(jīng)集成了NumPy,讀者在DOS環(huán)境下查看:condalist方法二 讀者可以通過(guò)pip自動(dòng)安裝,執(zhí)行如下命令:pipinstallnumpy方法三 上下載NumPy源碼(/numpy/numpy),然后在源碼根目錄下執(zhí)行如下命令:pythonsetup.pyinstall安裝完成后,檢測(cè)是否成功。首先啟動(dòng)Sublime,然后按F6鍵進(jìn)入Python環(huán)境,最后輸入importnumpy,得到以下狀態(tài)即表示安裝成功。如圖2-2所示。圖2-2驗(yàn)證NumPy是否安裝成功NumPy的特點(diǎn)NumPy參考了CPython(一個(gè)使用字節(jié)碼的解釋器),但在CPython解釋器上所寫的數(shù)學(xué)算法代碼通常遠(yuǎn)比編譯過(guò)的相同代碼要慢。為了解決這個(gè)難題,NumPy引入了多維數(shù)組以及可以直接有效率地操作多維數(shù)組的函數(shù)與運(yùn)算符。在NumPy上只要能被表示為針對(duì)數(shù)組或矩陣運(yùn)算的算法,其運(yùn)行效率幾乎都可以與編譯過(guò)的等效C語(yǔ)言代碼一樣快。NumPy通常與SciPy(ScientificPython)和Matplotlib(繪圖庫(kù))一起使用,這種組合廣泛用于替代MatLab,是一個(gè)強(qiáng)大的科學(xué)計(jì)算環(huán)境,有助于我們通過(guò)Python學(xué)習(xí)數(shù)據(jù)科學(xué)或者機(jī)器學(xué)習(xí)。NumPy數(shù)組數(shù)組操作是NumPy的主要模塊之一,這里主要介紹一維數(shù)組、多維數(shù)組、數(shù)組基本運(yùn)算、常數(shù)數(shù)組、數(shù)值范圍創(chuàng)建數(shù)組、切片和索引以及數(shù)組的其他相關(guān)操作的實(shí)現(xiàn)。創(chuàng)建一維數(shù)組運(yùn)行結(jié)果:[123]創(chuàng)建多維數(shù)組運(yùn)行結(jié)果:[[12][34][56]]數(shù)組基本運(yùn)算運(yùn)行結(jié)果:數(shù)組的維數(shù):2數(shù)組元素總個(gè)數(shù)元素類型:int32創(chuàng)建常數(shù)數(shù)組代碼說(shuō)明:dtype:表示數(shù)據(jù)類型,省略時(shí)默認(rèn)為浮點(diǎn)數(shù)據(jù)類型。order:有C和F兩個(gè)選項(xiàng),分別代表行優(yōu)先和列優(yōu)先。運(yùn)行結(jié)果:創(chuàng)建0數(shù)組:[[0.0.0.][0.0.0.]]創(chuàng)建1數(shù)組:[[1.1.1.][1.1.1.]]使用數(shù)值范圍創(chuàng)建數(shù)組創(chuàng)建從1開始到10終止,步長(zhǎng)為2的浮點(diǎn)型數(shù)組。運(yùn)行結(jié)果:[1.3.5.7.9.]切片和索引運(yùn)行結(jié)果:[24681012]數(shù)組操作的其他方法NumPy數(shù)組的其他操作方法包括數(shù)組排序、數(shù)組逆序、最大最小值差、矩陣百分比、統(tǒng)計(jì)中位數(shù)、算術(shù)平均值、加權(quán)平均值、標(biāo)準(zhǔn)差、方差等,其操作也比較簡(jiǎn)單,這里不再逐一示例,請(qǐng)參考表2-1自行實(shí)現(xiàn)。表2-1NumPy數(shù)組的其他方法Numpy的數(shù)學(xué)函數(shù)三角函數(shù)運(yùn)行結(jié)果:[0.0.707106781.]三角函數(shù)操作的其他方法三角函數(shù)的操作方法包括正弦、余弦、正切、反正弦、反余弦、反正切等,實(shí)現(xiàn)方法與上述代碼類同,請(qǐng)參考表2-2自行使用。表2-2三角函數(shù)的操作方法矩陣運(yùn)算運(yùn)行結(jié)果:第一個(gè)數(shù)組:[[0.1.2.] [3.4.5.] [6.7.8.]]第二個(gè)數(shù)組:[101010]兩個(gè)數(shù)組之和:[[10.11.12.] [13.14.15.] [16.17.18.]]矩陣運(yùn)算的其他方法矩陣運(yùn)算在數(shù)據(jù)預(yù)處理中的使用頻率非常高,涉及的方法有相加、相減、相乘等,限于篇幅不能逐一舉例,讀者可以參加表2-3自行使用。表2-3矩陣運(yùn)算的其他方法NumPy線性代數(shù)運(yùn)算點(diǎn)積運(yùn)行結(jié)果:線性代數(shù)操作的其他方法線性代數(shù)運(yùn)算也是比較重要的知識(shí),NumPy使用頻率也較高,具體函數(shù)如表2-4所示,讀者可參照上述代碼自行使用。表2-4線性代數(shù)操作的其他方法NumPyIO操作NumPy為ndarray對(duì)象引入了一個(gè)簡(jiǎn)單的文件格式npy,npy文件用于存儲(chǔ)重建ndarray所需的數(shù)據(jù)、圖形、dtype和其他信息。數(shù)組保存為npy文件運(yùn)行結(jié)果:[[17.23.][39.53.]]數(shù)組保存為txt文件運(yùn)行結(jié)果:[[17.23.][39.53.]]SciPySciPy是一個(gè)Python的常用科學(xué)計(jì)算工具包,本節(jié)主要介紹SciPy的安裝和特點(diǎn)以及SciPyLinalg、SciPy文件操作、SciPy插值、SciPyNdimage和SciPy算法優(yōu)化等常用的內(nèi)置模塊(源代碼見:Chapter2/ScipyDome.py)。SciPy的安裝和特點(diǎn)SciPy官網(wǎng)(網(wǎng)址:https://\h/)如圖2-3所示,包含最優(yōu)化、線性代數(shù)、積分、插值、特殊函數(shù)、快速傅里葉變換、信號(hào)處理和圖像處理、常微分方程求解等模塊。圖2-3SciPy官網(wǎng)SciPy的安裝可使用以下3種方法安裝SciPy:方法一 Anaconda已經(jīng)集成了SciPy,讀者可使用命令condalist在DOS環(huán)境下查看。方法二 可以通過(guò)pip命令自動(dòng)安裝,請(qǐng)執(zhí)行如下命令:pipinstallscipy。方法三 下載SciPy源碼(網(wǎng)址:/numpy/numpy),然后在源碼根目錄下執(zhí)行如下命令:pythonsetup.pyinstall。安裝完成后,檢測(cè)是否成功。首先打開Sublime,然后按F6鍵進(jìn)入Python環(huán)境,最后輸入importsicpy,得到如圖2-4所示的狀態(tài)即表示安裝成功。圖2-4驗(yàn)證SciPy是否成功安裝SciPy的特點(diǎn)SciPy庫(kù)依賴于NumPy,它提供了便捷且快速的N維數(shù)組操作。SciPy庫(kù)與NumPy數(shù)組一起工作,并提供了許多用戶友好和高效的實(shí)現(xiàn)方法,它們一起運(yùn)行在所有流行的操作系統(tǒng)上,安裝快速且免費(fèi)。SciPy提供了豐富的子模塊,具體參見表2-5所示。表2-5SciPy的子模塊SciPyLinalgSciPy Linalg性方程組以及求行列式等。求解線性方程組我們使用Linalg求解如下方程組:完整的代碼實(shí)現(xiàn)如下:代碼說(shuō)明:數(shù)組a表示未知數(shù)的系數(shù)矩陣,數(shù)組b運(yùn)行結(jié)果:線性方程組的解是:[2.-2.8.]求解行列式運(yùn)行結(jié)果:行列式的解是:14-23=-2.0求解特征值和特征向量代碼說(shuō)明:A表示方陣。特征值λ和相應(yīng)的特征向量v的關(guān)系是:Av=λv。運(yùn)行結(jié)果:特征值:[-0.37228132+0.j5.37228132+0.j]特征向量:[[-0.82456484-0.41597356] [0.56576746-0.90937671]]奇異值分解(SVD)代碼說(shuō)明:矩陣a分解為兩個(gè)酉矩陣(U和Vh)和一個(gè)奇異值。a=U*s*Vh。運(yùn)行結(jié)果:SciPy文件操作保存MATLAB文件運(yùn)行結(jié)果:查看MATLAB文件變量運(yùn)行結(jié)果:[('vect',(1,10),'int32')]SciPy插值插值是在直線或曲線上的兩點(diǎn)之間找到值的過(guò)程。插值不僅適用于統(tǒng)計(jì)學(xué),而且在科學(xué)、商業(yè)和需要預(yù)測(cè)兩個(gè)現(xiàn)有數(shù)據(jù)點(diǎn)之間的值時(shí)也很有用。繪制二維空間圖二維空間的余弦散列點(diǎn)運(yùn)行結(jié)果如圖2-5所示。圖2-5繪制二維空間圖一維插值一種基于固定數(shù)據(jù)點(diǎn)來(lái)推導(dǎo)出函數(shù)的便捷方法,可以使用線性插值在給定數(shù)據(jù)定義域內(nèi)的任意位置推導(dǎo)出該函數(shù)。運(yùn)行結(jié)果如圖2-6所示。圖2-6一維插值樣條曲線運(yùn)行結(jié)果如圖2-7所示。圖2-7樣條曲線插值SciPyNdimageSciPy的ndimage子模塊專用于圖像處理,ndimage表示一個(gè)n維圖像。圖像處理中一些最常見的任務(wù)如下:圖像的輸入、輸出和顯示。基本操作,如裁剪、翻轉(zhuǎn)、旋轉(zhuǎn)等。圖像過(guò)濾,如去噪、銳化等。分類。注冊(cè)。下面使用SciPy實(shí)現(xiàn)其中的一些功能。打開圖像運(yùn)行結(jié)果如圖2-8所示。圖2-8打開圖像圖像倒置運(yùn)行結(jié)果如圖2-9所示。圖2-9圖像倒置按指定的角度旋轉(zhuǎn)圖像運(yùn)行結(jié)果如圖2-10所示。圖2-10旋轉(zhuǎn)圖像模糊圖像代碼說(shuō)明:sigma值表示5級(jí)模糊程度。通過(guò)調(diào)整sigma值,可以看到圖像質(zhì)量的變化。運(yùn)行結(jié)果如圖2-11所示。圖2-11模糊圖像SciPy優(yōu)化算法梯度下降優(yōu)化算法求解方程:x2-2x的最小值,求解代碼如下:運(yùn)行結(jié)果如圖2-12所示。圖2-12函數(shù)最小值通過(guò)可視化結(jié)果可以發(fā)現(xiàn),最小值比0略小。下面是梯度下降的實(shí)現(xiàn)代碼:運(yùn)行結(jié)果:結(jié)果顯示最優(yōu)值為-1參考相關(guān)資料。最小二乘法優(yōu)化算法運(yùn)行結(jié)果:最小值是:=[1.0,1.0]本節(jié)展示了SciPy在優(yōu)化算法等領(lǐng)域的應(yīng)用,有關(guān)具體理論知識(shí),讀者可以自行查找資料學(xué)習(xí)。PandasPandas也是一個(gè)常用的Python科學(xué)計(jì)算工具包,被廣泛用于包括金融、經(jīng)濟(jì)、統(tǒng)計(jì)、分析等學(xué)術(shù)和商業(yè)領(lǐng)域的數(shù)據(jù)分析、數(shù)據(jù)清洗和準(zhǔn)備等工作,是數(shù)據(jù)預(yù)處理的核心模塊。使用Pandas可以完成數(shù)據(jù)處理和分析的5個(gè)典型步驟即數(shù)據(jù)加載、數(shù)據(jù)準(zhǔn)備、操作、模型和分析。本節(jié)主要介紹Pandas的安裝和特點(diǎn)以及Pandas的數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)統(tǒng)計(jì)、處理缺失值、稀疏數(shù)據(jù)、文件操作和可視化技術(shù)。Pandas的官網(wǎng):/,如圖2-13所示。圖2-13Pandas官網(wǎng)(源代碼見:Chapter2/PandasDome.py)Pandas的安裝和特點(diǎn)Pandas的安裝可以通過(guò)以下3種方法安裝Pandas:方法一 Anaconda已經(jīng)集成了Pandas,讀者在命令提示符環(huán)境下查看:condalist。方法二 可以通過(guò)pip自動(dòng)安裝,執(zhí)行如下命令:pipinstallpandas。方法三 上下載Pandas源碼(網(wǎng)址:/pandas-dev/pandas),然后在源碼根目錄下執(zhí)行如下命令:pythonsetup.pyinstall。安裝完成后,檢測(cè)是否成功。首先啟動(dòng)Sublime,然后按F6鍵進(jìn)入Python環(huán)境,輸入importpandas,得到以下狀態(tài)即安裝成功。如圖2-14所示。圖2-14驗(yàn)證Pandas是否安裝成功Pandas的特點(diǎn)Pandas快速高效、對(duì)缺失值自動(dòng)處理及支持異構(gòu)數(shù)據(jù)類型等諸多特點(diǎn)深受Python愛好者的喜歡,其主要特點(diǎn)包括:快速高效的DataFrame對(duì)象,具有默認(rèn)和自定義的索引。將數(shù)據(jù)從不同文件格式加載到內(nèi)存中的數(shù)據(jù)對(duì)象工具。丟失數(shù)據(jù)的數(shù)據(jù)對(duì)齊和綜合處理。重組和擺動(dòng)日期集。基于標(biāo)簽的切片、索引和大數(shù)據(jù)集的子集??梢詣h除或插入來(lái)自數(shù)據(jù)結(jié)構(gòu)的列。按數(shù)據(jù)分組進(jìn)行聚合和轉(zhuǎn)換。高性能合并和數(shù)據(jù)加入。時(shí)間序列功能。具有異構(gòu)類型列的表格數(shù)據(jù),例如SQL表格或Excel數(shù)據(jù)。Pandas的數(shù)據(jù)結(jié)構(gòu)Pandas可處理以下3種數(shù)據(jù)結(jié)構(gòu):系列(Series)系列是具有均勻數(shù)據(jù)的一維數(shù)組結(jié)構(gòu)。表2-6中的系列是整數(shù)1,3,5,6…的集合。表2-6一維數(shù)組代碼實(shí)現(xiàn):代碼說(shuō)明:代碼中使用了pandas.Series方法處理一位數(shù)組,該方法共有4個(gè)參數(shù),即pandas.Series(data,index,dtype,copy),各參數(shù)的說(shuō)明如下:data:傳入的數(shù)據(jù)參數(shù),數(shù)據(jù)類型支持?jǐn)?shù)組、列表等。index:索引,與數(shù)據(jù)的長(zhǎng)度相同。dtype:用于表示數(shù)據(jù)類型,省略是默認(rèn)為浮點(diǎn)數(shù)據(jù)類型。copy:復(fù)制一份數(shù)據(jù),默認(rèn)為false。運(yùn)行結(jié)果:100a101b102c103ddtype:object數(shù)據(jù)幀(DataFrame)數(shù)據(jù)幀是一個(gè)具有異構(gòu)數(shù)據(jù)的二維數(shù)組,如表2-7所示。表2-7二維數(shù)組代碼實(shí)現(xiàn):代碼說(shuō)明:代碼中使用了pandas.DataFrame方法處理二維數(shù)據(jù),該方法共有5個(gè)參數(shù),即pandas.DataFrame(data,index,columns,dtype,copy),各參數(shù)說(shuō)明如下:data:傳入的數(shù)據(jù)參數(shù),數(shù)據(jù)類型支持?jǐn)?shù)組、列表、字典等。index:索引,與數(shù)據(jù)的長(zhǎng)度相同。columns:列參數(shù)。dtype:用于表示數(shù)據(jù)類型,省略是默認(rèn)為浮點(diǎn)型。copy:復(fù)制數(shù)據(jù),默認(rèn)為false(不復(fù)制)。運(yùn)行結(jié)果:面板(Panel)面板是具有異構(gòu)數(shù)據(jù)的三維數(shù)據(jù)結(jié)構(gòu),在圖形表示中很難表示出面板,但是一個(gè)面板可以說(shuō)明為DataFrame的容器。代碼實(shí)現(xiàn):代碼說(shuō)明:代碼中使用了pandas.Panel方法,該方法表示創(chuàng)建一個(gè)面板。該方法共有6個(gè)參數(shù),即pandas.Panel(data,items,majoraxis,minoraxis,dtype,copy),各參數(shù)的含義如下:data:傳入的數(shù)據(jù)參數(shù),數(shù)據(jù)類型支持?jǐn)?shù)組、列表、字典等。items:axis0,每個(gè)項(xiàng)目對(duì)應(yīng)于內(nèi)部包含的數(shù)據(jù)幀(DataFrame)。major_axis:axis1,表示每個(gè)數(shù)據(jù)幀(DataFrame)的行。minor_axis:axis2,表示每個(gè)數(shù)據(jù)幀(DataFrame)的列。dtype:用于表示數(shù)據(jù)類型,省略是默認(rèn)為浮點(diǎn)數(shù)據(jù)類型。copy:復(fù)制數(shù)據(jù),默認(rèn)為false(不復(fù)制)。運(yùn)行結(jié)果:Pandas的數(shù)據(jù)統(tǒng)計(jì)利用DataFrame創(chuàng)建二維數(shù)組代碼實(shí)現(xiàn):運(yùn)行結(jié)果:代碼實(shí)現(xiàn):運(yùn)行結(jié)果:Pandas的其他統(tǒng)計(jì)方法,如表2-8所示。表2-8Pandas的其他統(tǒng)計(jì)方法Pandas處理丟失值機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘等領(lǐng)域由于數(shù)據(jù)缺失導(dǎo)致的數(shù)據(jù)質(zhì)量差,在模型預(yù)測(cè)的準(zhǔn)確性上面臨著嚴(yán)重的問(wèn)題。為了提高模型效果可以使用Pandas對(duì)數(shù)據(jù)缺失值進(jìn)行處理。構(gòu)造一個(gè)含有缺失值的數(shù)據(jù)集使用重構(gòu)索引(Reindexing),創(chuàng)建有一個(gè)缺少值的DataFrame。代碼實(shí)現(xiàn):運(yùn)行結(jié)果:在輸出結(jié)果中,NaN表示不是數(shù)字的值。檢查缺失值Pandas提供了isnull()和notnull()函數(shù),它們也是Series和DataFrame對(duì)象的方法,可用于檢查缺失值,代碼如下:運(yùn)行結(jié)果:清理/填充缺少數(shù)據(jù)用標(biāo)量值0替換缺失值,其中g(shù)行表示缺少的數(shù)據(jù)。運(yùn)行結(jié)果:用缺失值的前一行替換缺失值,例如a,b行,其中b實(shí)現(xiàn)代碼如下:運(yùn)行結(jié)果:剔除缺失值。代碼說(shuō)明:axis=1,則表示作用在列上。運(yùn)行結(jié)果:設(shè)置任意值替換缺失值,如one列的2000被60替換,two列的1000被10代碼如下:運(yùn)行結(jié)果:忽略缺失值。運(yùn)行結(jié)果:Pandas處理稀疏數(shù)據(jù)當(dāng)任何匹配特定值的數(shù)據(jù)(NaN/缺失值或任何值)被省略時(shí),稀疏對(duì)象被“壓縮”。稀疏數(shù)據(jù)處理運(yùn)行結(jié)果:Pandas的文件操作Pandas庫(kù)提供了一系列的read_函數(shù)來(lái)讀取各種格式的文件,這些read_函數(shù)如下所示:下面通過(guò)示例來(lái)說(shuō)明部分函數(shù)的使用。操作Excel文件代碼說(shuō)明:本例表示使用Pandas的read_excel方法來(lái)處理Excel格式文件并打印輸出Excel文件的內(nèi)容。運(yùn)行結(jié)果:操作CSV文件代碼說(shuō)明:本例使用Pandas的read_csv方法來(lái)處理CSV格式文件并打印出文件的內(nèi)容。運(yùn)行結(jié)果:操作JSON文件代碼說(shuō)明:本例首先將列表數(shù)據(jù)轉(zhuǎn)化為JSON格式數(shù)據(jù),然后調(diào)用Pandas的read_json方法處理JSON格式文件并打印輸出內(nèi)容。運(yùn)行結(jié)果:Pandas可視化繪制折線圖運(yùn)行結(jié)果如圖2-15所示。圖2-15折線圖繪制條形圖運(yùn)行結(jié)果如圖2-16所示。圖2-16條形圖繪制堆積條形圖運(yùn)行結(jié)果如圖2-17所示。圖2-17堆積條形圖繪制水平條形圖運(yùn)行結(jié)果如圖2-18所示。圖2-18水平條形圖繪制直方圖運(yùn)行結(jié)果如圖2-19所示。圖2-19直方圖繪制多個(gè)直方圖運(yùn)行結(jié)果如圖2-20所示。圖2-20多個(gè)直方圖繪制箱形圖運(yùn)行結(jié)果如圖2-21所示。圖2-21箱形圖繪制區(qū)域塊圖形運(yùn)行結(jié)果如圖2-22所示。圖2-22區(qū)域塊圖形繪制散點(diǎn)圖形運(yùn)行結(jié)果如圖2-23所示。圖2-23散點(diǎn)圖形繪制餅狀圖運(yùn)行結(jié)果如圖2-24所示。
圖2-24餅狀圖小結(jié)介紹了數(shù)據(jù)預(yù)處理中常用的Python科學(xué)工具包NumPy、SciPy和Pandas,系統(tǒng)地學(xué)習(xí)了這些包的概念和使用。NumPy工具包中的數(shù)學(xué)函數(shù)和線性代數(shù)知識(shí),對(duì)于科研和閱讀文獻(xiàn)非常有幫助,IO和數(shù)組操作也是在文本處理中常見的。SciPy工具包常用于算法優(yōu)化和實(shí)驗(yàn)結(jié)果分析等方面。Pandas工具包對(duì)缺失值、稀疏值處理方面較為擅長(zhǎng)。下一章將介紹數(shù)據(jù)采集與存儲(chǔ)以及使用Scrapy實(shí)現(xiàn)爬取數(shù)據(jù)并存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中等知識(shí)。第3章數(shù)據(jù)采集與存儲(chǔ)隨著網(wǎng)絡(luò)和信息技術(shù)的不斷普及,人類產(chǎn)生的數(shù)據(jù)量正在呈指數(shù)級(jí)增長(zhǎng),數(shù)據(jù)的形式也更加豐富,主要有結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)。面對(duì)各種形式的數(shù)據(jù)應(yīng)當(dāng)采用什么樣的數(shù)據(jù)采集策略,如何實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲爬取網(wǎng)頁(yè)信息,如何對(duì)抓取到的網(wǎng)頁(yè)信息進(jìn)行本地化存儲(chǔ),都是數(shù)據(jù)預(yù)處理過(guò)程中經(jīng)常會(huì)遇到的問(wèn)題。本章從數(shù)據(jù)的分類入手,分別介紹數(shù)據(jù)采集和存儲(chǔ)的常用方法與技術(shù)。數(shù)據(jù)與數(shù)據(jù)采集數(shù)據(jù)是指未經(jīng)過(guò)處理的原始記錄,如一堆雜志、一疊報(bào)紙、開會(huì)記錄或整本病人的病歷記錄等,數(shù)據(jù)因缺乏組織和分類,是無(wú)法明確地表達(dá)事物代表的意義的。人工智能領(lǐng)域中的數(shù)據(jù)主要有3類:結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),其表現(xiàn)形式不僅僅指文字,也包括圖片、音頻、視頻等一系列可以存儲(chǔ)知識(shí)的原始資料。采集數(shù)據(jù)的策略也會(huì)有差異。比如,針對(duì)關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)、本地存儲(chǔ)的文件、圖蟲技術(shù)進(jìn)行處理了。接下來(lái)我們將從不同層面對(duì)數(shù)據(jù)的采集和存儲(chǔ)方法進(jìn)行介紹。數(shù)據(jù)類型與采集方法本節(jié)介紹大數(shù)據(jù)領(lǐng)域中三種主流的數(shù)據(jù)形式,即結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),然后介紹常用的數(shù)據(jù)采集方法——爬蟲技術(shù)。結(jié)構(gòu)化數(shù)據(jù)結(jié)構(gòu)化數(shù)據(jù)是指可以使用關(guān)系型數(shù)據(jù)庫(kù)表示和存儲(chǔ),表現(xiàn)為二維形式的數(shù)據(jù)。一般特點(diǎn)是,數(shù)據(jù)以行為單位,一行數(shù)據(jù)表示一個(gè)實(shí)體的信息,每一行數(shù)據(jù)的屬性是相同的。如表3-1所示。表3-1二維數(shù)據(jù)表數(shù)據(jù)特點(diǎn):關(guān)系模型數(shù)據(jù),關(guān)系數(shù)據(jù)庫(kù)表示。常見格式:如MySQL、Oracle、SQLServer格式等。應(yīng)用場(chǎng)合:數(shù)據(jù)庫(kù)、系統(tǒng)網(wǎng)站、數(shù)據(jù)備份、ERP等。數(shù)據(jù)采集:DB導(dǎo)出、SQL等方式。結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)和排列是很有規(guī)律的,這對(duì)查詢和修改等操作很有幫助,但其擴(kuò)展性較差。半結(jié)構(gòu)化數(shù)據(jù)半結(jié)構(gòu)化數(shù)據(jù)是結(jié)構(gòu)化數(shù)據(jù)的一種形式,它并不符合關(guān)系型數(shù)據(jù)庫(kù)或其他以數(shù)據(jù)表的形式關(guān)聯(lián)起來(lái)的數(shù)據(jù)模型結(jié)構(gòu),其通過(guò)相關(guān)標(biāo)記用來(lái)分隔語(yǔ)義元素以及對(duì)記錄和字段進(jìn)行分層。因此,它也被稱為自描述的結(jié)構(gòu)。半結(jié)構(gòu)化數(shù)據(jù)同一類實(shí)體可以有不同的屬性,但這些屬性的順序并不重要,即使它們被組合在一起。如XML格式文件的數(shù)據(jù)就是半結(jié)構(gòu)數(shù)據(jù)的一種,以下是一個(gè)簡(jiǎn)單的示例:數(shù)據(jù)特點(diǎn):非關(guān)系模型數(shù)據(jù),有一定的格式。常見格式:比如Email、HTML、XML、JSON格式等。應(yīng)用場(chǎng)合:郵件系統(tǒng)、檔案系統(tǒng)、新聞網(wǎng)站等。數(shù)據(jù)采集:網(wǎng)絡(luò)爬蟲、數(shù)據(jù)解析等方式。不同的半結(jié)構(gòu)化數(shù)據(jù)的屬性的個(gè)數(shù)是不定的。有人說(shuō)半結(jié)構(gòu)化數(shù)據(jù)是以樹或者圖的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù),如上面的例子中,<person>標(biāo)簽是樹的根節(jié)點(diǎn),<name>標(biāo)簽是子節(jié)點(diǎn)。這樣的數(shù)據(jù)格式可以自由地表達(dá)很多有用的信息,如個(gè)人描述信息(元數(shù)據(jù))等??梢姡虢Y(jié)構(gòu)化數(shù)據(jù)的擴(kuò)展性是很好的。非結(jié)構(gòu)化數(shù)據(jù)指沒有固定結(jié)構(gòu)的數(shù)據(jù),各種文檔、圖片、視頻/音頻等都屬于非結(jié)構(gòu)化數(shù)據(jù)。對(duì)于這類數(shù)據(jù)可整體進(jìn)行存儲(chǔ),一般存儲(chǔ)為二進(jìn)制的數(shù)據(jù)格式。如圖3-1所示。圖3-1非結(jié)構(gòu)化數(shù)據(jù)數(shù)據(jù)特點(diǎn):沒有固定格式的數(shù)據(jù)。常見格式:Word、PDF、PPT、圖片、音視頻等。應(yīng)用場(chǎng)合:圖片識(shí)別、人臉識(shí)別、醫(yī)療影像、文本分析等。數(shù)據(jù)采集:網(wǎng)絡(luò)爬蟲、數(shù)據(jù)存檔等方式。網(wǎng)絡(luò)爬蟲技術(shù)網(wǎng)絡(luò)數(shù)據(jù)采集是指通過(guò)網(wǎng)絡(luò)爬蟲或網(wǎng)站公開API等方式從網(wǎng)站上獲取數(shù)據(jù)信息,該方法可以將半結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)從網(wǎng)頁(yè)中抽取出來(lái),將其存儲(chǔ)為統(tǒng)一的本地?cái)?shù)據(jù),支持圖片、音頻、視頻等數(shù)據(jù)采集。前置條件可以搭建以下環(huán)境,進(jìn)行網(wǎng)絡(luò)爬蟲的開發(fā):軟件系統(tǒng):Windows10/Linux。開發(fā)環(huán)境:SublimeText3/PyCharm。數(shù)據(jù)庫(kù):MySQL5.0+Navicat10.0.11。編程語(yǔ)言:Python3.7+Anaconda4.4。爬蟲框架:Scrapy。目標(biāo)網(wǎng)站:\h/all-posts/。Scrapy技術(shù)原理Scrapy是一個(gè)為爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)化數(shù)據(jù)而設(shè)計(jì)的應(yīng)用程序框架,通常我們可以很簡(jiǎn)單地通過(guò)Scrapy框架實(shí)現(xiàn)一個(gè)爬蟲,抓取指定網(wǎng)站的內(nèi)容或圖片。Scrapy爬蟲完整架構(gòu)如圖3-2所示(此圖來(lái)源于網(wǎng)絡(luò)),其中箭頭線表示數(shù)據(jù)流向。圖3-2Scrapy架構(gòu)圖ScrapyEngine(引擎):負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通信,信號(hào)和數(shù)據(jù)傳遞等。Scheduler(調(diào)度器):它負(fù)責(zé)接受引擎發(fā)送過(guò)來(lái)的Request請(qǐng)求,并按照一定的方式進(jìn)行整理排列和入隊(duì),當(dāng)引擎需要時(shí)交還給引擎。Downloader(下載器):負(fù)責(zé)下載ScrapyEngine(引擎)發(fā)送的所有Requests請(qǐng)求,并將其獲取到的Responses(響應(yīng))交還給ScrapyEngine(引擎),由引擎交給Spider來(lái)處理。Spider(爬蟲):它負(fù)責(zé)處理所有的Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler(調(diào)度器)。ItemPipeline(管道):它負(fù)責(zé)處理Spider中獲取到的Item,并進(jìn)行后期處理(詳細(xì)分析、過(guò)濾、存儲(chǔ)等)的地方。DownloaderMiddlewares(下載中間件):一個(gè)可以自定義擴(kuò)展下載功能的組件。Spider 中間件):一個(gè)可以自定義擴(kuò)展的操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses和從Spider出去的Requests)。Scrapy新建爬蟲項(xiàng)目安裝Scrapy爬蟲框架,按WIN+R組合鍵調(diào)出命令行環(huán)境,執(zhí)行如下命令:組合鍵調(diào)出命令行環(huán)境進(jìn)入根目錄Chapter3文件夾下,創(chuàng)建爬蟲項(xiàng)目:如圖3-3所示。圖3-3創(chuàng)建BoLeSpider項(xiàng)目為項(xiàng)目名稱,可以看到將會(huì)創(chuàng)建一個(gè)名為BoLeSpider的目錄,其目錄結(jié)構(gòu)大致如下:下面簡(jiǎn)單介紹一下主要文件的作用,這些文件分別是:scrapy.cfg:項(xiàng)目的配置文件。BoLeSpider/:項(xiàng)目的Python模塊,將會(huì)從這里引用代碼。BoLeSpider/items.py:項(xiàng)目的目標(biāo)文件。BoLeSpider/pipelines.py:項(xiàng)目的管道文件。BoLeSpider/settings.py:項(xiàng)目的設(shè)置文件。BoLeSpider/spiders/:存儲(chǔ)爬蟲代碼的目錄。在BoLeSpider項(xiàng)目下創(chuàng)建爬蟲目錄:如圖3-4所示。圖3-4爬蟲目標(biāo)網(wǎng)站在同級(jí)目錄下,執(zhí)行如下命令,調(diào)用爬蟲主程序。如圖3-5所示。圖3-5運(yùn)行爬蟲項(xiàng)目在BoLeSpider目錄下創(chuàng)建main.py:執(zhí)行main.py,效果如圖3-6所示。圖3-6封裝main函數(shù)運(yùn)行爬蟲項(xiàng)目main.py中的方法與在命令行環(huán)境下scrapycrawljobbole的執(zhí)行效果是一致的,之所以單獨(dú)封裝,是為了調(diào)試和運(yùn)行的便利。爬取網(wǎng)站內(nèi)容3.3.3節(jié)完成了爬蟲項(xiàng)目的構(gòu)建,接下來(lái)主要做4個(gè)方面的工作:一是對(duì)項(xiàng)目進(jìn)行相關(guān)配置;二是對(duì)目標(biāo)爬取內(nèi)容分析及提取文本特征信息;三是完成數(shù)據(jù)爬取工作;四是將數(shù)據(jù)進(jìn)行本地化存儲(chǔ)。爬蟲項(xiàng)目配置在做數(shù)據(jù)爬取工作時(shí),如果不符合爬蟲協(xié)議爬取工作將會(huì)中斷。比如遇到404錯(cuò)誤頁(yè)面等情況,爬蟲會(huì)自動(dòng)退出。顯然,這不符合對(duì)爬蟲結(jié)果的期望,我們希望跳過(guò)錯(cuò)誤頁(yè)面繼續(xù)爬取。因此,為了實(shí)現(xiàn)對(duì)不符合協(xié)議的網(wǎng)頁(yè)繼續(xù)爬取,需要打開Scrapy爬蟲架構(gòu)中的setting.py文件進(jìn)行修改,具體修改如下:分析爬取的內(nèi)容在文章列表\h/all-posts/(實(shí)驗(yàn)時(shí)可正常訪問(wèn),目前該官網(wǎng)處于關(guān)閉狀態(tài),讀者重點(diǎn)明白原理及技術(shù)細(xì)節(jié))中隨機(jī)打開一篇文章,對(duì)單篇文章信息進(jìn)行分析,并根據(jù)需求獲取目標(biāo)數(shù)據(jù)。假設(shè)需要獲取文章的【新聞?lì)}目、創(chuàng)建時(shí)間、URL數(shù)、收藏?cái)?shù)、評(píng)論數(shù)】,如圖3-7所示。圖3-7分析特征數(shù)據(jù)爬取文章數(shù)據(jù)獲取單篇文章的數(shù)據(jù)有兩種方式,分別是基于xpath和CSS的方法?;趚path的方法操作過(guò)程是,使用\h/114638/網(wǎng)址打開單篇文章,按F12鍵查看源再選中Copy,繼續(xù)單擊“CopyXpath”。此時(shí)的路徑為://*[@id="post-114638"]/div[1]/h1,如圖3-8所示。圖3-8xpath方法獲取數(shù)據(jù)在命令行環(huán)境下執(zhí)行以下shell命令:開始對(duì)每個(gè)特征進(jìn)行測(cè)試,具體特征數(shù)據(jù)的測(cè)試代碼如下:完整的特征數(shù)據(jù)的提取結(jié)果如圖3-9所示。圖3-9測(cè)試特征數(shù)據(jù)提取文本信息注意有時(shí)候按照以上方法操作,但卻沒有提取到文本信息,則有可能是代碼錯(cuò)誤,請(qǐng)仔細(xì)檢查代碼。也有可能是反爬蟲技術(shù)的作用,此時(shí),需要登錄后再進(jìn)行數(shù)據(jù)爬取,這屬于更深層次的爬蟲技術(shù),本文不再涉及。使用xpath方法獲取數(shù)據(jù)。以上逐個(gè)特征測(cè)試無(wú)誤后,將代碼放在Chapter3/BoLeSpider/BoLeSpider/spiders/jobbole.py文件中的parse方法下:使用CSS方法獲取數(shù)據(jù)。獲取頁(yè)面信息(源代碼見:Chapter3/BoLeSpider/BoLeSpider/spiders/jobbole.py)。運(yùn)行main.py函數(shù),獲取到所有的信息,如圖3-10所示。圖3-10獲取單篇文章特征數(shù)據(jù)爬取列表頁(yè)所有文章實(shí)現(xiàn)列表頁(yè)所有文章信息的爬取工作按F12鍵分析網(wǎng)頁(yè),找到下一頁(yè)并獲取所有列表頁(yè)的文章鏈接。執(zhí)行以下代碼獲取所有列表頁(yè)的文章鏈接,如圖3-11所示。圖3-11獲取列表頁(yè)所有文章的鏈接設(shè)置目標(biāo)特征的實(shí)體類打開Scrapy框架內(nèi)置的Chapter3/BoLeSpider/items.py文件,設(shè)計(jì)爬蟲目標(biāo)特征的實(shí)體類(這里可
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年消防通風(fēng)施工項(xiàng)目合作合同版B版
- 美容院香薰師聘用合同模板
- 高速公路照明系統(tǒng)線路施工合同
- 臨時(shí)人力資源專員聘用合同模板
- 臨時(shí)工聘用合同簽訂要點(diǎn)
- 保健品公司甲方代表招聘協(xié)議
- 棒球場(chǎng)個(gè)人車位租賃合同范本
- 居民社區(qū)背景音樂(lè)廣播安裝合同
- 環(huán)保企業(yè)聘用合同違約金上限
- 二手車市場(chǎng)地坪漆施工協(xié)議
- 現(xiàn)代藥物制劑與新藥研發(fā)智慧樹知到答案2024年蘇州大學(xué)
- 湖南省郴州市2023-2024學(xué)年三年級(jí)上學(xué)期期末考試科學(xué)試題
- 《智慧體育競(jìng)技科技助力新突破》演講課件
- 《登岳陽(yáng)樓》課件+2023-2024學(xué)年統(tǒng)編版高中語(yǔ)文必修下冊(cè)
- 新進(jìn)高校教師工作計(jì)劃
- 2024年人教版初一生物(上冊(cè))期末試卷及答案(各版本)
- 中考英語(yǔ)688高頻詞大綱詞頻表
- 《馬克思主義發(fā)展史》題集
- 人教新目標(biāo)版英語(yǔ)七下Unit 11《How was your school trip》(Section A 1a-1c)教學(xué)設(shè)計(jì)
- 大話機(jī)器人智慧樹知到期末考試答案章節(jié)答案2024年青海大學(xué)
- 含新能源發(fā)電接入的電力系統(tǒng)低頻振蕩阻尼控制研究綜述
評(píng)論
0/150
提交評(píng)論