如何七周成為數(shù)據(jù)分析師21:Python分析之numpy和pandas入門

2 評(píng)論 33070 瀏覽 71 收藏 16 分鐘

本文是《如何七周成為數(shù)據(jù)分析師》的第二十一篇教程,如果想要了解寫作初衷,可以先行閱讀七周指南。溫馨提示:如果您已經(jīng)熟悉Python,大可不必再看這篇文章,或只挑選部分。

今天開始進(jìn)入Python數(shù)據(jù)分析工具的教程。

數(shù)據(jù)分析絕對(duì)繞不過的三個(gè)包是numpy、scipy和pandas。numpy是Python的數(shù)值計(jì)算擴(kuò)展,專門用來處理矩陣,它的運(yùn)算效率比列表更高效。scipy是基于numpy的科學(xué)計(jì)算包,包括統(tǒng)計(jì)、線性代數(shù)等工具。pandas是基于numpy的數(shù)據(jù)分析工具,能更方便的操作大型數(shù)據(jù)集。后續(xù)的章節(jié)主要圍繞pandas講解。

numpy和pandas

numpy的數(shù)據(jù)結(jié)構(gòu)是n維的數(shù)組對(duì)象,叫做ndarray。Python的list雖然也能表示,但是不高效,隨著列表數(shù)據(jù)的增加,效率會(huì)降低。

我們首先載入numpy包,因?yàn)樗堑谌焦ぞ?,所以每次使用前必須在代碼中載入。as是命名為別名,方便調(diào)用,np是numpy約定俗成的簡(jiǎn)寫。

image.png
創(chuàng)建數(shù)組使用numpy中的array函數(shù),新手要記住加np。我們將系統(tǒng)自帶的列表list轉(zhuǎn)換成了numpy中的數(shù)組。

image.png

嵌套列表會(huì)被轉(zhuǎn)換為一個(gè)多維數(shù)組,它也可以被稱為矩陣。

array數(shù)組需要注意的是,它內(nèi)部的元素必須為相同類型,比如數(shù)值或者字符串??梢杂胐type查詢其類型,不用加括號(hào)。

image.png

numpy的數(shù)據(jù)類型比較豐富,包括int8,int16,int32等,不過這塊更接近計(jì)算機(jī)底層,數(shù)據(jù)分析用不太到。當(dāng)我們想轉(zhuǎn)換數(shù)據(jù)格式時(shí),可以用astype函數(shù)。

image.png

數(shù)組的計(jì)算非常方便,不要大量的循環(huán)即可批量運(yùn)算。

image.png

數(shù)組索引和列表相同,通過方括號(hào)和數(shù)字即可選擇,也可直接賦值。

image.png

可以通過遞歸對(duì)多維數(shù)組進(jìn)行篩選,如果省略了后面的索引,則返回次一級(jí)的維度,這一點(diǎn)和list一樣。

image.png

numpy除了上述的基礎(chǔ)操作之外,還有reshape、T轉(zhuǎn)置、ufunc、sort等函數(shù),功能強(qiáng)大,大家可以自行查閱文檔學(xué)習(xí),這里我不再花費(fèi)時(shí)間講解。對(duì)于數(shù)據(jù)分析師,pandas是一個(gè)更常用的包,在抽象概念上它更接近我們熟悉的excel和sql,也是最主要的分析工具。

pandas有兩個(gè)主要的數(shù)據(jù)結(jié)構(gòu),Series和DataFrame,記住大小寫區(qū)分,后續(xù)使用中不多提醒。Series類似于一維數(shù)組,和numpy的array接近,由一組數(shù)據(jù)和數(shù)據(jù)標(biāo)簽組成。數(shù)據(jù)標(biāo)簽有索引的作用。

image.png

加載pandas包,通過Series函數(shù)生成一個(gè)對(duì)象。我們很明顯地看到,在jupyter上它的樣式不同于array,它是豎著的。右邊是我們輸入的一組數(shù)據(jù),左邊是數(shù)據(jù)的索引,即標(biāo)簽。數(shù)據(jù)標(biāo)簽是pandas區(qū)分于numpy的重要特征。

索引不一定是從0開始的數(shù)字,它可以被定義。

image.png

索引的概念有點(diǎn)像SQL的主鍵,不過它的功能更強(qiáng)大,分析師能夠很輕松的通過索引選取一個(gè)數(shù)據(jù)或者一組數(shù)據(jù)。

image.png

