Python數(shù)據(jù)分析PPT完整版全套教學(xué)課件_第1頁
Python數(shù)據(jù)分析PPT完整版全套教學(xué)課件_第2頁
Python數(shù)據(jù)分析PPT完整版全套教學(xué)課件_第3頁
Python數(shù)據(jù)分析PPT完整版全套教學(xué)課件_第4頁
Python數(shù)據(jù)分析PPT完整版全套教學(xué)課件_第5頁
已閱讀5頁,還剩772頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Python數(shù)據(jù)分析

單元1概述單元2NumPy基礎(chǔ)單元3Pandas入門單元4文件格式與讀寫單元5數(shù)據(jù)規(guī)整化單元6數(shù)據(jù)可視化單元7分組與聚合單元8時(shí)間序列全套PPT課件1.1數(shù)據(jù)分析的時(shí)代背景1.2什么是數(shù)據(jù)分析1.3數(shù)據(jù)分析的基本流程1.4為什么選擇Python1.5下載與安裝Anaconda單元1數(shù)據(jù)分析概述1.1數(shù)據(jù)分析的時(shí)代背景

進(jìn)入21世紀(jì)以來,伴隨著網(wǎng)絡(luò)信息技術(shù)與云計(jì)算技術(shù)的高速發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)爆發(fā)性的增長,我們每天都身處在龐大的數(shù)據(jù)世界中。毋庸置疑,我們已經(jīng)進(jìn)入大數(shù)據(jù)時(shí)代。在大數(shù)據(jù)環(huán)境下,能夠從海量的數(shù)據(jù)里發(fā)現(xiàn)并挖掘有價(jià)值的信息越來越重要,因此數(shù)據(jù)分析技術(shù)應(yīng)運(yùn)而生。1.2什么是數(shù)據(jù)分析

數(shù)據(jù)分析:數(shù)據(jù)(Data)+分析(Analysis)

數(shù)據(jù):就是數(shù)值,是我們在觀察、實(shí)驗(yàn)或計(jì)算的基礎(chǔ)上得出的結(jié)果。數(shù)據(jù)可以是數(shù)字、文字、圖像、聲音等。數(shù)據(jù)可以用于科學(xué)研究、設(shè)計(jì)、驗(yàn)證等諸多領(lǐng)域。

分析:就是將研究對象的整體分為各個(gè)部分、方面、因素和層次,并分別加以考察的認(rèn)識(shí)活動(dòng)。分析的目的在于謹(jǐn)慎地尋找能夠解決問題的主線,并以此為根據(jù)解決問題。數(shù)據(jù)分析具體用來做什么?

(1)首先要知道自己在哪里,那么給你一張地圖才有意義。對企業(yè)而言,首先要了解過去發(fā)生了什么。以電商網(wǎng)站為例,企業(yè)需要了解新用戶注冊、用戶復(fù)購、倉庫備貨、配送、營收等運(yùn)營指標(biāo),根據(jù)這些指標(biāo)來評價(jià)公司的運(yùn)營情況,判斷企業(yè)當(dāng)前業(yè)務(wù)的好壞。監(jiān)控運(yùn)營指標(biāo)的同時(shí),還需要了解企業(yè)各項(xiàng)業(yè)務(wù)的構(gòu)成、業(yè)務(wù)的發(fā)展和變動(dòng)情況等。此時(shí)的數(shù)據(jù)分析一般會(huì)以每天、每周、每月、每年的報(bào)表形式來呈現(xiàn),特殊時(shí)期企業(yè)還需要實(shí)時(shí)了解業(yè)務(wù),如購物網(wǎng)站“11.11”活動(dòng)時(shí),對銷售額、訂單、快遞等的實(shí)時(shí)顯示。數(shù)據(jù)分析具體用來做什么? (2)通過對現(xiàn)有狀況的分析,我們對企業(yè)的當(dāng)前運(yùn)營情況有了基本了解,但一些特殊問題的原因是什么?例如為什么用戶最近流失嚴(yán)重,營收卻增加了?為何配送最近總是延遲?客戶滿意度為什么最近在下降?這就是數(shù)據(jù)分析要解決的第二個(gè)問題,尋找問題的根本原因。數(shù)據(jù)分析具體用來做什么? (3)我們通過了解企業(yè)運(yùn)營現(xiàn)狀來預(yù)測企業(yè)未來的發(fā)展趨勢,為制定企業(yè)運(yùn)營目標(biāo)及策略提供有效的參考與決策依據(jù),以保證企業(yè)的可持續(xù)健康發(fā)展;我們還需要實(shí)時(shí)預(yù)測客戶的行為,針對客戶進(jìn)行精準(zhǔn)營銷,推斷客戶將商品加入購物車后的下一步行為。類似的預(yù)測還有很多。(1)描述性數(shù)據(jù)分析

描述性數(shù)據(jù)分析是從一組數(shù)據(jù)中可以摘要并且描述這份數(shù)據(jù)的集中和離散情形,使用的技術(shù)主要有基于數(shù)據(jù)倉庫的報(bào)表、多維聯(lián)機(jī)分析處理等,通過各種查詢了解業(yè)務(wù)中發(fā)生了什么,尋找數(shù)據(jù)中的存在模式。1.2.1數(shù)據(jù)分析分類1.2.1數(shù)據(jù)分析分類(2)預(yù)測性數(shù)據(jù)分析

預(yù)測性數(shù)據(jù)分析主要是基于大數(shù)據(jù),采用各種統(tǒng)計(jì)方法以及數(shù)據(jù)挖掘技術(shù)預(yù)測業(yè)務(wù)中各個(gè)方面將要發(fā)生什么。各類熱門的大數(shù)據(jù)方面的統(tǒng)計(jì)應(yīng)用,例如數(shù)據(jù)挖掘技術(shù)等,都可歸類到預(yù)測性數(shù)據(jù)分析。1.2.1數(shù)據(jù)分析分類(3)指導(dǎo)性數(shù)據(jù)分析

指導(dǎo)性數(shù)據(jù)分析告訴用戶應(yīng)該做什么來得到最優(yōu)的結(jié)果,也叫決策分析。它主要指采用運(yùn)籌科學(xué)的方法,即運(yùn)用數(shù)學(xué)模型或智能優(yōu)化算法,對企業(yè)應(yīng)該采取的最優(yōu)行動(dòng)給出建議。1.2.2典型的數(shù)據(jù)分析方法(1)描述性統(tǒng)計(jì)分析

描述性統(tǒng)計(jì)分析是用來概括、表述事物整體狀況以及事物間關(guān)聯(lián)、類屬關(guān)系的統(tǒng)計(jì)方法。通過統(tǒng)計(jì)處理可以簡單地用幾個(gè)統(tǒng)計(jì)值來表示一組數(shù)據(jù)的集中趨勢、離散程度以及分布形狀。1.2.2典型的數(shù)據(jù)分析方法(2)驗(yàn)證性統(tǒng)計(jì)分析

驗(yàn)證性統(tǒng)計(jì)分析是對數(shù)據(jù)模型和研究假設(shè)的驗(yàn)證,參數(shù)估計(jì)、假設(shè)檢驗(yàn)以及方差分析是驗(yàn)證性統(tǒng)計(jì)分析中常用的方法。所謂參數(shù)估計(jì)就是用樣本統(tǒng)計(jì)量去估計(jì)總體的參數(shù)。假設(shè)檢驗(yàn)與參數(shù)估計(jì)類似,但角度不同,參數(shù)估計(jì)是利用樣本信息推斷未知的總體參數(shù),而假設(shè)檢驗(yàn)是對總體參數(shù)提出一個(gè)假設(shè)值,然后利用樣本信息判斷這一假設(shè)是否成立。1.2.2典型的數(shù)據(jù)分析方法(3)探索性數(shù)據(jù)分析

