《數(shù)據(jù)采集與處理:基于python》 課件 付東普 第1-4章 概述、Python基礎(chǔ)-數(shù)據(jù)可視化_第1頁
《數(shù)據(jù)采集與處理:基于python》 課件 付東普 第1-4章 概述、Python基礎(chǔ)-數(shù)據(jù)可視化_第2頁
《數(shù)據(jù)采集與處理:基于python》 課件 付東普 第1-4章 概述、Python基礎(chǔ)-數(shù)據(jù)可視化_第3頁
《數(shù)據(jù)采集與處理:基于python》 課件 付東普 第1-4章 概述、Python基礎(chǔ)-數(shù)據(jù)可視化_第4頁
《數(shù)據(jù)采集與處理:基于python》 課件 付東普 第1-4章 概述、Python基礎(chǔ)-數(shù)據(jù)可視化_第5頁
已閱讀5頁,還剩372頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一章

概述《數(shù)據(jù)采集與處理:基于Python》2024/5/1112024/5/112教學(xué)目標(biāo)本章學(xué)習(xí)目標(biāo)1、了解數(shù)據(jù)科學(xué)相關(guān)概念及數(shù)據(jù)分析完整過程;2、理解數(shù)據(jù)采集與存儲與其他學(xué)科和課程關(guān)系;3、理解數(shù)據(jù)類型、數(shù)據(jù)存儲和大數(shù)據(jù)相關(guān)技術(shù);4、了解Python相關(guān)數(shù)據(jù)科學(xué)及數(shù)據(jù)采集與存儲工具等。本章提綱1、數(shù)據(jù)科學(xué)與數(shù)據(jù)采集及存儲2、數(shù)據(jù)采集概述3、數(shù)據(jù)存儲概述4、數(shù)據(jù)集成ETL概述5、Python相關(guān)數(shù)據(jù)科學(xué)工具數(shù)據(jù)科學(xué)概述2024/5/113什么是數(shù)據(jù)科學(xué)Data

Science?本世紀(jì)最性感的工作—哈佛商業(yè)評論HarvardBuisnessReview

數(shù)據(jù)科學(xué)家要比任何軟件工程師更擅長統(tǒng)計(jì),相比任何統(tǒng)計(jì)學(xué)家又更擅長軟件工程。學(xué)術(shù)研究領(lǐng)域(如管理學(xué)、社會學(xué)、經(jīng)濟(jì)學(xué)、金融學(xué)等)及產(chǎn)業(yè)界(如互聯(lián)網(wǎng)公司、金融業(yè)等)缺乏大量數(shù)據(jù)分析師。當(dāng)然數(shù)據(jù)科學(xué)家收入也很可觀?。?!2024/5/114什么是數(shù)據(jù)科學(xué)Data

Science?數(shù)據(jù)科學(xué)是一個(gè)跨學(xué)科的領(lǐng)域,研究從各種形式的數(shù)據(jù)中提取知識或見解的過程和系統(tǒng)。[維基百科。]數(shù)據(jù)科學(xué)將從收集真實(shí)世界的數(shù)據(jù),到處理和分析數(shù)據(jù),再到影響真實(shí)世界的循環(huán)閉合起來,對應(yīng)的數(shù)據(jù)分析過程為:從現(xiàn)實(shí)世界或應(yīng)用系統(tǒng)中進(jìn)行數(shù)據(jù)抽取,然后進(jìn)行數(shù)據(jù)預(yù)處理、數(shù)據(jù)探索與可視化、機(jī)器學(xué)習(xí)與統(tǒng)計(jì)建模、模型校驗(yàn)及應(yīng)用部署和生成報(bào)告。2024/5/115什么是數(shù)據(jù)科學(xué)Data

Science?俗話說“巧婦難為無米之炊”,數(shù)據(jù)是數(shù)據(jù)科學(xué)和數(shù)據(jù)分析的基礎(chǔ)和前提,如何獲取和存儲數(shù)據(jù)則是數(shù)據(jù)科學(xué)與大數(shù)據(jù)的基本功。當(dāng)然,數(shù)據(jù)科學(xué)家的收入也很可觀。根據(jù)Glassdoor網(wǎng)站統(tǒng)計(jì)的美國2022年平均薪資數(shù)據(jù),數(shù)據(jù)科學(xué)家的年薪中位數(shù)達(dá)到12.2萬美元左右。此外,根據(jù)KDnuggets網(wǎng)站2022年數(shù)據(jù)科學(xué)職業(yè)的調(diào)研,美國勞工統(tǒng)計(jì)局2020年預(yù)測未來十年數(shù)據(jù)分析相關(guān)工作需求將有31%左右的增長,而2022年與數(shù)據(jù)分析相關(guān)的開放工作崗位在Indeed網(wǎng)站就有7萬個(gè),LinkedIn網(wǎng)站則有39萬個(gè)左右。國內(nèi)職友集網(wǎng)站2022年的數(shù)據(jù)統(tǒng)計(jì)顯示,有3~5年工作經(jīng)驗(yàn)的北京數(shù)據(jù)科學(xué)家月薪平均達(dá)到3萬~5萬元。2024/5/116數(shù)據(jù)度量國際數(shù)據(jù)公司(IDC)發(fā)布的《數(shù)據(jù)時(shí)代2025》報(bào)告顯示,全球每年產(chǎn)生的數(shù)據(jù)將從2018年的33ZB(Zettabyte)增長到2025年的175ZB,相當(dāng)于每天產(chǎn)生491EB(Exabyte)的數(shù)據(jù)?;ヂ?lián)網(wǎng)及物聯(lián)網(wǎng)時(shí)代,每天都有巨量的數(shù)據(jù)產(chǎn)生,那么如何度量這些數(shù)據(jù)呢?下面是部分?jǐn)?shù)據(jù)度量單位:Kilobyte(KB)=1024bytesMegabyte(MB)=1024KilobytesGigabyte(GB)=1024MegabytesTerabyte(TB)=1024GigabytesPetabyte(PB)=1024TerabytesExabyte(EB)=1024PetabytesZettabyte(ZB)=1024ExabytesYottabyte(YB)=1024Zettabytes2024/5/117數(shù)據(jù)利用在大數(shù)據(jù)時(shí)代,數(shù)據(jù)也是有待挖掘的資產(chǎn)和金礦,各行各業(yè)都已經(jīng)或正在利用大數(shù)據(jù)服務(wù)于自身的業(yè)務(wù),例如:通過有針對性的訓(xùn)練來提高身體素質(zhì)。改進(jìn)產(chǎn)品。改善決策。提供判斷以選擇正確的藥品、更好的餐館或更佳的路線等。預(yù)測:選舉,流行疾病,群體行為,經(jīng)濟(jì)活動等。精準(zhǔn)營銷:消費(fèi)者畫像,行為分析,個(gè)性化推薦等。生物識別:指紋識別,人臉識別,虹膜識別,聲音識別等。2024/5/118數(shù)據(jù)資源

