版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章
數(shù)據(jù)挖掘概述什么是數(shù)據(jù)挖掘1.2學(xué)習(xí)目標(biāo)1.11.31.41.51.6數(shù)據(jù)挖掘的基本步驟及方法數(shù)據(jù)挖掘與統(tǒng)計(jì)學(xué)的關(guān)系數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)的關(guān)系數(shù)據(jù)挖掘十大經(jīng)典算法數(shù)據(jù)挖掘的典型應(yīng)用1什么是數(shù)據(jù)挖掘WHATISDATAMINING1.1數(shù)據(jù)、信息、知識(shí)和智慧01數(shù)據(jù)數(shù)據(jù)是對(duì)客觀事物記錄下來的、可以鑒別的符號(hào)。數(shù)據(jù)經(jīng)過處理后仍然是數(shù)據(jù),處理數(shù)據(jù)是為了便于更好地解釋,只有經(jīng)過解釋,數(shù)據(jù)才有意義,才能夠成為信息。02信息信息是對(duì)客觀世界各種事物的特征的反映,是關(guān)于客觀事實(shí)的可通訊的知識(shí)。03知識(shí)知識(shí)是反映各種事物的信息進(jìn)入人們大腦,對(duì)神經(jīng)細(xì)胞產(chǎn)生作用后留下的痕跡,知識(shí)是由信息形成的智慧智慧是人類做出正確判斷的能力和對(duì)知識(shí)的正確使用,智慧可以回答為什么的問題,判斷是非、對(duì)錯(cuò)、好壞,關(guān)注未來,試圖理解過去沒有理解的東西04數(shù)據(jù)挖掘的定義數(shù)據(jù)源必須是真實(shí)的、大量的、有噪聲的。發(fā)現(xiàn)的知識(shí)是可接受、可理解、可運(yùn)用的。發(fā)現(xiàn)對(duì)用戶有價(jià)值的知識(shí)。并不要求發(fā)現(xiàn)放之四海而皆準(zhǔn)的知識(shí),僅支持特定的發(fā)現(xiàn)問題。數(shù)據(jù)挖掘的功能數(shù)據(jù)總結(jié)繼承于數(shù)據(jù)分析中的統(tǒng)計(jì)分析。數(shù)據(jù)總結(jié)目的是對(duì)數(shù)據(jù)進(jìn)行濃縮,給出它的緊湊描述。功能分類目的是構(gòu)造一個(gè)分類函數(shù)或分類模型,該模型能把數(shù)據(jù)庫(kù)中的數(shù)據(jù)項(xiàng)映射到給定類別中的某一個(gè)。聚類是把整個(gè)數(shù)據(jù)集分成不同的群組,目的是使群組與群組之間差別很明顯,而同一個(gè)群組之間的數(shù)據(jù)盡量相似。關(guān)聯(lián)分析尋找數(shù)據(jù)的相關(guān)性。兩種常用的技術(shù)是關(guān)聯(lián)規(guī)則和序列模式。預(yù)測(cè)把握分析對(duì)象發(fā)展的規(guī)律,對(duì)未來的趨勢(shì)做出預(yù)見。偏差檢測(cè)對(duì)分析對(duì)象中少數(shù)的、極端特例的描述,揭示內(nèi)在的原因。數(shù)據(jù)挖掘的發(fā)展簡(jiǎn)史數(shù)據(jù)挖掘起始于20世紀(jì)下半葉。這期間計(jì)算機(jī)領(lǐng)域的人工智能也取得了巨大進(jìn)展,進(jìn)入了機(jī)器學(xué)習(xí)階段。20世紀(jì)下半葉1989年8月召開的第11屆國(guó)際人工智能聯(lián)合會(huì)議的專題討論會(huì)上首次出現(xiàn)了知識(shí)發(fā)現(xiàn)(KDD)這個(gè)術(shù)語(yǔ)。1989年8月1995年在美國(guó)計(jì)算機(jī)年會(huì)上,開始把數(shù)據(jù)挖掘視為數(shù)據(jù)庫(kù)知識(shí)發(fā)現(xiàn)的一個(gè)基本步驟。1995年到目前為止,KDD的重點(diǎn)已經(jīng)從發(fā)現(xiàn)方法轉(zhuǎn)向了實(shí)踐應(yīng)用。而數(shù)據(jù)挖掘則是知識(shí)發(fā)現(xiàn)(KDD)的核心部分。到目前為止數(shù)據(jù)挖掘已經(jīng)成為一門比較成熟的交叉學(xué)科,并且數(shù)據(jù)挖掘技術(shù)也伴隨著信息技術(shù)的發(fā)展日益成熟起來。進(jìn)入21世紀(jì)2數(shù)據(jù)挖掘的基本步驟及方法TheBasicStepsandMethodsofDataMining1.2數(shù)據(jù)挖掘的基本步驟01問題定義02建立數(shù)據(jù)挖掘庫(kù)在開始數(shù)據(jù)挖掘之前,最先的也是最重要的要求就是熟悉領(lǐng)域知識(shí),弄清用戶的需求。要想充分發(fā)揮數(shù)據(jù)挖掘的價(jià)值,必須對(duì)目標(biāo)有一個(gè)清晰明確的定義,即決定到底想干什么。要進(jìn)行數(shù)據(jù)挖掘必須收集要挖掘的數(shù)據(jù)資源。一般建議把要挖掘的數(shù)據(jù)都收集到一個(gè)數(shù)據(jù)庫(kù)中,而不是采用原有的數(shù)據(jù)庫(kù)或數(shù)據(jù)倉(cāng)庫(kù)。03分析數(shù)據(jù)04調(diào)整數(shù)據(jù)分析數(shù)據(jù)的目的是找到對(duì)預(yù)測(cè)輸出影響最大的數(shù)據(jù)字段,和決定是否需要定義導(dǎo)出字段。針對(duì)問題的需求對(duì)數(shù)據(jù)進(jìn)行增刪,按照對(duì)整個(gè)數(shù)據(jù)挖掘過程的新認(rèn)識(shí)組合或生成一個(gè)新的變量,以體現(xiàn)對(duì)狀態(tài)的有效描述。05建立模型06測(cè)試模型建立模型是一個(gè)反復(fù)的過程。需要仔細(xì)考察不同的模型以判斷哪個(gè)模型對(duì)具體問題最有用。先用一部分?jǐn)?shù)據(jù)建立模型,然后再用剩下的數(shù)據(jù)來測(cè)試和驗(yàn)證這個(gè)模型。模型建立好之后,必須評(píng)價(jià)得到的結(jié)果、解釋模型的價(jià)值。從測(cè)試集中得到的準(zhǔn)確率只對(duì)用于建立模型的數(shù)據(jù)有意義。07實(shí)施模型建立并經(jīng)驗(yàn)證之后,可以有兩種主要的使用方法。第一種是提供給分析人員做參考;另一種是把此模型應(yīng)用到不同的數(shù)據(jù)集上。數(shù)據(jù)挖掘的任務(wù)任務(wù)關(guān)聯(lián)分析關(guān)聯(lián)分析的目的是找出數(shù)據(jù)庫(kù)中隱藏的關(guān)聯(lián)(簡(jiǎn)單關(guān)聯(lián)、時(shí)序關(guān)聯(lián)、因果關(guān)聯(lián))網(wǎng),用于發(fā)現(xiàn)隱藏在大型數(shù)據(jù)集中的令人感興趣的聯(lián)系。聚類分析聚類是把數(shù)據(jù)按照相似性歸納成若干類別,同一類中的數(shù)據(jù)彼此相似,不同類中的數(shù)據(jù)相異。分類分類就是找出一個(gè)類別的概念描述,它代表了這類數(shù)據(jù)的整體信息,即該類的內(nèi)涵描述,并用這種描述來構(gòu)造模型,一般用規(guī)則或決策樹模式表示?;貧w分析預(yù)測(cè)它是在分析自變量和因變量之間相關(guān)關(guān)系的基礎(chǔ)上,建立變量之間的回歸方程,并將回歸方程作為預(yù)測(cè)模型,根據(jù)自變量在預(yù)測(cè)期的數(shù)量變化來預(yù)測(cè)因變量關(guān)系并表現(xiàn)為相關(guān)關(guān)系。時(shí)序模式它是指通過時(shí)間序列搜索出的重復(fù)發(fā)生概率較高的模式。與回歸一樣,它也是用己知的數(shù)據(jù)預(yù)測(cè)未來的值,但這些數(shù)據(jù)的區(qū)別是變量所處時(shí)間的不同。偏差分析在偏差中包括很多有用的知識(shí),數(shù)據(jù)庫(kù)中的數(shù)據(jù)存在很多異常情況,發(fā)現(xiàn)數(shù)據(jù)庫(kù)中數(shù)據(jù)存在的異常情況是非常重要的。偏差檢驗(yàn)的基本方法就是尋找觀察結(jié)果與參照之間的差別。數(shù)據(jù)挖掘分析方法估值估值與分類類似,但估值最終的輸出結(jié)果是連續(xù)型的數(shù)值,估值的量并非預(yù)先確定。估值可以作為分類的準(zhǔn)備工作。它首先從數(shù)據(jù)中選出已經(jīng)分好類的訓(xùn)練集,在該訓(xùn)練集上運(yùn)用數(shù)據(jù)挖掘技術(shù),建立一個(gè)分類模型,再將該模型用于對(duì)沒有分類的數(shù)據(jù)進(jìn)行分類。分類預(yù)測(cè)其目的是發(fā)現(xiàn)哪些事情總是一起發(fā)生。相關(guān)性分組或關(guān)聯(lián)規(guī)則它是通過分類或估值來進(jìn)行,通過分類或估值的訓(xùn)練得出一個(gè)模型,如果對(duì)于檢驗(yàn)樣本組而言該模型具有較高的準(zhǔn)確率,可將該模型用于對(duì)新樣本的未知變量進(jìn)行預(yù)測(cè)。聚類它是自動(dòng)尋找并建立分組規(guī)則的方法,它通過判斷樣本之間的相似性,把相似樣本劃分在一個(gè)簇中。3數(shù)據(jù)挖掘與統(tǒng)計(jì)學(xué)的關(guān)系RelationshipbetweenDataMiningandStatistics1.3數(shù)據(jù)挖掘與統(tǒng)計(jì)學(xué)的聯(lián)系數(shù)據(jù)挖掘來源于統(tǒng)計(jì)分析,而又不同于統(tǒng)計(jì)分析。數(shù)據(jù)挖掘不是為了替代傳統(tǒng)的統(tǒng)計(jì)分析技術(shù),相反,數(shù)據(jù)挖掘是統(tǒng)計(jì)分析方法的擴(kuò)展和延伸。由于數(shù)據(jù)挖掘和統(tǒng)計(jì)分析根深蒂固的聯(lián)系,常用的據(jù)挖掘工具都能夠通過可選件或自身提供統(tǒng)計(jì)分析功能。這些功能對(duì)于數(shù)據(jù)挖掘的前期數(shù)據(jù)探索和數(shù)據(jù)挖掘之后對(duì)數(shù)據(jù)進(jìn)行總結(jié)和分析都是十分必要的。統(tǒng)計(jì)分析所提供的諸如方差分析、假設(shè)檢驗(yàn)、相關(guān)性分析、線性預(yù)測(cè)、時(shí)間序列分析等功能都有助于數(shù)據(jù)挖掘前期對(duì)數(shù)據(jù)進(jìn)行探索,發(fā)現(xiàn)數(shù)據(jù)挖掘的課題、找出數(shù)據(jù)挖掘的目標(biāo)、確定數(shù)據(jù)挖掘所需涉及的變量、對(duì)數(shù)據(jù)源進(jìn)行抽樣等等。所有這些前期工作會(huì)對(duì)數(shù)據(jù)挖掘的效果產(chǎn)生重大影響。而數(shù)據(jù)挖掘的結(jié)果也需要統(tǒng)計(jì)分析的描述功能(如最大值、最小值、平均值、方差、四分位、個(gè)數(shù)、概率分配等)進(jìn)行具體描述,使數(shù)據(jù)挖掘的結(jié)果能夠被用戶理解。因此,統(tǒng)計(jì)分析和數(shù)據(jù)挖掘是相輔相成的過程,兩者的合理配合是數(shù)據(jù)挖掘成功的重要條件。數(shù)據(jù)挖掘與統(tǒng)計(jì)學(xué)的區(qū)別數(shù)據(jù)挖掘常常是根據(jù)一個(gè)特定屬性去處理一個(gè)大數(shù)據(jù)集,這就意味著,傳統(tǒng)統(tǒng)計(jì)學(xué)由于可行性的原因,常常是利用一個(gè)樣本來分析處理,而所描述的樣本取自于那個(gè)大數(shù)據(jù)集。其實(shí)數(shù)據(jù)挖掘問題也常常是需要得到數(shù)據(jù)總體,例如關(guān)于一個(gè)公司的所有職工數(shù)據(jù),數(shù)據(jù)庫(kù)中的所有客戶資料,去年的所有業(yè)務(wù)等。在這種情形下,統(tǒng)計(jì)學(xué)的推斷就沒有價(jià)值了。很多情況下,數(shù)據(jù)挖掘的本質(zhì)是很偶然的發(fā)現(xiàn)、非預(yù)期但很有價(jià)值的信息。這說明數(shù)據(jù)挖掘過程本質(zhì)上是實(shí)驗(yàn)性的。這和確定性的分析是不同的,即它不能完全確定一個(gè)理論的,而是只能提供證據(jù)和不確定的證據(jù)。確定性分析著眼于最適合的模型,即建立一個(gè)推薦模型,這個(gè)模型也許不能很好的解釋觀測(cè)到的數(shù)據(jù)。而大部分統(tǒng)計(jì)分析提出的是確定性的分析。4數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)的關(guān)系RelationshipbetweenDataMiningandMachineLearning1.4數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)的聯(lián)系數(shù)據(jù)挖掘中用到了大量的機(jī)器學(xué)習(xí)提供的數(shù)據(jù)分析技術(shù)和數(shù)據(jù)庫(kù)提供的數(shù)據(jù)管理技術(shù)。學(xué)習(xí)能力是智能行為的一個(gè)非常重要的特征。不具有學(xué)習(xí)能力的系統(tǒng)很難稱之為一個(gè)真正的智能系統(tǒng),而機(jī)器學(xué)習(xí)則希望系統(tǒng)(計(jì)算機(jī))能夠利用經(jīng)驗(yàn)來改善自身的性能,因此該領(lǐng)域一直是人工智能的核心研究領(lǐng)域之一。在計(jì)算機(jī)系統(tǒng)中,“經(jīng)驗(yàn)”通常是以數(shù)據(jù)的形式存在的,因此,機(jī)器學(xué)習(xí)不僅涉及對(duì)人的認(rèn)知學(xué)習(xí)過程的探索,還涉及對(duì)數(shù)據(jù)的分析處理。實(shí)際上,機(jī)器學(xué)習(xí)已經(jīng)成為計(jì)算機(jī)數(shù)據(jù)分析技術(shù)的創(chuàng)新源頭之一。由于幾乎所有的學(xué)科都要面對(duì)數(shù)據(jù)分析任務(wù),因此機(jī)器學(xué)習(xí)已經(jīng)開始影響到計(jì)算機(jī)科學(xué)的眾多領(lǐng)域,甚至影響到計(jì)算機(jī)科學(xué)之外的很多學(xué)科。機(jī)器學(xué)習(xí)是數(shù)據(jù)挖掘中的一種重要工具。然而數(shù)據(jù)挖掘不僅僅要研究、拓展、應(yīng)用一些機(jī)器學(xué)習(xí)方法,還要通過許多非機(jī)器學(xué)習(xí)技術(shù)解決數(shù)據(jù)倉(cāng)儲(chǔ)、大規(guī)模數(shù)據(jù)、數(shù)據(jù)噪聲等實(shí)踐問題。數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)的區(qū)別數(shù)據(jù)挖掘機(jī)器學(xué)習(xí)數(shù)據(jù)挖掘使用了大量的機(jī)器學(xué)習(xí)算法,也使用了一系列的工程技術(shù)。機(jī)器學(xué)習(xí)是以統(tǒng)計(jì)學(xué)為支撐的一門面向理論的學(xué)科,其不需要考慮諸如數(shù)據(jù)倉(cāng)庫(kù),OLAP等應(yīng)用工程技術(shù)數(shù)據(jù)挖掘是從目的而言的,常用在數(shù)據(jù)挖掘上的方法只是“從數(shù)據(jù)學(xué)習(xí)”機(jī)器學(xué)習(xí)是從方法而言的,機(jī)器學(xué)習(xí)不僅僅可以用在數(shù)據(jù)挖掘上,一些機(jī)器學(xué)習(xí)的子領(lǐng)域甚至與數(shù)據(jù)挖掘關(guān)系不大,如增強(qiáng)學(xué)習(xí)與自動(dòng)控制等。數(shù)據(jù)挖掘則是使用了包括機(jī)器學(xué)習(xí)算法在內(nèi)的眾多知識(shí)的一門應(yīng)用學(xué)科,它主要是使用一系列處理方法挖掘數(shù)據(jù)背后的信息。機(jī)器學(xué)習(xí)是一門更加偏向理論性學(xué)科,其目的是為了讓計(jì)算機(jī)不斷學(xué)習(xí)找到接近目標(biāo)函數(shù)f的假設(shè)h。5數(shù)據(jù)挖掘十大經(jīng)典算法TenClassicAlgorithmsforDataMining1.5數(shù)據(jù)挖掘十大經(jīng)典算法01C4.5C4.5算法是機(jī)器學(xué)習(xí)算法中的一種分類決策樹算法,其核心算法是ID3算法.C4.5算法有如下優(yōu)點(diǎn):產(chǎn)生的分類規(guī)則易于理解,準(zhǔn)確率較高。其缺點(diǎn)是:在構(gòu)造樹的過程中,需要對(duì)數(shù)據(jù)集進(jìn)行多次的順序掃描和排序,因而導(dǎo)致算法的低效。02K-MeansK-Means算法是一種聚類算法,把n個(gè)對(duì)象根據(jù)它們的屬性分為k個(gè)簇,k<n。它與處理混合正態(tài)分布的最大期望算法很相似,因?yàn)樗鼈兌荚噲D找到數(shù)據(jù)中自然聚類的中心。它假設(shè)對(duì)象屬性來自于空間向量,并且目標(biāo)是使各個(gè)簇內(nèi)部的均方誤差總和最小。03支持向量機(jī)支持向量機(jī)是一種監(jiān)督式學(xué)習(xí)的方法,它廣泛的應(yīng)用于統(tǒng)計(jì)分類以及回歸分析中。支持向量機(jī)將向量映射到一個(gè)更高維的空間里,在這個(gè)空間里建立一個(gè)最大間隔超平面。在分開數(shù)據(jù)的超平面的兩邊建有兩個(gè)互相平行的超平面。分隔超平面使兩個(gè)平行超平面的距離最大化。04AprioriApriori算法是一種最有影響的挖掘布爾關(guān)聯(lián)規(guī)則頻繁項(xiàng)集的算法。其核心是基于兩階段頻繁項(xiàng)集思想的遞推算法。該關(guān)聯(lián)規(guī)則在分類上屬于單維、單層、布爾關(guān)聯(lián)規(guī)則。在這里,所有支持度大于最小支持度的項(xiàng)集稱為頻繁項(xiàng)集。然后由頻繁項(xiàng)集產(chǎn)生強(qiáng)關(guān)聯(lián)規(guī)則,這些規(guī)則必須滿足最小支持度和最小可信度。05EM在統(tǒng)計(jì)計(jì)算中,最大期望EM(ExpectationMaximization)算法是在概率模型中尋找參數(shù)最大似然估計(jì)的算法,其中概率模型依賴于無法觀測(cè)的隱藏變量。最大期望算法經(jīng)常應(yīng)用于機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺的數(shù)據(jù)集聚領(lǐng)域。數(shù)據(jù)挖掘十大經(jīng)典算法06PageRankPageRank算法又稱網(wǎng)頁(yè)排名,它是根據(jù)網(wǎng)站外部鏈接和內(nèi)部鏈接的數(shù)量和質(zhì)量來衡量網(wǎng)站的價(jià)值。算法原理為:每個(gè)到頁(yè)面的鏈接都是對(duì)該頁(yè)面的一次投票,被鏈接的越多,就意味著被其他網(wǎng)站投票越多,這個(gè)就是所謂的“鏈接流行度”,由此來衡量多少人愿意將他們的網(wǎng)站和該網(wǎng)站掛鉤。07AdaBoostAdaboost是一種迭代算法,其核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構(gòu)成一個(gè)更強(qiáng)的最終分類器(強(qiáng)分類器)。其算法本身是通過改變數(shù)據(jù)分布來實(shí)現(xiàn)的,它根據(jù)每次訓(xùn)練集之中每個(gè)樣本的分類是否正確,以及上次的總體分類的準(zhǔn)確率,來確定每個(gè)樣本的權(quán)值。08KNNKNN算法也稱為K最近鄰分類算法,是一個(gè)理論上比較成熟的方法,也是最簡(jiǎn)單的機(jī)器學(xué)習(xí)算法之一。該方法的原理是:如果一個(gè)樣本在特征空間中的k個(gè)最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個(gè)類別,則該樣本也屬于這個(gè)類別。09NaiveBayes樸素貝葉斯模型發(fā)源于古典數(shù)學(xué)理論,有著堅(jiān)實(shí)的數(shù)學(xué)基礎(chǔ)及穩(wěn)定的分類效率。同時(shí),NBC模型所需估計(jì)的參數(shù)很少,對(duì)缺失數(shù)據(jù)不太敏感,算法也比較簡(jiǎn)單。在屬性個(gè)數(shù)比較多或者屬性之間相關(guān)性較大時(shí),NBC模型的分類效率比不上決策樹模型。而在屬性相關(guān)性較小時(shí),NBC模型的性能最為良好。10CARTCART算法也稱為分類與回歸樹。在分類樹下面有兩個(gè)關(guān)鍵的思想。第一個(gè)是關(guān)于遞歸地劃分自變量空間的想法(二元切分法);第二個(gè)想法是用驗(yàn)證數(shù)據(jù)進(jìn)行剪枝(預(yù)剪枝、后剪枝)。在回歸樹的基礎(chǔ)上的模型樹構(gòu)建難度可能增加了,但同時(shí)其分類效果也有提升。6數(shù)據(jù)挖掘的典型應(yīng)用TypicalApplicationsofDataMining1.6數(shù)據(jù)挖掘的典型應(yīng)用應(yīng)用于醫(yī)學(xué)方面,提高診斷準(zhǔn)確率眾所周知,人體奧秘?zé)o窮無盡,遺傳密碼、人類疾病等方面都蘊(yùn)含了海量數(shù)據(jù)信息。而傳統(tǒng)研究模式,單純依靠人工無法探索真正的秘密。而利用數(shù)據(jù)挖掘技術(shù)能夠有效解決這些問題,給醫(yī)療工作者帶來了極大的便利。同時(shí),醫(yī)療體制改革背景下,醫(yī)院內(nèi)部醫(yī)療器具的管理、病人檔案資料整理等方面同樣涉及數(shù)據(jù),引進(jìn)數(shù)據(jù)挖掘技術(shù),能夠深入分析疾病之間的聯(lián)系及規(guī)律,幫助醫(yī)生診斷和治療,以達(dá)到事半功倍的效果,為保障人類健康等提供強(qiáng)大的技術(shù)支持。應(yīng)用于金融方面,提高工作有效性銀行及金融機(jī)構(gòu)中涉及儲(chǔ)蓄、信貸等大量數(shù)據(jù)信息。利用數(shù)據(jù)挖掘技術(shù)管理和應(yīng)用這些數(shù)據(jù)信息,能夠幫助金融機(jī)構(gòu)更好地適應(yīng)互聯(lián)網(wǎng)金融時(shí)代的發(fā)展趨勢(shì)。提高金融數(shù)據(jù)的完整性、可靠性,為金融決策提供科學(xué)依據(jù)。金融市場(chǎng)變幻莫測(cè),要想在競(jìng)爭(zhēng)中提升自身核心競(jìng)爭(zhēng)力,需要對(duì)數(shù)據(jù)進(jìn)行多維分析和研究。在應(yīng)用中,特別是針對(duì)偵破洗黑錢等犯罪活動(dòng),可以采取孤立點(diǎn)分析等工具進(jìn)行分析,為相關(guān)工作有序開展奠定堅(jiān)實(shí)的基礎(chǔ)。數(shù)據(jù)挖掘的典型應(yīng)用應(yīng)用于高校日常管理方面,實(shí)現(xiàn)高校信息化建設(shè)當(dāng)前,針對(duì)高校中存在的貧困大學(xué)生而言,受到自身家庭等因素的影響,他們學(xué)業(yè)與生活存在很多困難,而高校給予了貧困生很多幫助。為此將數(shù)據(jù)挖掘技術(shù)引入到貧困生管理工作中,能夠?qū)⑿?nèi)貧困生群體作為主要研究對(duì)象,采集和存儲(chǔ)在校生生活、學(xué)習(xí)等多方面信息,然后構(gòu)建貧困生認(rèn)定模型,并將此作為基礎(chǔ)進(jìn)行查詢和統(tǒng)計(jì),為貧困生的管理工作提供技術(shù)支持,從而提高高校學(xué)生管理質(zhì)量和效率,促進(jìn)高校和諧、有序發(fā)展。應(yīng)用于電信方面,實(shí)現(xiàn)經(jīng)濟(jì)效益最大化目標(biāo)現(xiàn)代社會(huì)發(fā)展趨勢(shì)下,電信產(chǎn)業(yè)已經(jīng)不僅限于傳統(tǒng)意義上的語(yǔ)音服務(wù)提供商,而將語(yǔ)音、文字、視頻等有機(jī)整合成為一項(xiàng)數(shù)據(jù)通信綜合業(yè)務(wù)。電信網(wǎng)、因特網(wǎng)等網(wǎng)絡(luò)已經(jīng)融合在一起,在該背景下,數(shù)據(jù)挖掘技術(shù)應(yīng)用能夠幫助運(yùn)營(yíng)商更好地開展業(yè)務(wù),如利用多維分析電信數(shù)據(jù);或者采用聚類等方法查找異常狀態(tài)及盜用模式等,不斷提高數(shù)據(jù)資源利用率,為深入地了解用戶行為,促進(jìn)電信業(yè)務(wù)的推廣及應(yīng)用,從而實(shí)現(xiàn)經(jīng)濟(jì)效益最大化目標(biāo)。本章結(jié)束啦!歡迎課后繼續(xù)交流~第2章
Python數(shù)據(jù)分析基礎(chǔ)FundamentalsofPythondataanalysisPython程序概述2.2學(xué)習(xí)目標(biāo)2.12.32.4Python常用的內(nèi)置數(shù)據(jù)結(jié)構(gòu)正則表達(dá)式文件操作1Python程序概述OverviewofPythonProgramsChapter012.1.1基礎(chǔ)數(shù)據(jù)類型數(shù)據(jù)類型在數(shù)據(jù)結(jié)構(gòu)中定義為一組性質(zhì)相同值的集合以及定義在這個(gè)集合上一組操作的總稱。Python3中有六種標(biāo)準(zhǔn)的數(shù)據(jù)類型:Number(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Set(集合)和Dictionary(字典)。其中,不可變數(shù)據(jù)類型有Number、String和Tuple;可變數(shù)據(jù)類型有List、Dictionary和Set。2.1.2變量和賦值
變量是用來存儲(chǔ)數(shù)據(jù)的,它是程序中一個(gè)已經(jīng)命名的存儲(chǔ)單元。變量具有名字和數(shù)據(jù)類型,Python中的變量使用前不需要聲明數(shù)據(jù)類型,但必須賦值,僅當(dāng)變量賦值后才會(huì)被創(chuàng)建。賦值號(hào)為“=”,同一變量可以反復(fù)賦值,而且可以是不同類型的值。例2.1
變量賦值示例。a,b,c=12,’Python’,34.567print(a,b,c)
2.1.3操作符和表達(dá)式Python的算術(shù)表達(dá)式具有結(jié)合性和優(yōu)先級(jí)。結(jié)合性是指表達(dá)式按照從左到右、先乘除后加減的原則進(jìn)行計(jì)算。Python運(yùn)算符及優(yōu)先級(jí)如表所示。優(yōu)先級(jí)運(yùn)算符說明1**指數(shù)2~、+、-按位翻轉(zhuǎn)、一元加號(hào)、減號(hào)(正負(fù)號(hào))3*、/、%、//乘,除,取模、取整除4+、-加法、減法5>>、<<右移、左移運(yùn)算符6&按位與7^、|按位異或、按位或8<=、<、>、>=小于等于、小于、大于、大于等于9==、!=等于、不等于10=、%=、/=、//=、-=、+=、*=、**=賦值、取模賦值、除法賦值、整除賦值、減法賦值、加法賦值、乘法賦值、冪賦值
加法賦值、乘法賦值、冪運(yùn)算賦值11is、isnot同一對(duì)象、不同對(duì)象12in、notin屬于、不屬于13not、or、and非、或、與2.1.3操作符和表達(dá)式
表達(dá)式是運(yùn)算符和操作數(shù)所構(gòu)成的序列。Python中運(yùn)算符的優(yōu)先級(jí)也可以用括號(hào)來改變,就和數(shù)學(xué)公式里面一樣,先計(jì)算最里面的括號(hào),之后就是外面的括號(hào)。此外,Python還支持形如3<4<5的表達(dá)式。2.1.4字符串——轉(zhuǎn)義字符
所謂轉(zhuǎn)義字符是指那些字符串里具有特殊含義的字符,它們是以反斜杠(“\”)開頭的。Python中常用的轉(zhuǎn)義字符如表所示。轉(zhuǎn)義字符說明\n換行符,將光標(biāo)位置移到下一行開頭\r回車符,將光標(biāo)位置移到本行開頭\t水平制表符,即Tab鍵,一般相當(dāng)于4~8個(gè)空格\b退格(Backspace),將光標(biāo)位置移到前一列\(zhòng)在字符串行尾的續(xù)行符,即一行未完,轉(zhuǎn)到下一行繼續(xù)寫2.1.4字符串——轉(zhuǎn)義字符(1)轉(zhuǎn)義字符在書寫形式上由多個(gè)字符組成,但Python
將它們看作是一個(gè)整體,表示一個(gè)字符。例2.2
轉(zhuǎn)義字符示例。info="Python教程:/python/\n\C++教程:/cplus/\n\Linux教程:/linux_tutorial/"print(info)運(yùn)行結(jié)果如圖所示。2.1.4字符串——轉(zhuǎn)義字符(2)Python允許用'r'或'R'表示字符串內(nèi)部的字符不轉(zhuǎn)義。例2.3
轉(zhuǎn)義字符示例。print('\\\t\\')print(r'\\\t\\')運(yùn)行結(jié)果如圖2.2所示。2.1.4字符串——轉(zhuǎn)義字符(3)Python允許用'''...'''的格式表示多行內(nèi)容的字符串。例2.4
多行內(nèi)容的字符串示例。print('''line1...line2...line3''')運(yùn)行結(jié)果如圖2.3所示。2.1.4字符串——常用操作(1)字符串運(yùn)算字符串的常用運(yùn)算如表所示,其中str1=’Hello’,str2=’Python’。運(yùn)算符說明示例結(jié)果+字符串連接str1+str2HelloPython*重復(fù)輸出字符串str1*2HelloHelloin判斷子串是否屬于字符串'th'instr2Truenotin判斷子串是否不屬于字符串'th'notinstr2False2.1.4字符串——常用操作(2)字符串切片
字符串的本質(zhì)就是字符序列,可以通過在字符串后面添加[],在[]里面指定偏移量,用于提取該位置的單個(gè)字符。①
正向搜索:最左側(cè)第一個(gè)字符,偏移量是0,第二個(gè)偏移量是
1,以此類推。直到len(str)-1為止。其中str為字符串變量。②
反向搜索:最右側(cè)第一個(gè)字符,偏移量是-1,倒數(shù)第二個(gè)偏移量是-2,以此類推,直到-len(str)為止。其中str為字符串變量。
切片(slice)操作可以快速的提取子字符串。標(biāo)準(zhǔn)格式為:
<字符串>[start:end:step]
其中start、end和step都是整數(shù),分別表示起始偏移量、終止偏移量和步長(zhǎng)。提取字符串操作遵循著“左閉右開”的原則。
假設(shè)str='Pythonprogram',當(dāng)start、end、step全為正數(shù)情況下的典型操作如表2.4所示。2.1.4字符串——常用操作操作格式說明示例結(jié)果[:]提取整個(gè)字符串str[:]Pythonprogram[start:]從start索引開始到結(jié)尾str[4:]onprogram[:end]從頭開始直到end-1str[:10]Pythonpro[start:end]從start到end-1str[4:10]onpro[start:end:step]從start提取到end-1,步長(zhǎng)是stepstr[4:14:2]orga[:end]從開始到倒數(shù)-end個(gè)字符str[:-4]Pythonpro[start:end]從倒數(shù)第-start個(gè)到倒數(shù)第-end字符str[-10,-3]onprog[::step]從末尾開始,自右向左反向提取,步長(zhǎng)-stepstr[::-2]mropnhy2.1.4字符串——常用方法字符串的常用方法如表2.6所示。假設(shè)str='classtissla\n',jn1='-'。方法說明示例結(jié)果len()字符串長(zhǎng)度len(str)12strip()去掉字符串兩端的空格和換行符str.strip()classtisslacount(<子串>)查找子串在字符串中出現(xiàn)的次數(shù)str.count('ss')2find(<子串>)找到子串返回下標(biāo),多個(gè)時(shí)返回第一個(gè)str.find('ss')3replace(<串1>,<串2>)在字符串中<串1>被<串2>替換str.replace('ss','gg')claggtiggla\nsplit(<子串>)利用子串切割字符串str.split('ss')'cla','ti','la\n'join(<字符串>)將序列中的元素以指定的字符連接生成一個(gè)新的字符串。jn1.join(str)c-l-a-s-s-t-i-s-s-l-a-2.1.5流程控制——語(yǔ)句塊
在Python中,語(yǔ)句塊(Statement-block)是在條件為真(條件語(yǔ)句)時(shí)執(zhí)行或者執(zhí)行多次(循環(huán)語(yǔ)句)的一組語(yǔ)句。在代碼前放置空格來縮進(jìn)語(yǔ)句即可創(chuàng)建語(yǔ)句塊,語(yǔ)句塊中的每行必須具有同樣的縮進(jìn)量。
Python編程中的流程控制語(yǔ)句分為順序語(yǔ)句、分支語(yǔ)句和循環(huán)語(yǔ)句,其中順序語(yǔ)句不需要單獨(dú)的關(guān)鍵字來控制,就是一行行的執(zhí)行,也不需要特殊的說明。這里主要介紹的是分支語(yǔ)句和循環(huán)語(yǔ)句。2.1.5流程控制——分支語(yǔ)句
分支語(yǔ)句是通過條件表達(dá)式的判斷結(jié)果(True/False)來決定執(zhí)行哪個(gè)分支的代碼塊。Python中提供的分支語(yǔ)句為:if…else語(yǔ)句。有以下幾種形式:
(1)單分支if<condition>:<statementblock>
(2)雙分支if<condition>:<statement_block_1>else:<statement_block_2>
(3)多分支if<condition_1>:<statement_block_1>elif<condition_2>:<statement_block_2>......elif<condition_n>:<statement_block_n>else:
<default_statement_block>
其中各語(yǔ)句塊中的行必須具有相同的縮進(jìn)量,但不同語(yǔ)句塊之間的縮進(jìn)量可以不同。2.1.5流程控制——分支語(yǔ)句例2.5輸入學(xué)生的成績(jī),利用多分支判斷出該成績(jī)符合的等級(jí)。90分以上為優(yōu),80~89為良,70~79為中,60~69為及格,60分以下為不及格。程序語(yǔ)句如下:score=input('請(qǐng)輸入成績(jī):')
#手動(dòng)輸入成績(jī)score=int(score)
#將輸入的字符串轉(zhuǎn)換為數(shù)值ifscore>=90andscore<=100:print('優(yōu)')elifscore>=80:print('良')elifscore>=70:print('中')elifscore>=60:print('及格')elifscore>=0andscore<60:print('不及格')else:
#輸入>100或<0的分?jǐn)?shù)時(shí)報(bào)錯(cuò)
print('成績(jī)輸入錯(cuò)誤!')2.1.5流程控制——循環(huán)語(yǔ)句
當(dāng)需要多次執(zhí)行一個(gè)代碼語(yǔ)句或代碼塊時(shí),可以使用循環(huán)語(yǔ)句。Python中提供的循環(huán)語(yǔ)句有:while循環(huán)和for循環(huán)。(1)while循環(huán)語(yǔ)句
while循環(huán)語(yǔ)句的基本形式如下:while<condition>:
<statement_block>(2)for循環(huán)
for循環(huán)的基本形式:for<variable>in<string|range|set>:
<statement_block>2.1.5流程控制——循環(huán)語(yǔ)句例2.6用輾轉(zhuǎn)相除法求最大公約數(shù)。具體方法為:兩個(gè)正整數(shù)a和b,它們的最大公約數(shù)等于a除以b的余數(shù)r和b之間的最大公約數(shù)。程序語(yǔ)句如下:a=int(input('輸入正整數(shù)a:'))b=int(input('輸入正整數(shù)b:'))ifa<b:a,b=b,ar=a%bwhiler!=0:a,b=b,rr=a%bprint(’最大公約數(shù):’+str(b))2.1.6用戶函數(shù)Python用戶函數(shù)是預(yù)先組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一或相關(guān)聯(lián)功能的代碼段。函數(shù)能提高應(yīng)用的模塊性和代碼的重復(fù)利用率。函數(shù)僅在調(diào)用時(shí)運(yùn)行,它將數(shù)據(jù)(稱為參數(shù))傳遞到函數(shù)內(nèi)進(jìn)行處理,最后把結(jié)果數(shù)據(jù)返回。在Python中,使用
def關(guān)鍵字定義函數(shù),語(yǔ)句形式為:def<function_name>(arguments):<statement_block>[return[returned_value]]2.1.6用戶函數(shù)例2.7
定義判定素?cái)?shù)的函數(shù),利用該函數(shù)輸出100~200之間素?cái)?shù)的個(gè)數(shù)。defis_prime(n):mark=Trueforiinrange(2,n//2+1):ifn%i==0:mark=Falsereturnmarknum=0forkinrange(100,201):ifis_prime(k):num=num+1print('100~200之間素?cái)?shù)個(gè)數(shù)為'+str(num))2.1.7lambda函數(shù)lambda函數(shù)在Python編程語(yǔ)言中使用頻率非常高,使用起來非常靈活、巧妙。該函數(shù)是匿名函數(shù),即沒有名字的函數(shù)。lambd
函數(shù)的語(yǔ)法只包含一個(gè)語(yǔ)句,常用形式為:lambda[arg_1[,arg_2,…,arg_n]]:expression
其中l(wèi)ambda
是
Python預(yù)留的關(guān)鍵字;arg_1、arg_2、…、arg_n是參數(shù)列表,它的結(jié)構(gòu)與
Python中函數(shù)的參數(shù)列表是一樣的;expression是單行的、唯一的參數(shù)表達(dá)式。lambd
函數(shù)返回通過計(jì)算表達(dá)式expression得到的值。
如用戶定義函數(shù):defsum(x,y):returnx+y
用lambda來實(shí)現(xiàn)為:p=lambdax,y:x+yprint(p(4,6))lambda函數(shù)可以接收任意多個(gè)參數(shù)(包括可選參數(shù)),只能返回單個(gè)表達(dá)式的值。如:a=lambdax,y,z:(x+8)*y-zprint(a(5,6,8))2Python常用的內(nèi)置數(shù)據(jù)結(jié)構(gòu)Built-inDataStructuresCommonlyUsedinPythonChapter02內(nèi)置函數(shù)數(shù)據(jù)結(jié)構(gòu)有幾種?通俗說法列表字典集合元組ListTupleDictionarySet2.2.1列表——列表的創(chuàng)建
列表是最常用的Python數(shù)據(jù)類型,它表示為一個(gè)方括號(hào)內(nèi)由逗號(hào)分隔的若干元素,常見創(chuàng)建列表的形式有如下4種:中括號(hào)創(chuàng)建的形式為:<List_name>=[<element_1>,<element_2>,…,<element_n>]。(2)list創(chuàng)建的形式為:<List_name>=list(<tuple|string>)。(3)range()創(chuàng)建整數(shù)列表的形式為:<list_name>=range([<start_value>,]<end_value>[,<step>])。Python3中
range()返回的是一個(gè)range對(duì)象,而不是列表;我們需要通過
list()方法將其轉(zhuǎn)換成列表對(duì)象。(4)使用列表推導(dǎo)式可以非常方便的創(chuàng)建列表,在軟件開發(fā)中經(jīng)常使用。常用形式為:①
[<expression>for<variable>in<list>]。如:[iforiinrange(1,11)],創(chuàng)建集合為[1,2,3,4,5,6,7,8,9,10]。②[<expression>for<variable>in<list>if<condition>]。如:[x*2forxinrange(100)ifx%9==0],創(chuàng)建集合為[0,18,36,54,72,90,108,126,144,162,180,198]。
列表的元素不需要具有相同的類型,它是一種有序的集合,可以隨時(shí)添加、刪除和修改其中的元素。2.2.1列表——列表的創(chuàng)建例2.8創(chuàng)建列表示例。list1=['S1','張三','男',20,'計(jì)算機(jī)系']list2=list('Pythonprogram')list3=range(-3,16,2)list4=[x*3forxinrange(5)]print('list1=',list1)print('list2=',list2)print('list3=',list3)print('list4=',list4)運(yùn)行結(jié)果如圖2.4所示。2.2.1列表——列表的基本操作我們可以對(duì)列表的元素進(jìn)行讀取、增加、刪除、修改和嵌套操作。(1)讀取元素按下標(biāo)讀取元素,形式為:<list_name>[<index>]。按項(xiàng)遍歷整個(gè)列表,形式為:for<variable>in<list_name>:print(<variable>)。按序號(hào)遍歷整個(gè)列表,形式為:for<index>inrange(len(list_name)):print(list_name[index])。例2.9查找列表元素示例。lst=['S1','張三','男',20,'計(jì)算機(jī)系']print(lst[3])forseinlst:print(se,end='')print('\r')foriinrange(len(lst)):print(lst[i],end=',')
2.2.1列表——列表的基本操作(2)添加元素在尾部追加元素,形式為:<list_name>.append(<element>)。在某個(gè)位置插入元素,形式為:<list_name>.insert(<index>,<element>)。例2.10
列表中添加元素示例。lst=['S1','張三','男',20,'計(jì)算機(jī)系']lst.append('山東青島')lst.insert(3,'團(tuán)員')print(lst)2.2.1列表——列表的基本操作(3)刪除元素刪除列表中元素,形式為:<list_name>.remove(<element>)。按下標(biāo)刪除元素,形式為:<list_name>.pop(<index>)。切片刪除元素,形式為:del<list_name>[<start>:<end>]。清空列表,形式為:<list_name>.clear()。例2.11利用remove刪除列表中元素示例。lst=['S1','張三','男',20,'計(jì)算機(jī)系','山東青島']lst.remove('計(jì)算機(jī)系')print(lst)例2.12利用pop刪除列表中元素示例。lst=['S1','張三','男',20,'計(jì)算機(jī)系','山東青島']lst.pop(3)print(lst)例2.13利用del刪除列表中元素示例。lst=['S1','張三','男',20,'計(jì)算機(jī)系','山東青島']dellst[2:4]print(lst)2.2.1列表——列表的基本操作(4)修改元素
按下標(biāo)修改元素,形式為:<list_name>[<index>]=<new_element>;也可以先刪除列表的元素,然后再增加新元素。(5)嵌套
如果列表的元素還是列表,則稱為列表嵌套。最常用的是多維數(shù)組可以用列表嵌套表示。如3×3矩陣。
列表嵌套為:matrix=[[12,-5,3],[0,14,-11],[23,-45,8]]matrix=2.2.1列表——列表的基本操作(6)排序列表元素按值升序,形式為:<list_name>.sort()。列表元素按值降序,形式為:<list_name>.sort(reverse=True)。列表元素翻轉(zhuǎn)逆序,形式為:<list_name>.reverse()。例2.14列表排序示例。lst=['s','d','r','w','k','h','e']print(lst)lst.sort()print('升序排序結(jié)果:',lst)lst.sort(reverse=True)print('降序排序結(jié)果:',lst)此程序運(yùn)行結(jié)果如圖所示。(7)長(zhǎng)度列表元素個(gè)數(shù)形式為:len(<list_name>)。2.2.2元組——元組的創(chuàng)建
元組表示為一個(gè)小括號(hào)內(nèi)由逗號(hào)分隔的若干元素。訪問的方式和列表一樣,使用元組的下標(biāo)進(jìn)行訪問。常見創(chuàng)建元組的形式有:圓括號(hào)創(chuàng)建的形式為:<tuple_name>=(<element_1>,<element_2>,…,<element_n>)。(2)逗號(hào)創(chuàng)建的形式為:<tuple_name>=<element_1>,<element_2>,…,<element_n>。(3)tuple創(chuàng)建形式為:<tuple_name>=tuple(<list_name>)。(4)單元素創(chuàng)建形式為:<tuple_name>=(<element>,)。
元組可以認(rèn)為是封閉的列表,一旦定義,就不可以改變(不能添加、刪除或修改)。2.2.2元組——元組的基本操作元組元素是不可變的,順序是有序的。(1)讀取元素
按下標(biāo)讀取元素,形式為:<tuple_name>[<index>]
讀取元素下標(biāo),形式為:<tuple_name>.index(<element>)(2)合并
可以直接使用+號(hào)進(jìn)行元組合并,形式為:<tuple_name_1>+<tuple_name_2>例2.15元組基本操作示例。tup_1=('S3','許文秀','女',20,'計(jì)算機(jī)系')tup_2=('S7','劉德峰','男',22,'電信系')tup=tup_1+tup_2print(tup)2.2.3字典——字典的創(chuàng)建字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象。字典的元素由鍵和值構(gòu)成,鍵和值用冒號(hào)分割,每個(gè)元素之間用逗號(hào)分割,整個(gè)字典的元素包含在花括號(hào)中?;ɡㄌ?hào)創(chuàng)建的形式為:<dict_name>={<key_1>:<value_1>,<key_2>:<value_2>,…,<key_n>:<value_n>}。(2)空字典創(chuàng)建的形式為:<dict_name>={}|dict()。關(guān)于鍵,說明兩點(diǎn):程序需要通過鍵來訪問值,因此字典中的鍵盡量不要重復(fù)。鍵必須不可變??梢杂脭?shù)字、字符串或元組作為鍵,但不能用列表。2.2.3字典——字典的基本操作
字典中包含多個(gè)<key>:<value>對(duì),而<key>是字典的關(guān)鍵數(shù)據(jù),因此程序?qū)ψ值涞牟僮鞫际腔趉ey的。讀取values,可以通過下標(biāo)讀取值的形式為:<dict_name>[<key>]。(2)添加元素,形式為:<dict_name>[<key>]=<value>。(3)刪除元素,形式為:del<dict_name>[<key>]。(4)修改元素,形式為:<dict_name>[<key>]=<new_value>。(5)判斷字典中是否包含某鍵,形式為:<key>in|notin<dict_name>。2.2.3字典——字典的基本操作例2.16
字典基本操作示例。
dit={'學(xué)號(hào)':'S1','姓名':'許文秀','性別':'女','年齡':20,'系部':'計(jì)算機(jī)系'}print('讀取字典值:')forkeyindit.keys():print(dit[key],end='')dit['籍貫']='廣西北海'print('\n添加元素:籍貫:廣西北海:')print(dit)deldit['性別']print('刪除元素:性別:女:')print(dit)dit['年齡']=22print('修改年齡為22:')print(dit)
程序運(yùn)行結(jié)果如圖所示。2.2.3字典——字典常用方法(1)clear()該方法用于清空字典中所有的元素,形式為:<dict_name>.clear()(2)get()該方法根據(jù)<key>來獲取<value>,形式為:<dict_name>.get(<key>)(3)update()該方法可使用一個(gè)字典所包含的元素來更新已有的字典。在執(zhí)行
update()方法時(shí),如果被更新的字典中已包含對(duì)應(yīng)的元素,那么原值會(huì)被覆蓋;如果被更新的字典中不包含對(duì)應(yīng)的元素,則該元素被添加進(jìn)去。形式為:<dict_name>.update(<dict_name_new>)(4)items()、keys()和values()這三個(gè)方法(mathod)分別用于獲取字典中的所有元素、所有鍵和所有值,形式為:<dict_name>.<mathod>2.2.3字典——字典常用方法例2.17字典常用方法示例。dit={'學(xué)號(hào)':'S1','姓名':'許文秀','性別':'女','系部':'計(jì)算機(jī)系'}dit1={'學(xué)號(hào)':'S1','姓名':'王萍','數(shù)據(jù)庫(kù)原理':82,'數(shù)據(jù)挖掘':92}dit.update(dit1)print('update方法更新字典:')print(dit)dit2=dit.items()print('獲取字典所有元素:')print(dit2)
程序運(yùn)行結(jié)果如圖所示。2.2.4集合——集合的創(chuàng)建大括號(hào)創(chuàng)建的形式為:<set_name>={<element_1>,<element_2>,…,<element_n>}。(2)函數(shù)set()創(chuàng)建形式為:set(<list_name>|<string>)。(3)空集合創(chuàng)建的形式為:{}|set()。因?yàn)榧显鼐哂胁恢貜?fù)的特點(diǎn),所以若傳入的參數(shù)有重復(fù),則會(huì)自動(dòng)忽略。因此它非常適合用來消除重復(fù)元素。
例2.18
利用集合消除重復(fù)元素示例。se1=set([23,32,-4,56,-4,23,-4])se2=set('sretopsww')print(se1,'\n',se2)集合(Set)是一個(gè)無序且不重復(fù)的元素集合,是一種類似列表和字典的數(shù)據(jù)結(jié)構(gòu)。2.2.4集合——集合的基本操作因?yàn)榧鲜菬o序的,所以不可以用索引訪問集合元素,也不能做切片操作,更沒有鍵可用來獲取集合中元素的值。(1)讀取集合成員讀取集合大小,形式為:len(<set_name>)。讀取集合成員,形式為:for<variable>in<set_name>:print(<variabl>)。(2)添加元素,形式為:<set_name>.add(<element>)。(3)刪除元素,形式為:<set_name>.discard|remove(<element>)。(4)拋出元素,形式為:<set_name>.pop()。例2.19集合的基本操作示例se={23,32,-4,56,4,’a’,’m’}forxinse: print(x,end=’’)se.add('##')se.discard(32)print('\r')forxinse: print(x,end='')print('\n',se.pop())2.2.4集合——集合運(yùn)算集合之間可以進(jìn)行數(shù)學(xué)集合運(yùn)算(例如:并、交、差等),可以利用相應(yīng)的操作符或方法來實(shí)現(xiàn)。假設(shè)se1={'b','a','d','e','c'},se2={'p','r','b','o','t','e','c'},集合運(yùn)算及示例如表所示。運(yùn)算符含義方法說明示例結(jié)果|并union()se1∪se2se1|se2{'e','c','o','t','b','d','r','p','a'}&交Intersection()se1∩se2se1&se2{'e','c','b'}-差Difference()se1-se2se1-se2{'d','a'}^異或sysmmetricdifferencese1∪se2-se1∩se2se1^se2{'d','o','r','p','t','a'}3正則表達(dá)式RegularExpressionChapter032.3正則表達(dá)式
正則表達(dá)式是一個(gè)特殊的字符序列,可以方便的檢查一個(gè)字符串是否與某種模式匹配,利用它可以方便地進(jìn)行字符串的檢索、替換、匹配等操作。Python語(yǔ)言中re(RegularExpression)模塊擁有全部的正則表達(dá)式功能。2.3正則表達(dá)式——概述Python支持的正則表達(dá)式中常用字符及含義如表所示。模式說明示例\d匹配一個(gè)數(shù)字“\d{3}\s+\d{2,8}”的含義如下:\d{3}:表示匹配3個(gè)數(shù)字,例如'028';\s+:表示匹配至少一個(gè)空格;\d{2,8}:表示匹配2~8個(gè)數(shù)字,例如'1245’。該表達(dá)式可以匹配以任意個(gè)空格隔開區(qū)號(hào)的電話號(hào)碼。例如'01057216520'\D匹配非數(shù)字\w匹配一個(gè)字符:[A-Za-z0-9_]\W匹配非字母字符,即匹配特殊字符.匹配除換行符外的任意一個(gè)字符\s匹配任意一個(gè)空白字符,等價(jià)于[\t\n\r\f]*匹配任意個(gè)字符,包括0個(gè)+匹配至少一個(gè)字符?匹配0個(gè)或一個(gè)字符{n,m}匹配n~m個(gè)字符{n}允許前一個(gè)字符只能出現(xiàn)n次a{3}b:可以匹配'aaab'a|b匹配a或者b(P|p)ython:可以匹配'Python'或者'python'^匹配行首^\d:表示行必須以數(shù)字開頭$匹配行尾$\d:表示行必須以數(shù)字結(jié)尾2.3正則表達(dá)式——概述表達(dá)式說明[0-9a-zA-Z\_]匹配一個(gè)數(shù)字、大小寫字母或者下劃線[0-9a-zA-Z\_]+匹配至少由一個(gè)數(shù)字、大小寫字母或者下劃線組成的字符串[a-zA-Z\_][0-9a-zA-Z\_]*匹配由字母或下劃線開頭,后邊任意個(gè)有數(shù)字、字母或者下劃線組成的字符串[a-zA-Z\_][0-9a-zA-Z\_]{0,19}精確地限制了變量的長(zhǎng)度是1-20個(gè)字符
用[]來表示范圍,表給出了常用正則表達(dá)式及含義。2.3正則表達(dá)式——match()方法Match()方法從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話,match()就返回none。匹配到的數(shù)據(jù)通常使用方法group(num)(返回num小組字符串)或groups()(返回所有小組字符串)等方法來提?。ㄗ址袷剑?,match()方法常用形式如下:re.match(<pattern>,<string>[,flags=0])參數(shù)說明:(1)pattern:匹配的正則表達(dá)式。(2)string:要匹配的字符串。(3)
flgs:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。多個(gè)標(biāo)志可以通過按位
OR(|)來指定。如re.I|re.M被設(shè)置成
I
和M
標(biāo)志??蛇x標(biāo)志修飾符如表所示。要使用Python3中的re則必須引入re模塊,該模塊提供了一些正則表達(dá)式的處理方法,這些方法使用一個(gè)模式字符串做為它們的第一個(gè)參數(shù)。2.3正則表達(dá)式——match()方法修飾符說明re.I使匹配忽略大小寫re.L做本地化識(shí)別(locale-aware)匹配re.M多行匹配,影響“^”和“$”re.S表示“.”的作用擴(kuò)展到整個(gè)字符串,包括“\n”re.U根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響“\w”,“\W”re.X該標(biāo)志通過更靈活的格式以便將正則表達(dá)式寫得更易于理解表
可選標(biāo)志修飾符2.3正則表達(dá)式——match()方法例2.20match()方法應(yīng)用示例。importrestr1='hello123456789word_thisisjustatest'parttern='^Hello\s\d{9}.*test$''''“^”標(biāo)識(shí)開頭,這里匹配以Hello開頭的字符串;“\s”匹配空白字符串;“\d{9}”匹配9位數(shù)字;“.”匹配除了換行符之外的任意字符;“*”匹配零次或多次,二者結(jié)合起來能夠匹配任意字符(除換行符);“$”標(biāo)識(shí)結(jié)尾,這里匹配以test結(jié)尾的字符串'''result=re.match(parttern,str1,re.I)print(result)print(result.group())#group()方法輸出匹配到的內(nèi)容print(result.span())#span()方法輸出匹配的范圍2.3正則表達(dá)式——search()方法Search()方法掃描整個(gè)字符串并返回第一個(gè)成功的匹配,search()方法常用形式如下:re.search(<pattern>,<string>[,flags=0])參數(shù)同match()方法。例2.21search()方法應(yīng)用示例。importreline='Infact,catsaresmarterthandogs'result=re.search(r'(.*)are(.*?).*',line,re.M|re.I)ifresult:print('result.group():',result.group())print('result.group(1):',result.group(1))print('result.group(2):',result.group(2))2.3正則表達(dá)式——search()方法例2.22match()和search()比較示例。importreline=’Inface,catsaresmarterthandogs’matchstr=re.match(r'dogs',line,re.M|re.I)ifmatchstr:print("match-->matchstr.group():",matchstr.group())else:print("Nomatch!!")matchstr=re.search(r'dogs',line,re.M|re.I)ifmatchstr:print("search-->matchstr.group():",matchstr.group())else:print("Nomatch!!")程序運(yùn)行結(jié)果如圖2.8所示。match()方法只檢測(cè)字符串開頭位置是否匹配,匹配成功才會(huì)返回結(jié)果,否則返回None;而search()方法會(huì)在整個(gè)字符串內(nèi)查找模式匹配,直到找到第一個(gè)匹配后返回一個(gè)包含匹配信息的對(duì)象,該對(duì)象可以通過調(diào)用group()方法得到匹配的字符串,如果字符串沒有匹配,則返回None。
2.3正則表達(dá)式——sub()方法Sub()方法通過正則表達(dá)式,實(shí)現(xiàn)比字符串函數(shù)replace()更加強(qiáng)大的替換功能。sub()方法常用形式如下:sub(pattern,repl,string,count=0,flag=0)參數(shù)說明:(1)pattern:正則表達(dá)式的字符串。(2)repl被替換的內(nèi)容。(3)string正則表達(dá)式匹配的內(nèi)容。(4)count:由于正則表達(dá)式匹配的結(jié)果是多個(gè),使用count來限定替換的個(gè)數(shù)(從左向右),默認(rèn)值是0。(5)flags是匹配模式,可以使用按位或者“|”表示同時(shí)生效,也可以在正則表達(dá)式字符串中指定。2.3正則表達(dá)式——sub()方法例2.23
sub()方法應(yīng)用示例。importrephone='0517-3214-7231#這是一個(gè)公司的電話號(hào)碼'num=re.sub(r'#.*$','',phone)#刪除注釋print('電話號(hào)碼:',num)num=re.sub(r'\D','',phone)#移除非數(shù)字的內(nèi)容print('電話號(hào)碼:',num)2.3正則表達(dá)式——findall()方法Findall()方法在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表;如果沒有找到匹配的,則返回空列表。findall()方法常用形式如下:findall(pattern,string,flags=0)參數(shù)說明:(1)pattern:正則表達(dá)式。(2)string:需要處理的字符串。(3)flags:說明匹配模式。例2.24提取完整的年月日和時(shí)間字段。importrestr1='se2342022-10-0907:30:002022-10-1007:25:00最新疫情'p=r'\d{4}-\d{2}-\d{2}\d{2}:\d{2}:\d{2}'content=re.findall(p,str1,re.M)print(content)2.3正則表達(dá)式——提取網(wǎng)頁(yè)中的信息例2.25提取字符串中的漢字。importrestr1='<h1>hello你好,world世界</h1>'chinese_pattern='[\u4e00-\u9fa5]+'#漢字編碼范圍chinese_str=re.findall(chinese_pattern,str1)forchinchinese_str:print(ch,end='')2.3正則表達(dá)式——提取網(wǎng)頁(yè)中的信息例2.26提取字符串中的URL。importredefFind(string):url_pattern=r'[]a-zA-Z.)+://[^\s]*'url=re.findall(url_pattern,string)returnurlstr_url='我們常用網(wǎng)站很多,下面列出兩個(gè),如Runoob的網(wǎng)頁(yè)地址為:,Goog的網(wǎng)址為:'str1=Find(str_url)forchinstr1:ifch!='':print(ch,end='')2.3正則表達(dá)式——提取網(wǎng)頁(yè)中的信息例2.27抓取網(wǎng)頁(yè),提取網(wǎng)頁(yè)中的網(wǎng)址和漢字信息。fromurllib.requestimporturlopen
#
urllib.request.urlopen()函數(shù)用于實(shí)現(xiàn)對(duì)目標(biāo)url的訪問importretext=urlopen('').read().decode()#正則表達(dá)式提取網(wǎng)頁(yè)中的網(wǎng)址s='/message.asp?id=35'ret=re.sub(r'(https://.+?)/.*',lambdax:x.group(1),s)print('在網(wǎng)頁(yè)數(shù)據(jù)中提取的網(wǎng)址:\n',ret)str1=re.findall(u'[\u4e00-\u9fa5]+',text)print('在網(wǎng)頁(yè)數(shù)據(jù)中提取漢字信息:\n',str1)4文件操作FileOperationChapter042.4文件操作——文件的打開與關(guān)閉
文件處理的流程為:先打開文件,得到文件句柄并賦值給一個(gè)變量;再通過句柄對(duì)文件進(jìn)行操作;最后關(guān)閉文件。
用Python內(nèi)置的open()函數(shù)打開一個(gè)文件,創(chuàng)建一個(gè)file對(duì)象,并用相關(guān)的方法才可以調(diào)用它進(jìn)行讀寫。open()函數(shù)常用形式為:file<file_variable>=open(<file_name>[,<mode>][,<buffering>])參數(shù)說明:(1)
file_name:是指打開的文件名,若非當(dāng)前路徑,需指出具體路徑。(2)mode:是指打開文件的模式,如下表所示。2.4文件操作——文件的打開與關(guān)閉模式功能說明r只讀模式默認(rèn)模式,文件必須存在,否則拋出異常w只寫模式不可讀;不存在則創(chuàng)建;存在則清空內(nèi)容x只寫模式不可讀;不存在則創(chuàng)建,存在則報(bào)錯(cuò)a追加模式可讀;不存在則創(chuàng)建;存在則只追加內(nèi)容,文件指針自動(dòng)移到文件尾說明:“+”表示可以同時(shí)讀寫某個(gè)文件。如r+、w+、x+、a+均表示對(duì)打開的文件進(jìn)行可讀,可寫?!癰”表示以字節(jié)的方式操作,以二進(jìn)制模式打開文件,而不是以文本模式。如:rb
或
r+b、wb
或
w+b、xb
或
w+b、ab
或
a+b。但是以b方式打開時(shí),讀取到的內(nèi)容是字節(jié)類型,寫入時(shí)也需要提供字節(jié)類型,不能指定編碼。
文件使用完畢后必須關(guān)閉,語(yǔ)法形式為:<file_variable>.close()2.4文件操作——讀文件操作Python文件對(duì)象提供了三個(gè)“讀”方法:read()、readline()和readlines()。每種方法可以接受一個(gè)變量以限制每次讀取的數(shù)據(jù)量。(1)read()函數(shù)每次讀取整個(gè)文件,它通常用于將文件內(nèi)容放到一個(gè)字符串變量中。如果文件大于可用內(nèi)存,為了保險(xiǎn)起見,可以反復(fù)調(diào)用read(size)方法,每次最多讀取size個(gè)字節(jié)(小于可用內(nèi)存)的內(nèi)容。(2)readline()函數(shù)每次只讀取一行,通常比readlines()
慢得多。僅當(dāng)沒有足夠內(nèi)存可以一次讀取整個(gè)文件時(shí),才應(yīng)該使用readline()。(3)readlines()函數(shù)一次讀取整個(gè)文件,像read()
一樣。readlines()
自動(dòng)將文件內(nèi)容分成一個(gè)行的列表,該列表可以由Python的for
...in
...結(jié)構(gòu)進(jìn)行處理。
注意:這三種方法是把每行末尾的'\n'也讀進(jìn)來了,它并不會(huì)默認(rèn)的把'\n'去掉。需要去掉時(shí),我們可以手動(dòng)去掉。2.4文件操作——讀文件操作例2.28讀取文件示例。文件名為D:\\Data_Mining\Poetry.txt,內(nèi)容為如下:春夜喜雨杜甫好雨知時(shí)節(jié),當(dāng)春乃發(fā)生,隨風(fēng)潛入夜,潤(rùn)物細(xì)無聲。野徑云俱黑,江船火獨(dú)明,曉看紅濕處,花重錦官城。將文件內(nèi)容讀出并顯示出來。file='D:\\Data_Mining\poetry.txt'f=open(file,'r',encoding='utf-8')#存儲(chǔ)txt文件時(shí),“編碼”必須選“UTF-8”foriinrange(2):
first_line=f.readline()#讀第1行
print(first_line)#輸出第1行data=f.read()#讀取剩下的所有內(nèi)容,文件大時(shí)不要用print(data)#輸出讀取內(nèi)容f.close()#關(guān)閉文件2.4文件操作——寫文件操作
在進(jìn)行文件寫操作時(shí),如果該文件不存在,則會(huì)創(chuàng)建文件。如果文件存在,則將原文件中的內(nèi)容刪除,再寫入新內(nèi)容。需要說明的是,在寫文件時(shí),只有調(diào)用close()方法時(shí),操作系統(tǒng)才能保證把沒有寫入的數(shù)據(jù)全部寫入磁盤。write()函數(shù)是文件寫操作中一個(gè)比較簡(jiǎn)單的操作,它將字符串寫入文件,沒有返回值。(2)writelines()函數(shù),這個(gè)函數(shù)是向文件中寫入一個(gè)序列字符串列表。2.4文件操作——寫文件操作例2.29文件寫操作示例。在文件D:\\DATA_Mining\Poetry.txt中最后一行添加內(nèi)容“《春夜喜雨》是唐詩(shī)名篇之一,是杜甫上元二年(761年)在成都草堂居住時(shí)所作?!?/p>
file='D:\\DATA_Mining\poetry.txt'f=open(file,'a+',encoding='utf-8')#打開文件str1='《春夜喜雨》是唐詩(shī)名篇之一,是杜甫上元二年(761年)在成都草堂居住時(shí)所作。'f.write('\n')f.write(str1)f.close()f=open(file,'r',encoding='utf-8')data=f.read()print(data)f.close()
程序運(yùn)行結(jié)果如圖所示。2.4文件操作——文件的其他操作
如果對(duì)文件指定的位置進(jìn)行讀寫操作,就需要先將文件讀寫指針移動(dòng)到我們想要的位置,然后再對(duì)文件進(jìn)行寫入等操作。seek()方法用于移動(dòng)文件讀取指針到指定位置。常用形式為:<file_variable>.seek(offset[,whence])參數(shù)說明:(1)offset:開始的偏移量,代表需要移動(dòng)偏移的字節(jié)數(shù)。(2)whence:可選,默認(rèn)值為0。給offset參數(shù)一個(gè)定義,表示要從哪個(gè)位置開始偏移;0代表從文件開頭開始算起,1代表從當(dāng)前位置開始算起,2代表從文件末尾算起。
返回值:如果操作成功,則返回指定的文件位置,如果操作失敗,則返回-1。2.4文件操作——文件的其他操作例2.30seek()方法應(yīng)用示例。file='D:\\Data_Mining\poetry.txt'f=open(file,'r+',encoding='utf-8')print('文件名為:',)line=f.readline()print('讀取的數(shù)據(jù)為:',line)f.seek(0,1)#重新設(shè)置文件讀取指針到開頭line=f.readline()print('讀取的數(shù)據(jù)為:',line)f.close()程序運(yùn)行結(jié)果如圖所示。本章結(jié)束啦!歡迎課后繼續(xù)交流~第3章Python數(shù)據(jù)挖掘中的常用模塊CommonModulesinPythonDataMiningNumPy模塊3.2學(xué)習(xí)目標(biāo)3.13.33.43.5Pandas模塊Matplotlib圖表繪制基礎(chǔ)Scikit-learn股票數(shù)據(jù)簡(jiǎn)單分析Python數(shù)據(jù)挖掘中的常用模塊Python具有強(qiáng)大的擴(kuò)展能力,其中的數(shù)據(jù)分析與挖掘常用模塊幾乎可以滿足各種需求??茖W(xué)計(jì)算模塊NumPy提供了矩陣運(yùn)算;基于NumPy的數(shù)據(jù)分析處理模塊Pandas提供了一些數(shù)據(jù)挖掘的工具;數(shù)據(jù)可視化模塊Matplotlib
具有Python中類似MATLAB的繪圖工具;針對(duì)Python編程語(yǔ)言免費(fèi)軟件的機(jī)器學(xué)習(xí)模塊Scikit-learn具有常用的分類、回歸和聚類等算法。
1NumPy模塊NumPyModule3.13.1.1NumPy數(shù)據(jù)類型
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療零售企業(yè)數(shù)字化轉(zhuǎn)型-洞察分析
- 網(wǎng)絡(luò)廣告效果評(píng)估-第1篇-洞察分析
- 網(wǎng)絡(luò)亞文化群體心理健康-洞察分析
- 《工程施工技術(shù)》課件
- 物流行業(yè)大數(shù)據(jù)分析-洞察分析
- 虛擬現(xiàn)實(shí)呼叫中心個(gè)性化服務(wù)策略-洞察分析
- 油氣產(chǎn)業(yè)鏈優(yōu)化-第1篇-洞察分析
- 虛擬現(xiàn)實(shí)娛樂體驗(yàn)-洞察分析
- 硬件加速并行-洞察分析
- 《大比例尺測(cè)》課件
- 2024小學(xué)數(shù)學(xué)新教材培訓(xùn):新教材的主要特色
- 2024年中考數(shù)學(xué)復(fù)習(xí):阿氏圓最值模型專項(xiàng)練習(xí)
- DL∕T 1455-2015 電力系統(tǒng)控制類軟件安全性及其測(cè)評(píng)技術(shù)要求
- 新公司組織架構(gòu)圖及人員設(shè)置
- 大一英語(yǔ)議論文范文模板
- JCT 2776-2023 平滑式緊急疏散自動(dòng)門 (正式版)
- 2024夫妻雙方私下離婚協(xié)議書
- 淺談自然教育對(duì)幼兒發(fā)展的重要性 論文
- 肝病診療規(guī)范管理制度
- 生活中的金融學(xué)智慧樹知到期末考試答案章節(jié)答案2024年山東理工大學(xué)
- 加快急診中毒中心建設(shè) 推動(dòng)中毒救治能力提升
評(píng)論
0/150
提交評(píng)論