探索性數(shù)據(jù)分析是指對已有數(shù)據(jù)在盡量少的先驗(yàn)假設(shè)下通過作圖、制表、方程擬合、計(jì)算特征量等手段探索數(shù)據(jù)的結(jié)構(gòu)和規(guī)律的一種數(shù)據(jù)分析方法。探索性數(shù)據(jù)分析則是一種更加貼合實(shí)際情況的分析方法,它強(qiáng)調(diào)讓數(shù)據(jù)自身“說話”,通過探索性數(shù)據(jù)分析可以真實(shí)、直接地觀察到數(shù)據(jù)的結(jié)構(gòu)和特征。1.3數(shù)據(jù)分析的基本流程

數(shù)據(jù)分析是基于商業(yè)目的,有目的地進(jìn)行收集、整理、加工和分析數(shù)據(jù),提煉出有價(jià)值的信息的一個(gè)過程。一個(gè)完整的數(shù)據(jù)分析項(xiàng)目可以分為5步問題定義收集數(shù)據(jù)數(shù)據(jù)展現(xiàn)數(shù)據(jù)分析數(shù)據(jù)處理1.3.1問題定義

問題的定義要求分析人員對業(yè)務(wù)有很深的了解,這就是我們一直提到的數(shù)據(jù)思維。例如,要提高企業(yè)銷售額,那么需要理解企業(yè)盈利模式是什么;可以通過增加用戶來提高銷售額,還是通過抬高價(jià)格提高銷售額;再或者是公司不應(yīng)該只專注于提高銷售額,而是應(yīng)該更關(guān)注利潤。需要明確的是開始提出的問題只是出發(fā)點(diǎn)而非終點(diǎn),很可能在針對問題進(jìn)行了一系列研究后,我們會(huì)修改最初提出的問題。1.3.2收集數(shù)據(jù)

數(shù)據(jù)收集是按照確定的數(shù)據(jù)分析思路和框架內(nèi)容,有目的地收集、整合相關(guān)數(shù)據(jù)的一個(gè)過程,它是數(shù)據(jù)分析的基礎(chǔ)。有了具體的問題,接下來要準(zhǔn)備獲取相關(guān)的數(shù)據(jù)。那么問題對應(yīng)的數(shù)據(jù)是什么,這些數(shù)據(jù)如何定義,如何度量。哪些數(shù)據(jù)是已經(jīng)存在的,哪些數(shù)據(jù)需要通過對現(xiàn)有數(shù)據(jù)進(jìn)行加工得來的,哪些數(shù)據(jù)還沒有獲得。典型的數(shù)據(jù)獲取方式有以下幾種。1.3.2收集數(shù)據(jù)

(1)企業(yè)數(shù)據(jù)庫/數(shù)據(jù)倉庫。大多數(shù)企業(yè)的數(shù)據(jù)都可以直接從自己的數(shù)據(jù)庫獲取。例如,可以根據(jù)需要提取某年的銷售數(shù)據(jù)、提取當(dāng)年銷量前20位商品的數(shù)據(jù)、提取北京及浙江地區(qū)用戶的消費(fèi)數(shù)據(jù)等。通過結(jié)構(gòu)化查詢語言SQL命令,我們可以高效完成這些工作。1.3.2收集數(shù)據(jù)

(2)外部公開數(shù)據(jù)集。一些科研機(jī)構(gòu)、企業(yè)、政府都會(huì)開放一些數(shù)據(jù)。開放政府?dāng)?shù)據(jù)更是成為近年的熱潮。截至2021年,已經(jīng)有60多個(gè)地市開放了平臺(tái),開放了約15個(gè)領(lǐng)域的數(shù)據(jù),包括教育科技、民生服務(wù)、道路交通、健康衛(wèi)生、資源環(huán)境、文化休閑、機(jī)構(gòu)團(tuán)體、公共安全、經(jīng)濟(jì)發(fā)展、農(nóng)業(yè)農(nóng)村、社會(huì)保障、勞動(dòng)就業(yè)、企業(yè)服務(wù)、城市建設(shè)、地圖服務(wù)。1.3.2收集數(shù)據(jù)

(3)爬蟲。在大數(shù)據(jù)時(shí)代利用爬蟲去收集互聯(lián)網(wǎng)上的數(shù)據(jù)是經(jīng)常被使用的數(shù)據(jù)獲取方式。例如,爬取京東上的商品信息;通過爬蟲獲取視頻網(wǎng)站某一類視頻的信息;爬取58同城網(wǎng)站上某城市的賣房信息等。1.3.2收集數(shù)據(jù)

(4)實(shí)驗(yàn)。想要判斷新的應(yīng)用界面是否會(huì)提高用戶轉(zhuǎn)化率,可以通過實(shí)驗(yàn)方式來實(shí)現(xiàn),這就是A/B測試。針對不同的問題設(shè)計(jì)不同的實(shí)驗(yàn)來獲取相應(yīng)的數(shù)據(jù)。1.3.3數(shù)據(jù)處理

數(shù)據(jù)處理是指對收集到的數(shù)據(jù)進(jìn)行清洗、加工、整理,以便開展數(shù)據(jù)分析,它是數(shù)據(jù)分析前必不可少的階段。這個(gè)過程是數(shù)據(jù)分析整個(gè)過程中是最耗時(shí)的,也在一定程度上保證了分析數(shù)據(jù)的質(zhì)量。數(shù)據(jù)處理的基本目的是從海量的、可能雜亂無章的、難以理解的數(shù)據(jù)中抽取并推導(dǎo)出對解決問題有價(jià)值、有意義的數(shù)據(jù)。如果數(shù)據(jù)本身存在錯(cuò)誤,那么即使采用最先進(jìn)的數(shù)據(jù)分析方法,得到的結(jié)果也是錯(cuò)誤的,不具備任何參考價(jià)值,甚至還會(huì)做出錯(cuò)誤的決策。1.3.3數(shù)據(jù)處理

數(shù)據(jù)處理主要包括數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)化、數(shù)據(jù)抽取、數(shù)據(jù)合并、數(shù)據(jù)計(jì)算等處理方法。一般的數(shù)據(jù)都需要進(jìn)行一定的處理才能用于后續(xù)的數(shù)據(jù)分析工作?,F(xiàn)實(shí)中的數(shù)據(jù)大部分上都是不完整、不一致的數(shù)據(jù),無法直接用于數(shù)據(jù)分析,或分析結(jié)果不盡如人意。數(shù)據(jù)預(yù)處理有多種方法:數(shù)據(jù)清理、數(shù)據(jù)集成、數(shù)據(jù)變換、數(shù)據(jù)歸約等。把這些數(shù)據(jù)處理好,才能獲得相對精確的數(shù)據(jù)分析結(jié)果。1.3.4數(shù)據(jù)分析

數(shù)據(jù)分析是指通過分析手段、方法和技巧對準(zhǔn)備好的數(shù)據(jù)進(jìn)行探索、分析,從中發(fā)現(xiàn)因果關(guān)系、內(nèi)部聯(lián)系和業(yè)務(wù)規(guī)劃,為商業(yè)提供決策參考。進(jìn)人數(shù)據(jù)分析階段,應(yīng)切忌濫用和誤用統(tǒng)計(jì)分析方法。濫用和誤用統(tǒng)計(jì)分析方法主要是由于對方法能解決哪類問題、方法適用的前提、方法對數(shù)據(jù)的要求等不清造成的。選擇幾種統(tǒng)計(jì)分析方法對數(shù)據(jù)進(jìn)行探索性的反復(fù)分析也是非常重要的。每一種統(tǒng)計(jì)分析方法都有自己的特點(diǎn)和局限,因此,一般需要選擇幾種方法反復(fù)印證分析,僅依據(jù)一種分析方法的結(jié)果就斷然下結(jié)論是不科學(xué)的。1.3.4數(shù)據(jù)分析

