版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
學習單元一
Python數(shù)據(jù)操作
學習單元二
NumPy和Pandas數(shù)據(jù)處理與分析
學習單元三
Requests網(wǎng)頁訪問
學習單元四
XPath和re內(nèi)容解析
學習單元五
Scrapy網(wǎng)頁數(shù)據(jù)采集
學習單元六
Matplotlib可視化數(shù)據(jù)分析全套可編輯PPT課件任務1數(shù)據(jù)采集基礎
任務2數(shù)據(jù)處理基礎
任務3數(shù)據(jù)分析基礎全套可編輯PPT課件任務1數(shù)據(jù)采集基礎數(shù)據(jù)是數(shù)據(jù)操作的前提,只有存在數(shù)據(jù),才有操作數(shù)據(jù)的可能。本任務將對數(shù)據(jù)采集相關內(nèi)容進行介紹,主要內(nèi)容如下:(1)數(shù)據(jù)采集概念;(2)數(shù)據(jù)采集分類。一、數(shù)據(jù)采集簡介數(shù)據(jù)采集,又稱數(shù)據(jù)獲取,是利用一種裝置從系統(tǒng)外部采集數(shù)據(jù)并輸入到系統(tǒng)內(nèi)部的一個接口的過程。數(shù)據(jù)采集技術廣泛應用在各個領域。采集的數(shù)據(jù)是已被轉換為電信號的各種物理量,如溫度、水位、風速、壓力等,它們可以是模擬量,也可以是數(shù)字量?!救蝿彰枋觥俊局R準備】在互聯(lián)網(wǎng)行業(yè)快速發(fā)展的今天,隨著數(shù)據(jù)量的不斷增長,數(shù)據(jù)采集已經(jīng)被廣泛應用于互聯(lián)網(wǎng)及分布式領域。新時代的數(shù)據(jù)采集是從傳感器和智能設備、企業(yè)在線系統(tǒng)、企業(yè)離線系統(tǒng)、社交網(wǎng)絡和互聯(lián)網(wǎng)平臺等獲取數(shù)據(jù)的過程。數(shù)據(jù)包括RFID數(shù)據(jù)、傳感器數(shù)據(jù)、用戶行為數(shù)據(jù)、社交網(wǎng)絡交互數(shù)據(jù)及移動互聯(lián)網(wǎng)數(shù)據(jù)等各種結構化、非結構化及半結構化的海量數(shù)據(jù)。1.結構化數(shù)據(jù)結構化數(shù)據(jù)最常見,是指具有某種模式的數(shù)據(jù),如圖1-1所示。2.非結構化數(shù)據(jù)非結構化數(shù)據(jù)是指結構不規(guī)則或不完整,沒有預定義模式的數(shù)據(jù),包括所有格式的辦公文檔、文本、圖片、HTML、各類報表、圖像和音頻/視頻信息等,如圖1-2所示。3.半結構化數(shù)據(jù)半結構化數(shù)據(jù)是介于結構化數(shù)據(jù)與非結構化數(shù)據(jù)之間的數(shù)據(jù),如圖1-3所示。XML和JSON就是常見的半結構化數(shù)據(jù)。二、數(shù)據(jù)采集分類相比于傳統(tǒng)的人工錄入、調查問卷、電話隨訪等數(shù)據(jù)采集方式,新時代的數(shù)據(jù)采集,根據(jù)數(shù)據(jù)源的不同,其方法也不相同。目前,數(shù)據(jù)采集有四種常用方法,即感知設備數(shù)據(jù)采集、系統(tǒng)日志采集、網(wǎng)絡數(shù)據(jù)采集和數(shù)據(jù)庫采集。1.感知設備數(shù)據(jù)采集感知設備數(shù)據(jù)采集指通過傳感器、攝像頭或其他智能終端自動感受信息,實現(xiàn)信號、圖片、視頻等數(shù)據(jù)的獲取,并按一定規(guī)律變換成為電信號或其他所需形式的信息輸出。例如,電子溫度計、交通監(jiān)控攝像頭、照相機等的工作就屬于感知設備數(shù)據(jù)采集。交通監(jiān)控攝像頭如圖1-4所示。2.系統(tǒng)日志采集系統(tǒng)日志采集主要是收集系統(tǒng)日常產(chǎn)生的大量日志數(shù)據(jù),如瀏覽日志(PV/UV等)、交互操作日志(操作事件)等,供離線和在線的數(shù)據(jù)分析系統(tǒng)使用。目前,系統(tǒng)日志采集通過在系統(tǒng)的頁面中植入具有統(tǒng)計功能的JS代碼來實現(xiàn),可以在項目開發(fā)過程中手動植入,也可以在服務器請求時動態(tài)植入,并在采集完成后,根據(jù)不同需求選擇立即或延遲匯總方式通過HTTP參數(shù)傳遞給后端,最后由后端腳本解析該HTTP參數(shù),依據(jù)格式將數(shù)據(jù)存儲到訪問日志中。系統(tǒng)日志采集流程如圖1-5所示。3.網(wǎng)絡數(shù)據(jù)采集網(wǎng)絡數(shù)據(jù)采集是使用網(wǎng)絡爬蟲、公開API等方式在網(wǎng)上到處或定向抓取特定網(wǎng)站網(wǎng)頁數(shù)據(jù)信息的過程。其中,網(wǎng)絡爬蟲是目前網(wǎng)絡數(shù)據(jù)采集最常用的方式,即從一個或多個網(wǎng)頁的URL地址開始,在獲取當前網(wǎng)頁內(nèi)容的同時,不斷獲取新的URL并放入訪問隊列,直到完成數(shù)據(jù)獲取工作。通過網(wǎng)絡爬蟲,可以將網(wǎng)頁中的非結構化數(shù)據(jù)、半結構化數(shù)據(jù)從網(wǎng)頁中提取出來,包括文本數(shù)據(jù)、圖片數(shù)據(jù)、音頻文件、視頻文件等,最后可對提取后的數(shù)據(jù)進行分析或存儲到本地文件、數(shù)據(jù)庫等。網(wǎng)頁的爬取可以使用多種語言來實現(xiàn)。目前,Python提供了多個第三方用于爬蟲操作的庫,包括Requests、BeautifulSoup、XPath、re、Scrapy等。1)?RequestsRequests是一個使用Python語言編寫,基于urllib采用Apache2Licensed開源協(xié)議開發(fā)的HTTP庫。2)?BeautifulSoupBeautifulSoup是一個HTML或XML解析庫,它包含多個能快速獲取數(shù)據(jù)的Python函數(shù),通過少量代碼即可編寫出一個完整的應用程序,用于進行文檔的解析,從而為用戶抓取需要的數(shù)據(jù)。3)?XPathXPath即XML路徑語言,是一門在XML文檔中查找信息的語言,它同樣適用于HTML文檔的搜索,在爬取網(wǎng)頁數(shù)據(jù)時可以使用XPath做相應的信息抽取。4)?rere模塊是Python的一個內(nèi)置模塊,其提供了多個正則表達式應用方法,可以實現(xiàn)字符串的查詢、替換、分割等。5)?ScrapyScrapy是一個基于Python應用的可進行Twisted異步處理的第三方應用程序框架,用戶只需要定制開發(fā)幾個模塊即可實現(xiàn)一個爬蟲,用來快速爬取網(wǎng)站并從頁面中抓取網(wǎng)頁內(nèi)容以及各種圖片。簡單來說,Requests和Scrapy用于訪問網(wǎng)頁地址來獲取頁面內(nèi)容,而BeautifulSoup、XPath和re則通過解析頁面來提取數(shù)據(jù)。一個完整的網(wǎng)頁爬取程序需要將Requests、BeautifulSoup、XPath、re、Scrapy等結合起來使用,并選擇合適的庫。4.數(shù)據(jù)庫采集數(shù)據(jù)庫采集就是在采集端部署大量數(shù)據(jù)庫,并在多個數(shù)據(jù)庫之間進行負載均衡和分片,以實現(xiàn)數(shù)據(jù)的采集工作。目前,數(shù)據(jù)庫被分為兩個大類:一類是傳統(tǒng)的關系型數(shù)據(jù)庫(SQL),指采用關系模型來組織數(shù)據(jù)的數(shù)據(jù)庫。SQL以行和列的形式存儲數(shù)據(jù),以便于用戶理解。大部分企業(yè)使用的數(shù)據(jù)庫為MySQL和Oracle等。Oracle和MySQL圖標如圖1-8所示。另一類是非關系型數(shù)據(jù)庫(NoSQL),指非關系型的、分布式的數(shù)據(jù)庫。NoSQL以鍵值對形式存儲數(shù)據(jù),結構不固定,能夠極大地減少空間開銷,如Redis、HBase、MongoDB等(其圖標如圖1-9所示)。
任務2數(shù)據(jù)處理基礎在采集到數(shù)據(jù)后,由于網(wǎng)絡異常、代碼質量問題、無效請求等原因,會出現(xiàn)數(shù)據(jù)采集不準確的情況,本任務將對數(shù)據(jù)處理相關內(nèi)容進行介紹,主要內(nèi)容如下:(1)數(shù)據(jù)處理簡介;(2)數(shù)據(jù)處理方法。一、數(shù)據(jù)處理簡介在數(shù)據(jù)采集完成后,采集到的數(shù)據(jù)往往是不規(guī)則、非結構化的,且數(shù)據(jù)中存在含噪聲(錯誤)、不完整(缺失)、不一致(沖突)等問題。因此,需要在使用數(shù)據(jù)之前,對其進行相關的數(shù)據(jù)處理操作,以使數(shù)據(jù)更加規(guī)范,便于查看,同時提高數(shù)據(jù)分析結果的準確性?!救蝿彰枋觥俊局R準備】在一個完整的數(shù)據(jù)采集與處理過程中,由于數(shù)據(jù)規(guī)模的不斷擴大以及數(shù)據(jù)缺少、重復、錯誤等問題的出現(xiàn),用戶需要花費60%左右的時間在數(shù)據(jù)的處理操作上,由此可知,數(shù)據(jù)處理是不可或缺的。針對數(shù)據(jù)處理的實現(xiàn),不同的用戶可以選擇不同的方式。對于非開發(fā)人員,只需采用數(shù)據(jù)處理工具,即可完成海量數(shù)據(jù)的處理工作,只關注處理結果,而不需要了解內(nèi)部的處理過程。目前,常用的數(shù)據(jù)處理工具有Kettle、DataPipeline、Beeload、Oracle、MySQL等。(1)?Kettle。Kettle是一款基于Java開發(fā)的數(shù)據(jù)處理工具,能夠通過界面中相關的按鈕設置數(shù)據(jù)處理操作并以命令行形式執(zhí)行,不僅支持數(shù)據(jù)庫、文本的輸入/輸出,還可以按照用戶需求進行數(shù)據(jù)的輸出。Kettle圖標如圖1-10所示。(2)?DataPipeline。DataPipeline主要給企業(yè)用戶提供數(shù)據(jù)基礎架構服務,具有數(shù)據(jù)質量分析、質量校驗、質量監(jiān)控等多個數(shù)據(jù)處理功能,保證了數(shù)據(jù)質量的完整性、一致性、準確性及唯一性。DataPipeline圖標如圖1-11所示。(3)?Beeload。Beeload是一款國產(chǎn)的集數(shù)據(jù)抽取、清洗、轉換及裝載于一體的數(shù)據(jù)處理工具,能夠標準化企業(yè)產(chǎn)生的數(shù)據(jù),控制數(shù)據(jù)質量,并將其提供給數(shù)據(jù)倉庫,提高了決策分析的正確性。Beeload圖標如圖1-12所示。而對于開發(fā)人員,則需了解能夠用于數(shù)據(jù)處理的程序設計語言。Python中包含多個數(shù)據(jù)處理模塊,如NumPy、Pandas等。(1)?NumPy。NumPy是Python中用于實現(xiàn)數(shù)值計算的第三方庫,能夠使用向量和數(shù)學矩陣以及許多數(shù)學函數(shù)處理大型矩陣數(shù)據(jù)。(2)?Pandas。Pandas是基于NumPy開發(fā)的用于實現(xiàn)數(shù)據(jù)處理和分析的Python數(shù)據(jù)處理模塊,其集成了大量的庫和多個標準數(shù)據(jù)模型,可以實現(xiàn)數(shù)據(jù)集的快速讀取、轉換、過濾、分析等功能。Pandas的圖標如圖1-13所示。二、數(shù)據(jù)處理方法簡單來說,數(shù)據(jù)處理就是對大量的、雜亂的、難以理解的數(shù)據(jù)進行加工的過程,其涉及的內(nèi)容遠遠大于一般的算術運算,主要包含數(shù)據(jù)清理、數(shù)據(jù)集成、數(shù)據(jù)規(guī)約與數(shù)據(jù)轉換等。1.數(shù)據(jù)清理數(shù)據(jù)清理主要用于清除數(shù)據(jù)中的噪聲,填充不完整數(shù)據(jù),糾正不一致數(shù)據(jù),以提高數(shù)據(jù)的一致性、準確性、真實性和可用性等。目前,數(shù)據(jù)清理主要包括四個方面,分別是缺失值清洗、格式內(nèi)容清洗、邏輯錯誤清洗、非需求數(shù)據(jù)清洗。1)缺失值清洗缺失值是指由于機械原因(數(shù)據(jù)收集或存儲失敗)或人為原因(由人的主觀失誤、歷史局限或有意隱瞞)造成的數(shù)據(jù)缺失,也就是數(shù)據(jù)集中某個或某些屬性的值不完整。目前,缺失值的清洗有多種方法。常用方法如表1-1所示。具體的缺失值清洗過程如下:第一步:確定缺失值范圍;第二步:刪除不需要的字段;第三步:填充缺失內(nèi)容或重新取數(shù)。2)格式內(nèi)容清洗在傳統(tǒng)的數(shù)據(jù)采集中,人工采集數(shù)據(jù)或用戶填寫數(shù)據(jù)時,容易出現(xiàn)數(shù)據(jù)格式不一致,數(shù)據(jù)中包含不該存在的字符,數(shù)據(jù)與字段不匹配等情況,這時就需要對數(shù)據(jù)的格式進行清洗。目前,針對不同的情況有不同的清洗方法。對于格式不一致的情況,只需修改格式,將其變?yōu)榻y(tǒng)一格式即可,如圖1-14所示。對于數(shù)據(jù)中包含不該存在字符的情況,需要以半自動半人工校驗方式來找出可能存在問題的數(shù)據(jù),并去除或修改數(shù)據(jù)中不符合格式的字符,如圖1-15所示。對于數(shù)據(jù)與字段不匹配的情況,不能直接刪除,需要了解具體問題,再根據(jù)情況選擇清洗方法,如圖1-16所示。3)邏輯錯誤清洗邏輯錯誤清洗指解決數(shù)據(jù)中數(shù)據(jù)重復、數(shù)值不合理、數(shù)據(jù)沖突等問題的操作。其中,對于數(shù)據(jù)重復的情況,需要執(zhí)行刪除操作,如圖1-17所示。針對數(shù)值不合理的情況,可以選擇刪除該數(shù)據(jù)或按缺失值對該數(shù)據(jù)值進行處理,如圖1-18所示。針對數(shù)據(jù)中字段值之間存在沖突的情況,需要判斷哪個字段的信息更為準確,之后再選擇刪除或修改該數(shù)據(jù),如圖1-19所示。4)非需求數(shù)據(jù)清洗非需求數(shù)據(jù)就是沒有分析意義或不會被分析的數(shù)據(jù),在數(shù)據(jù)處理操作中,只需將其刪除即可。但需要注意的是,不要把重要字段、不確定是否需要字段等刪除。2.數(shù)據(jù)集成數(shù)據(jù)集成可以將互聯(lián)網(wǎng)中分布的不同結構數(shù)據(jù)源中的數(shù)據(jù)集成到一個系統(tǒng)中,用戶不需要關注訪問的實現(xiàn),只需關注訪問方式即可,能夠極大地提高數(shù)據(jù)的一致性和信息共享利用率。數(shù)據(jù)集成系統(tǒng)如圖1-20所示。通過數(shù)據(jù)集成,能夠讓用戶低代價、高效率地使用異構數(shù)據(jù),但還存在著如下問題:(1)異構性:數(shù)據(jù)模型異構,如數(shù)據(jù)語義不同,數(shù)據(jù)使用環(huán)境不同等。(2)分布性:數(shù)據(jù)被存在多個不同的數(shù)據(jù)源中,數(shù)據(jù)之間依賴網(wǎng)絡進行通信,存在網(wǎng)絡傳輸?shù)男阅芎桶踩缘葐栴}。3.數(shù)據(jù)規(guī)約數(shù)據(jù)量的不斷增加給數(shù)據(jù)處理和分析工作帶來了極大的壓力,時間也不斷增長。因此,需要在盡量保證數(shù)據(jù)原貌的前提下對數(shù)據(jù)進行精簡操作,使精簡后的數(shù)據(jù)可以產(chǎn)生與原數(shù)據(jù)相同的(幾乎相同的)效果,這個精簡數(shù)據(jù)量的過程即為數(shù)據(jù)規(guī)約操作。通過數(shù)據(jù)規(guī)約,不僅能降低數(shù)據(jù)存儲成本,大幅減少數(shù)據(jù)分析時間,還可以減少無效、錯誤的數(shù)據(jù),從而提高數(shù)據(jù)分析的準確率。目前,數(shù)據(jù)規(guī)約有維規(guī)約、數(shù)量規(guī)約和數(shù)據(jù)壓縮三種方法。(1)維規(guī)約主要作用于多維數(shù)組,可以將不需要的整列數(shù)據(jù)刪除,實現(xiàn)數(shù)據(jù)維數(shù)的減少,提高計算效率。維規(guī)約如圖1-21所示。(2)數(shù)量規(guī)約也叫數(shù)值規(guī)約,通過在原數(shù)據(jù)中選擇替代的、較少的數(shù)據(jù)來減少數(shù)據(jù)量。目前,數(shù)量規(guī)約分為有參數(shù)方法和無參數(shù)方法。①有參數(shù)方法:使用一個模型來評估數(shù)據(jù),只需存放參數(shù),而不需要存放實際數(shù)據(jù),如線性回歸、多元回歸等。②無參數(shù)方法:需要存放實際數(shù)據(jù),如直方圖、聚類、抽樣等。(3)數(shù)據(jù)壓縮作用于存儲空間,在不丟失有用信息的前提下,通過縮減數(shù)據(jù)量或重新組織結構來減小數(shù)據(jù)的存儲空間,從而提高其傳輸、存儲和處理效率。目前,數(shù)據(jù)壓縮分為有損壓縮和無損壓縮。有損壓縮只能近似重構原數(shù)據(jù);無損壓縮的數(shù)據(jù)能夠重構數(shù)據(jù)結構,恢復原來的數(shù)據(jù)。按照壓縮文件類型,數(shù)據(jù)壓縮又可以分為字符串壓縮和音頻/視頻壓縮。①字符串壓縮:通常是無損壓縮,在解壓縮前對字符串的操作非常有限。②音頻/視頻壓縮:通常是有損壓縮,壓縮精度可以遞進選擇,有時候可以在不解壓整體數(shù)據(jù)的情況下重構某個片段。4.數(shù)據(jù)轉換數(shù)據(jù)轉換主要用于數(shù)據(jù)的規(guī)范化處理,將不符合需求的數(shù)據(jù)或數(shù)據(jù)格式轉換為適合統(tǒng)計分析的數(shù)據(jù)。目前,常用的數(shù)據(jù)轉換方法有光滑、屬性構造、規(guī)范化等。1)光滑光滑是指通過回歸、分類等算法去掉數(shù)據(jù)中含有的噪聲。2)屬性構造屬性構造是指在指定結構的數(shù)據(jù)集中添加新的屬性,以提高準確率和對高維數(shù)據(jù)結構的理解。屬性構造如圖1-23所示。3)規(guī)范化規(guī)范化是指將數(shù)據(jù)集中的數(shù)據(jù)按一定比例進行縮放操作,使之落入特定的區(qū)間內(nèi)。目前,常用的數(shù)據(jù)規(guī)范化方法有零-均值標準化、歸一化等。其中,零-均值標準化也叫標準差標準化,即使用原始數(shù)據(jù)的均值和標準差進行數(shù)據(jù)的標準化操作,值域為[-3,3],經(jīng)過處理的數(shù)據(jù)符合標準正態(tài)分布,即均值為0,標準差為1。零-均值標準化如圖1-24所示。歸一化也叫離差標準化,是指對原始數(shù)據(jù)進行線性變換操作,使結果值映射到[0,1]之間。歸一化如圖1-25所示。任務3數(shù)據(jù)分析基礎在數(shù)據(jù)經(jīng)過預處理操作后,即可對該數(shù)據(jù)進行分析操作,本任務將對數(shù)據(jù)分析相關內(nèi)容進行介紹,主要內(nèi)容如下:(1)數(shù)據(jù)分析簡介;(2)數(shù)據(jù)分析指標;(3)數(shù)據(jù)分析分類。一、數(shù)據(jù)分析簡介數(shù)據(jù)分析是數(shù)學與計算機科學相結合的產(chǎn)物,盡管數(shù)學基礎確立于20世紀早期,但直到計算機的出現(xiàn),數(shù)學基礎才得以發(fā)展,最終使得數(shù)據(jù)分析得以推廣?!救蝿彰枋觥俊局R準備】數(shù)據(jù)分析是指使用適當?shù)慕y(tǒng)計分析方法對收集的大量數(shù)據(jù)進行分析,加以匯總和理解并消化后,提取有用信息和形成結論而對數(shù)據(jù)加以詳細研究和概括總結的過程。數(shù)據(jù)分析的目的與意義在于,把隱沒在一大批看起來雜亂無章的數(shù)據(jù)中的信息集中、萃取和提煉出來,以找出所研究對象的內(nèi)在規(guī)律。隨著信息技術的不斷發(fā)展,數(shù)據(jù)分析滲透到各個行業(yè),特別是互聯(lián)網(wǎng)、電子商務、金融三大產(chǎn)業(yè)。同時,數(shù)據(jù)分析在醫(yī)療衛(wèi)生、交通、電信、娛樂、能源等領域,同樣有著廣泛的應用。1.互聯(lián)網(wǎng)領域隨著互聯(lián)網(wǎng)的普及,人們在網(wǎng)上看新聞、聽音樂、看電視、購物等,為了能夠在激烈的市場競爭中占據(jù)一席之地,需要對海量用戶數(shù)據(jù)進行挖掘、分析,發(fā)現(xiàn)用戶的個性喜好,從而對用戶的消費行為進行準確把握,為市場營銷人員尋找目標客戶打下了良好的基礎,提升了營銷的準確率。2.電子商務領域在電子商務領域,數(shù)據(jù)分析主要用于營銷管理、客戶管理等,利用數(shù)據(jù)分析來發(fā)現(xiàn)企業(yè)內(nèi)部不足、營銷手段不足、客戶體驗不足等,并通過數(shù)據(jù)分析了解客戶的內(nèi)在需求。根據(jù)客戶信息、客戶交易歷史、客戶購買過程的行為軌跡等客戶行為數(shù)據(jù),以及同一商品訪問或成交客戶的客戶行為數(shù)據(jù),進行客戶行為的相似性分析,為客戶推薦產(chǎn)品,包括瀏覽這一產(chǎn)品的客戶還瀏覽了哪些產(chǎn)品、購買這一產(chǎn)品的客戶還購買了哪些產(chǎn)品、預測客戶還喜歡哪些產(chǎn)品等。數(shù)據(jù)分析在電子商務領域應用如圖1-28所示。3.金融領域目前,金融領域對信息系統(tǒng)的實用性要求很高,并且積累了非常龐大的客戶交易數(shù)據(jù),而數(shù)據(jù)分析在金融領域的主要功能有客戶行為分析、防堵詐騙、金融分析等。4.醫(yī)療衛(wèi)生領域在醫(yī)療衛(wèi)生領域,數(shù)據(jù)分析依托大量臨床數(shù)據(jù),對其進行數(shù)據(jù)分析,為患者提供醫(yī)療服務。數(shù)據(jù)分析在醫(yī)療衛(wèi)生領域應用如圖1-30所示。5.交通領域隨著城鎮(zhèn)中心化發(fā)展,車流量、人流量不斷增長,交通壓力不斷增大,由此帶來交通擁堵、交通違章等問題,嚴重影響了交通體系的正常運轉。而數(shù)據(jù)分析整合運政、執(zhí)法、出租、公交、應急等數(shù)據(jù)資源,對道路車流量進行實時分析,實現(xiàn)交通系統(tǒng)的自動化切換和調配,從而調節(jié)交通流量。另外,通過交通多維度指標數(shù)據(jù)對城市、行政區(qū)和重點區(qū)域交通整體運行情況進行宏觀綜合監(jiān)測,可以分析交通擁堵情況,幫助有關部門掌控交通運行情況,提高決策效率與能力,實現(xiàn)城市交通有效管理和運行通暢。目前,數(shù)據(jù)分析有兩種方式,一種是開發(fā)人員通過代碼實現(xiàn)數(shù)據(jù)的分析,可以通過Python的NumPy、Pandas等模塊實現(xiàn);另一種是通過可視化圖表對數(shù)據(jù)進行分析,可以通過Python的Matplotlib、Seaborn或者數(shù)據(jù)可視化工具Tableau等實現(xiàn)。1)?MatplotlibMatplotlib是Python中的一個第三方繪圖庫,能夠實現(xiàn)多種圖形的繪制,包括條形圖、柱形圖、餅圖、散點圖等。Matplotlib圖標如圖1-32所示。2)?SeabornSeaborn是Python中基于Matplotlib開發(fā)的另一圖形可視化包,Seaborn提供了一種高度交互式界面,便于用戶做出各種有吸引力的統(tǒng)計圖表。Seaborn圖標如圖1-33所示。3)?TableauTableau是一款可視化工具,定位于數(shù)據(jù)可視化實現(xiàn)和敏捷開發(fā)的商務智能展現(xiàn),可以實現(xiàn)交互的、可視化的分析和儀表板應用。不同于傳統(tǒng)商業(yè)智能軟件,Tableau是一款“輕”商業(yè)智能工具,可以使用Tableau的拖放界面可視化任何數(shù)據(jù),探索不同的視圖,甚至可以輕松地將多個數(shù)據(jù)庫組合在一起,并且不需要任何復雜的腳本。Tableau圖標如圖1-34所示。二、數(shù)據(jù)分析指標在進行數(shù)據(jù)分析時,需要明確分析的目的,也就是選取數(shù)據(jù)分析的指標,這些指標都被包含在統(tǒng)計學中。目前,常用的數(shù)據(jù)分析指標有六個,分別是總體概覽指標、對比性指標、集中趨勢指標、離散程度指標、相關性指標、相關與因果指標。1.總體概覽指標總體概覽指標又稱為統(tǒng)計絕對數(shù),主要用于對數(shù)據(jù)的整體規(guī)模大小、總體多少進行反映,如銷售金額、訂單數(shù)量、購買人數(shù)等指標,能夠反映某個時間段內(nèi)某項業(yè)務的某些指標的絕對量,直接決定公司的盈利情況。2.對比性指標對比性指標指展示對象之間數(shù)量對比關系的指標,如同比、環(huán)比、差比等指標。其中,同比指相鄰時間段內(nèi)某一共同時間點的指標對比,如當日與上周同期對比、本周與上月同期對比、本月與去年同月比較等;環(huán)比指相鄰時間段內(nèi)指標的對比,如當日與昨天比較、本周與上周比較、本月與上月比較等;差比指兩個時間段內(nèi)的指標直接做差,差的絕對值就是兩個時間段內(nèi)指標的變化量。3.集中趨勢指標集中趨勢指標指通過平均指標反映某一現(xiàn)象在一定時間段內(nèi)所達到的一般水平,如平均工資、平均年齡等,被分為數(shù)值上的平均(普通平均、加權平均)和位置上的平均(中位數(shù)、眾數(shù))。其中,數(shù)值平均用于統(tǒng)計數(shù)列中所有數(shù)值的平均數(shù)值;位置平均則使用某種特殊位置上或者是普遍出現(xiàn)的標志值表示整體的水平。1)普通平均普通平均就是所有數(shù)值之和除以個數(shù)得到的值,由于所有數(shù)值平等,因此權重都是1,普通平均計算公式如下:2)加權平均加權平均與普通平均類似,但加權平均中數(shù)值權重不同,在計算平均值時,不同數(shù)值要乘以不同權重,即每個數(shù)值乘以權重的和除以個數(shù)得到的值,加權平均計算公式如下:3)眾數(shù)眾數(shù)指一系列數(shù)據(jù)中出現(xiàn)次數(shù)最多的變量值,是總體中最普遍的值,可以代表一般水平,但其只有在總體內(nèi)單位足夠多時才有意義。4)中位數(shù)中位數(shù)是將總體中各個值按照從小到大的順序排列,當數(shù)值個數(shù)為奇數(shù)時,則處于中間位置的數(shù)值就是中位數(shù);當數(shù)值個數(shù)為偶數(shù)時,則處于中間位置兩個值的平均數(shù)即為中位數(shù),使用中等水平來進行整體水平的表示。4.離散程度指標離散程度是一個表示離散(波動)情況的指標,指標越大,則數(shù)據(jù)波動越大;指標越小,數(shù)據(jù)波動越小,說明數(shù)據(jù)越穩(wěn)定。目前,常用的離散程度指標有方差、標準差、極差等。(1)方差:每個數(shù)值與均值之差平方的平均值。(2)標準差:方差的平方根。(3)極差:數(shù)據(jù)中最大值與最小值的差值。5.相關性指標相關性指標通常使用相關系數(shù)(r)表示,用于反映兩個不同變量之間的關系,取值范圍為[-1,1];r的絕對值越大,表示相關性越強;r的正值代表正相關,負值代表負相關。6.相關關系與因果關系相關關系用于表示事件的關聯(lián)性。因果關系與相關關系類似,但因果關系是在事件具有相關關系的基礎上,表示一件事情導致另一件事情的發(fā)生。三、數(shù)據(jù)分析分類目前,數(shù)據(jù)分析根據(jù)功能可以將其分為描述型、診斷型、預測型和指導型四個分析類型。1.描述型通過對過去數(shù)據(jù)的總結,描述發(fā)生了什么,主要用于信息分類,是數(shù)據(jù)分析中最常見的一種方式,可以提供重要衡量標準的概覽,如銷售月報、年度報表、業(yè)績利潤報表等。業(yè)績利潤報表可視化如圖1-40所示。2.診斷型診斷型分析主要用于分析為什么發(fā)生,通常使用在描述型分析之后,深入分析以找出導致這些結果的原因。簡單來說,就是幫助客戶深入數(shù)據(jù)內(nèi)部,了解當前存在什么問題,追溯問題發(fā)生的根本,最后去解決問題。例如,分析某個地區(qū)發(fā)貨緩慢原因、分析某個商品不好銷售原因等。3.預測型預測型分析主要用于分析可能發(fā)生什么,能夠利用數(shù)據(jù)變化的規(guī)律和各個節(jié)點對未來可能會發(fā)生的事情進行預測,數(shù)據(jù)的多樣性決定了預測效果,可以為決策的制定提供支持。4.指導型指導型分析基于已經(jīng)發(fā)生的事情、事情發(fā)生的原因以及可能發(fā)生的事情的分析,對之后的事情做指導,指導發(fā)生事情時需要做什么,幫助確定采取的最好措施。指導型分析一般不會單獨使用,通常與其他分析行為組合使用。任務1NumPy數(shù)據(jù)處理和分析
任務2Pandas數(shù)據(jù)處理和分析任務1NumPy數(shù)據(jù)處理和分析使用NumPy實現(xiàn)學生成績數(shù)據(jù)統(tǒng)計、數(shù)據(jù)處理以及分析,要求實現(xiàn)所有學生語文、數(shù)學、英語成績的分析,并取得其平均成績、最低成績、最高成績、方差、標準差。然后將這些學生的總成績排序輸出。此操作過程可分為三個步驟去實現(xiàn),主要內(nèi)容如下:(1)安裝NumPy,并引入NumPy的庫文件。(2)定義一個數(shù)組,統(tǒng)計全班學生的成績。(3)調用NumPy當中的庫函數(shù),實現(xiàn)對數(shù)據(jù)的統(tǒng)計和處理。一、NumPy簡介及安裝NumPy的全稱是NumericalPython,它是Python語言的一個擴展程序庫,支持大量的維度數(shù)【任務描述】【知識準備】組與矩陣運算,并針對數(shù)組運算提供大量的數(shù)學函數(shù)庫。NumPy的圖標如圖2-1所示。NumPy的前身為Numeric,最早由JimHugunin與其他協(xié)作者共同開發(fā)。2005年,TravisOliphant在Numeric中增加了一個同性質的程序庫Numarray,并加入了獨有的特點,由此開發(fā)了NumPy。NumPy不僅開放源代碼,而且由許多協(xié)作者共同維護開發(fā)。Python不提供數(shù)組功能。列表雖然可以完成基本的數(shù)組功能,但不能保證在數(shù)據(jù)量較大時高速讀取數(shù)據(jù)。為此,NumPy提供了真正的數(shù)組功能,以及能夠進行數(shù)據(jù)快速處理的多種函數(shù),并且NumPy內(nèi)置函數(shù)處理數(shù)據(jù)的速度是C語言級別的,因此在編寫程序的時候,應當盡量使用內(nèi)置函數(shù),避免出現(xiàn)效率瓶頸現(xiàn)象。NumPy具有許多顯著的特征,在這些特征的幫助下,NumPy成為速度最快和功能強大的數(shù)學計算庫。NumPy的常見特性如下所示。(1)具有一個強大的N維數(shù)組對象ndarray。(2)支持廣播功能函數(shù)。(3)整合C/C++/Fortran代碼的工具。(4)支持線性代數(shù)、傅里葉變換、隨機數(shù)生成等功能。NumPy屬于Python的第三方框架,可以使用pip安裝、wheel安裝和源碼安裝等安裝方式。使用pip安裝NumPy的步驟如下所示。第一步:在Windows中,NumPy安裝與普通的第三方庫安裝一樣,可以通過Python的包管理工具pip安裝,命令如下所示。第二步:安裝完成后,可以使用簡單的Python代碼進行測試,代碼如下所示。效果如圖2-2所示。二、ndarray對象ndarray對象是NumPy最重要的特性。ndarray對象是一系列同類型數(shù)據(jù)的集合,集合中元素的索引從0開始,并且ndarray中存放的每個元素在內(nèi)存中都有相同大小的存儲空間。ndarray對象由指針對象、數(shù)據(jù)類型、表示數(shù)組形狀的元組和跨度元組四個模塊組成。(1)指針對象,即指向數(shù)據(jù),也可以說是指向內(nèi)存或內(nèi)存映射文件中的一塊數(shù)據(jù)。(2)數(shù)據(jù)類型,即dtype,包括32、np.float32等。(3)表示數(shù)組形狀的元組,表示各維度大小的元組,比如arr[3][3]就是一個二維數(shù)組。(4)跨度元組,即stride,其中的整數(shù)指的是為了前進到當前維度下一個元素需要“跨過”的字節(jié)數(shù)。這里的跨度可以取負值。在NumPy中創(chuàng)建ndarray,需要調用array()函數(shù)來實現(xiàn)。該方法接受列表格式的參數(shù)后即可返回一個包含參數(shù)內(nèi)容的ndarray對象,代碼如下所示。效果如圖2-3所示。在NumPy中,每一個線性的數(shù)組稱為一個軸(axis),也就是維度(dimension)。二維數(shù)組本質上是以數(shù)組作為數(shù)組元素的數(shù)組,每個元素是一個一維數(shù)組。所以,一維數(shù)組就是NumPy中的軸(axis),第一個軸相當于底層數(shù)組,第二個軸是底層數(shù)組里的數(shù)組。通常可以對axis進行聲明。axis=0,表示沿著第0軸進行操作,即對每一列進行操作;axis=1,表示沿著第1軸進行操作,即對每一行進行操作。除了數(shù)組的維度和秩,還有一些常見的信息可通過ndarray提供的屬性進行查詢。NumPy的數(shù)組的常用屬性如表2-1所示。下面使用ndarray.ndim獲取數(shù)組a的維度,代碼如下所示。效果如圖2-4所示。三、NumPy數(shù)組創(chuàng)建NumPy創(chuàng)建數(shù)組時,除了使用array()方法外,還可以使用empty()、zeros()、ones()等方法。詳細說明如表2-2所示。語法格式如下所示。下面分別使用empty()、zeros()、ones()進行數(shù)組的創(chuàng)建,代碼如下所示。結果如圖2-5所示。四、NumPy數(shù)組操作在數(shù)據(jù)采集與分析的過程中,數(shù)據(jù)的處理尤為重要,比如數(shù)據(jù)篩選過濾、數(shù)據(jù)變換、數(shù)據(jù)去重等操作都必須以數(shù)組的操作為基礎。在NumPy當中包含了許多函數(shù),用來支持數(shù)組的操作,這些操作大致可以分為修改數(shù)組形狀、翻轉數(shù)組、修改數(shù)組維度、連接數(shù)組、分割數(shù)組、添加與刪除數(shù)組元素等六種。1.修改數(shù)組形狀修改數(shù)組形狀是指修改數(shù)組的維度和數(shù)組迭代器等屬性。NumPy當中修改數(shù)組形狀的方法分別為reshape()、flat()、flatten()、ravel(),如表2-3所示。2.翻轉數(shù)組在NumPy當中,用來翻轉數(shù)組的方法同樣有四種,分別為transpose()、ndarray.T、rollaxis()、swapaxes(),如表2-4所示。其中,transpose()方法與ndarray.T方法用于對數(shù)組的維度進行對換。語法格式如下所示。rollaxis()方法用于將數(shù)組向后滾動特定的軸到一個特定的位置。語法格式如下所示。swapaxes()方法用于將兩個指定軸上的元素進行對調。語法格式如下所示。3.修改數(shù)組維度修改數(shù)組維度指增加或減少數(shù)組的維度,以及拓展數(shù)組等操作。在NumPy中用于修改數(shù)組維度的方法有四種,分別為broadcast()、broadcast_to()、expand_dims()和squeeze()。數(shù)組維度修改方法如表2-5所示。如果數(shù)組a和b形狀相同,即滿足a.shape==b.shape,那么a?×?b的結果就是a與b數(shù)組的對應位相乘。這里有兩個必要條件,即維數(shù)相同,且各維度的長度相同。比如,一個4?×?3的二維數(shù)組與長為3的一維數(shù)組相加,等效于把數(shù)組b在二維上重復4次運算,如圖2-10所示。broadcast()方法在使用的時候需要傳入兩個參數(shù),分別為兩個數(shù)組,返回值即為廣播的結果。expand_dims()方法用來修改數(shù)組的維度,通過插入新的軸來擴展數(shù)組。squeeze()方法的作用是刪除數(shù)組中的一維條目。4.連接數(shù)組連接數(shù)組是指將兩個數(shù)組進行合并。在NumPy中連接數(shù)組有三種方法,分別是concatenate()、hstack()和vstack(),如表2-6所示。concatenate()函數(shù)用來連接形狀相同的兩個或者多個數(shù)組,即它們的shape值一樣,否則不能連接。hstack()與vstack()方法分別通過水平堆疊和豎直堆疊連接數(shù)組。5.分割數(shù)組在NumPy中,數(shù)據(jù)的分割同樣是必不可少的。目前,NumPy提供了三種分割數(shù)組的方法,根據(jù)不同方向實現(xiàn)數(shù)組的分割。數(shù)組分割方法如表2-7所示。split()方法可以將一個數(shù)組分割為多個子數(shù)組,與字符串的split方法一樣,實現(xiàn)對數(shù)組元素的拆分。語法格式如下所示。參數(shù)說明如下所示。(1)?ary:表示待分割的原始數(shù)組。(2)?indices_or_sections:類型為int或者一維數(shù)組,表示一個索引,或者表示分割位置。hsplit()和vsplit()方法用來在橫向和縱向分割數(shù)組,且與split()語法格式一致。6.添加與刪除數(shù)組元素在進行數(shù)組操作時,除了操作數(shù)組的形狀和軸以及連接數(shù)組等操作外,還可以對數(shù)組元素進行添加和刪除等操作。數(shù)組元素的添加與刪除方法如表2-8所示。append()函數(shù)用于在數(shù)組的末尾追加元素,語法格式如下所示。參數(shù)說明如下所示。(1)?arr:需要被添加values的數(shù)組。(2)?values:添加到數(shù)組arr中的值。insert()方法也可以在數(shù)組當中插入元素,與append()不同的是,insert()方法可以在數(shù)組的任意位置進行插入元素。語法格式如下所示。參數(shù)說明如下所示。(1)?arr:需要被插入值的數(shù)組。(2)?obj:要插入的位置。(3)?values:插入的數(shù)值。(4)?axis:為想要插入的維(按行或列插入),若不指定則表示插入時進行降維。NumPy的數(shù)組當中除了插入元素外,還可以使用delete()方法刪除元素。delete()語法格式如下所示。(1)?array:需要刪除元素的數(shù)組對象。(2)?obj:需要刪除的值,可以是單個元素,也可以是數(shù)組。(3)?axis:表示刪除的方向,如果不傳入這個參數(shù),元素刪除之后數(shù)組會默認展開。五、位運算函數(shù)數(shù)組的位運算操作包括按位與、按位或、按位取反、按位左移和按位右移等。NumPy中有對應的函數(shù)完成位運算操作。NumPy中的位運算函數(shù)如表2-9所示。1.按位與運算(bitwise_and())NumPy中使用bitwise_and()函數(shù)實現(xiàn)對數(shù)組中元素的二進制形式進行按位與的操作,上下均為1時取1,否則取0。2.按位或運算(bitwise_or())NumPy中使用bitwise_or()函數(shù)實現(xiàn)對數(shù)組中元素的二進制形式進行按位或的操作,上下有一個為1則為1,否則取0。3.按位取反運算(invert())NumPy中使用invert()函數(shù)實現(xiàn)對數(shù)組中元素的二進制形式進行按位取反操作。即“1”變成“0”,“0”變成“1”,對于有符號的二進制數(shù),最高位0表示正數(shù),最高位1表示負數(shù)。4.左移運算(left_shift())NumPy中使用left_shift()函數(shù)實現(xiàn)對數(shù)組中元素的二進制形式進行左移指定位數(shù)的運算操作,左移之后的空位用0補充,left_shift()接收兩個參數(shù),第一個參數(shù)為要左移位的數(shù)組,第二個參數(shù)為左移的位數(shù)。5.右移運算(right_shift())NumPy中使用right_shift()函數(shù)實現(xiàn)對數(shù)組中元素的二進制形式進行右移指定位數(shù)的運算操作,右移之后的空位用0補充,right_shift()函數(shù)和left_shift()函數(shù)的用法一致。六、數(shù)學函數(shù)NumPy中包含了大量的數(shù)學運算函數(shù),如數(shù)據(jù)的四舍五入、上下取整等,利用這些函數(shù)可輕松實現(xiàn)數(shù)組數(shù)據(jù)的數(shù)學運算操作。常用的數(shù)學函數(shù)如表2-10所示。1.四舍五入around()函數(shù)用來對數(shù)組進行批量的四舍五入操作。可以傳入兩個參數(shù)值,第一個參數(shù)是需要傳入要處理的數(shù)組,第二個參數(shù)是傳入一個整數(shù),表示保留的小數(shù)位數(shù),這個數(shù)默認是0。2.向下與向上取整floor()函數(shù)和ceil()函數(shù)是用來對數(shù)組進行向下取整和向上取整的,兩者的用法不盡相同。七、統(tǒng)計函數(shù)NumPy會提供一系列函數(shù),供用戶使用Python獲取數(shù)組的最大值和最小值以及一組數(shù)的方差和標準差等進行數(shù)據(jù)分析。常見的統(tǒng)計函數(shù)如表2-11所示。1.最大值與最小值(amax()與amin())函數(shù)amin()和函數(shù)amax()用于計算數(shù)組中的最小值和最大值,amin()與amax()函數(shù)接收兩個參數(shù),第一個參數(shù)表示需要進行計算的數(shù)組,第二個參數(shù)表示計算維度。2.最大值與最小值的差(ptp())ptp()函數(shù)用于獲取數(shù)組中的最大值與最小值的差值。3.平均值與中位數(shù)(mean()與median())median()函數(shù)用于獲取數(shù)組元素當中的中位數(shù),不同的軸上,對應的中位數(shù)不同;mean()函數(shù)用于計算數(shù)組中的算術平均數(shù)。4.加權平均值、方差和標準差(average()、var()和std())average()函數(shù)用于獲取數(shù)組的加權平均數(shù),std()函數(shù)用于獲取數(shù)組的標準差,var()函數(shù)用于獲取數(shù)組的方差。實際應用中,也可以通過mean()函數(shù)和特定的公式,計算出數(shù)組的標準差和方差。標準差的計算公式如下所示。方差的計算公式如下所示。5.排序(sort())sort()函數(shù)用于對數(shù)組的數(shù)據(jù)進行排序,語法如下所示。參數(shù)說明如下所示。(1)?a:要被排序的數(shù)組。(2)?axis:要被排序的方向。(3)?kind:排序方式,有三個可選方式:quicksort(快速排序)、mergesort(歸并排序)、heapsort(堆排序)。(4)?order:如果數(shù)組包含字段,則表示要排序的字段。任務2Pandas數(shù)據(jù)處理和分析本任務主要利用NumPy和Pandas的相關知識以及交易信息數(shù)據(jù)集實現(xiàn)用戶行為的分析。其中涉及NumPy的數(shù)組運算操作、Pandas中數(shù)據(jù)對象的創(chuàng)建、缺失值處理與過濾、聚合運算等內(nèi)容。本任務主要包含五個方面的內(nèi)容,如下所示。(1)創(chuàng)建項目,導入數(shù)據(jù)集。(2)查看數(shù)據(jù),分析數(shù)據(jù)缺失情況。(3)描述性統(tǒng)計分析,分析每一列。(4)聚合分析,分析消費行為的關聯(lián)情況。(5)統(tǒng)計分析結果,實現(xiàn)分析目的。【任務描述】一、Pandas簡介及安裝Pandas是一個開放源碼、BSD許可的庫,提供高性能、易操作的數(shù)據(jù)結構和數(shù)據(jù)分析工具。Pandas的名字衍生自術語“paneldata”(面板數(shù)據(jù))和“Pythondataanalysis”(Python數(shù)據(jù)分析)。Pandas是一個強大的分析結構化數(shù)據(jù)的工具集,基于NumPy(提供高性能的矩陣運算)實現(xiàn),用于數(shù)據(jù)挖掘和數(shù)據(jù)分析,同時也實現(xiàn)數(shù)據(jù)清洗。另外,Pandas還可以從各種文件格式比如CSV、JSON、SQL、MicrosoftExcel中導入數(shù)據(jù)。Pandas可以對數(shù)據(jù)進行各種運算操作,比如歸并、再成形、選擇、數(shù)據(jù)清洗和數(shù)據(jù)加工特征等。Pandas廣泛應用在學術、金融、統(tǒng)計學等各個數(shù)據(jù)分析領域,適用于處理以下類型的數(shù)據(jù):(1)與SQL或Excel表類似,含異構列的表格數(shù)據(jù)。(2)有序和無序(非固定頻率)的時間序列數(shù)據(jù)。(3)帶行列標簽的矩陣數(shù)據(jù),包括同構或異構型數(shù)據(jù)?!局R準備】(4)任意其他形式的觀測、統(tǒng)計數(shù)據(jù)集,數(shù)據(jù)轉入Pandas數(shù)據(jù)結構時不必事先標記。Pandas的安裝比較容易。NumPy安裝后,通過“pipinstallpandas”或下載源碼后使用“pythonsetup.pyinstall”均可安裝Pandas。安裝界面如圖2-41所示。Pandas安裝完成后,即可使用import進行Pandas引用并重命名為“pd”,示例如下所示。二、Pandas基礎1.?Series類型Series是一種一維數(shù)組對象,由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組與之相關的數(shù)據(jù)標簽(即索引)組成。Series數(shù)據(jù)類型的字符串表現(xiàn)形式為:索引在左邊,值在右邊。在使用Series時,還可以自己傳入索引的內(nèi)容來作為索引。在Series對象中,數(shù)據(jù)和索引具有兩個屬性,分別為values和index屬性,表示形式和索引對象。在創(chuàng)建Series數(shù)據(jù)對象時,除了使用類似NumPy中數(shù)組創(chuàng)建的方式,還可以使用Python中字典的方式創(chuàng)建,只需要將字典的數(shù)據(jù)傳輸給Series就可以實現(xiàn)創(chuàng)建。2.?DataFrame類型DataFrame是一個表格型的數(shù)據(jù)結構,含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,可以看作由Series組成的字典(共用同一個索引),數(shù)據(jù)以一個或多個二維塊存儲(不是列表、字典或別的一維數(shù)據(jù)結構)。data當中的每一組數(shù)據(jù)在DataFrame對象當中都作為一列來進行存儲。除此之外,DataFrame對象還有兩個索引,一個是橫向索引即數(shù)據(jù)的組名,另外一個是縱向索引,這個索引和Series當中的索引是等效的。DataFrame創(chuàng)建后,可以通過DataFrame對象提供的head()方法獲取前幾行的數(shù)據(jù),該方法如果不傳入?yún)?shù),會默認取得數(shù)據(jù)的前五行進行展示,若想要顯示指定的行,可以通過對應的參數(shù)進行輸出。DataFrame對象在使用的時候,還可以通過columns參數(shù)指定序列的方法對數(shù)據(jù)進行排序,指定序列之后,整體的數(shù)據(jù)會進行排序。DataFrame對象也可以使用類似于字典的方式獲取數(shù)據(jù)內(nèi)容,同時也可以使用屬性的方式獲取數(shù)據(jù)。3.?Pandas的匯總和計算功能Pandas對象擁有許多常見的數(shù)學和統(tǒng)計的方法,利用這些方法可以實現(xiàn)約簡和匯總統(tǒng)計。例如,從Series中提取單個值(最大值、平均值、中位數(shù))、從DataFrame對象的行或者列中提取一個Series對象等。常用方法如表2-12所示。1)?sum()sum()方法在使用的時候可以傳入axis的值,接收到axis的值以后會按照對應的軸求和,否則會全部求和。2)?idxmax()、idxmin()DataFrame對象在使用時,除了直接返回計算值,還可以進行間接統(tǒng)計,通過idxmax()和idxmin()兩種方法獲取最大值和最小值。3)?describe()describe()方法可以統(tǒng)計多種數(shù)據(jù),包括數(shù)據(jù)個數(shù)、平均數(shù)、最大值、最小值以及數(shù)值占比。4)?unique()Pandas提供的unique()方法,可以對數(shù)據(jù)進行去重操作,將數(shù)組當中的重復項全部除去,生成一組新的數(shù)據(jù),并進行返回。5)?value_counts()value_counts()方法用于查看Series數(shù)據(jù)中元素重復的次數(shù),并將結果以降序的順序排序,如果不想排序,則可以通過設置value_counts(sort=False)實現(xiàn)。value_counts()方法還是一個Pandas對象方法,即可以通過Pandas對象直接調用三、Pandas數(shù)據(jù)管理Pandas數(shù)據(jù)管理的方式可以分為兩種,分別是以文本形式的輸入/輸出、二進制數(shù)據(jù)格式的輸入/輸出。1.文本形式的輸入/輸出Pandas提供了一些將表格型數(shù)據(jù)轉化成DataFrame對象的方法。在這些方法中,最為常用的就是read_csv()和read_table(),本章節(jié)主要對這兩種方法展開敘述。數(shù)據(jù)轉化和讀取方法的使用如表2-13所示。Pandas的許多函數(shù)都有推斷功能,如read_csv()函數(shù),在使用時會自動判斷數(shù)據(jù)的類型,并且將數(shù)據(jù)類型保存下來。對于使用read_csv(?)函數(shù)的這個數(shù)據(jù)也可以使用read_table(?)方法進行讀取,讀取的時候需傳入一個參數(shù),這個參數(shù)是需要指定使用符號進行分隔。2.二進制數(shù)據(jù)格式的輸入/輸出在進行數(shù)據(jù)分析時,一般數(shù)據(jù)量都是非常龐大的,為了提高數(shù)據(jù)處理的性能,將數(shù)據(jù)保存為二進制的數(shù)據(jù)。Python中內(nèi)置了pickle序列化模塊,可以將數(shù)據(jù)轉化為二進制進行存儲。因此,每一個Pandas對象都有一個to_pickle()方法。四、Pandas數(shù)據(jù)聚合Pandas支持數(shù)據(jù)聚合。聚合指的是任何能夠從數(shù)組產(chǎn)生標量值的數(shù)據(jù)轉換過程,如mean()、count()、max()等都屬于聚合函數(shù)。但聚合前需要通過groupby()方法根據(jù)字段進行分組,再使用agg()函數(shù)指定所需聚合操作。在Pandas中,還可以通過自定義函數(shù)實現(xiàn)數(shù)據(jù)的聚合。任務1Requests數(shù)據(jù)采集
任務2BeautifulSoup文本解析任務1Requests數(shù)據(jù)采集本次任務基于Requests庫實現(xiàn)豆瓣電影排行信息的爬取,其中包含與HTTP請求相關的內(nèi)容、Requests的安裝和使用、爬蟲的實現(xiàn)、Requests實現(xiàn)爬蟲、爬取信息JSON化等內(nèi)容。本次任務的主要內(nèi)容如下:(1)安裝Requests,成功調用Requests庫。(2)分析豆瓣電影信息網(wǎng)站。(3)編寫代碼,爬取信息。(4)將爬取的信息JSON化,并輸出。【任務描述】一、網(wǎng)絡請求網(wǎng)絡請求是客戶端和服務器端進行數(shù)據(jù)交換的一種手段。通過網(wǎng)絡請求,客戶端可以從服務器端獲取需要的數(shù)據(jù),也可以在收到請求后返回數(shù)據(jù)。網(wǎng)絡請求過程如圖3-1所示??蛻舳艘@取某些信息,會通過網(wǎng)絡向服務器端發(fā)送一個請求,服務器端會對請求進行拆解,并通過自己的存儲空間或者數(shù)據(jù)庫搜索數(shù)據(jù),然后將數(shù)據(jù)返回到客戶端?!局R準備】1.?HTTP請求HTTP請求是指從客戶端到服務器端的請求消息,包括消息首行中、對資源的請求方法、資源的標識符及使用的協(xié)議。只有通過HTTP才能實現(xiàn)網(wǎng)絡請求。HTTP還規(guī)定了請求的數(shù)據(jù)格式、請求的頭部、采用的協(xié)議等內(nèi)容。HTTP請求都是通過URL發(fā)起的。URL的形式如圖3-2所示。每訪問一次,URL就進行一次網(wǎng)絡請求,每進行一次網(wǎng)絡請求,服務器端對應會收到一個網(wǎng)絡響應。例如,訪問百度網(wǎng)的地址/,打開瀏覽器,在地址欄輸入地址,按鼠標右鍵選擇“檢查”,對地址按下回車鍵,瀏覽器開發(fā)者工具的“Network”欄中會產(chǎn)生一個網(wǎng)絡請求,如圖3-3所示。每一個網(wǎng)絡請求都有Name、Status、Type、Initiator、Size、Time、Waterfall等屬性。屬性說明如表3-1所示。2.請求和響應請求是指從客戶端到服務器端的請求消息。一個完整的HTTP請求可以分為三個部分:請求行、請求頭、請求體。請求結構如圖3-4所示。請求行中包含請求的方法、請求的URL、協(xié)議版本及換行符號(CRLF);請求頭中包含多組鍵值對的數(shù)據(jù)和換行符號;請求體當中包含請求的主體。響應是指服務端對客戶端請求的回應。一個完整的響應同樣包含三個部分,分別是狀態(tài)碼、響應頭和響應體。響應頭中包含服務器的應答信息,即Content-Type、Data、Expires等內(nèi)容。一個響應最重要的內(nèi)容就是響應體,響應的正文數(shù)據(jù)、文件、圖片等信息都稱為響應體。例如,請求一個地址時,通過瀏覽器中的“Preview”就可以查看響應體的內(nèi)容。訪問百度網(wǎng)的響應信息如圖3-5所示。二、爬蟲基礎爬蟲是獲取網(wǎng)頁并提取和保存信息的自動化程序。如果將互聯(lián)網(wǎng)比作一張蜘蛛網(wǎng),爬蟲就是在網(wǎng)上爬行的蜘蛛,網(wǎng)上的每一個節(jié)點都可以當作一個網(wǎng)頁,蜘蛛爬到每一個節(jié)點就相當于訪問了網(wǎng)頁,而每一個節(jié)點又連著許多節(jié)點,這些節(jié)點就可以當作網(wǎng)頁內(nèi)的鏈接,因此爬蟲可以訪問所有的節(jié)點。爬蟲的架構如圖3-6所示。爬蟲調度器開啟后,爬蟲會指定一個鏈接(URL),爬蟲使用這個鏈接請求對應的資源,對頁面進行下載,下載后對網(wǎng)頁進行解析,網(wǎng)頁中包含的URL會繼續(xù)解析,直到解析完所有的URL就完成了一次爬取。整個爬取過程可以分為三個步驟,分別是爬取數(shù)據(jù)、提取信息以及保存數(shù)據(jù)。(1)每個爬蟲程序都有若干個請求和響應,響應的內(nèi)容是網(wǎng)頁的源代碼。(2)獲取到網(wǎng)頁的源代碼后,需要提取源代碼中有價值的信息。(3)最后一步就是將提取到的數(shù)據(jù)保存下來,以便于進行數(shù)據(jù)分析和處理。三、Requests簡介及安裝Requests是唯一一個非轉基因的PythonHTTP庫。在Requests之前,PythonHTTP庫就出現(xiàn)過urllib庫,但是由于urllib存在安全缺陷以及代碼冗余等,現(xiàn)在已經(jīng)很少使用。Requests庫建立在urllib之上,它解決了urllib存在的問題,而且允許用戶發(fā)送原始的HTTP1.1版本的請求。Requests的圖標如圖3-7所示。Requests的安裝簡單,可使用pip命令安裝。代碼如下所示。安裝完成后,使用import引入Requests庫,調用Requests的get()方法向發(fā)送請求,代碼如下所示。結果如圖3-8所示。四、Requests的基礎使用Requests爬蟲是利用Requests技術實現(xiàn)爬取網(wǎng)頁內(nèi)容的一種功能,但是在實現(xiàn)Requests爬蟲之前需要了解更多的Requests技術,否則會在實現(xiàn)Requests爬蟲的過程中遇到諸多問題。Requests可以使用get()方法和post()方法發(fā)送請求,除發(fā)起請求的方式不同外,get()和post()的參數(shù)和使用方法都相同。下面以get()方法為例,介紹如何使用Requests向URL發(fā)起請求。requests.get()請求方法包含的部分參數(shù)如表3-2所示。其中,**kwagrs包含的參數(shù)如表3-3所示。在使用requests.get()請求url時會返回一個Response對象,該對象包含了多個用于查看詳細信息的屬性。Response對象包含的部分屬性如表3-4所示。使用requests.get()方法訪問“”,并且使用params參數(shù)傳入請求數(shù)據(jù),請求數(shù)據(jù)會自動拼接到url上,代碼如下所示。此時調用res.url會顯示請求時的完整參數(shù),與人工拼接參數(shù)相比,這個功能的效率和準確度要高得多。Requests除了可以攜帶請求參數(shù)以外,還可以自定義請求的請求頭。請求頭由鍵值對組成,這些鍵值對包含了數(shù)據(jù)類型(Content-Type)、時間(Date)、跨域資源訪問(Access-Control-Allow-Origin)、用戶代理(User-Agent)等。在使用爬蟲爬取網(wǎng)頁數(shù)據(jù)時,需要通過請求頭將請求偽裝成從瀏覽器發(fā)出去的,因為許多網(wǎng)站設置了反爬蟲機制,會過濾掉來自除瀏覽器外的其他請求。偽裝成瀏覽器的方法就是設置用戶代理信息(User-Agent)。Requests庫除了在請求之前進行設置以外,還可以對輸出進行設置。通常情況下,Requests會自動解碼來自服務器的內(nèi)容,大多數(shù)unicode字符集都能被無縫解碼,但是有時候難免會出現(xiàn)亂碼,如圖3-10所示,這時可以通過設置輸出字符的編碼格式進行調整。一般設置res.encoding,即將字符集設置為“utf-8”即可解決。設計字符集的代碼如下所示。結果如圖3-11所示。另外,可以使用res.content、res.json()和res.text將輸出的內(nèi)容轉化成字節(jié)形式和JSON形式,三種方法相比較,res.content方法的使用率較低,res.json()和res.text的使用率較高。需要注意的是,如果使用res.json()轉化失敗,顯示轉化異常,則即使調用成功,也需要通過res.status_code(狀態(tài)碼)判斷請求是否成功,并查明出錯的原因。在日常生活中,我們在瀏覽器中登錄了某個網(wǎng)站,當我們第二次打開這個網(wǎng)站的時候不需要登錄,直接就是登錄狀態(tài),這種狀態(tài)一般會保持七天左右。實現(xiàn)這一功能使用的就是cookie功能,如果請求的響應中攜帶著cookie信息,則服務器就會通過res.cookies讀取cookie的內(nèi)容,并將cookie信息發(fā)送給客戶端。也可以通過在請求中設置cookies="要設置的cookies內(nèi)容"來實現(xiàn)這一功能,代碼如下所示。結果如圖3-12所示。五、Requests的高級使用Requests有許多高級用法,比如可以讓用戶跨請求保持某些參數(shù)的會話對象、請求和響應對象、SSL證書、事件掛鉤、代理等,掌握這些高級的用法是成為高級程序員的關鍵。1.會話對象會話對象能夠跨請求保持某些參數(shù),也會在同一個Session()實例發(fā)出的所有請求之間保持cookie。除此之外,會話對象還可以用來提升網(wǎng)絡性能,如果向同一主機發(fā)送多個請求,底層的TCP連接將會被重用,從而帶來顯著的性能提升。會話對象Session()方法的使用如下所示。運行上面的代碼也會對會話對象設置cookie的信息,如圖3-14所示。2.請求和響應對象每一個請求都是一個請求對象(Request),這個對象中包含了請求所需要的URL、請求頭、請求參數(shù)等內(nèi)容,這個對象會被發(fā)送到所請求的服務器。服務器對每次請求都會返回一個響應對象,服務器返回的時候不是返回數(shù)據(jù),而是返回一個Response對象,返回的所有信息都被包含在這個Response對象當中??梢酝ㄟ^“.”方法調用任意對象的內(nèi)容,代碼如下所示。結果如圖3-15所示。3.?SSL證書SSL證書是數(shù)字證書當中的一種,它類似于駕駛證、護照和營業(yè)執(zhí)照的電子副本。因為配置在服務器上,也稱為SSL服務器證書。SSL證書通過在客戶端瀏覽器和Web服務器之間建立一條SSL安全通道(SecureSocketLayer(SSL)),安全協(xié)議是由NetscapeCommunication公司設計開發(fā)。安全協(xié)議主要用來對用戶和服務器進行認證。Requests在使用HTTPS請求時,可以驗證SSL證書,這個功能就像web瀏覽器一樣。Requests的SSL驗證默認是開啟的,如果證書驗證失敗,Requests會拋出一個SSLError的界面。如果用戶沒有對網(wǎng)站設置SSL,就需要在請求中添加verify去傳入一個受信任的CA證書,比如certfile就是一個CA證書文件,配置CA證書文件方法如下所示。4.事件掛鉤Requests支持事件掛鉤,鉤子(hook)的主要作用是提前在可能增加功能的地方預設一個鉤子,當客戶需要重新修改或者增加這個地方的邏輯的時候,把擴展的類或者方法掛載到這個點即可。在Requests中,可以用鉤子來控制部分請求過程。5.代理Requests可以通過對請求設置proxies參數(shù)來設置代理,方法如下所示。任務2BeautifulSoup文本解析本任務主要介紹BeautifulSoup文本解析的使用。利用BeautifulSoup文本解析獲取“古詩文網(wǎng)”的詩文數(shù)據(jù),如圖3-22所示。【任務描述】通過Requests獲取到詩文數(shù)據(jù)以后使用BeautifulSoup的節(jié)點選擇器、方法選擇器以及CSS選擇器等功能將文檔內(nèi)容提取,并保存在文本文件中。本章節(jié)的主要內(nèi)容如下:(1)調入項目需要依賴的庫。(2)定義主函數(shù)和請求頭,獲取請求的數(shù)據(jù)。(3)編寫代碼,逐步拆解數(shù)據(jù),并將數(shù)據(jù)保存到文本文件當中。(4)運行代碼,查看輸出結果。一、BeautifulSoup環(huán)境安裝BeautifulSoup是一個Python的HTML/XML解析器,主要功能是解析和提取HTML/XML數(shù)據(jù),使用BeautifulSoup可以使用戶方便地從網(wǎng)頁中提取數(shù)據(jù)。BeautifulSoup在解析頁面源碼時,只需要將被解析的內(nèi)容作為參數(shù)傳遞給BeautifulSoup的構造對象,就可以完成網(wǎng)頁中節(jié)點、文字、元素的提取。除此之外,BeautifulSoup還會自動將輸入的文本轉化成unicode的編碼格式,輸出的文檔轉化為utf-8的格式。BeautifulSoup的解析效率是人工解析網(wǎng)頁效率的幾百倍,掌握BeautifulSoup的使用可以省去很多煩瑣的提取工作,提高工作效率。BeautifulSoup的安裝方法和其他庫的安裝方法一樣,使用Python的pip工具安裝,安裝工具名稱是beautifulsoup4。安裝代碼如下所示?!局R準備】服務器顯示如圖3-23結果,即為安裝成功。BeautifulSoup不僅支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,比如lxmlHTML解析器、lxmlXML解析器和html5lib解析器等。BeautifulSoup支持的解析器如表3-5所示。表3-5中的第三方解析器在使用時需要單獨安裝,若不安裝該解析器,BeautifulSoup會使用Python默認的解析庫。如安裝lxml解析庫的代碼如下所示。通過BeautifulSoup的一個使用示例來體現(xiàn)BeautifulSoup的強大之處,定義一個html結構的字符串。通過import引用BeautifulSoup,并使用BeautifulSoup構造對象,傳遞兩個參數(shù),第一個參數(shù)是需要解析的內(nèi)容,第二個參數(shù)是設置解析器的類型,之后調用prettify()方法將輸入的內(nèi)容按照標準的縮進格式輸出,代碼如下所示。結果如圖3-24所示。代碼中html結構的字符串并不是一個完整的HTML結構,因為body標簽和html標簽并沒有閉合。而BeautifulSoup在輸出結果中自動補全了body標簽和html標簽,即對于不標準的HTML字符串,BeautifulSoup可以自動進行更正。若要提取HTML頁面中的文本內(nèi)容,只需通過BeautifulSoup對象調用get_text()方法即可,代碼如下所示。結果如下圖所示。二、BeautifulSoup使用使用BeautifulSoup時,需要將一段文檔傳入BeautifulSoup的構造方法,就能得到一個文檔對象,可以傳入一段字符串或一個文件句柄。1.對象的種類BeautifulSoup會將HTML文檔轉換為一個復雜的樹形結構,這個樹上的每個節(jié)點都是Python對象,所有對象可以歸納為4種:Tag、NavigableString、BeautifulSoup和Comment,每個對象都有不同的含義和作用。1)?Tag對象Tag對象表示標簽。與XML和HTML中的Tag一樣,Tag對象在獲取屬性時默認通過字典的方式存儲,若要改變這些屬性需要使用為字典賦值的方式進行修改。Tag對象中主要有兩個屬性,如表3-6所示。2)?NavigableString對象NavigableString對象可以返回一個可遍歷的字符串。在BeautifulSoup中獲取的Tag(標簽)中間的字符串就用NavigableString類來包裝,因此,可以通過對象Tag的string屬性獲取到NavigableString類的對象。3)?BeautifulSoup對象BeautifulSoup對象表示一個頁面的所有內(nèi)容,也可以看作是一個Tag,這個Tag中包含所有的子標簽。BeautifulSoup與其他的Tag存在著不一樣的地方,比如“.attribute”是不存在的,因為文檔的頂級對象是沒有屬性的,再比如調用“.name”,只會輸出“document”。4)?Comment對象Comment對象是NavigableString對象的子類,在提取頁面數(shù)據(jù)方面,Tag對象和BeautifulSoup對象以及NavigableString對象可以實現(xiàn)所有的需求。對于一些特殊的需求,如獲取網(wǎng)頁的注釋,因為網(wǎng)頁中的注釋只會在網(wǎng)頁的源代碼中顯示,而不顯示在頁面中,可以使用Comment對象進行獲取。2.節(jié)點選擇器使用BeautifulSoup對象調用節(jié)點名稱可以獲取該節(jié)點,再通過調用string屬性就可以獲取節(jié)點內(nèi)的NavigableString字符串,但是如果遇到節(jié)點特別多,結構復雜的網(wǎng)頁時,使用這種方式就會顯得極為煩瑣。在選擇節(jié)點不能做到一步選擇到位時,可以先選擇一個元素作為節(jié)點,然后選擇其子節(jié)點、父節(jié)點、兄弟節(jié)點等,這就是關聯(lián)選擇。1)子節(jié)點選擇器使用BeautifulSoup對象選擇到一個節(jié)點以后,如需獲取這個節(jié)點的子節(jié)點(子節(jié)點是指當前節(jié)點中包含的節(jié)點),可以使用子節(jié)點選擇器,常用子節(jié)點選擇器分別為contents和children。屬性如表3-7所示。2)父節(jié)點選擇器包含當前節(jié)點的節(jié)點稱之為當前節(jié)點的父節(jié)點,父節(jié)點與子節(jié)點存在包含與被包含的關系,Tag對象和字符串對象都被包含在父節(jié)點當中的,通過parent和parents屬性可以獲取當前節(jié)點的父節(jié)點。屬性如表3-8所示。除了使用parent屬性獲取父節(jié)點,還可以使用parents獲取父節(jié)點。與parent不同的是,parents可以像children屬性一樣使用for循環(huán)遍歷,獲取a標簽后調用parents屬性,使用for循環(huán)進行輸出。3)兄弟節(jié)點如果兩個節(jié)點有一個共同的父節(jié)點,那它們就是兄弟節(jié)點,可以使用next_sibling屬性和previous_sibling屬性獲取兄弟節(jié)點。屬性如表3-9所示。3.方法選擇器方法選擇器常用于搜索文檔樹,因為文檔是結構化的,使用正確的方法搜索文檔樹能提高搜索的效率。常見的搜索文檔樹的方法選擇器有find_all()和find()方法,掌握這兩種方法的使用可以實現(xiàn)大多數(shù)情況的節(jié)點搜索,它們的使用和參數(shù)控制如下所示。1)?find_all()的使用find_all()方法可以搜索當前Tag的所有子節(jié)點,并判斷這些子節(jié)點是否符合過濾器的條件,返回結果為列表類型,常被用于獲取大型網(wǎng)頁結構。find_all()的語法如下所示。參數(shù)說明如下所示。(1)?name:可以查找所有名字為name的Tag,自動忽略字符串對象。(2)?attrs:指定名字的屬性,可以使用的參數(shù)值包括字符串、正則表達式、列表、True。(3)?string:string參數(shù)可以搜文檔中的字符串內(nèi)容,與name參數(shù)的可選值一樣,string參數(shù)可以接受字符串、正則表達式、列表、True。(4)?recursive:調用Tag的find_all()方法時,BeautifulSoup會檢索當前Tag的所有子孫節(jié)點,如果只想搜索Tag的直接子節(jié)點,可以使用參數(shù)recursive=False。(5)?**kwargs:表示傳遞可變長度的其他參數(shù),比如limit。2)?find()方法find()方法與find_all方法的區(qū)別在于,find_all()方法的返回結果是值(包含一個元素的列表),而find()方法直接返回結果;find_all()方法沒有找到目標時返回空列表,find()方法找不到目標時,返回None;find()與find_all()其余特點基本相似,find()支持find_all()當中的各種參數(shù),如下所示的獲取一項內(nèi)容的代碼是等效的。4.?CSS選擇器CSS選擇器是指BeautifulSoup使用CSS選擇器選取內(nèi)容和節(jié)點。CSS選擇器選擇提取內(nèi)容,使用時只需調用select()方法,傳入常規(guī)的CSS選擇器就可以實現(xiàn)節(jié)點的獲取,代碼如下所示。任務1re解析
任務2XPath解析任務1re解析正則表達式主要用于文本數(shù)據(jù),用來檢索、替換符合某個規(guī)則的文本。本任務將使用re模塊應用的正則表達式實現(xiàn)內(nèi)容的解析,主要內(nèi)容如下:(1)抓取頁面;(2)內(nèi)容截??;(3)數(shù)據(jù)提取。一、正則表達式概述正則表達式主要用于對字符串進行過濾,受到大多數(shù)程序設計語言的支持。在Python中,正則表達式對字符串的邏輯操作包含在re模塊中,能夠通過一個由“元字符”與“普通字符”組成的字符串規(guī)則,從已知的字符串或文本中選取符合規(guī)則的內(nèi)容。正則表達式元字符如表4-1所示?!救蝿彰枋觥俊局R準備】其中,在組成正則表達式的字符中,默認情況下元字符按由左至右的順序執(zhí)行,但不同的字符在正則表達式中發(fā)生的作用有先后之分,元字符優(yōu)先級為由上至下(見表4-1)。表4-2所示為一些常用的正則表達式。二、正則表達式的定義在re模塊中,正則表達式在發(fā)揮作用之前,需要被定義。默認定義正則表達式有兩種方式:一種是直接定義,只需在re模塊提供的相關方法中,直接使用由“元字符”與“普通字符”組成的字符串規(guī)則利用re模塊進行解釋性地匹配。語法格式如下所示。r=r'正則表達式'另一種方式是通過re模塊提供的compile()函數(shù),將正則表達式字符串預編譯成Pattern對象。與直接定義的方式相比,每次轉換正則表達式,compile()函數(shù)只進行一次正則表達式對象的轉換,之后不需轉換即可直接使用該對象進行匹配。語法格式如下所示。importrer=pile(pattern,flags)其中,Pattern表示正則表達式字符串;flags用于設置匹配模式,如忽略大小寫匹配、多行模式匹配等。需要注意的是,flags可以接受多個參數(shù)值,即可以設置多個匹配模式,參數(shù)值之間通過符號“|”連接。flags的常用參數(shù)值如表4-3所示。在使用compile()函數(shù)生成正則表達式后,結果會以Pattern對象的形式返回,這個對象是一個編譯后的正則表達式,編譯后不僅能夠復用和提升效率,也能夠通過相關屬性獲得正則表達式的多個信息。Pattern對象的常用屬性如表4-4所示。三、正則表達式的使用在Python中,re模塊提供了多個應用正則表達式操作字符串的方法,如字符串的查詢、替換、分割等。常用的正則表達式應用方法如表4-5所示。1.?match()在re模塊中,match()方法可以從字符串的指定位置查找符合正則表達式的內(nèi)容,也就是說,從起始位置就必須符合正則表達式的內(nèi)容。如果匹配成功,則返回一個Match對象;如果匹配失敗,則返回None。由于正則表達式的定義有兩種方式,因此,match()方法在使用時同樣有兩種方法,語法格式如下所示。importre#方法一:直接使用正則表達式re.match(pattern,string,flags)#方法二:使用正則表達式對象r=pile(pattern,flags)r.match(string,pos,endpos)參數(shù)說明如表4-6所示。match()方法在直接使用正則表達式時,會從字符串的首字母進行匹配;而使用正則表達式對象時,則可以指定起始位置、結束位置進行匹配。在匹配完成后,返回Match對象,這個對象只包含一次正則匹配的結果,可以通過相關屬性或方法獲取match()包含的信息。Match對象的常用屬性和方法如表4-7所示。2.?search()search()方法從指定位置開始查找符合正則表達式的第一個內(nèi)容,直到末尾,如果找到,則返回一個包含內(nèi)容的Match對象,否則返回None。search()方法與match()方法的使用方法基本相同。語法格式如下所示。importrere.search(pattern,string,flags)#從指定位置開始匹配r=pile(pattern,flags)r.search(string,pos,endpos)另外,search()方法在直接使用正則表達式時,同樣會從首字母開始;在使用正則表達式對象時,會從指定位置開始。3.?findall()和finditer()與match()方法和search()方法相比,findall()方法和finditer()方法是從字符串中查找符合正則表達式的所有內(nèi)容。其中,findall()方法將匹配結果以列表形式返回,而finditer()方法
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度餐飲廚房能源消耗分析與節(jié)能減排承包合同3篇
- 2025年度區(qū)塊鏈技術研究人員保密協(xié)議及項目合作條款3篇
- 2025年度時尚服飾品牌代理供貨合作協(xié)議4篇
- 2025年度二零二五年度生態(tài)旅游區(qū)場攤位租賃管理協(xié)議4篇
- 2025年度企業(yè)年會策劃與演出服務合同4篇
- 2025年度服裝服飾貨款抵押銷售合同范本4篇
- 2024石材石材石材運輸保險服務合作協(xié)議3篇
- 2025年度柴油發(fā)動機技術培訓合同4篇
- 2025年度體育賽事場地冠名權及推廣合作合同4篇
- 二零二五年度防盜門行業(yè)展會贊助合作合同3篇
- 2024版《53天天練單元歸類復習》3年級語文下冊(統(tǒng)編RJ)附參考答案
- 2025企業(yè)年會盛典
- 215kWh工商業(yè)液冷儲能電池一體柜用戶手冊
- 場地平整施工組織設計-(3)模板
- 交通設施設備供貨及技術支持方案
- 美容美發(fā)店火災應急預案
- 餐車移動食材配送方案
- 項目工程師年終總結課件
- 一年級口算練習題大全(可直接打印A4)
- 電動車棚消防應急預案
- 人力資源戰(zhàn)略規(guī)劃地圖
評論
0/150
提交評論