在互聯(lián)網(wǎng)時(shí)代,各行各業(yè)都在產(chǎn)生大量的數(shù)據(jù),因此數(shù)據(jù)來源豐富多樣,如政府、互聯(lián)網(wǎng)企業(yè)、第三方機(jī)構(gòu)、商業(yè)企業(yè)等。下面是部分公開數(shù)據(jù)來源的網(wǎng)址。IDataHub(http://datahub.io/dataset)WorldHealthOrganization(/research/en/)D()EuropeanUnionOpenDataPortal(http://open-data.europa.eu/en/data/)AmazonWebServicepublicdatasets(/datasets)FacebookGraph(/docs/graph-api)H()GoogleTrends(/trends/explore)GoogleFinance(/finance)GoogleBooksNgrams(/books/ngrams/books/datasetsv2.html)MachineLearningRepository(/ml/)OPENICPSR(/openicpsr/repository/)2024/5/119數(shù)據(jù)采集概述2024/5/1110數(shù)據(jù)采集定義數(shù)據(jù)采集又稱為數(shù)據(jù)獲取,是指利用一種裝置,將來自各種數(shù)據(jù)源的數(shù)據(jù)自動收集到該裝置中。被采集數(shù)據(jù)是已被轉(zhuǎn)換為電訊號的各種物理量(如溫度、水位、風(fēng)速、壓力等),可以是模擬量,也可以是數(shù)字量。數(shù)據(jù)采集一般是采樣方式,即間隔一定時(shí)間(稱為采樣周期)對同一點(diǎn)數(shù)據(jù)重復(fù)采集。采集的數(shù)據(jù)大多是瞬時(shí)值,也可以是某段時(shí)間內(nèi)的一個(gè)特征值。準(zhǔn)確的數(shù)據(jù)測量是數(shù)據(jù)采集的基礎(chǔ)。數(shù)據(jù)測量方法有接觸式和非接觸式,檢測元件多種多樣。不論哪種方法和元件,均以不影響被測對象狀態(tài)和測量環(huán)境為前提,以保證數(shù)據(jù)的正確性。數(shù)據(jù)采集是從真實(shí)世界對象中獲得原始數(shù)據(jù)的過程。不準(zhǔn)確的數(shù)據(jù)采集將影響后續(xù)的數(shù)據(jù)處理并且最終得到無效的結(jié)果。數(shù)據(jù)采集方法的選擇不但依賴于數(shù)據(jù)源的物理性質(zhì),而且要考慮數(shù)據(jù)分析的目標(biāo)。2024/5/1111數(shù)據(jù)采集步驟在大數(shù)據(jù)價(jià)值鏈中,數(shù)據(jù)采集階段的任務(wù)是以數(shù)字形式將信息聚合,以待存儲和分析處理。數(shù)據(jù)采集過程可分為三個(gè)步驟,如圖所示。首先是數(shù)據(jù)收集(datacollection),數(shù)據(jù)來源包括日志文件、傳感器、Web爬蟲等;其次是數(shù)據(jù)傳輸(datatransmission),經(jīng)過物理層和網(wǎng)絡(luò)層;最后是數(shù)據(jù)預(yù)處理(datapreprocessing),包括數(shù)據(jù)整合、清洗和冗余消除等。數(shù)據(jù)傳輸和數(shù)據(jù)預(yù)處理沒有嚴(yán)格的次序,數(shù)據(jù)預(yù)處理可以在數(shù)據(jù)傳輸之前或之后。2024/5/1112數(shù)據(jù)分類按照數(shù)據(jù)的形態(tài),可以把數(shù)據(jù)分為結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)兩種。結(jié)構(gòu)化數(shù)據(jù)(如傳統(tǒng)關(guān)系型數(shù)據(jù)庫數(shù)據(jù))的字段有固定的長度和語義,計(jì)算機(jī)程序可以直接處理。非結(jié)構(gòu)化數(shù)據(jù)有文本數(shù)據(jù)、圖像數(shù)據(jù)、自然語言數(shù)據(jù)等,計(jì)算機(jī)程序無法直接處理,需要進(jìn)行格式轉(zhuǎn)換或信息提取。按照數(shù)據(jù)連接的方式,數(shù)據(jù)又可分為本地?cái)?shù)據(jù)和網(wǎng)絡(luò)數(shù)據(jù)等。2024/5/1113數(shù)據(jù)類型描述不同的實(shí)體,其數(shù)據(jù)類型可能不同,可分為:1.類別(categorical)數(shù)據(jù)●名義(nominal)數(shù)據(jù):類別沒有大小順序的數(shù)據(jù),如民族、性別、種族、顏色、院系、專業(yè)等。●序數(shù)(ordinal)數(shù)據(jù):類別有大小順序的數(shù)據(jù),如成績等級、行業(yè)排名等。2.數(shù)值(numerical)數(shù)據(jù)●離散(discrete)數(shù)據(jù):是指其數(shù)值只能用自然數(shù)或整數(shù)單位計(jì)算的數(shù)據(jù),如企業(yè)個(gè)數(shù)、職工人數(shù)、設(shè)備臺數(shù)等。●連續(xù)(continuous)數(shù)據(jù):是指一定區(qū)間內(nèi)可以任意取值的數(shù)據(jù),其數(shù)值是連續(xù)不斷的,相鄰兩個(gè)數(shù)值之間可做無限分割,即可取無限個(gè)數(shù)值,如身高、體重、里程等。2024/5/1114數(shù)據(jù)采集方式按照不同的視角,數(shù)據(jù)采集有不同的方式。1.主動/被動視角按照數(shù)據(jù)采集的主動還是被動視角,數(shù)據(jù)采集可分為推(push)方式和拉(pull)方式。推方式的主動權(quán)在數(shù)據(jù)源系統(tǒng)方,數(shù)據(jù)源系統(tǒng)方根據(jù)自己數(shù)據(jù)產(chǎn)生的方式、頻率以及數(shù)據(jù)量,采用一種適合數(shù)據(jù)源系統(tǒng)的方式將數(shù)據(jù)推送到數(shù)據(jù)處理系統(tǒng),其特點(diǎn)是數(shù)據(jù)量、數(shù)據(jù)格式以及數(shù)據(jù)提供頻率與數(shù)據(jù)生成方式相關(guān)。拉方式的主動權(quán)則掌握在數(shù)據(jù)處理端,數(shù)據(jù)獲取的頻率、數(shù)據(jù)量和獲取方式完全由數(shù)據(jù)處理端決定。2024/5/1115數(shù)據(jù)采集方式2.即時(shí)性視角按照數(shù)據(jù)采集的即時(shí)性視角,數(shù)據(jù)采集又可分為實(shí)時(shí)采集與離線采集。實(shí)時(shí)采集是指在數(shù)據(jù)產(chǎn)生時(shí)立即對其進(jìn)行處理和分析,并將結(jié)果傳遞到目標(biāo)系統(tǒng)中。該方法通常用于需要快速響應(yīng)和即時(shí)分析的場景,如金融交易、在線廣告等。實(shí)時(shí)采集需要具備高速度、高可靠性和高擴(kuò)展性等特點(diǎn),以確保數(shù)據(jù)能夠及時(shí)傳輸和處理。離線采集是指將數(shù)據(jù)存儲在本地或遠(yuǎn)程存儲設(shè)備中,并在后續(xù)時(shí)間段內(nèi)對其進(jìn)行處理和分析。該方法通常用于需要大規(guī)模數(shù)據(jù)處理、長時(shí)間分析和歷史數(shù)據(jù)回顧的場景,如機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘等。離線采集需要具備高容量、高效率和高靈活性等特點(diǎn),以確保能夠完成大規(guī)模數(shù)據(jù)的存儲和分析。2024/5/1116數(shù)據(jù)采集方法數(shù)據(jù)采集的對象和來源多種多樣,如傳感器、系統(tǒng)日志、數(shù)據(jù)庫和Web爬蟲等,它們對應(yīng)的數(shù)據(jù)采集方法也存在差異。下面介紹幾種常見的數(shù)據(jù)來源及相應(yīng)采集方法。1.傳感器傳感器常用于測量物理環(huán)境變量并將其轉(zhuǎn)化為可讀的數(shù)字信號以待處理,根據(jù)測量類型的不同,分為壓力、振動、位移、紅外光、紫外光、溫度、濕敏、離子、微生物等傳感器。信息通過有線或無線網(wǎng)絡(luò)傳送到數(shù)據(jù)采集點(diǎn)。有線傳感器網(wǎng)絡(luò)通過網(wǎng)線收集傳感器的信息,這種方式適用于傳感器易于部署和管理的場景。無線傳感器網(wǎng)絡(luò)(wirelesssensornetwork,WSN)利用無線網(wǎng)絡(luò)作為信息傳輸?shù)妮d體,適用于沒有能量或通信的基礎(chǔ)設(shè)施的場合。無線傳感器網(wǎng)絡(luò)通常由大量微小傳感器節(jié)點(diǎn)構(gòu)成,微小傳感器由電池供電,被部署在應(yīng)用指定的地點(diǎn)收集感知數(shù)據(jù)。當(dāng)節(jié)點(diǎn)部署完成后,基站將發(fā)布網(wǎng)絡(luò)配置/管理或收集命令,來自不同節(jié)點(diǎn)的感知數(shù)據(jù)將被匯集并轉(zhuǎn)發(fā)到基站以待處理?;趥鞲衅鞯臄?shù)據(jù)采集系統(tǒng)被認(rèn)為是一個(gè)信息物理系統(tǒng)。2024/5/1117數(shù)據(jù)采集方法2.系統(tǒng)日志日志由數(shù)據(jù)源系統(tǒng)產(chǎn)生,以特殊的文件格式記錄系統(tǒng)的活動。幾乎所有在數(shù)字設(shè)備上運(yùn)行的應(yīng)用的日志文件都非常有用,例如,Web服務(wù)器通常要在日志文件中記錄網(wǎng)站用戶的點(diǎn)擊、鍵盤輸入、訪問行為以及其他屬性。用于捕獲用戶在網(wǎng)站上的活動的Web服務(wù)器日志文件格式有三種類型:NCSA通用日志文件格式、W3C擴(kuò)展日志文件格式和MicrosoftIIS日志文件格式。數(shù)據(jù)庫也可以用來替代文本文件存儲日志信息,以提高海量日志的查詢效率。在大數(shù)據(jù)領(lǐng)域,還可基于分布式的海量日志采集、聚合和傳輸系統(tǒng)Flume及支持高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)進(jìn)行日志采集。2024/5/1118數(shù)據(jù)采集方法3.數(shù)據(jù)庫傳統(tǒng)企業(yè)會使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(如MySQL和Oracle等)來存儲數(shù)據(jù)。隨著大數(shù)據(jù)時(shí)代的到來,Redis、MongoDB和HBase等NoSQL數(shù)據(jù)庫(泛指非關(guān)系型數(shù)據(jù)庫)逐漸在互聯(lián)網(wǎng)企業(yè)中得到廣泛使用。數(shù)據(jù)庫一般可通過應(yīng)用程序編程接口(applicationprogramminginterface,API)以主動或被動方式采集數(shù)據(jù),采集策略可基于定時(shí)或者數(shù)據(jù)庫觸發(fā)機(jī)制增量獲取或完整刷新等。獨(dú)立的ETL(extract-transform-load)技術(shù)可完整處理常見數(shù)據(jù)來源的采集、轉(zhuǎn)換和處理,通過對數(shù)據(jù)進(jìn)行提取、轉(zhuǎn)換、加載,最終挖掘數(shù)據(jù)的潛在價(jià)值。2024/5/1119數(shù)據(jù)采集方法4.Web爬蟲Web爬蟲(也稱網(wǎng)絡(luò)爬蟲)是指從搜索引擎下載并存儲網(wǎng)頁的程序。Web爬蟲按順序訪問初始隊(duì)列中的一組統(tǒng)一資源定位符(uniformresourcelocator,URL),并為所有URL分配一個(gè)優(yōu)先級,然后從隊(duì)列中獲得具有一定優(yōu)先級的URL,下載該網(wǎng)頁,隨后解析網(wǎng)頁中包含的所有URL并添加這些新的URL到隊(duì)列中。這個(gè)過程一直重復(fù),直到爬蟲程序停止為止。Web爬蟲是網(wǎng)站應(yīng)用(如搜索引擎)的主要數(shù)據(jù)采集方式。Web爬蟲數(shù)據(jù)采集過程由選擇策略、重訪策略、禮貌策略以及并行策略決定。選擇策略決定哪個(gè)網(wǎng)頁將被訪問;重訪策略決定何時(shí)檢查網(wǎng)頁是否更新;禮貌策略防止過度訪問網(wǎng)站;并行策略則用于協(xié)調(diào)分布的爬蟲程序。2024/5/1120數(shù)據(jù)傳輸原始數(shù)據(jù)采集后必須將其傳送到數(shù)據(jù)存儲基礎(chǔ)設(shè)施(如數(shù)據(jù)中心)等待進(jìn)一步處理。數(shù)據(jù)傳輸過程可以分為兩個(gè)階段:IP骨干網(wǎng)傳輸和數(shù)據(jù)中心傳輸,如圖所示。2024/5/1121數(shù)據(jù)傳輸1.IP骨干網(wǎng)傳輸IP骨干網(wǎng)提供高容量主干線路將大數(shù)據(jù)從數(shù)據(jù)源傳遞到數(shù)據(jù)中心。傳輸速率和容量取決于物理媒體和鏈路管理方法。(1)物理媒體:通常由許多光纜合并在一起增加容量,并需要擁有多條路徑以確保路徑失效時(shí)能進(jìn)行重路由。(2)鏈路管理:決定信號如何在物理媒體上傳輸。過去20年間,IPoverWDM技術(shù)得到了深入研究。波分復(fù)用技術(shù)(wavelengthdivisionmultiplexing,WDM)是在單根光纖上復(fù)用多個(gè)不同波長的光載波信號。為了解決電信號帶寬的瓶頸問題,正交頻分復(fù)用(orthogonalfrequencydivisionmultiplexing,OFDM)被認(rèn)為是未來的高速光傳輸技術(shù)的候選者。OFDM允許單個(gè)子載波的頻譜重疊,構(gòu)建數(shù)據(jù)流更靈活、資源有效使用的光網(wǎng)絡(luò)。2024/5/1122數(shù)據(jù)傳輸2.數(shù)據(jù)中心傳輸數(shù)據(jù)傳遞到數(shù)據(jù)中心后,將在數(shù)據(jù)中心內(nèi)部進(jìn)行存儲位置的調(diào)整和其他處理,這個(gè)過程稱為數(shù)據(jù)中心傳輸,涉及數(shù)據(jù)中心體系架構(gòu)和傳輸協(xié)議。(1)數(shù)據(jù)中心體系架構(gòu)。數(shù)據(jù)中心由多個(gè)裝備了若干服務(wù)器的機(jī)架構(gòu)成,服務(wù)器通過數(shù)據(jù)中心內(nèi)部網(wǎng)絡(luò)連接。許多數(shù)據(jù)中心基于權(quán)威的2層或3層fat-tree結(jié)構(gòu)的商用交換機(jī)構(gòu)建。一些其他的拓?fù)浣Y(jié)構(gòu)也用于構(gòu)建更為高效的數(shù)據(jù)中心網(wǎng)絡(luò)。由于電子交換機(jī)的固有缺陷,在增加通信帶寬的同時(shí)減少能量消耗非常困難。數(shù)據(jù)中心網(wǎng)絡(luò)中的光互連技術(shù)能夠提高吞吐量、降低延遲和減少能量消耗,被認(rèn)為是有前途的解決方案。(2)傳輸協(xié)議。TCP和UDP是數(shù)據(jù)傳輸最重要的兩種協(xié)議,但是它們的性能在傳輸大量的數(shù)據(jù)時(shí)并不令人滿意。一些增強(qiáng)TCP功能的方法的目標(biāo)是提高鏈路吞吐率,并對長短不一的混合TCP流提供可預(yù)測的小延遲。例如,DCTCP利用顯示擁塞通知對端主機(jī)提供多比特反饋。UDP協(xié)議適用于傳輸大量數(shù)據(jù),但是缺乏擁塞控制。因此高帶寬的UDP應(yīng)用必須自己實(shí)現(xiàn)擁塞控制機(jī)制,這是一項(xiàng)困難的任務(wù)并且會導(dǎo)致風(fēng)險(xiǎn)。2024/5/1123數(shù)據(jù)預(yù)處理數(shù)據(jù)源具有多樣性,數(shù)據(jù)集因干擾、冗余和一致性因素的影響而具有不同的質(zhì)量。從需求的角度來看,一些數(shù)據(jù)分析工具和應(yīng)用對數(shù)據(jù)質(zhì)量有著嚴(yán)格的要求。因此,在大數(shù)據(jù)系統(tǒng)中需要使用數(shù)據(jù)預(yù)處理技術(shù)來提高數(shù)據(jù)的質(zhì)量。主要的數(shù)據(jù)預(yù)處理技術(shù)包括數(shù)據(jù)整合、數(shù)據(jù)清洗、冗余消除、數(shù)據(jù)歸約等。1.數(shù)據(jù)整合數(shù)據(jù)整合是指在邏輯上和物理上把來自不同數(shù)據(jù)源的異構(gòu)數(shù)據(jù)進(jìn)行連接合并,為用戶提供一個(gè)統(tǒng)一的數(shù)據(jù)視圖。這些不同來源的異構(gòu)數(shù)據(jù)可能存在命名和格式不統(tǒng)一、數(shù)據(jù)重復(fù)、數(shù)據(jù)類型不一致等問題,因此,需要根據(jù)一定的規(guī)則將這些數(shù)據(jù)進(jìn)行必要的處理和格式轉(zhuǎn)換,然后進(jìn)行連接合并,形成統(tǒng)一的數(shù)據(jù)視圖。2.數(shù)據(jù)清洗數(shù)據(jù)清洗(cleaning)是指在數(shù)據(jù)集中發(fā)現(xiàn)不準(zhǔn)確、不完整或不合理的數(shù)據(jù),并對這些數(shù)據(jù)進(jìn)行修補(bǔ)或刪除以提高數(shù)據(jù)質(zhì)量。一個(gè)通用的數(shù)據(jù)清洗過程由5個(gè)步驟構(gòu)成:定義錯(cuò)誤類型,搜索并標(biāo)識錯(cuò)誤實(shí)例,改正錯(cuò)誤,文檔記錄錯(cuò)誤實(shí)例和錯(cuò)誤類型,修改數(shù)據(jù)錄入程序以減少未來的錯(cuò)誤。2024/5/1124數(shù)據(jù)預(yù)處理此外,格式檢查、完整性檢查、合理性檢查和極限檢查也在數(shù)據(jù)清洗過程中完成。數(shù)據(jù)清洗對保持?jǐn)?shù)據(jù)的一致和更新起著重要作用,因此被用于銀行、保險(xiǎn)、零售、電信和交通等多個(gè)領(lǐng)域。在電子商務(wù)領(lǐng)域,盡管大多數(shù)數(shù)據(jù)通過電子方式收集,但仍存在數(shù)據(jù)質(zhì)量問題。影響數(shù)據(jù)質(zhì)量的因素包括技術(shù)、業(yè)務(wù)和管理三個(gè)方面,技術(shù)因素涉及數(shù)據(jù)來源、數(shù)據(jù)采集、數(shù)據(jù)傳輸和數(shù)據(jù)裝載等方面,業(yè)務(wù)因素涉及業(yè)務(wù)不清晰、輸入不規(guī)范、數(shù)據(jù)造假等方面,管理因素涉及人員素質(zhì)、管理機(jī)制、數(shù)據(jù)規(guī)范、流程制度等方面。數(shù)據(jù)清洗對隨后的數(shù)據(jù)分析非常重要,因?yàn)樗芴岣邤?shù)據(jù)分析的準(zhǔn)確性。但是數(shù)據(jù)清洗依賴復(fù)雜的關(guān)系模型,這會帶來額外的計(jì)算和延遲開銷,因此,必須在數(shù)據(jù)清洗模型的復(fù)雜性和分析結(jié)果的準(zhǔn)確性之間進(jìn)行平衡。2024/5/1125數(shù)據(jù)預(yù)處理3.冗余消除數(shù)據(jù)冗余是指數(shù)據(jù)的重復(fù)或過剩,這是許多數(shù)據(jù)集的常見問題。數(shù)據(jù)冗余無疑會增加傳輸開銷,浪費(fèi)存儲空間,導(dǎo)致數(shù)據(jù)不一致,降低可靠性。因此許多研究提出了數(shù)據(jù)冗余減少機(jī)制,例如冗余檢測和數(shù)據(jù)壓縮。由廣泛部署的攝像頭收集的圖像和視頻數(shù)據(jù)存在大量的數(shù)據(jù)冗余。在視頻監(jiān)控?cái)?shù)據(jù)中,大量的圖像和視頻數(shù)據(jù)存在著時(shí)間、空間和統(tǒng)計(jì)上的冗余。視頻壓縮技術(shù)被用于減少視頻數(shù)據(jù)的冗余,許多重要的標(biāo)準(zhǔn)(如MPEG-2,MPEG-4,H.263,H.264/AVC)已被應(yīng)用以減少存儲和傳輸?shù)呢?fù)擔(dān)。對于普遍的數(shù)據(jù)傳輸和存儲,數(shù)據(jù)去重技術(shù)是專用的數(shù)據(jù)壓縮技術(shù),用于消除重復(fù)數(shù)據(jù)的副本。數(shù)據(jù)去重技術(shù)能夠顯著地減少存儲空間的占用,對大數(shù)據(jù)存儲系統(tǒng)具有非常重要的作用。2024/5/1126數(shù)據(jù)預(yù)處理4.數(shù)據(jù)歸約數(shù)據(jù)整合與清洗無法改變數(shù)據(jù)集的規(guī)模,依然需要通過技術(shù)手段降低數(shù)據(jù)規(guī)模,這就是數(shù)據(jù)歸約。數(shù)據(jù)歸約采用編碼方案,通過小波變換或主成分分析來有效地壓縮原始數(shù)據(jù),或者通過特征提取技術(shù)進(jìn)行屬性子集的選擇或重造。除了前面提到的數(shù)據(jù)預(yù)處理方法,還有一些對特定數(shù)據(jù)對象(這些數(shù)據(jù)對象通常具有高維特征矢量)進(jìn)行預(yù)處理的技術(shù),如特征提取技術(shù),在多媒體搜索和域名系統(tǒng)(DNS)分析中起著重要作用。數(shù)據(jù)變形技術(shù)則通常用于處理分布式數(shù)據(jù)源產(chǎn)生的異構(gòu)數(shù)據(jù),對商業(yè)數(shù)據(jù)的處理非常有用。然而,沒有一個(gè)統(tǒng)一的數(shù)據(jù)預(yù)處理過程和單一的技術(shù)能夠用于多樣化的數(shù)據(jù)集,必須考慮數(shù)據(jù)集的特性、需要解決的問題、性能需求和其他因素來選擇合適的數(shù)據(jù)預(yù)處理方案。2024/5/1127數(shù)據(jù)存儲概述2024/5/1128什么是數(shù)據(jù)存儲數(shù)據(jù)存儲是指數(shù)據(jù)以某種格式記錄在計(jì)算機(jī)內(nèi)部或外部存儲介質(zhì)上。因此,它包括兩部分,即存儲格式與存儲介質(zhì)。1.存儲格式文件:文字文件,壓縮文件,圖形圖像,動畫,音頻、視頻文件等。數(shù)據(jù)庫:關(guān)系型數(shù)據(jù)庫,非關(guān)系型數(shù)據(jù)庫。2.存儲介質(zhì)磁盤和磁帶都是常用的存儲介質(zhì)。數(shù)據(jù)存儲組織方式因存儲介質(zhì)而異。在磁帶上數(shù)據(jù)僅采用順序存取方式;在磁盤上則可按使用要求采用順序存取或直接存取方式。數(shù)據(jù)存儲方式與數(shù)據(jù)文件組織密切相關(guān),其關(guān)鍵在于建立記錄的邏輯與物理順序間的對應(yīng)關(guān)系,確定存儲地址,以提高數(shù)據(jù)存取速度。2024/5/1129存儲格式(一)文件形式1.本地文件文件存儲在本地節(jié)點(diǎn),可不通過網(wǎng)絡(luò)直接訪問。文字文件類型:如txt,csv,xml,html,doc等。壓縮文件類型:如zip,rar等。圖形圖像類型:如jpg,gif,bmp等。動畫類型:如gif,swf等。音頻、視頻類型:如wav,mp3,mp4,avi等。2.分布式文件系統(tǒng)分布式文件系統(tǒng)(distributedfilesystem)是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點(diǎn)上,而是通過計(jì)算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)相連。分布式文件系統(tǒng)的設(shè)計(jì)基于客戶端/服務(wù)器模式。一個(gè)典型的網(wǎng)絡(luò)可能包括多個(gè)供多用戶訪問的服務(wù)器。另外,對等特性允許一些系統(tǒng)扮演客戶端和服務(wù)器的雙重角色。分布式文件系統(tǒng)可以有效解決數(shù)據(jù)的存儲和管理難題:將固定于某個(gè)地點(diǎn)的某個(gè)文件系統(tǒng)擴(kuò)展到任意多個(gè)地點(diǎn)/多個(gè)文件系統(tǒng),眾多節(jié)點(diǎn)組成一個(gè)文件系統(tǒng)網(wǎng)絡(luò)。每個(gè)節(jié)點(diǎn)可以分布在不同的地點(diǎn),通過網(wǎng)絡(luò)進(jìn)行節(jié)點(diǎn)間的通信和數(shù)據(jù)傳輸。2024/5/1130存儲格式(二)數(shù)據(jù)庫形式數(shù)據(jù)庫在結(jié)構(gòu)化數(shù)據(jù)的存儲和管理方面應(yīng)用非常廣泛,它大致可分為兩類,即關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。常見的關(guān)系型數(shù)據(jù)庫有Oracle、DB2、MySQL等,常見的非關(guān)系型數(shù)據(jù)庫有MongoDB、HBase等。下圖以思維導(dǎo)圖形式展示了數(shù)據(jù)庫的大致分類。2024/5/1131存儲格式(三)大數(shù)據(jù)形式1.分布式系統(tǒng)分布式系統(tǒng)包含多個(gè)自主的處理單元,通過計(jì)算機(jī)網(wǎng)絡(luò)互連來協(xié)作完成分配的任務(wù),其分而治之的策略能夠更好地處理大規(guī)模的數(shù)據(jù)分析問題。分布式系統(tǒng)主要包含以下兩類:(1)分布式文件系統(tǒng):存儲管理需要多種技術(shù)的協(xié)同工作,文件系統(tǒng)為其提供最底層存儲能力的支持。其中Hadoop分布式文件系統(tǒng)(Hadoopdistributedfilesystem,HDFS)是一個(gè)高度容錯(cuò)性系統(tǒng),適用于批量處理,能夠提供高吞吐量的數(shù)據(jù)訪問。(2)分布式鍵值系統(tǒng):分布式鍵值系統(tǒng)用于存儲關(guān)系簡單的半結(jié)構(gòu)化數(shù)據(jù)。典型的分布式鍵值系統(tǒng)有AmazonDynamo,獲得廣泛應(yīng)用和關(guān)注的對象存儲(objectstorage)技術(shù)也可以視為分布式鍵值系統(tǒng),其存儲和管理的是對象而不是數(shù)據(jù)塊。2024/5/1132存儲格式2.NoSQL數(shù)據(jù)庫關(guān)系型數(shù)據(jù)庫已經(jīng)無法滿足Web2.0的需求。主要表現(xiàn)為:無法滿足海量數(shù)據(jù)的管理需求和數(shù)據(jù)高并發(fā)的需求,不太具備高可擴(kuò)展性和高可用性。相比之下,NoSQL數(shù)據(jù)庫的優(yōu)勢為:可以支持超大規(guī)模的數(shù)據(jù)存儲,靈活的數(shù)據(jù)模型可以很好地支持Web2.0的應(yīng)用,具有強(qiáng)大的橫向擴(kuò)展能力等。典型的NoSQL數(shù)據(jù)庫包含以下幾種:鍵值數(shù)據(jù)庫、列數(shù)據(jù)庫、文檔數(shù)據(jù)庫和圖數(shù)據(jù)庫。3.云數(shù)據(jù)庫云數(shù)據(jù)庫是一種基于云計(jì)算技術(shù)發(fā)展的共享基礎(chǔ)架構(gòu)的方法,是部署和虛擬化在云計(jì)算環(huán)境中的數(shù)據(jù)庫。云數(shù)據(jù)庫并非一種全新的數(shù)據(jù)庫技術(shù),而只是以服務(wù)的方式提供數(shù)據(jù)庫功能。云數(shù)據(jù)庫所采用的數(shù)據(jù)模型可以是關(guān)系型數(shù)據(jù)庫所使用的關(guān)系模型(如華為、阿里巴巴和微軟的云數(shù)據(jù)庫都采用了關(guān)系模型)。2024/5/1133存儲方式數(shù)據(jù)存儲方式主要有三類,即直接附加存儲、網(wǎng)絡(luò)附加存儲及存儲區(qū)域網(wǎng)絡(luò)。1.直接附加存儲直接附加存儲(directattachedstorage,DAS)方式與普通的計(jì)算機(jī)存儲架構(gòu)一樣,外部存儲設(shè)備都是直接掛接在服務(wù)器內(nèi)部總線上,數(shù)據(jù)存儲設(shè)備是整個(gè)服務(wù)器結(jié)構(gòu)的一部分。DAS方式的主要適用環(huán)境有小型網(wǎng)絡(luò)(數(shù)據(jù)存儲量小,簡單經(jīng)濟(jì))、地理位置分散的網(wǎng)絡(luò)、特殊應(yīng)用服務(wù)器(如微軟的集群服務(wù)器或某些數(shù)據(jù)庫使用的原始分區(qū),均要求存儲設(shè)備直接連接到應(yīng)用服務(wù)器)。DAS的優(yōu)點(diǎn)在于簡單經(jīng)濟(jì),它的缺點(diǎn)包括效率低,不方便進(jìn)行數(shù)據(jù)保護(hù),無法共享。2024/5/1134存儲方式2.網(wǎng)絡(luò)附加存儲網(wǎng)絡(luò)附加存儲(networkattachedstorage,NAS)方式全面改進(jìn)了以前低效的DAS方式。它采用一種單獨(dú)為網(wǎng)絡(luò)數(shù)據(jù)存儲開發(fā)的獨(dú)立于服務(wù)器的文件服務(wù)器來連接所存儲的設(shè)備,自形成一個(gè)網(wǎng)絡(luò),數(shù)據(jù)存儲不再是服務(wù)器的附屬,而是作為獨(dú)立網(wǎng)絡(luò)節(jié)點(diǎn)存在于網(wǎng)絡(luò)之中,可被所有網(wǎng)絡(luò)用戶共享。NAS的優(yōu)點(diǎn)包括:真正的即插即用;存儲部署簡單;存儲設(shè)備位置非常靈活;管理容易且成本低。NAS的缺點(diǎn)包括存儲性能較低,可靠度不高。2024/5/1135存儲方式3.存儲區(qū)域網(wǎng)絡(luò)存儲區(qū)域網(wǎng)絡(luò)(storageareanetwork,SAN)方式創(chuàng)造了存儲的網(wǎng)絡(luò)化。存儲網(wǎng)絡(luò)化順應(yīng)了計(jì)算機(jī)服務(wù)器體系結(jié)構(gòu)網(wǎng)絡(luò)化的趨勢。SAN的支撐技術(shù)是光纖通道(fiberchannel,FC)技術(shù),它是美國國家標(biāo)準(zhǔn)協(xié)會(AmericanNationalStandardsInstitute,ANSI)為網(wǎng)絡(luò)和通道I/O接口建立的一個(gè)標(biāo)準(zhǔn)集成。FC技術(shù)支持HIPPI、IPI、SCSI、IP、ATM等多種高級協(xié)議,其最大特性是將網(wǎng)絡(luò)和設(shè)備的通信協(xié)議與傳輸物理介質(zhì)隔離開,這樣多種協(xié)議可在同一個(gè)物理連接上同時(shí)傳送。SAN的硬件基礎(chǔ)設(shè)施是光纖通道,用光纖通道構(gòu)建的SAN由以下三個(gè)部分組成:存儲和備份設(shè)備:包括磁帶、磁盤和光盤庫等;光纖通道網(wǎng)絡(luò)連接部件:包括主機(jī)總線適配卡、驅(qū)動程序、光纜、集線器、交換機(jī)、光纖通道和SCSI間的橋接器;應(yīng)用和管理軟件:包括備份軟件、存儲資源管理軟件和存儲設(shè)備管理軟件。SAN的優(yōu)點(diǎn)包括網(wǎng)絡(luò)部署容易,具有高速的存儲性能和良好的擴(kuò)展能力等。2024/5/1136存儲方式4.三類存儲方式比較從連接方式上對比,DAS采用了存儲設(shè)備直接連接應(yīng)用服務(wù)器的方式,具有一定的靈活性和限制性;NAS通過網(wǎng)絡(luò)技術(shù)連接存儲設(shè)備和應(yīng)用服務(wù)器,存儲設(shè)備位置靈活,隨著萬兆網(wǎng)的出現(xiàn),傳輸速率有了很大的提高;SAN則是通過光纖通道技術(shù)連接存儲設(shè)備和應(yīng)用服務(wù)器,具有很高的傳輸速率和很好的擴(kuò)展性能。三種存儲方式各有優(yōu)勢,相互共存,占據(jù)了磁盤存儲市場的70%以上。SAN和NAS產(chǎn)品的價(jià)格仍然遠(yuǎn)遠(yuǎn)高于DAS,許多用戶出于價(jià)格考慮選擇低效率的直連存儲而不是高效率的共享存儲。2024/5/1137Python相關(guān)數(shù)據(jù)科學(xué)工具2024/5/1138Python相關(guān)數(shù)據(jù)科學(xué)工具根據(jù)KDnuggets()2017—2019年的調(diào)研結(jié)果(見下圖),Python已然是數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)領(lǐng)域使用排名第一的軟件工具。因此,我們有必要了解一下Python相關(guān)數(shù)據(jù)科學(xué)工具。2024/5/1139Python相關(guān)開發(fā)環(huán)境與工具可用于Python的代碼編輯器有Vim、ATOM、VisualStudioCode等,集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)有PyCharm、LiClipse、Spyder、基于交互式IPython的JupyterNotebook等。1.Anaconda——一站式數(shù)據(jù)科學(xué)工具Anaconda內(nèi)置集成了豐富的數(shù)據(jù)分析和機(jī)器學(xué)習(xí)模塊,如NumPy、pandas、matplotlib、SciPy、JupyterNotebook、spyder等,如圖所示。如何安裝Anaconda,請參考:/anaconda/install/windows/。2024/5/1140Python相關(guān)開發(fā)環(huán)境與工具本書使用Anaconda3中基于Python3的JupyterNotebook作為開發(fā)環(huán)境,如圖1-8所示。當(dāng)在瀏覽器中編輯JupyterNotebook時(shí),JupyterNotebook的內(nèi)容被寫入文件后綴名為“.ipynb”的文件。2024/5/1141Python數(shù)據(jù)科學(xué)相關(guān)模塊1.pandaspandas是Python強(qiáng)大、靈活的數(shù)據(jù)分析和探索工具,包含Series、DataFrame等高級數(shù)據(jù)結(jié)構(gòu)和工具,安裝pandas可使Python處理數(shù)據(jù)變得非??焖俸秃唵?。pandas是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,它納入了大量的庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效的操作大型數(shù)據(jù)集所需要的工具。pandas還包含了高級數(shù)據(jù)結(jié)構(gòu)以及讓數(shù)據(jù)分析變得快速、簡單的工具。pandas的主要優(yōu)點(diǎn)如下:建立在numpy之上,使得應(yīng)用numpy變得簡單。數(shù)據(jù)結(jié)構(gòu)帶有坐標(biāo)軸,支持自動或明確的數(shù)據(jù)對齊。這能防止由于數(shù)據(jù)結(jié)構(gòu)沒有對齊以及處理不同來源、采用不同索引的數(shù)據(jù)而產(chǎn)生的常見錯(cuò)誤。更容易處理缺失數(shù)據(jù),是進(jìn)行數(shù)據(jù)清洗/整理的最好工具??珊喜⒘餍袛?shù)據(jù)庫(如基于SQL的數(shù)據(jù)庫)。2024/5/1142Python數(shù)據(jù)科學(xué)相關(guān)模塊2.numpynumpy提供數(shù)組支持以及相應(yīng)的高效處理函數(shù),是Python數(shù)據(jù)分析的基礎(chǔ),也是scipy、pandas等數(shù)據(jù)處理和科學(xué)計(jì)算庫最基本的函數(shù)功能庫,其數(shù)據(jù)類型對Python數(shù)據(jù)分析十分有用。numpy提供了兩種基本對象:ndarray和ufunc。ndarray是存儲單一數(shù)據(jù)類型的多維數(shù)組,而ufunc是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。numpy的功能如下:可對n維數(shù)組(一種快速、高效使用內(nèi)存的多維數(shù)組)提供矢量化數(shù)學(xué)運(yùn)算。可以不使用循環(huán)就對整個(gè)數(shù)組內(nèi)的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)數(shù)學(xué)運(yùn)算。便于將數(shù)據(jù)傳送到用低級語言(C/C)編寫的外部庫,也便于外部庫以numpy數(shù)組形式返回?cái)?shù)據(jù)。不提供高級數(shù)據(jù)分析功能,但可以更加深刻地理解numpy數(shù)組和面向數(shù)組的計(jì)算。2024/5/1143Python數(shù)據(jù)科學(xué)相關(guān)模塊3.Web爬蟲(1)Scrapy。Scrapy是專為爬蟲而生的工具,具有URL讀取、HTML解析、數(shù)據(jù)存儲等功能,可以使用Twisted異步網(wǎng)絡(luò)庫來處理網(wǎng)絡(luò)通信,架構(gòu)清晰且包含各種中間件接口,可以靈活地滿足各種需求。(2)Selenium。基于不同類型瀏覽器的驅(qū)動,模擬瀏覽器的操作,以此獲取動態(tài)網(wǎng)頁內(nèi)容。(3)其他基礎(chǔ)網(wǎng)頁獲取模塊。如BeautifulSoup,PyQuery,urlib,requests等。4.matplotlibmatplotlib是強(qiáng)大的數(shù)據(jù)可視化工具和繪圖庫,主要用于繪制數(shù)據(jù)圖表,它提供了繪制各類可視化圖形的命令字庫和簡單接口,可以使用戶輕松掌握圖形的格式,繪制各類可視化圖形。使用matplotlib可以定制所做圖表的任一方面。它支持所有操作系統(tǒng)下不同的圖形用戶界面(graphicaluserinterface,GUI)后端,并且可以將圖形輸出為常見的矢量圖和圖形測試,如PDF、SVG、JPG、PNG、BMP、GIF等。通過matplotlib數(shù)據(jù)繪圖,可以將枯燥的數(shù)字轉(zhuǎn)化成人們?nèi)菀捉邮艿膱D表。matplotlib是一套基于numpy的Python包,有一套允許定制各種屬性的默認(rèn)設(shè)置,可以控制matplotlib中的每一個(gè)默認(rèn)屬性:圖像大小、每英寸點(diǎn)數(shù)、線寬、色彩和樣式、子圖、坐標(biāo)軸、網(wǎng)格屬性、文字和文字屬性。2024/5/1144Python數(shù)據(jù)科學(xué)相關(guān)模塊5.scipyscipy是一組專門解決科學(xué)計(jì)算中各種標(biāo)準(zhǔn)問題域的包的集合,建立在numpy的基礎(chǔ)上,提供了更多方便易用的高級科學(xué)計(jì)算功能,包括優(yōu)化、信號處理、統(tǒng)計(jì)分析、插值、線性代數(shù)等各種功能和用法,如約束優(yōu)化、統(tǒng)計(jì)描述、統(tǒng)計(jì)分布、假設(shè)檢驗(yàn)、濾波、快速傅里葉變換、線性插值、積分、常微分方程求解等。6.機(jī)器學(xué)習(xí)與深度學(xué)習(xí)sklearn是Python常用的機(jī)器學(xué)習(xí)工具包,它提供了完善的機(jī)器學(xué)習(xí)工具箱,是支持?jǐn)?shù)據(jù)預(yù)處理、分類、回歸、聚類、預(yù)測和模型分析等功能的強(qiáng)大的機(jī)器學(xué)習(xí)庫,依賴于numpy、scipy和matplotlib等。sklearn有六種主要功能:分類、回歸、聚類、數(shù)據(jù)降維、模型選擇、數(shù)據(jù)預(yù)處理。另外,sklearn還自帶一些經(jīng)典的數(shù)據(jù)集,比如用于分類的iris和digits數(shù)據(jù)集,用于回歸分析的bostonhouseprices數(shù)據(jù)集。深度學(xué)習(xí)的工具庫較多,如TensorFlow、PyTorch、Keras、百度飛槳等。其中Keras基于Theano,依賴于numpy和scipy,利用它可以構(gòu)建普通的神經(jīng)網(wǎng)絡(luò)和各種深度學(xué)習(xí)模型,如自然語言處理、圖像識別、自編碼器、循環(huán)神經(jīng)網(wǎng)絡(luò)、遞歸神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)等。2024/5/1145Python數(shù)據(jù)科學(xué)相關(guān)模塊7.Gensim自然語言處理工具庫也比較豐富,如SnowNLP、Jieba、Gensim等。其中Gensim是用來做文本主題模型的庫,常用于處理語言方面的問題,支持TF-IDF、LSA、LDA和Word2Vec等多種主題模型算法,支持流式訓(xùn)練,并提供了諸如相似度計(jì)算、信息檢索等一些常用任務(wù)的應(yīng)用程序編程接口。2024/5/114647Question?問題?2024/5/11第二章

Python基礎(chǔ)《數(shù)據(jù)采集與處理:基于Python》2024/5/11482024/5/1149教學(xué)目標(biāo)本章學(xué)習(xí)目標(biāo)1.了解Python的特點(diǎn)和相關(guān)開發(fā)環(huán)境;2.掌握Python的基本語法、控制結(jié)構(gòu)、異常與處理及函數(shù)的封裝和使用等;3.理解Python常用數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)(如列表、元組、字典和集合等)的特點(diǎn),熟練掌握其常用操作方式。本章提綱1、Python簡介2、Python基本語法與命令3、運(yùn)算符、表達(dá)式與內(nèi)置對象4、函數(shù)5、異常及其處理Python簡介2024/5/1150什么是PythonPython是一種高層次的結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言,是一門跨平臺、開源、免費(fèi)的解釋型高級動態(tài)編程語言。Python支持命令式編程、函數(shù)式編程,完全支持面向?qū)ο蟪绦蛟O(shè)計(jì),擁有大量的擴(kuò)展庫。Python是交互式語言,可以在一個(gè)Python提示符下直接互動執(zhí)行程序;Python也是“膠水語言”,可以把多種不同語言編寫的程序融合到一起,實(shí)現(xiàn)無縫拼接,更好地發(fā)揮不同語言和工具的優(yōu)勢,滿足不同應(yīng)用領(lǐng)域的需求;Python是初學(xué)者的語言,對初級程序員而言,它支持廣泛的應(yīng)用程序開發(fā),包括簡單的文字處理、WWW瀏覽器、游戲等。2024/5/1151什么是PythonPython的特點(diǎn)如下:易于學(xué)習(xí):Python的關(guān)鍵字相對較少,結(jié)構(gòu)簡單,有明確定義的語法,學(xué)習(xí)起來更加容易。易于閱讀:Python代碼的定義更清晰。易于維護(hù):Python的成功在于它的源代碼相當(dāng)容易維護(hù)。廣泛的標(biāo)準(zhǔn)庫:Python的最大優(yōu)勢之一是擁有豐富的庫,而且可以跨平臺,在Unix、Windows和macOS上都兼容得很好?;幽J?支持互動模式,可以從終端輸入執(zhí)行代碼并獲得結(jié)果,進(jìn)行互動測試和調(diào)試代碼片段??梢浦?基于其開放源代碼的特性,Python可被移植到許多平臺(即可以在許多平臺工作)??蓴U(kuò)展:如果需要一段運(yùn)行很快的關(guān)鍵代碼,或者是編寫一些不愿意開放的算法,那么可以使用C或C完成此部分程序,然后從Python程序中調(diào)用。數(shù)據(jù)庫:Python提供了所有主要的商業(yè)數(shù)據(jù)庫的接口。GUI編程:Python支持創(chuàng)建GUI,它可以移植到許多系統(tǒng)中調(diào)用??汕度?可以將Python嵌入C/C程序中,讓程序獲得“腳本化”的能力。2024/5/1152為什么選擇Python在眾多解釋型語言中,Python最大的特點(diǎn)是擁有一個(gè)巨大且活躍的科學(xué)計(jì)算社區(qū)。進(jìn)入21世紀(jì)以來,在行業(yè)應(yīng)用和學(xué)術(shù)研究中采用Python進(jìn)行科學(xué)計(jì)算的勢頭越來越猛。近年來,由于Python有不斷改良的庫(主要是pandas),其已成為數(shù)據(jù)處理任務(wù)的一大代替方案。結(jié)合其在通用編程方面的強(qiáng)大實(shí)力,完全可以只用Python一種語言來構(gòu)建以數(shù)據(jù)為中心的應(yīng)用程序。作為一個(gè)科學(xué)計(jì)算平臺,Python的成功源于其能夠輕松地集成C、C以及Fortran代碼。大部分現(xiàn)代計(jì)算機(jī)環(huán)境都利用了一些Fortran和C庫來實(shí)現(xiàn)線性代數(shù)、優(yōu)選、積分、快速傅里葉變換以及其他諸如此類的算法。選擇Python進(jìn)行數(shù)據(jù)采集、處理與分析的理由如下。1.語言排行榜居首位雖然Python是開發(fā)較早的編程語言,但近年來反而變得越來越流行,在KDnuggets調(diào)查的數(shù)據(jù)科學(xué)與機(jī)器學(xué)習(xí)工具排行榜中,Python自2017年一直居于首位。2024/5/1153為什么選擇Python2.語言簡潔、優(yōu)美,功能強(qiáng)大Python的語法非常接近英語,它去掉了傳統(tǒng)的C/Java使用大括號來區(qū)分一個(gè)方法體或者類的形式,采用強(qiáng)制縮進(jìn)來表示一個(gè)方法體或者類,語言風(fēng)格統(tǒng)一且優(yōu)美。Python內(nèi)置了很多高效的庫,比如,同樣一項(xiàng)工作,C語言可能需要1000行代碼,Java需要100行代碼,Python可能只需要10行代碼,而且桌面應(yīng)用、Web開發(fā)、自動化測試運(yùn)維、爬蟲、人工智能及大數(shù)據(jù)處理都能使用Python來完成。3.跨平臺很多流行編程語言(如Java、C、C)都能跨平臺而且開源,Python也是如此。由于它是開源的,所以也具有可移植性。你可以隨處運(yùn)行Python,換句話說,在Windows上寫的代碼,也可以很方便地在Linux、macOS上運(yùn)行。2024/5/1154為什么選擇Python4.社區(qū)人氣火爆Python有非常知名的社區(qū),而且人氣很火爆,除了Python官網(wǎng),在GitHub、OpenStack等網(wǎng)站上也有很多Python開源庫和討論社區(qū)。5.被眾多知名大公司使用國外非常有名的谷歌、臉書、雅虎、YouTube,還有美國宇航局(NASA)以及著名的開源云計(jì)算平臺OpenStack都使用Python,國內(nèi)的豆瓣也不例外。6.支持全棧開發(fā)除了主要應(yīng)用于數(shù)據(jù)分析與數(shù)據(jù)科學(xué)領(lǐng)域,Python還支持Web應(yīng)用、桌面應(yīng)用、服務(wù)端程序、游戲等各類應(yīng)用和服務(wù)程序的開發(fā)。2024/5/1155Python發(fā)展歷史與版本Python是吉多·范羅蘇姆于20世紀(jì)80年代末90年代初在荷蘭國家數(shù)學(xué)與計(jì)算機(jī)科學(xué)研究中心設(shè)計(jì)出來的。Python本身也是由諸多其他語言發(fā)展而來的,比如ABC、Modula-3、C、C、Algol-68、Smalltalk、Unixshell等。像Perl語言一樣,Python源代碼同樣遵循GNU通用公共許可證(GeneralPublicLicense,GPL)協(xié)議。現(xiàn)在,Python由一個(gè)核心開發(fā)團(tuán)隊(duì)維護(hù),吉多·范羅蘇姆仍然發(fā)揮著至關(guān)重要的作用,指導(dǎo)著Python的進(jìn)展。Python目前存在2.x和3.x兩個(gè)系列的版本,互相不兼容,Python2.x系列已于2020年1月1日正式停止維護(hù)和更新,本書所有代碼均基于Python3.x版本。在選擇Python版本時(shí),一定要先考慮清楚自己學(xué)習(xí)Python的目的,打算做哪方面的開發(fā),該領(lǐng)域或方向有哪些擴(kuò)展庫可用,這些擴(kuò)展庫支持Python的哪個(gè)最高版本。2024/5/1156Python解釋器在編寫Python代碼時(shí),我們得到的是一個(gè)包含Python代碼的以“.py”為擴(kuò)展名的文本文件。要運(yùn)行Python代碼,就需要Python解釋器去執(zhí)行“.py”文件。1.CPython當(dāng)從Python官方網(wǎng)站下載并安裝好Python3后,我們就直接獲得了一個(gè)官方版本的解釋器——CPython。這個(gè)解釋器是用C語言開發(fā)的,所以稱為CPython。在命令行中運(yùn)行Python就是啟動CPython解釋器。CPython是使用最廣的Python解釋器。2.IPythonIPython是基于CPython的一個(gè)交互式解釋器,也就是說,IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的。CPython使用“>>>”作為提示符,而IPython使用“In[序號]:”作為提示符。2024/5/1157Python解釋器3.PyPyPyPy是另一個(gè)Python解釋器,它的目標(biāo)是提高執(zhí)行速度。PyPy采用及時(shí)編譯(justintime,JIT)技術(shù)對Python代碼進(jìn)行動態(tài)編譯(注意:不是解釋),所以可以顯著提高Python代碼的執(zhí)行速度。絕大部分Python代碼都可以在PyPy下運(yùn)行,但是PyPy和CPython有一些區(qū)別,這就導(dǎo)致相同的Python代碼在兩種解釋器下執(zhí)行可能會得到不同的結(jié)果。如果代碼要在PyPy下執(zhí)行,就需要了解PyPy和CPython的不同點(diǎn)。4.JythonJython是在Java平臺上運(yùn)行的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。2024/5/1158Python開發(fā)環(huán)境Anaconda包含了conda、Python等180多個(gè)科學(xué)包及其依賴項(xiàng),基本上可以一站式提供常用的數(shù)據(jù)采集、處理和分析的模塊和開發(fā)環(huán)境。相比官方的Python版本,Anaconda內(nèi)容更豐富,編輯器更優(yōu)美,操作更便利。本書默認(rèn)使用的開發(fā)環(huán)境是Anaconda3,其中包含JupyterNotebook和Spyder兩種開發(fā)環(huán)境,下載地址:https://www.anaconda.com/download。其他常用的開發(fā)環(huán)境還有IDLE、PyCharm、Eclipse+PyDev、Eric、PythonWin等。2024/5/1159Python開發(fā)環(huán)境1.JupyterNotebook本書的源碼示例和運(yùn)行結(jié)果呈現(xiàn)方式包括Python和IPythonShell及JupyterNotebook形式,其中隨書附帶的源程序多數(shù)是JupyterNotebook格式的文件。JupyterNotebook是一個(gè)交互式筆記本,支持運(yùn)行40多種編程語言,其本質(zhì)是一個(gè)Web應(yīng)用程序,便于創(chuàng)建和共享程序文檔,支持實(shí)時(shí)代碼、數(shù)學(xué)方程、可視化和Markdown(一種輕量級標(biāo)記語言)語法。其用途包括數(shù)據(jù)清理和轉(zhuǎn)換、數(shù)值模擬、統(tǒng)計(jì)建模、機(jī)器學(xué)習(xí)等。啟動JupyterNotebook后會打開一個(gè)網(wǎng)頁,在該網(wǎng)頁右上角單擊“New”菜單,然后選擇“Python3”打開一個(gè)新的窗口,在該窗口即可編寫和運(yùn)行Python代碼,圖中為JupyterNotebook的開發(fā)環(huán)境界面示例。其中,代碼編輯環(huán)境中的每個(gè)方框?yàn)橐粋€(gè)Cell(即單元,通過“Cell”菜單中的“CellType”選項(xiàng)可以更改單元為可執(zhí)行的Code類型、Markdown類型等),前面有“In[序號]”形式,單擊“運(yùn)行”按鈕即可在當(dāng)前Cell下看到運(yùn)行結(jié)果。另外,“File”菜單中還有“Open”(打開文件)、“Saveas...”(另存為)、“Rename...”(重命名)、“Downloadas”(下載為其他格式文件)等選項(xiàng)。2024/5/1160Python開發(fā)環(huán)境在Windows平臺中,JupyterNotebook的工作文件目錄缺省安裝在C盤下,改變JupyterNotebook的工作文件目錄的正確方法如下:(1)打開AnacondaPrompt。(2)輸入命令jupyternotebook--generate-config。(3)打開C:/Users/你的賬戶/.jupyter/jupyter_notebook_config.py,將c.Notebook-App.notebook_dir=修改為c.NotebookApp.notebook_dir=你想要默認(rèn)打開的文件夾。(4)在“開始”菜單中找到JupyterNotebook快捷鍵,點(diǎn)擊鼠標(biāo)右鍵→更多→打開文件位置,在打開的目錄中選中該快捷方式,在鼠標(biāo)右鍵菜單中點(diǎn)擊“屬性”,將“屬性”窗口的“快捷方式”選項(xiàng)卡中的“目標(biāo)”項(xiàng)最后的“%USERPROFILE%”去掉,然后點(diǎn)擊“確定”。2024/5/1161Python開發(fā)環(huán)境(5)現(xiàn)在點(diǎn)擊JupyterNotebook快捷方式就可以直接在用戶想要默認(rèn)打開的文件夾中啟動它了。JupyterNotebook還可以單獨(dú)安裝和使用??梢栽贘upyter官網(wǎng)(/)中直接使用,也可以在自己電腦上安裝Jupyter,安裝命令為“pipinstalljupyter”,安裝完成后使用“jupyternotebook”命令即可啟動JupyterNotebook。JupyterNotebook中的快捷鍵包括:●Ctrl+Enter:執(zhí)行“運(yùn)行”?!馭hift+Enter:執(zhí)行“運(yùn)行”并換行?!馎lt+Enter:執(zhí)行“運(yùn)行”,且不管后面有沒有新格,都會插入新格?!馣、J或上下鍵可以實(shí)現(xiàn)上下移動,選中格子后按兩下D鍵可以刪除格子,就像VI編輯器一樣。2024/5/1162Python開發(fā)環(huán)境2.SpyderSpyder是Anaconda中的一個(gè)Python編程小工具,用Python編寫,免費(fèi)且開源,特點(diǎn)是將綜合開發(fā)工具的高級編輯、分析、調(diào)試和剖析功能與科學(xué)軟件包的數(shù)據(jù)探索、交互式執(zhí)行、深度檢查和可視化功能獨(dú)特地結(jié)合起來。在Windows平臺中,點(diǎn)擊“開始”菜單中的“AnacondaNavigator”即可展示Anaconda中集成的第三方工具,如JupyterLab、Orange3、Spyder等,選中其中的Spyder并點(diǎn)擊“Launch”按鈕即可打開Spyder編程工具,如圖2-2所示。當(dāng)然,也可以在“開始”菜單中直接點(diǎn)擊Spyder將其打開。2024/5/1163Python開發(fā)環(huán)境打開Spyder后,其開發(fā)環(huán)境界面如圖所示。右下角以交互模式輸入命令并顯示輸出結(jié)果,左邊是程序編輯窗口。2024/5/1164Python開發(fā)環(huán)境IDLE是Python軟件包自帶的一個(gè)集成開發(fā)環(huán)境,其開發(fā)環(huán)境界面如圖所示。它提供的基本功能包括語法高亮、段落縮進(jìn)、基本文本編輯、Tab鍵控制、程序調(diào)試等,初學(xué)者利用它可以方便地創(chuàng)建、運(yùn)行、測試和調(diào)試Python程序。2024/5/1165Python開發(fā)環(huán)境4.PyCharmPyCharm是由JetBrains打造的一款PythonIDE,支持macOS、Windows、Linux系統(tǒng),功能強(qiáng)大,有社區(qū)版、教育版和商業(yè)版三種版本。PyCharm下載地址:/pycharm/download/。PyCharm的功能包括代碼調(diào)試、語法高亮、項(xiàng)目管理、代碼跳轉(zhuǎn)、智能提示、自動完成、單元測試、版本控制等,其開發(fā)環(huán)境界面如圖所示。2024/5/1166Python擴(kuò)展庫的安裝方法進(jìn)行Python編程時(shí),經(jīng)常會用到第三方擴(kuò)展庫,這些擴(kuò)展庫在安裝后方可使用。在Anaconda環(huán)境下,其安裝方法有多種,如:●pip安裝:點(diǎn)擊Windows“開始”菜單中的“AnacondaPrompt”進(jìn)入命令行終端環(huán)境操作。pip安裝分為在線安裝和離線安裝兩種方式,缺省常用的是在線安裝方式,離線安裝則是在下載擴(kuò)展名為“whl”的第三方庫文件后進(jìn)行安裝。pip安裝的相關(guān)命令如表所示。2024/5/1167pip命令(conda對應(yīng)命令的形式類似)說明pipdownloadSomePackage[==version]下載擴(kuò)展庫的指定版本,不安裝pipfreeze[>requirements.txt]以requirements的格式列出已安裝模塊pipsearchSomePackage搜索指定包pipshowSomePackage顯示指定包piplist列出當(dāng)前已安裝的所有模塊及版本pipinstallSomePackage[==version]在線安裝SomePackage模塊的指定版本pipinstallSomePackage.whl通過whl文件離線安裝擴(kuò)展庫pipinstallpackage1package2…依次(在線)安裝package1、package2等擴(kuò)展模塊pipinstall-rrequirements.txt安裝requirements.txt文件中指定的擴(kuò)展庫pipinstall--upgradeSomePackage升級SomePackage模塊pipuninstallSomePackage[==version]卸載SomePackage模塊的指定版本Python擴(kuò)展庫的安裝方法●exe安裝:部分第三方庫提供了安裝程序,可直接安裝擴(kuò)展庫。●conda在線安裝:安裝命令的形式與pip類似,即condainstall…。如果設(shè)備上安裝了多個(gè)Python開發(fā)環(huán)境,那么在一個(gè)環(huán)境下安裝的擴(kuò)展庫無法在另一個(gè)環(huán)境下使用,需要分別安裝。注意,在線安裝默認(rèn)使用國外網(wǎng)站,但安裝進(jìn)程會很慢,因此可以考慮使用國內(nèi)鏡像網(wǎng)站,如:●清華大學(xué):/simple●阿里云:/pypi/simple使用鏡像源的Python安裝命令形式如下:pipinstall庫名-i鏡像網(wǎng)址另外,也可通過設(shè)置鏡像源方式避免每次執(zhí)行安裝命令都輸入鏡像地址。首先需要升級pip到最新的版本(10.0.0版本以上),然后進(jìn)行配置。以設(shè)置清華大學(xué)鏡像源為例,具體命令如下:python-mpipinstall--upgradepippipconfigsetglobal.index-url/simple2024/5/1168Python基本語法與命令2024/5/1169Python編程規(guī)范良好的編程規(guī)范和風(fēng)格有助于機(jī)器和人類閱讀,Python非常重視代碼的可讀性,對代碼布局和排版有嚴(yán)格的要求。下面介紹部分Python社區(qū)對代碼編寫的一些約定俗成的要求、規(guī)范和常用的代碼優(yōu)化方法,建議遵循并養(yǎng)成良好的編程習(xí)慣。1.縮進(jìn)與C/C和Java等語言有代碼塊開始和結(jié)束的標(biāo)點(diǎn)符號不同,Python程序依靠代碼塊的縮進(jìn)來體現(xiàn)代碼之間的邏輯關(guān)系,縮進(jìn)結(jié)束就表示一個(gè)代碼塊結(jié)束。而類定義、函數(shù)定義、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、with塊行尾的冒號則表示縮進(jìn)的開始。一般情況下以4個(gè)空格為基本縮進(jìn)單位,也可以是2個(gè)或多個(gè)空格,但同一個(gè)級別的代碼塊的縮進(jìn)量必須相同,并且建議同一個(gè)程序文件內(nèi)代碼縮進(jìn)量保持統(tǒng)一,如下所示。2024/5/1170Python編程規(guī)范2.模塊導(dǎo)入雖然import語法支持一個(gè)語句可以導(dǎo)入多個(gè)模塊,但每個(gè)import語句最好只導(dǎo)入一個(gè)模塊,且最好按標(biāo)準(zhǔn)庫、擴(kuò)展庫、自定義庫的順序依次導(dǎo)入。3.代碼間隔建議在每個(gè)類、函數(shù)定義和一段完整的功能代碼之后增加一個(gè)空行,在運(yùn)算符兩側(cè)各增加一個(gè)空格,逗號后面增加一個(gè)空格。4.長語句拆分或換行如果語句過長,可以考慮拆分成多個(gè)短一些的語句,以保證代碼具有較好的可讀性。如果語句確實(shí)太長而超過屏幕寬度,最好使用續(xù)行符(linecontinuationcharacter)“\”,或者使用圓括號將多行代碼括起來表示是一條語句,如下所示。2024/5/1171Python編程規(guī)范5.復(fù)雜表達(dá)式雖然Python運(yùn)算符有明確的優(yōu)先級,但對于復(fù)雜的表達(dá)式,建議在適當(dāng)?shù)奈恢檬褂美ㄌ?使得各種運(yùn)算的隸屬關(guān)系和順序更加明確、清晰。6.注釋(1)以符號“#”開始,表示本行“#”之后的內(nèi)容為注釋。(2)包含在一對三引號"……"或"""……"""之間且不屬于任何語句的內(nèi)容將被解釋器認(rèn)為是注釋。7.標(biāo)識符標(biāo)識符是開發(fā)人員在程序中自定義的一些符號和名稱,如變量名、函數(shù)名等。標(biāo)識符由字母、下劃線和數(shù)字組成,且不能以數(shù)字開頭。Python中的標(biāo)識符區(qū)分大小寫,即對大小寫敏感。2024/5/1172Python編程規(guī)范標(biāo)識符的一般命名規(guī)則如下:(1)見名知意。選取一個(gè)有意義的名字,盡量做到見其名知其意,以提高代碼的可讀性。比如:名字定義為name,學(xué)生定義為student。(2)駝峰命名法。顧名思義,標(biāo)識符名稱像駱駝的駝峰一樣有高有低,名稱中有大寫和小寫區(qū)隔。小駝峰式命名法(lowercamelcase)是第一個(gè)單詞的首字母小寫,第二個(gè)單詞的首字母大寫,如myName、aDog;大駝峰式命名法(uppercamelcase)是每一個(gè)單詞的首字母都采用大寫形式,如FirstName、LastName。除此之外,在程序員中還有一種命名法比較流行,即用下劃線“_”來連接所有單詞,如send_buf。8.關(guān)鍵字關(guān)鍵字是Python中一些具有特殊功能的標(biāo)識符,為了避免混淆,不允許開發(fā)者定義和Python關(guān)鍵字名稱相同的標(biāo)識符。查看Python保留關(guān)鍵字的方法如下:2024/5/1173importkeywordaskw#導(dǎo)入關(guān)鍵字模塊kw.kwlistPython編程規(guī)范9.__name__屬性通過Python程序的__name__屬性可以識別程序的使用方式:●如果程序作為模塊被導(dǎo)入,則其__name__屬性值會被自動設(shè)置為模塊名?!袢绻绦蜃鳛槌绦蛑苯舆\(yùn)行,則其__name__屬性值會被自動設(shè)置為字符串__main__。2024/5/1174標(biāo)準(zhǔn)庫與擴(kuò)展庫對象的導(dǎo)入與使用Python的默認(rèn)安裝僅包含基本或核心模塊,啟動時(shí)也僅加載了基本模塊,需要時(shí)再顯式地導(dǎo)入和加載標(biāo)準(zhǔn)庫或第三方擴(kuò)展庫,這樣可以減小程序運(yùn)行的壓力,并且具有很強(qiáng)的可擴(kuò)展性。從“木桶原理”的角度來看,這樣的設(shè)計(jì)與安全配置時(shí)遵循“最小權(quán)限”原則的思想是一致的,有助于提高系統(tǒng)的安全性。程序庫的導(dǎo)入方式有以下幾種:(1)import模塊名[as別名]:導(dǎo)入整個(gè)模塊,方括號內(nèi)為可選內(nèi)容。示例程序如下:2024/5/1175標(biāo)準(zhǔn)庫與擴(kuò)展庫對象的導(dǎo)入與使用(2)from模塊名import對象名[as別名]:導(dǎo)入模塊指定對象。示例程序如下:2024/5/1176標(biāo)準(zhǔn)庫與擴(kuò)展庫對象的導(dǎo)入與使用(3)from模塊名import*,導(dǎo)入模塊中所有函數(shù)。示例程序如下:2024/5/1177Python魔法命令Python提供了許多魔法命令,使得在IPython環(huán)境中的操作更加得心應(yīng)手。魔法命令均以“%”或者“%%”開頭:●以“%”開頭的稱為行命令:行命令只對命令所在的行有效?!褚浴?%”開頭的稱為單元命令,單元命令必須出現(xiàn)在單元的第一行,對整個(gè)單元的代碼都有效。例如,“%matplotlibinline”命令可以將matplotlib的圖表直接嵌入JupyterNotebook。執(zhí)行“%magic”可以查看關(guān)于各個(gè)魔法命令的說明。常用魔法命令的示例如下:●%runfile[args]:運(yùn)行腳本?!?debug和%pdb:快速debug?!?time和%timeit:運(yùn)行時(shí)間分析?!?pwd和%ls:顯示當(dāng)前目錄和目錄內(nèi)容?!?cddirname:工作目錄切換。2024/5/1178PythonShell命令PythonShell是最簡單的以命令行方式運(yùn)行和調(diào)試Python程序的方法。例如:●命令行輸入“Python”,即進(jìn)入Shell模式?!衩钚休斎搿癷Python”,即進(jìn)入交互式Shell模式?!衩钚休斎搿癙ython(或iPython)文件名.py”,即執(zhí)行對應(yīng)的Python程序?!衩钚休斎搿癷Python文件名.ipynb”,即執(zhí)行JupyterNotebook環(huán)境編寫格式的Python程序。進(jìn)入PythonShell模式窗口,在命令行提示符后面即可輸入Python代碼。如果要退出當(dāng)前模式,輸入“exit()”后回車即可。在PythonShell模式窗口,還可使用“!”符號調(diào)用操作系統(tǒng)中的Shell命令,如在Windows平臺中輸入“!dir”,即可調(diào)用dir命令來顯示當(dāng)前目錄下的文件和文件夾列表。另外,在PythonShell及其他開發(fā)環(huán)境中,一般可以使用自動補(bǔ)全(autocompletion)功能,即在對象后面輸入對象訪問符“.”后,按Tab鍵自動顯示該對象的相關(guān)屬性和方法,以方便代碼的編寫;還可使用dir函數(shù)查看指定對象的屬性和函數(shù)列表,在具體函數(shù)名后添加問號“?”即可查看該函數(shù)的詳細(xì)說明。2024/5/1179基本輸出和輸入1.基本輸出Python內(nèi)置函數(shù)print用于輸出信息到標(biāo)準(zhǔn)控制臺或指定文件,語法格式為:print(value1,value2,…,sep=,end=\n,file=sys.stdout,flush=False)●sep參數(shù)之前為需要輸出的內(nèi)容(可以有多個(gè));●sep參數(shù)用于指定數(shù)據(jù)之間的分隔符,默認(rèn)為空格;●end參數(shù)用于指定輸出完數(shù)據(jù)之后再輸出什么字符。例如:print(helloworld\n)#\n為換行符,即換行輸出2.基本輸入在Python中,獲取鍵盤輸入數(shù)據(jù)的方法是采用input函數(shù),它接受表達(dá)式輸入,并把表達(dá)式的結(jié)果賦值給等號左邊的變量。不論用戶輸入什么內(nèi)容,input一律返回字符串,必要時(shí)可以使用內(nèi)置函數(shù)int、float或eval對用戶輸入的內(nèi)容進(jìn)行類型轉(zhuǎn)換。示例程序如下:2024/5/1180選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)絕大部分合法的Python表達(dá)式都可以作為條件表達(dá)式。在選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中,條件表達(dá)式的值只要不是False、0(或0.0、0j等)、空值None、空列表、空元組、空集合、空字典、空字符串、空range對象或其他空迭代對象,Python解釋器均認(rèn)為其與True等價(jià)。在Python語法中,條件表達(dá)式中不允許使用賦值運(yùn)算符“=”,以避免誤將關(guān)系運(yùn)算符“==”寫作賦值運(yùn)算符“=”帶來的麻煩。在條件表達(dá)式中使用賦值運(yùn)算符“=”將提示語法錯(cuò)誤。部分示例程序如下:2024/5/1181選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)(二)選擇結(jié)構(gòu)常見的選擇結(jié)構(gòu)有單分支選擇結(jié)構(gòu)、雙分支選擇結(jié)構(gòu)、多分支選擇結(jié)構(gòu)以及嵌套的分支結(jié)構(gòu),也可以構(gòu)造跳轉(zhuǎn)表來實(shí)現(xiàn)類似邏輯。循環(huán)結(jié)構(gòu)和異常處理結(jié)構(gòu)中帶有“else”子句時(shí),也可以看作特殊形式的選擇結(jié)構(gòu)。(1)單分支選擇結(jié)構(gòu)。if表達(dá)式:語句塊(2)雙分支選擇結(jié)構(gòu)。if表達(dá)式:語句塊1else:語句塊2雙分支選擇結(jié)構(gòu)示例程序如下:2024/5/1182選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)Python提供了一個(gè)三元運(yùn)算符,并且在三元運(yùn)算符構(gòu)成的表達(dá)式中還可以嵌套三元運(yùn)算符,實(shí)現(xiàn)與選擇結(jié)構(gòu)相似的功能。語法為:value1ifconditionelsevalue2當(dāng)條件表達(dá)式condition的值與True等價(jià)時(shí),表達(dá)式的值為value1,否則表達(dá)式的值為value2。例如,“b=6if5>13else9”,由于條件表達(dá)式“5>13”不為True,所以結(jié)果是b=9。(3)多分支選擇結(jié)構(gòu)。if表達(dá)式1:語句塊1elif表達(dá)式2:語句塊2elif表達(dá)式3:語句塊3……else:語句塊n#注:關(guān)鍵字elif是elseif的縮寫。2024/5/1183選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)示例程序如下:2024/5/1184#示例:使用多分支選擇結(jié)構(gòu)將成績從百分制變換為等級制deffunc(score):ifscore>100orscore<0:return“wrongscore.mustbetween0and100.”elifscore>=90:return“A”elifscore>=80:return“B”elifscore>=70:return“C”elifscore>=60:return“D”else:return“F”另外,選擇結(jié)構(gòu)可以嵌套,但縮進(jìn)必須正確并且一致。選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)(三)循環(huán)結(jié)構(gòu)Python主要有for循環(huán)和while循環(huán)兩種循環(huán)結(jié)構(gòu),多個(gè)循環(huán)可以嵌套使用,并且經(jīng)常使用結(jié)構(gòu)嵌套來實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。while循環(huán)一般用于循環(huán)次數(shù)難以提前確定的情況,當(dāng)然也可以用于循環(huán)次數(shù)確定的情況;for循環(huán)一般用于循環(huán)次數(shù)可以提前確定的情況,尤其適用于枚舉和遍歷序列或迭代對象中元素的場合。對于帶有else子句的循環(huán)結(jié)構(gòu),如果循環(huán)是因?yàn)闂l件表達(dá)式不成立或序列遍歷結(jié)束而自然結(jié)束,則執(zhí)行else結(jié)構(gòu)中的語句;如果循環(huán)是因?yàn)閳?zhí)行了break語句而導(dǎo)致提前結(jié)束,則不會執(zhí)行else結(jié)構(gòu)中的語句。(1)基本語法。兩種循環(huán)結(jié)構(gòu)的完整語法形式分別為:2024/5/1185while循環(huán)基本語法for循環(huán)基本語法while條件表達(dá)式:循環(huán)體[else:else子句代碼塊]for取值in序列或迭代對象:循環(huán)體[else:else子句代碼塊]選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)示例程序如下:2024/5/1186#示例:打印九九乘法表foriinrange(1,10):forjinrange(1,i+1):print({0}*{1}={2}.format(i,j,i*j),end=)print()#打印空行選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)(2)break與continue語句。一旦break語句被執(zhí)行,將使得break語句所屬層次的循環(huán)提前結(jié)束。continue語句的作用是提前結(jié)束本次循環(huán),忽略continue之后的所有語句,提前進(jìn)入下一次循環(huán)。下面的示例為:輸入若干個(gè)成績,求所有成績的平均分,每輸入一個(gè)成績后詢問是否繼續(xù)輸入下一個(gè)成績,回答“yes”就繼續(xù)輸入下一個(gè)成績,回答“no”就停止輸入成績。2024/5/1187運(yùn)算符、表達(dá)式與內(nèi)置對象2024/5/1188Python常用內(nèi)置對象對象是Python語言中最基本的概念,在Python中處理的一切都是對象。Python中有許多內(nèi)置對象可供編程者使用,內(nèi)置對象可直接使用,如數(shù)字、字符串、列表、字典等。非內(nèi)置對象需要導(dǎo)入模塊才能使用,如正弦函數(shù)sin(x),隨機(jī)數(shù)產(chǎn)生函數(shù)random()等。2024/5/1189Python常用內(nèi)置對象2024/5/1190對象類型類型名稱示例簡要說明數(shù)字intfloatcomplex12343.14,1.3e53+4j數(shù)字大小沒有限制,內(nèi)置支持復(fù)數(shù)及其運(yùn)算字符串str'swfu',"I'mstudent",'''Python''',r'abc',R'bcd'使用單引號、雙引號、三引號作為定界符,以字母r或R引導(dǎo)的表示原始字符串字節(jié)串bytesb'helloworld'以字母b引導(dǎo),可以使用單引號、雙引號、三引號作為定界符列表list[1,2,3]['a','b',['c',2]]所有元素放在一對方括號中,元素之間使用逗號分隔,其中的元素可以是任意類型字典dict{1:'food',2:'taste',3:'import'}所有元素放在一對大括號中,元素之間使用逗號分隔,元素形式為“鍵:值”元組tuple(2,-5,6)(3,)不可變,所有元素放在一對圓括號中,元素之間使用逗號分隔,如果元組中只有一個(gè)元素的話,后面的逗號不能省略集合setfrozenset{'a','b','c'}所有元素放在一對大括號中,元素之間使用逗號分隔,元素不允許重復(fù);另外,set是可變的,而frozenset是不可變的Python常用內(nèi)置對象2024/5/1191對象類型類型名稱示例簡要說明布爾型boolTrue,False邏輯值,關(guān)系運(yùn)算符、成員測試運(yùn)算符、同一性測試運(yùn)算符組成的表達(dá)式的值一般為True或False空類型NoneTypeNone空值異常ExceptionValueErrorTypeError