通過數(shù)據(jù)分析,數(shù)據(jù)內(nèi)部的關(guān)系和規(guī)律會(huì)呈現(xiàn)出來,通常數(shù)據(jù)是通過表格和圖形的方式來展現(xiàn)出這些關(guān)系和規(guī)律的,即用圖表說話。常用的數(shù)據(jù)圖表包括餅圖、柱狀圖、條形圖、折線圖、散點(diǎn)圖、雷達(dá)圖等,還可以對這些圖表進(jìn)一步處理,使之變?yōu)槲覀兯枰鹱炙D、矩陣圖、瀑布圖、漏斗圖、帕累托圖等。一般情況人們更樂于接受圖形這種展現(xiàn)數(shù)據(jù)的方式,因?yàn)樗梢愿又庇^地讓數(shù)據(jù)分析師表述想要呈現(xiàn)的信息、觀點(diǎn)和建議。1.3.5數(shù)據(jù)展現(xiàn)

數(shù)據(jù)分析的結(jié)果最終以報(bào)告的形式呈現(xiàn)出來,這就對數(shù)據(jù)分析師的能力有很高的要求。數(shù)據(jù)分析師要具備數(shù)據(jù)溝通能力、業(yè)務(wù)推動(dòng)能力和項(xiàng)目工作能力。深人淺出的數(shù)據(jù)報(bào)告、言簡意賅的數(shù)據(jù)結(jié)論更容易被理解和接受。在理解業(yè)務(wù)數(shù)據(jù)的基礎(chǔ)上,推動(dòng)業(yè)務(wù)落地實(shí)現(xiàn)數(shù)據(jù)建議。通常從業(yè)務(wù)最重要、最緊急、最能產(chǎn)生效果的環(huán)節(jié)開始,同時(shí)需要考慮業(yè)務(wù)落地的客觀環(huán)境,即好的數(shù)據(jù)結(jié)論需要具備客觀落地條件。一個(gè)數(shù)據(jù)項(xiàng)目工作是循序漸進(jìn)的過程,無論是數(shù)據(jù)分析項(xiàng)目還是數(shù)據(jù)產(chǎn)品項(xiàng)目,都需要數(shù)據(jù)分析師具備高水平的項(xiàng)目工作能力。1.4為什么選擇PythonPython的以下幾點(diǎn)優(yōu)勢:(1)代碼簡潔,容易理解。

比起其他編程語言,Python的語法非常簡單,代碼的可讀性很高,非常有利于初學(xué)者的學(xué)習(xí)。例如,在處理數(shù)據(jù)的時(shí)候,如果希望將用戶性別數(shù)據(jù)數(shù)值化,也就是變成計(jì)算機(jī)可以運(yùn)算的數(shù)字形式,這時(shí)便可以直接用一行列表推導(dǎo)式完成,十分簡潔。1.4為什么選擇Python(2)快速開發(fā)。

Python在數(shù)據(jù)分析、探索性計(jì)算、數(shù)據(jù)可視化等方面都有非常成熟的庫和活躍的社區(qū),這使得Python成為數(shù)據(jù)處理的重要解決方案。在科學(xué)計(jì)算方面,Python擁有Numpy、Pandas、Matplotlib、Scikit-leam、IPython等一系列非常優(yōu)秀的庫和工具,這些庫提供了大量的基礎(chǔ)實(shí)現(xiàn),數(shù)據(jù)分析人員在編碼的過程中,可以方便地使用這些庫,從而避免了大量代碼編寫過程。1.4為什么選擇Python(3)擁有強(qiáng)大的通用編程能力。

Python擁有強(qiáng)大的通用編程能力,有別于R語言,Python不僅在數(shù)據(jù)分析方面能力強(qiáng)大,在爬蟲、WEB、自動(dòng)化運(yùn)維甚至于游戲等領(lǐng)域都有非常不錯(cuò)的作用,公司只需要使用一種技術(shù)就可以完成全部服務(wù),有利于業(yè)務(wù)融合,也可以提高工作效率。1.4為什么選擇Python(4)人工智能時(shí)代的通用語言

Python是人工智能首選的編程語言,在人工智能時(shí)代,Python成為最受歡迎的編程語言。這主要得益于其語法簡潔、具有豐富的庫和社區(qū),使得大部分深度學(xué)習(xí)框架都優(yōu)先支持Python語言編程。1.4為什么選擇Python(5)方便對接其他語言

Python是一種“膠水語言”,顧名思義就是“粘合”的意思,Python在設(shè)計(jì)初期就面向科研人員,以降低編程難度,提高編程效率為目的。Python之所以在科學(xué)計(jì)算領(lǐng)域能夠功成名就,這和它能夠輕松地集成C、C++以及Fortran代碼有不可分割原因。大部分現(xiàn)代計(jì)算環(huán)境都利用了Fortran和C庫來實(shí)現(xiàn)線性代數(shù)、積分、傅里葉變換等諸多算法。1.5下載與安裝Anaconda

Python的開發(fā)環(huán)境中擁諸多功能齊全的庫,為數(shù)據(jù)分析工作提供了極大的便利,但是庫的管理及版本問題讓數(shù)據(jù)分析人員將大量的時(shí)間花費(fèi)在解決包配置與包沖突等問題上。為了解決上述問題,選擇使用Anaconda進(jìn)行開發(fā),Anaconda是一個(gè)集成了大量常用擴(kuò)展包的環(huán)境,能夠有效避免包配置或兼容等問題。1.5.1基于Windows系統(tǒng)安裝步驟1:從官網(wǎng)(/download/)中下載好Windows版本的Anoconda后,雙擊該軟件并進(jìn)入安裝向?qū)?,并單擊“Next”按鈕1.5.1基于Windows系統(tǒng)安裝步驟2:進(jìn)入閱讀“LicenseAgreement”窗口,單擊“IAgree”按鈕。步驟3:推薦選擇“JustMe(recommended)”,如果選擇的是“AllUsers”,就需要Windows的管理員權(quán)限。1.5.1基于Windows系統(tǒng)安裝步驟4:選擇目標(biāo)路徑用于Anodonda工具的安裝,并單擊“Next”按鈕1.5.1基于Windows系統(tǒng)安裝步驟5:建議不添加Anoconda到環(huán)境變量中,因?yàn)樗赡軙?huì)影響到其他軟件的正常運(yùn)行,故選擇將Python3.x作為Anoconda的默認(rèn)版本。單擊“Install”按鈕,進(jìn)入安裝環(huán)節(jié)1.5.1基于Windows系統(tǒng)安裝步驟6:大概5分鐘就可以完成安裝,單擊“Finish”按鈕即可。1.5.2基于Mac系統(tǒng)安裝步驟1:從官網(wǎng)中下載好Mac版本的Anoconda后,雙擊該軟件,進(jìn)入Anoconda的安裝向?qū)В瑔螕簟癈ontinue”按鈕。步驟2:進(jìn)入“ReadMe”窗口,繼續(xù)單擊“Continue”按鈕。步驟3:進(jìn)入閱讀“License”窗口,勾選“IAgree”,并單擊“Continue”按鈕。1.5.2基于Mac系統(tǒng)安裝步驟4:進(jìn)入“DestinationSelect”窗口,推薦選擇"Installformeonly",并單擊“Continue"按鈕。步驟5:進(jìn)入“InstallationType”窗口,推薦默認(rèn)設(shè)置(將Anoconda安裝在主目錄下),無須改動(dòng)安裝路徑,單擊“Install”按鈕,進(jìn)入安裝環(huán)節(jié)。步驟6:經(jīng)過幾分鐘,即完成整個(gè)安裝流程。1.5.2基于Mac系統(tǒng)安裝當(dāng)然,如果你不習(xí)慣在Mac系統(tǒng)中使用圖形化的安裝方式,也可以通過命令行的方式完成Anoconda的安裝(以Anaconda3-5.0.1版本為例),具體步驟如下:步驟1:同樣需要通過官網(wǎng)下載好Mac版本的Anoconda,并將其放在桌面。步驟2:打開終端,輸入“bashAnaconda3-5.0.1-MacOSX-x86_64.sh”。1.5.2基于Mac系統(tǒng)安裝步驟3:接下來會(huì)提示閱讀“條款協(xié)議”,只需按一下回車鍵即可。步驟4:滑動(dòng)滾動(dòng)條到協(xié)議底部,輸入“Yes”。步驟5:提示“按下回車鍵”接受默認(rèn)路徑的安裝,接下來繼續(xù)輸入“Yes”,進(jìn)入安裝環(huán)節(jié)。步驟6:最終完成安裝,并提示“ThankyouforinstallingAnaconda!”。注意,關(guān)閉終端,重啟后安裝才有效。1.5.3基于Linux系統(tǒng)安裝步驟1:從官網(wǎng)中下載好Linux版本的Anoconda,并將其放在桌面。步驟2:打開終端,輸入“bashAnaconda3-5.0.1-Linux-x86_64.sh”。步驟3:接下來會(huì)提示閱讀“條款協(xié)議”,只需按一下回車鍵即可。步驟4:滑動(dòng)滾動(dòng)條到協(xié)議底部,輸入“Yes"。1.5.3基于Linux系統(tǒng)安裝步驟5:提示“按下回車鍵”接受默認(rèn)路徑的安裝,接下來繼續(xù)輸入“Yes”。步驟6:最終完成安裝,并提示“ThankyouforinstallingAnaconda3!”。注意,關(guān)閉終端,重啟后安裝才有效。總結(jié)