index函數(shù)可以顯示Series的索引。Series和array一樣,通過方括號(hào)選取數(shù)據(jù),當(dāng)要選取多個(gè)數(shù)據(jù)時(shí),應(yīng)該用列表表示多個(gè)索引,所以第三個(gè)案例嵌套了兩層方括號(hào)。

如果數(shù)據(jù)是一個(gè)字典,也能直接通過這個(gè)字典創(chuàng)建Series。

image.png

此時(shí),字典的key就是Series的索引。

image.png

Series有自動(dòng)對(duì)齊索引的功能,當(dāng)自定義的索引qinqin和字典隊(duì)員不上時(shí),會(huì)自動(dòng)選擇NaN,即結(jié)果為空,表示缺失。缺失值的處理會(huì)在后續(xù)講解。

DataFrame

Series是一維的數(shù)據(jù)結(jié)構(gòu),DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它含有不同的列,每列都是不同的數(shù)據(jù)類型。我們可以把DataFrame看作Series組成的字典,它既有行索引也有列索引。想象得更明白一點(diǎn),它類似一張excel表格或者SQL,只是功能更強(qiáng)大。

構(gòu)建DataFrame的方法有很多,最常用的是傳入一個(gè)字典。

image.png

DataFrame會(huì)自動(dòng)補(bǔ)充索引,并且將字典的key作為列標(biāo)簽,即column。在這里,dict的key順序是DataFame的順序,不再是無(wú)序的。

DataFrame中可以通過info函數(shù)直接查看數(shù)據(jù)類型和統(tǒng)計(jì)。

image.png

image.png

DataFrame的數(shù)據(jù)類型變更和numpy一樣,用astype就行,記住要賦值。df.age = df.age.astype,圖上只是舉例,沒有真的更改數(shù)據(jù)類型。

DataFrame的索引方式和Series一直,它選取的是列。

image.png

返回的是一組Series,索引和原DataFrame一致。除了方括號(hào)選取,DataFrame還有更簡(jiǎn)單的選取方法。

image.png

行也可以通過通過位置獲取,用索引字段ix的方式。

image.png

第二個(gè)方法不需要調(diào)用ix,直接以切片的形式獲取行,切片的用啊和數(shù)組一樣。記住,切片無(wú)法用單獨(dú)的數(shù)字選取,只能用冒號(hào)切選范圍。

列可以通過賦值的方式修改和添加,當(dāng)列的名稱是全新,則會(huì)在DataFrame的最右邊自動(dòng)加上新的一列。

image.png
image.png

列表和數(shù)組都可以賦值到列,長(zhǎng)度必須匹配,列表是按照順序,數(shù)組的話,可以按index參數(shù)設(shè)置的索引對(duì)應(yīng),若為空,則填上缺失值。

DataFrame的index不可更改,這是為了數(shù)據(jù)的安全性,但我們能通過index函數(shù)獲取詳情。

image.png

DataFrame在數(shù)據(jù)選取上面非常強(qiáng)大。

image.png

它支持常用的邏輯判斷,例子中,后兩種數(shù)據(jù)選取是通過布爾數(shù)組過濾出我們想要的結(jié)果。

image.png

df.sex == ‘男’返回了一個(gè)布爾數(shù)組(記住,是兩個(gè)等號(hào),一個(gè)等號(hào)是賦值),然后通過布爾數(shù)組找出df中符合條件為true的結(jié)果。

現(xiàn)在我們希望找出年齡在20以下,且性別為男的人。

image.png

這里用到布爾類型數(shù)據(jù)的計(jì)算公式,true and true 為true,false and true 為false。pandas中的邏輯符號(hào),并且是&,或者是|。接下來過濾出性別為女,或者年齡為18的人。

image.png

當(dāng)邏輯條件復(fù)雜時(shí),這種寫法并不優(yōu)雅,比如性別為男,且年齡在18歲,以及性別為女,且年齡在18歲以上的兩類人群,這種過濾條件就比較復(fù)雜了。pandas中可以用query函數(shù)以類SQL語(yǔ)言執(zhí)行查詢。

image.png

query中可以直接使用列名,它的功能遠(yuǎn)不至于此,大家有興趣可以深入學(xué)習(xí)。

image.png

DataFrame可以直接在列上進(jìn)行運(yùn)算,當(dāng)DataFrame和DataFrame之間運(yùn)算時(shí),按索引進(jìn)行加減乘除。

image.png

如果直接用加法,若列名匹配不上,會(huì)產(chǎn)生NaN 的缺失值,我們可以在后續(xù)后續(xù)fillna函數(shù)填充。另外一種方法是add函數(shù),它可以直接通過參數(shù)選擇填充值。減乘除對(duì)應(yīng)sub、mul、div。

