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

秦路
2 評論 33154 瀏覽 71 收藏 16 分鐘
🔗 B端产品经理需要进行售前演示、方案定制、合同签订等,而C端产品经理需要进行活动策划、内容运营、用户激励等

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

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

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

numpy和pandas

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

我們首先載入numpy包,因為它是第三方工具,所以每次使用前必須在代碼中載入。as是命名為別名,方便調(diào)用,np是numpy約定俗成的簡寫。

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

image.png

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

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

pandas有兩個主要的數(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ù)生成一個對象。我們很明顯地看到,在jupyter上它的樣式不同于array,它是豎著的。右邊是我們輸入的一組數(shù)據(jù),左邊是數(shù)據(jù)的索引,即標(biāo)簽。數(shù)據(jù)標(biāo)簽是pandas區(qū)分于numpy的重要特征。

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

image.png

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

image.png

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

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

image.png

此時,字典的key就是Series的索引。

image.png

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

DataFrame

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

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

image.png

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

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

image.png

image.png

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

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

image.png

返回的是一組Series,索引和原DataFrame一致。除了方括號選取,DataFrame還有更簡單的選取方法。

image.png

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

image.png

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

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

image.png
image.png

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

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

image.png

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

image.png

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

image.png

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

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

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

image.png

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

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

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

image.png

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#專欄作家#

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

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

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

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

    回復(fù)
专题
12590人已学习12篇文章
本专题的文章分享了营销案例解析。
专题
11315人已学习12篇文章
保险是一种保障机制,能够在遭遇意外时起到缓冲保底作用的财务工具。本专题的文章分享了互联网保险产品设计指南。
专题
12012人已学习13篇文章
2023年已结束,你的年终总结写好了吗?本专题的文章分享了如何做好年终总结。
专题
11821人已学习12篇文章
数据管理系统在后期能够为企业提供基础数据服务,保证企业往更好的方向运营。本专题的文章分享了如何做好数据管理。
专题
12761人已学习14篇文章
对电商行业的从业者们而言,GMV这个概念估计都不陌生,不少人也开始拿GMV作为评判各家电商平台市占率的指标之一。本专题的文章分享了GMV破亿的经验总结。