本章首先介紹了數(shù)據(jù)分析的背景、用途、流程以及為什么選擇Python做數(shù)據(jù)分析;接著引領(lǐng)讀者學(xué)習(xí)了一個(gè)新的Python環(huán)境Anaconda,及如何安裝和管理Python包。

通過本章的學(xué)習(xí),希望讀者能對數(shù)據(jù)分析有一個(gè)初步的了解,并為后續(xù)章節(jié)的學(xué)習(xí)準(zhǔn)備好開發(fā)環(huán)境。課后習(xí)題一.填空題1.信息是指有一定含義的、經(jīng)過加工處理的、對決策有價(jià)值的()。2.()目的是將隱藏在一大批看似雜亂無章的數(shù)據(jù)信息中的有用數(shù)據(jù)集提煉出來。數(shù)據(jù)數(shù)據(jù)分析課后習(xí)題3.()中包含了conda、Python在內(nèi)的超過180個(gè)科學(xué)包及其依賴項(xiàng)。4.JupyterNotebook是一個(gè)支持()代碼、數(shù)學(xué)方程、可視化和Markdown的Web應(yīng)用程序。Anoconda實(shí)時(shí)課后習(xí)題二.選擇題1.下列選項(xiàng)中,用于搭建數(shù)據(jù)倉庫和保證數(shù)據(jù)質(zhì)量的是()。A.數(shù)據(jù)收集B.數(shù)據(jù)處理C.數(shù)據(jù)分析D.數(shù)據(jù)展現(xiàn)B課后習(xí)題2.關(guān)于Anaconda的說法中,下列描述錯(cuò)誤的是()。A.Anaconda是一個(gè)可以對包和環(huán)境進(jìn)行統(tǒng)一管理的發(fā)行版本B.Anaconda包含了conda、Python在內(nèi)的超過180個(gè)科學(xué)包及其依賴項(xiàng)C.Anaconda是完全開源的、付費(fèi)的D.Anaconda避免了單獨(dú)安裝包時(shí)需要配置或兼容等各種問題C課后習(xí)題3.關(guān)于Anaconda的組件中,可以編輯文檔且展示數(shù)據(jù)分析過程的是()。A.AnacondaNavigatorB.AnacondaPromptC.SpyderD.JupyterNotebookD課后習(xí)題4.下面列出的數(shù)據(jù)分析庫中,用于繪制數(shù)組的2D圖形的是()。A.NumPyB.PandasC.MatplotlibD.NLTKC課后習(xí)題三.簡答題1.什么是數(shù)據(jù)分析?2.請簡述數(shù)據(jù)分析的基本流程。3.為什么選擇Python做數(shù)據(jù)分析?Python數(shù)據(jù)分析

單元2NumPy基礎(chǔ)2.1NumPy數(shù)組對象ndarry2.2數(shù)組的訪問與變換2.3矩陣與通用函數(shù)2.4統(tǒng)計(jì)方法和文件存取2.5隨機(jī)函數(shù)2.6

案例——利用NumPy庫求值2.1NumPy數(shù)組對象ndarry

NumPy最重要的一個(gè)特點(diǎn)就是N維數(shù)組對象,即ndarray,這是一個(gè)快速而靈活的大數(shù)據(jù)容器??梢岳眠@種數(shù)組對整塊數(shù)據(jù)執(zhí)行一些數(shù)學(xué)運(yùn)算。ndarray是一個(gè)通用的同構(gòu)數(shù)據(jù)多維容器,其中所有元素必須是相同類型。每個(gè)數(shù)組都有一個(gè)shape和一個(gè)dtype,分別表示各維度的大小元組和數(shù)組數(shù)據(jù)類型的對象。接下來將要介紹NumPy數(shù)組的基本用法。2.1.1創(chuàng)建數(shù)組對象

NumPy提供了一個(gè)名為ndarray的多維數(shù)組對象,NumPy數(shù)組具有固定大小的類型化數(shù)組。數(shù)組由兩部分組成,分別是存儲(chǔ)在連續(xù)的內(nèi)存中的實(shí)際數(shù)據(jù)和描述實(shí)際數(shù)據(jù)的元數(shù)據(jù)。為了更好地理解數(shù)組,先要了解數(shù)組的屬性。2.1.1創(chuàng)建數(shù)組對象編號(hào)函數(shù)功能1ndim返回?cái)?shù)組的維數(shù),類型為int2dtype返回?cái)?shù)組的元素類型,類型為data-type3shape返回各維度大小的一個(gè)元組,類型為tuple4size返回?cái)?shù)組元素的總個(gè)數(shù),類型為int5itemsize返回?cái)?shù)組每個(gè)元素的大小,類型為int數(shù)組的屬性2.1.1創(chuàng)建數(shù)組對象array函數(shù)的主要參數(shù)編號(hào)函數(shù)功能1object一個(gè)python對象,表示想要?jiǎng)?chuàng)建的數(shù)組2dtype表示數(shù)組所需的數(shù)據(jù)類型3ndmin指定生成數(shù)組該具有的最小維數(shù)2.1.1創(chuàng)建數(shù)組對象(1)創(chuàng)建一維數(shù)組

創(chuàng)建數(shù)組最簡單的辦法是使用array函數(shù),它接受一切序列型的對象,然后產(chǎn)生一個(gè)含有數(shù)據(jù)的NumPy數(shù)組。

點(diǎn)擊“開始”,找到“Windows系統(tǒng)”,點(diǎn)擊“命令提示符”,在DOS提示符輸入IPython,回車,打開IPythonShell。輸入代碼,如案例2-1所示:2.1.1創(chuàng)建數(shù)組對象案例2-1:創(chuàng)建一維數(shù)組In[1]:importnumpyasnp #導(dǎo)入Numpy庫In[2]:data1=[1,2,3,4] #第一個(gè)含有四個(gè)元素的列表In[3]:arr1=np.array(data1) #將列表轉(zhuǎn)換為數(shù)組In[4]:arr1Out[4]:array([1,2,3,4])2.1.1創(chuàng)建數(shù)組對象案例2-1:創(chuàng)建一維數(shù)組In[5]:arr1.ndim #顯示數(shù)組的維度Out[5]:1In[6]:arr1.shape #顯示數(shù)組的形狀Out[6]:(4,)2.1.1創(chuàng)建數(shù)組對象

上述代碼中,In[1]importnumpyasnp導(dǎo)入NumPy庫,在In[2]定義了一個(gè)列表,含有四個(gè)元素,In[3]使用array()函數(shù)將列表轉(zhuǎn)換為一維數(shù)組。array()創(chuàng)建數(shù)組時(shí),需要接收一個(gè)對象,同時(shí)這個(gè)對象必須是數(shù)組類型的,像本例中給出的Python列表。Out[4]用于顯示In[4]的輸出結(jié)果。In[5]語句中的arr1.ndim表示數(shù)組的維度,結(jié)果為1,In[6]語句表示數(shù)組的大小。因此,該數(shù)組有4個(gè)元素,它們的值分別是1,2,3,4.數(shù)組是一元數(shù)組。2.1.1創(chuàng)建數(shù)組對象