DataFrame還有兩個(gè)常用函數(shù),又特別容易搞混的是,iloc和loc。

image.png

它們都是通過索引選取行,iloc是通過所在行的數(shù)字為索引,loc是所在行的標(biāo)簽為索引,簡(jiǎn)單講,iloc是第幾行,loc是標(biāo)簽。當(dāng)索引沒有標(biāo)簽時(shí),loc和iloc等價(jià)。兩者支持冒號(hào)的范圍選擇。

上文提到的過的ix,則是兩者的混合,即可以行號(hào),也可以行索引。

當(dāng)行和列需要同時(shí)選擇的時(shí)候,用逗號(hào)分割,逗號(hào)前是想要選擇的行,逗號(hào)后是想要選擇的列。

image.png

完整形式是ix[ 行1:行2, ?列1:列2 ],iloc和loc也支持行列同時(shí)選擇,方法一樣。新人接觸這幾塊比較容易混淆。后續(xù)聯(lián)系即可掌握。

大家如果想加深掌握這塊,除了敲一遍代碼,可以閱讀「利用Python進(jìn)行數(shù)據(jù)分析」,很經(jīng)典的入門書(部分內(nèi)容有點(diǎn)老)。也可以多拿工作中的報(bào)表做練習(xí)。

到這里,numpy和pandas的基礎(chǔ)就講解的差不多了,更深入的應(yīng)用,還是用實(shí)戰(zhàn)解決吧!下一章,將會(huì)用大家已經(jīng)很熟悉的練習(xí)數(shù)據(jù),以實(shí)際操作的方式完成一次數(shù)據(jù)分析。

相關(guān)閱讀

互聯(lián)網(wǎng)數(shù)據(jù)分析能力的養(yǎng)成,需一份七周的提綱

如何七周成為數(shù)據(jù)分析師01:常見的Excel函數(shù)全部涵蓋在這里了

如何七周成為數(shù)據(jù)分析師02:Excel技巧大揭秘

如何七周成為數(shù)據(jù)分析師03:手把手教你Excel實(shí)戰(zhàn)

如何七周成為數(shù)據(jù)分析師:Excel技巧之甘特圖繪制(項(xiàng)目管理)

如何七周成為數(shù)據(jù)分析師:Excel技巧之打造多級(jí)菜單

如何七周成為數(shù)據(jù)分析師04:數(shù)據(jù)可視化之經(jīng)典圖表合集

如何七周成為數(shù)據(jù)分析師05:數(shù)據(jù)可視化之打造升職加薪的報(bào)表

如何七周成為數(shù)據(jù)分析師06:數(shù)據(jù)可視化之手把手打造BI

如何七周成為數(shù)據(jù)分析師07:快速掌握麥肯錫的分析思維

如何七周成為數(shù)據(jù)分析師08:如何建立數(shù)據(jù)分析的思維框架?

如何七周成為數(shù)據(jù)分析師09:寫給新人的數(shù)據(jù)庫(kù)指南

如何七周成為數(shù)據(jù)分析師10:SQL,從入門到熟練

如何七周成為數(shù)據(jù)分析師11:SQL,從熟練到掌握

如何七周成為數(shù)據(jù)分析師12:解鎖數(shù)據(jù)分析的正確姿勢(shì)(上)

如何七周成為數(shù)據(jù)分析師13:解鎖數(shù)據(jù)分析的正確姿勢(shì)(下)

如何七周成為數(shù)據(jù)分析師14:概率論的入門指南

如何七周成為數(shù)據(jù)分析師15:讀了本文,你就懂了概率分布

如何七周成為數(shù)據(jù)分析師16:數(shù)據(jù)分析必須懂的假設(shè)檢驗(yàn)

如何七周成為數(shù)據(jù)分析師17:最全的運(yùn)營(yíng)數(shù)據(jù)指標(biāo)解讀

如何七周成為數(shù)據(jù)分析師18:Python的新手教程

如何七周成為數(shù)據(jù)分析師19:Python的數(shù)據(jù)結(jié)構(gòu)

如何七周成為數(shù)據(jù)分析師20:了解和掌握Python的函數(shù)

#專欄作家#

秦路,微信公眾號(hào)ID:tracykanc,人人都是產(chǎn)品經(jīng)理專欄作家。

本文由 @秦路?原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 看不到圖,心塞

    來自北京 回復(fù)
  2. giant boy:fighting,fighting,fighting!

    回復(fù)