Python內(nèi)置大量異常類,分別對應(yīng)不同類型的異常文件

f=

open('data.dat','rb')open是Python內(nèi)置函數(shù),使用指定的模式打開文件,返回文件對象其他可迭代對象

生成器對象、range對象、zip對象、enumerate對象、map對象、filter對象等等具有惰性求值的特點(diǎn),除range對象之外,其他對象中的元素只能看一次編程單元

函數(shù)(使用def定義)類(使用class定義)模塊(類型為module)類和函數(shù)都屬于可調(diào)用對象,模塊用來集中存放函數(shù)、類、常量或其他對象常量與變量在Python中,不需要事先聲明變量名及其類型,直接賦值即可創(chuàng)建各種類型的對象變量。這一點(diǎn)適用于Python任意類型的對象。例如語句>>>x=3創(chuàng)建了整型變量x,并賦值為3,再例如語句>>>x='Helloworld.'創(chuàng)建了字符串變量x,并賦值為'Helloworld.'。92憑空出現(xiàn)一個(gè)整型變量x新的字符串變量,再也不是原來的x了常量與變量賦值語句的執(zhí)行過程是:首先把等號右側(cè)表達(dá)式的值計(jì)算出來,然后在內(nèi)存中尋找一個(gè)位置把值存放進(jìn)去,最后創(chuàng)建變量并指向這個(gè)內(nèi)存地址。>>>x=3Python中的變量并不直接存儲值,而是存儲了值的內(nèi)存地址或者引用,這也是變量類型隨時(shí)可以改變的原因。93常量與變量Py

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論