可以使用Python內(nèi)置函數(shù)range的數(shù)組版arange生成一維數(shù)組。如案例2-2所示,一般通過指定開始值、終值和步長來創(chuàng)建一維數(shù)組,創(chuàng)建的數(shù)組不含終值。In[9]中的print屏幕輸出語句。而在In[10]中的linspace也是指定開始值、終值和步長來創(chuàng)建一維數(shù)組,但創(chuàng)建的數(shù)組包含終值。In[11]中l(wèi)ogspace,它創(chuàng)建的是一個(gè)等比數(shù)列,分別生成100,101,102,~109。2.1.1創(chuàng)建數(shù)組對象案例:2-2使用arrange函數(shù)創(chuàng)建一維數(shù)組In[7]:np.arange(15)Out[7]:array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])In[8]:np.arange(0,1,0.1)Out[8]:array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])In[9]:print(np.arange(0,1,0.1))2.1.1創(chuàng)建數(shù)組對象案例:2-2使用arrange函數(shù)創(chuàng)建一維數(shù)組[0.0.10.20.30.40.50.60.70.80.9]In[10]:print(np.linspace(0,9,10))[0.1.2.3.4.5.6.7.8.9.]In[11]:print(np.logspace(0,9,10))[1.e+001.e+011.e+021.e+031.e+041.e+051.e+061.e+071.e+081.e+09]2.1.1創(chuàng)建數(shù)組對象(2)創(chuàng)建二維數(shù)組

嵌套序列可以轉(zhuǎn)換為一個(gè)多維數(shù)組,如案例2-3所示。案例:2-3使用嵌套序列創(chuàng)建二維數(shù)組In[12]:data2=[[1,3,5,7],[2,4,6,8]]In[13]:arr2=np.array(data2)In[14]:arr2Out[14]:2.1.1創(chuàng)建數(shù)組對象案例:2-3使用嵌套序列創(chuàng)建二維數(shù)組array([[1,3,5,7],[2,4,6,8]])In[15]:arr2.ndimOut[15]:2In[16]:arr2.shapeOut[16]:(2,4)2.1.1創(chuàng)建數(shù)組對象案例:2-4直接對參數(shù)賦值創(chuàng)建數(shù)組In[17]:np.array([[1,2,3,4],[5,6,7,8]])Out[17]:array([[1,2,3,4],[5,6,7,8]])再看如下代碼,可以查看數(shù)組的屬性,如案例2-5所示。2.1.1創(chuàng)建數(shù)組對象案例:2-5查看數(shù)組屬性In[18]:arr1.dtypeOut[18]:dtype('int32')In[19]:arr2.dtypeOut[19]:dtype('int32')In[20]:arr1.sizeOut[20]:4In[21]:arr2.sizeOut[21]:82.1.1創(chuàng)建數(shù)組對象案例:2-6其他方法創(chuàng)建數(shù)組In[22]:np.ones(10)Out[22]:array([1.,1.,1.,1.,1.,1.,1.,1.,1.,1.])In[24]:np.zeros((3,4))Out[24]:array([[0.,0.,0.,0.],[0.,0.,0.,0.],[0.,0.,0.,0.]])2.1.1創(chuàng)建數(shù)組對象In[25]:np.empty((2,3,3))Out[25]:array([[[6.23042070e-307,4.67296746e-307,1.69121096e-306],[1.29061074e-306,1.69119873e-306,1.78019082e-306],[8.34441742e-308,1.78022342e-306,6.23058028e-307]],2.1.1創(chuàng)建數(shù)組對象[[9.79107872e-307,6.89807188e-307,7.56594375e-307],[6.23060065e-307,1.78021527e-306,8.34454050e-308],[1.11261027e-306,2.04712907e-306,1.33504432e-306]]])In[26]:np.eye(5,5)2.1.1創(chuàng)建數(shù)組對象Out[26]:array([[1.,0.,0.,0.,0.],[0.,1.,0.,0.,0.],[0.,0.,1.,0.,0.],[0.,0.,0.,1.,0.],[0.,0.,0.,0.,1.]])2.1.1創(chuàng)建數(shù)組對象在NumPy中數(shù)組創(chuàng)建函數(shù)如表編號(hào)函數(shù)功能1array將輸入的數(shù)據(jù)(列表、元組、數(shù)組或其他序列)轉(zhuǎn)換為ndarray。2asarray將輸入轉(zhuǎn)換為ndarry3arange類似于內(nèi)置的range,返回一個(gè)ndarray4ones創(chuàng)建一個(gè)全1的數(shù)組5ones_like以另外一個(gè)數(shù)組為參數(shù),根據(jù)其形狀創(chuàng)建一個(gè)全1數(shù)組6zeros產(chǎn)生一個(gè)全0數(shù)組7zeros_like以另外一個(gè)數(shù)組為參數(shù),根據(jù)其形狀創(chuàng)建產(chǎn)生一個(gè)全0數(shù)組8empty創(chuàng)建一個(gè)新數(shù)組,只分配內(nèi)存不填充值9empty_like同上10eye創(chuàng)建一個(gè)單位矩陣11identity同上2.1.2屬性與數(shù)據(jù)類型(1)數(shù)組的屬性修改

對數(shù)組arr2有2行4列修改為4行2列,可以對其屬性賦值為2行4列,而保持?jǐn)?shù)組個(gè)數(shù)不變。如案例2-7所示。注意的是,屬性修改之后并非是矩陣的轉(zhuǎn)置,而是重新組合,元素排列順序沒有變化。2.1.2屬性與數(shù)據(jù)類型案例:2-7數(shù)組屬性的設(shè)置In[27]:arr2Out[27]:array([[1,3,5,7],[2,4,6,8]])In[28]:arr2.shapeOut[28]:(2,4)In[29]:arr2.shape=4.22.1.2屬性與數(shù)據(jù)類型案例:2-7數(shù)組屬性的設(shè)置In[30]:arr2Out[30]:array([[1,3],[5,7],[2,4],[6,8]])2.1.2屬性與數(shù)據(jù)類型(2)數(shù)據(jù)類型

NumPy擴(kuò)大了Python的數(shù)據(jù)類型,除了bool每個(gè)類型都以數(shù)字結(jié)尾,這表示該類型所占的二進(jìn)制數(shù)的位數(shù)。所有的NumPy的基本數(shù)據(jù)類型如表2-4所示。2.1.2屬性與數(shù)據(jù)類型編號(hào)函數(shù)功能1bool布爾類型,1位二進(jìn)制存儲(chǔ)2int88位二進(jìn)制整數(shù)3int1616位二進(jìn)制整數(shù)4int3232位二進(jìn)制整數(shù)5int6464位二進(jìn)制整數(shù)6uint88位二進(jìn)制無符號(hào)整數(shù)7uint1616位二進(jìn)制無符號(hào)整數(shù)8uint3232位二進(jìn)制無符號(hào)整數(shù)9uint6464位二進(jìn)制無符號(hào)整數(shù)10float3232位半精度浮點(diǎn)數(shù),1位符號(hào)位,5位指數(shù),10位尾數(shù)11float64或float64位半精度浮點(diǎn)數(shù),1位符號(hào)位,8位指數(shù),23位尾數(shù)12complex6464位復(fù)數(shù),實(shí)部和虛部各占32位的浮點(diǎn)數(shù)13complex128或complex128位復(fù)數(shù),實(shí)部和虛部各占64位的浮點(diǎn)數(shù)2.1.2屬性與數(shù)據(jù)類型案例:2-8數(shù)組數(shù)據(jù)類型轉(zhuǎn)換In[1]:importnumpyasnp #導(dǎo)入numpy庫In[2]:np.float64(100) #整型轉(zhuǎn)換為浮點(diǎn)型Out[2]:100.0In[3]:8(100.0) #浮點(diǎn)型轉(zhuǎn)換為整型Out[3]:1002.1.2屬性與數(shù)據(jù)類型案例:2-8數(shù)組數(shù)據(jù)類型轉(zhuǎn)換In[4]:np.bool(100) #整型轉(zhuǎn)換為布爾型Out[4]:TrueIn[5]:np.bool(0) #整型轉(zhuǎn)換為布爾型Out[5]:FalseIn[6]:np.float(True) #布爾轉(zhuǎn)換為浮點(diǎn)型2.1.2屬性與數(shù)據(jù)類型案例:2-8數(shù)組數(shù)據(jù)類型轉(zhuǎn)換Out[6]:1.0In[7]:np.float(False) #布爾型轉(zhuǎn)換為浮點(diǎn)型Out[7]:0.02.1.2屬性與數(shù)據(jù)類型

