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