dtype是一種特殊的對象,它含有ndarray將一塊內(nèi)存解釋為特定數(shù)據(jù)類型所需信息??梢灾付▽ο蟮臄?shù)據(jù)類型,如案例2-9所示。dtype是NumPy強(qiáng)大而靈活地原因之一。多數(shù)情況下,他們直接映射到相應(yīng)的機(jī)器表示,讀寫磁盤的二進(jìn)制流更加方便,與C語言相互調(diào)用更加簡單。2.1.2屬性與數(shù)據(jù)類型案例:2-9數(shù)組數(shù)據(jù)類型設(shè)置In[8]:arr1=np.array([1,2,3,4],dtype=np.float64)#指定arr1為64位浮點(diǎn)In[9]:arr2=np.array([1,2,3,4],dtype=32)#指定arr2位32位整型In[10]:arr1.dtypeOut[10]:dtype('float64')In[11]:arr2.dtypeOut[11]:dtype('int32')2.1.2屬性與數(shù)據(jù)類型案例:2-10整型類型轉(zhuǎn)換為浮點(diǎn)型In[8]:arr1=np.array([1,2,3,4],dtype=np.float64)In[9]:arr2=np.array([1,2,3,4],dtype=32)In[10]:arr1.dtypeOut[10]:dtype('float64')In[11]:arr2.dtypeOut[11]:dtype('int32')In[12]:arr=np.array([1,2,3,4])2.1.2屬性與數(shù)據(jù)類型案例:2-10整型類型轉(zhuǎn)換為浮點(diǎn)型In[13]:arr.dtypeOut[13]:dtype('int32')In[14]:float_arr=arr.astype(np.float32) #整型轉(zhuǎn)換為浮點(diǎn)型In[15]:float_arr.dtypeOut[15]:dtype('float32')2.1.2屬性與數(shù)據(jù)類型案例:2-11浮點(diǎn)型轉(zhuǎn)換為整型In[16]:arr=np.array([1.2,3.4,5.6,7.8])In[17]:arrOut[17]:array([1.2,3.4,5.6,7.8])In[18]:arr.astype(32)Out[18]:array([1,3,5,7])2.1.2屬性與數(shù)據(jù)類型案例:2-12字符串轉(zhuǎn)換為數(shù)值In[19]:num_strings=np.array(['1.23','-4.56','78'],dtype=np.string_)In[20]:num_strings.astype(float)Out[20]:array([1.23,-4.56,78.])2.1.2屬性與數(shù)據(jù)類型案例:2-13數(shù)組變量做參數(shù)轉(zhuǎn)換In[21]:int_arr=np.arange(10)In[22]:float_arr=np.array([.1,.2,.3],dtype=np.float32)In[23]:int_arr.astype(float_arr)In[24]:int_arr.astype(float_arr.dtype)Out[24]:array([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.],dtype=float32)2.1.2屬性與數(shù)據(jù)類型案例:2-14創(chuàng)建數(shù)據(jù)類型In[25]:importnumpyasnpIn[26]:print(np.dtype([("name",np.str_,40),("numitems",32),("price",np.float32)]))[('name','<U40'),('numitems','<i4'),('price','<f4')]2.1.3數(shù)組的運(yùn)算案例:2-15數(shù)組運(yùn)算In[9]:arr1=np.array([[1.0,2.0,3.0],[4.0,5.0,6.0]])In[10]:arr1Out[10]:array([[1.,2.,3.],[4.,5.,6.]])2.1.3數(shù)組的運(yùn)算In[11]:arr2=np.array([[7.0,8.0,9.0],[10.0,11.0,12.0]])In[12]:arr2Out[12]:array([[7.,8.,9.],[10.,11.,12.]])2.1.3數(shù)組的運(yùn)算In[13]:arr1*arr2Out[13]:array([[7.,16.,27.],[40.,55.,72.]])In[14]:arr2-arr1Out[14]:array([[6.,6.,6.],[6.,6.,6.]])In[15]:arr2+arr12.1.3數(shù)組的運(yùn)算Out[15]:array([[8.,10.,12.],[14.,16.,18.]])In[16]:arr2/arr1Out[16]:array([[7.,4.,3.],[2.5,2.2,2.]])2.1.3數(shù)組的運(yùn)算案例:2-16數(shù)組與常數(shù)的運(yùn)算In[17]:arr1*10Out[17]:array([[10.,20.,30.],[40.,50.,60.]])In[18]:arr1**2Out[18]:array([[1.,4.,9.],[16.,25.,36.]])2.1.3數(shù)組的運(yùn)算In[19]:1/arr1Out[19]:array([[1.,0.5,0.33333333],[0.25,0.2,0.16666667]])2.1.3數(shù)組的運(yùn)算案例:2-17數(shù)組與常數(shù)的運(yùn)算In[20]:a=np.array([1,2,3,4,5])In[21]:b=np.array([5,4,3,2,1])In[22]:a>bOut[22]:array([False,False,False,True,True])In[23]:a>=bOut[23]:array([False,False,True,True,True])In[24]:a==b2.1.3數(shù)組的運(yùn)算案例:2-17數(shù)組與常數(shù)的運(yùn)算Out[24]:array([False,False,True,False,False])In[25]:a<bOut[25]:array([True,True,False,False,False])In[26]:a<=bOut[26]:array([True,True,True,False,False])2.1.3數(shù)組的運(yùn)算In[27]:a!=bOut[27]:array([True,True,False,True,True])2.1.3數(shù)組的運(yùn)算案例:2-18數(shù)組與常數(shù)的運(yùn)算In[17]:np.all(a==b)Out[17]:FalseIn[18]:np.any(a==b)Out[18]:True2.2數(shù)組的訪問與變換

數(shù)組的訪問是通過索引實(shí)現(xiàn)的,NumPy通過索引高效率訪問數(shù)組。另外在對數(shù)組操作時(shí),經(jīng)常改變數(shù)組的維度,NumPy提供了大量的函數(shù)實(shí)現(xiàn)數(shù)組的分割、合并等操作。2.2.1索引和切片

一維數(shù)組的切片操作與Python列表切片相似,NumPy通過索引選取數(shù)據(jù)子集或單個(gè)元素的方式,易用性強(qiáng)。2.2.1索引和切片案例:2-19一維數(shù)組索引In[1]:importnumpyasnp #導(dǎo)入NumPy庫In[2]:arr=np.arange(10) #生成數(shù)組,包含十個(gè)元素In[3]:arr Out[3]:array([0,1,2,3,4,5,6,7,8,9])In[4]:arr[1] #查看索引是1的元素Out[4]:1In[5]:arr[2:5] #選取下標(biāo)為2,3,4的元素2.2.1索引和切片案例:2-19一維數(shù)組索引Out[5]:array([2,3,4])In[6]:arr[:5] #省略開始下標(biāo),從arr[0]開始Out[6]:array([0,1,2,3,4])In[7]:arr[-1] #-1表示從數(shù)組最后向前數(shù)Out[7]:9In[8]:arr[0:3]=100,101,102 #通過下標(biāo)修改元素的值In[10]:arrOut[10]:array([100,101,102,3,4,5,6,7,8,9])2.2.1索引和切片案例:2-20二維數(shù)組索引In[11]:arr2d=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])In[12]:arr2dOut[12]:array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])In[13]:arr2d[1] #二維數(shù)組的索引位置是一個(gè)一維數(shù)組2.2.1索引和切片案例:2-20二維數(shù)組索引Out[13]:array([5,6,7,8])In[14]:arr2d[1][2] #索引第1行2列的元素Out[14]:7In[15]:arr2d[1,2] #索引第1行2列的元素Out[15]:72.2.1索引和切片案例:2-21三維數(shù)組索引In[17]:arr3d=np.array([[[1,2,3,4],[5,6,7,8]],[[9,10,11,12],[13,14,15,16]]])In[18]:arr3dOut[18]:array([[[1,2,3,4],[5,6,7,8]],[[9,10,11,12],[13,14,15,16]]])In[19]:arr3d[1] #arr3d[1]是一個(gè)2行4列的數(shù)組2.2.1索引和切片案例:2-21三維數(shù)組索引Out[19]:array([[9,10,11,12],[13,14,15,16]])In[20]:arr3d[1,0] #arr3d[1,0]是一個(gè)一維數(shù)組Out[20]:array([9,10,11,12])In[21]:arr3d[1]=20 #將常數(shù)20賦值給arr3d[1]In[22]:arr3d2.2.1索引和切片案例:2-21三維數(shù)組索引Out[22]:array([[[1,2,3,4],[5,6,7,8]],[[20,20,20,20],[20,20,20,20]]])2.2.1索引和切片

切片就是一個(gè)變量后面用一對括號(hào)將兩個(gè)用冒號(hào)隔開的數(shù)字括起來,這是針對序列類型的對象進(jìn)行的操作,冒號(hào)前后的兩個(gè)值為切片的位置。例如s=’abcdef’,索引計(jì)數(shù)從0開始,即s[0]=’a’,s[1]=’b’,以此類推s[5]=’f’;因此切片s[2:5]表示’cde’,這個(gè)區(qū)間是左閉右開的。另外,還支持負(fù)數(shù)索引,不過是從-1開始的,代表序列中倒數(shù)第一個(gè)值。如是s[-1]表示’g’。切片的括號(hào)內(nèi)可以再增加一個(gè)冒號(hào)和數(shù)值,這個(gè)數(shù)值表示步長,切片會(huì)按照步長去取值。當(dāng)選取整個(gè)序列時(shí),起始、終止索引和步長均可省略。2.2.1索引和切片案例:2-22切片索引In[23]:importnumpyasnpIn[24]:s='abcdef'In[25]:s[0]Out[25]:'a'In[26]:s[2:5]Out[26]:'cde'In[27]:s[-1]Out[27]:'f'2.2.1索引和切片案例:2-22切片索引In[28]:s[1:-1:2]Out[28]:'bd'In[29]:s[::]Out[29]:'abcdef'2.2.1索引和切片案例:2-23二維數(shù)組切片索引In[30]:arrOut[30]:array([100,101,102,3,4,5,6,7,8,9])In[31]:arr[3:5] Out[31]:array([3,4])In[32]:arr2dOut[32]:array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])2.2.1索引和切片案例:2-23二維數(shù)組切片索引In[33]:arr2d[:2] Out[33]:array([[1,2,3,4],[5,6,7,8]])In[24]:arr2d[:2,1:] Out[24]:array([[2,3,4],[6,7,8]])In[35]:arr2d[:2,2:] Out[35]:2.2.1索引和切片案例:2-23二維數(shù)組切片索引array([[3,4],[7,8]])In[36]:arr2d[2,:2] Out[36]:array([9,10])In[37]:arr2d[2,:1]Out[37]:array([9])In[38]:arr2d[:,:-1]2.2.1索引和切片案例:2-23二維數(shù)組切片索引Out[38]:array([[1,2,3],[5,6,7],[9,10,11]])In[39]:arr2d[:,:1]Out[39]:array([[1],[5],[9]])2.2.1索引和切片二維數(shù)組切片1234

1234

1234

12345678

5678

5678

56789101112

9101112

9101112

9101112arr2d[:2]

arr2d[:2,1:]

arr2d[:2,2:]

arr2d[:,:1]2.2.1索引和切片

布爾索引就是按照真假值進(jìn)行篩選出所需要的數(shù)據(jù)。舉一個(gè)例子,假設(shè)一個(gè)數(shù)組存儲(chǔ)教學(xué)備品名,可以重復(fù);另一個(gè)數(shù)組存儲(chǔ)一組相關(guān)數(shù)據(jù)。我們要從中選出我們所關(guān)心的信息。如案例2-24所示,在In[41]定義一個(gè)數(shù)組,并分別賦值為'Desk','Chair','Blackboard',接著在In[42]使用numpy.random中的randn函數(shù)生成一組7行5列隨機(jī)數(shù)。每行數(shù)據(jù)與數(shù)組obj相對應(yīng)。在In[45]采用比較運(yùn)算,產(chǎn)生Out[45]的布爾型數(shù)組,在In[46]使用obj==’Desk’這個(gè)布爾型值作為數(shù)組data索引篩選出關(guān)于Desk的全部數(shù)據(jù)。在In[47]布爾型數(shù)組與切片混合使用,篩選出符合條件的兩列數(shù)據(jù)。2.2.1索引和切片案例:2-24布爾索引In[41]:obj=np.array(['Desk','Chair','Blackboard','Chair','Desk','Blackboard','Desk'])In[42]:data=np.random.randn(7,5)In[43]:objOut[43]:array(['Desk','Chair','Blackboard','Chair','Desk','Blackboard','Desk'],dtype='<U10')In[44]:data2.2.1索引和切片Out[44]:array([[-0.47730903,0.13752285,0.82049124,-0.3289888,-0.95831107],[-1.98959798,-0.70179569,-0.2588291,0.62651073,0.63677801],[0.54375222,1.27052839,1.47349518,-0.25802782,-0.68401902],[1.39437985,-0.79383223,-0.3576392,-1.20200814,0.51907683],[0.21831681,-0.320655,0.76702473,0.68450168,-0.66453874],[-0.82314214,0.14412734,-1.02617237,-2.79991521,1.20611918],[-1.02362709,-0.13315248,0.51287489,0.97663744,-1.24568504]])2.2.1索引和切片In[45]:obj=='Desk'Out[45]:array([True,False,False,False,True,False,True])In[46]:data[obj=='Desk']Out[46]:array([[-0.47730903,0.13752285,0.82049124,-0.3289888,-0.95831107],[0.21831681,-0.320655,0.76702473,0.68450168,-0.66453874],[-1.02362709,-0.13315248,0.51287489,0.97663744,-1.24568504]])In[47]:data[obj=='Desk',1:3]Out[47]:array([[0.13752285,0.82049124],[-0.320655,0.76702473],[-0.13315248,0.51287489]])2.2.1索引和切片案例:2-25多布爾條件索引In[49]:obj1=(obj=='Desk')|(obj=='Chair')In[50]:obj1Out[50]:array([True,True,False,True,True,False,True])In[51]:data[obj1]Out[51]:array([[-0.47730903,0.13752285,0.82049124,-0.3289888,-0.95831107],[-1.98959798,-0.70179569,-0.2588291,0.62651073,0.63677801],[1.39437985,-0.79383223,-0.3576392,-1.20200814,0.51907683],[0.21831681,-0.320655,0.76702473,0.68450168,-0.66453874],[-1.02362709,-0.13315248,0.51287489,0.97663744,-1.24568504]])2.2.1索引和切片案例:2-25多布爾條件索引In[52]:data[obj!='Desk']Out[52]:array([[-1.98959798,-0.70179569,-0.2588291,0.62651073,0.63677801],[0.54375222,1.27052839,1.47349518,-0.25802782,-0.68401902],[1.39437985,-0.79383223,-0.3576392,-1.20200814,0.51907683],[-0.82314214,0.14412734,-1.02617237,-2.79991521,1.20611918]])2.2.1索引和切片案例:2-26布爾條件設(shè)置值In[53]:data[data<0]=0In[54]:dataOut[54]:array([[0.,0.13752285,0.82049124,0.,0.],[0.,0.,0.,0.62651073,0.63677801],[0.54375222,1.27052839,1.47349518,0.,0.],[1.39437985,0.,0.,0.,0.51907683],[0.21831681,0.,0.76702473,0.68450168,0.],[0.,0.14412734,0.,0.,1.20611918],[0.,0.,0.51287489,0.97663744,0.]])In[57]:data[obj=='Desk']=92.2.1索引和切片案例:2-26布爾條件設(shè)置值In[58]:dataOut[58]:array([[9.,9.,9.,9.,9.],[0.,0.,0.,0.62651073,0.63677801],[0.54375222,1.27052839,1.47349518,0.,0.],[1.39437985,0.,0.,0.,0.51907683],[9.,9.,9.,9.,9.],[0.,0.14412734,0.,0.,1.20611918],[9.,9.,9.,9.,9.]])2.2.2數(shù)組的變換與組合

在對數(shù)組操作時(shí),常使用reshape函數(shù)改變數(shù)組的維度,其參數(shù)是一個(gè)正整數(shù)元組,分別指定每個(gè)維度的大小。案例2-27通過參數(shù)設(shè)置數(shù)組的形狀。注意到,數(shù)組的形狀發(fā)生變化但是原始的值不受影響。另外reshape的參數(shù)個(gè)數(shù)是可變的,可以指定三元組、四元組等更高維度,前提是各維度之積等于元素個(gè)數(shù)。2.2.2數(shù)組的變換與組合案例:2-27一維改變?yōu)槎嗑SIn[1]:importnumpyasnp #導(dǎo)入numpyIn[2]:arr=np.arange(15) #創(chuàng)建一維數(shù)組In[3]:arr #顯示數(shù)組arrOut[3]:array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])In[4]:arr.reshape(3,5) #設(shè)置數(shù)組形狀Out[4]: #查看數(shù)組arrarray([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]])In[5]:arr.reshape(5,3) #設(shè)置數(shù)組形狀Out[5]: #查看數(shù)組arr2.2.2數(shù)組的變換與組合array([[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14]])In[6]:arr=np.arange(12)

#創(chuàng)建一維數(shù)組In[7]:arr.reshape(2,3,2)

#設(shè)置數(shù)組形狀Out[7]:

#查看數(shù)組array([[[0,1],[2,3],[4,5]],[[6,7],[8,9],[10,11]]])2.2.2數(shù)組的變換與組合案例:2-28多維改變?yōu)橐痪SIn[9]:arr=np.arange(15).reshape(3,5)In[10]:arrOut[10]:array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]])In[11]:arr1=arr.ravel()In[12]:arr1Out[12]:array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])In[13]:arr2=arr.flatten()In[14]:arr2Out[14]:array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])2.2.2數(shù)組的變換與組合案例:2-29轉(zhuǎn)置In[15]:arrOut[15]:array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]])In[16]:arr.transpose() #轉(zhuǎn)置操作,數(shù)組行列互換Out[15]:array([[0,5,10],[1,6,11],[2,7,12],[3,8,13],[4,9,14]])2.2.2數(shù)組的變換與組合案例:2-30調(diào)整大小In[18]:arr3=np.arange(8) #創(chuàng)建一個(gè)一維數(shù)組In[19]:arr3Out[19]:array([0,1,2,3,4,5,6,7])In[20]:arr3.resize(2,4) #調(diào)整大小,數(shù)組發(fā)生改變In[21]:arr3Out[21]:array([[0,1,2,3],[4,5,6,7]])2.2.2數(shù)組的變換與組合案例:2-31橫向組合In[22]:arr1=np.arange(9).reshape(3,3)In[23]:arr1Out[23]:array([[0,1,2],[3,4,5],[6,7,8]])In[24]:arr2=arr1*2In[25]:arr2Out[25]:array([[0,2,4],[6,8,10],[12,14,16]])2.2.2數(shù)組的變換與組合案例:2-31橫向組合In[26]:np.hstack((arr1,arr2)) #橫向組合Out[26]:array([[0,1,2,0,2,4],[3,4,5,6,8,10],[6,7,8,12,14,16]])In[28]:np.concatenate((arr2,arr1),axis=1) #橫向組合,該函數(shù)要求參數(shù)axis=1Out[28]:array([[0,2,4,0,1,2],[6,8,10,3,4,5],[12,14,16,6,7,8]])2.2.2數(shù)組的變換與組合案例:2-32縱向組合In[30]:np.vstack((arr1,arr2)) #縱向組合Out[30]:array([[0,1,2],[3,4,5],[6,7,8],[0,2,4],[6,8,10],[12,14,16]])2.2.2數(shù)組的變換與組合案例:2-32縱向組合In[31]:np.concatenate((arr2,arr1)) #縱向組合,省略參數(shù)axis,默認(rèn)為axis=0Out[31]:array([[0,2,4],[6,8,10],[12,14,16],[0,1,2],[3,4,5],[6,7,8]])2.2.2數(shù)組的變換與組合案例:2-33橫向拆分In[33]:np.hsplit(arr1,3) #使用hsplit()分割arr1為3列Out[33]:[array([[0],[3],[6]]),array([[1],[4],[7]]),array([[2],[5],[8]])]2.2.2數(shù)組的變換與組合In[34]:np.split(arr2,3,axis=1) #使用split()分割arr2為3列,要求參數(shù)axis=1Out[34]:[array([[0],[6],[12]]),array([[2],[8],[14]]),array([[4],[10],[16]])]2.2.2數(shù)組的變換與組合案例:2-34橫向拆分In[36]:np.split(arr1,3) #使用split()分割arr1,省略參數(shù)axis=0Out[36]:[array([[0,1,2]]),array([[3,4,5]]),array([[6,7,8]])]In[37]:np.vsplit(arr1,3) #使用vsplit()分割arr1Out[37]:[array([[0,1,2]]),array([[3,4,5]]),array([[6,7,8]])]2.3矩陣與通用函數(shù)

NumPy不僅提供了大量數(shù)組運(yùn)算的函數(shù),而且提供了的矩陣運(yùn)算函數(shù)。接下來介紹NumPy矩陣的創(chuàng)建方法及計(jì)算以及通用函數(shù),并進(jìn)行線性代數(shù)運(yùn)算。2.3.1創(chuàng)建矩陣

使用mat()創(chuàng)建矩陣,行間用分號(hào)隔開,同行數(shù)據(jù)用空格隔開。使用matrix()創(chuàng)建矩陣時(shí)行和單個(gè)元素均用逗號(hào)隔開,每行用中括號(hào)括起來。如案例2-35所示。2.3.1創(chuàng)建矩陣案例:2-35創(chuàng)建矩陣In[1]:importnumpyasnp #導(dǎo)入NumPy庫In[2]:mat1=np.mat("1234;5678") #使用mat()創(chuàng)建矩陣In[3]:mat1Out[3]:matrix([[1,2,3,4],[5,6,7,8]])2.3.1創(chuàng)建矩陣In[4]:mat2=np.matrix([[1,2],[3,4],[5,6],[7,8]])#使用matrix()創(chuàng)建矩陣In[5]:mat2Out[5]:matrix([[1,2],[3,4],[5,6],[7,8]])2.3.1創(chuàng)建矩陣

在矩陣運(yùn)算過程中,有時(shí)需要將幾個(gè)小矩陣組成一個(gè)大矩陣,使用bmat()函數(shù)可實(shí)現(xiàn)此項(xiàng)功能。如案例2-36所示,將mat1與兩個(gè)mat2組合成一個(gè)新矩陣。其中mat1組合為新矩陣前兩行,兩個(gè)mat2橫向組合作為新矩陣后四行。2.3.1創(chuàng)建矩陣案例:2-36塊矩陣組合In[6]:mat3=np.bmat("mat1;mat2mat2")#使用bmat組合新矩陣In[7]:mat3Out[7]:matrix([[1,2,3,4],[5,6,7,8],[1,2,1,2],[3,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論