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

0 評論 20700 瀏覽 53 收藏 16 分鐘

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

Python一共有三大數(shù)據(jù)結(jié)構(gòu),它是Python進行數(shù)據(jù)分析的基礎(chǔ),分別是tuple元組,list數(shù)組以及dict字典。本文通過這三者的學(xué)習(xí),打下數(shù)據(jù)分析的基礎(chǔ)。

數(shù)組

數(shù)組是一個有序的集合,他用方括號表示。

image.png

num就是一個典型的數(shù)組。數(shù)組不限定其中的數(shù)據(jù)類型,可以是整數(shù)也可以是字符串,或者是混合型。

數(shù)組可以直接用特定的函數(shù),函數(shù)名和Excel相近。

image.png

sum是求和,len則是統(tǒng)計數(shù)組中的元素個數(shù)。

上述列舉的函數(shù)是數(shù)組內(nèi)整體元素的應(yīng)用,如果我只想針對單一的元素呢?比如查找,這里就要用到數(shù)組的特性,索引。索引和SQL中的索引差不多,都是用來指示數(shù)據(jù)所在位置的邏輯指針。數(shù)組的索引便是元素所在的序列位置。

image.png

注意,索引位置是從0開始算起,這是編程語言的默認特色了。num[0]指數(shù)組的第一個元素,num[1]指數(shù)組的第二個元素。

我們用len()計算出了數(shù)組元素個數(shù)是5,那么它最后一個元素的索引是4。若是數(shù)組內(nèi)的元素特別多呢?此時查找數(shù)組最后一位的元素會有點麻煩。Python有一個簡易的方法,可以用負數(shù)表示,意為從最后一個數(shù)字計算索引。

image.png

這里的num[4]等價于num[-1],num[-2]則指倒數(shù)第二個的元素。

再來一個新問題,如何一次性選擇多個元素?例如篩選出數(shù)組前三個元素。在Python中,用:表示范圍。

image.png

num[0:3]篩選了前三個元素,方括號左邊是閉區(qū)間,右邊是開區(qū)間,所以這里是num[0],num[1]和num[2],并不包含num[3]。這個方法叫做切片。

image.png

上述是索引的特殊用法,[0:]表示從第0個索引開始,直到最后一個元素。[:3]表示從第一個元素開始,直到第3個索引。

image.png

負數(shù)當然也有特殊用法。[-1:]表示從最后一個元素開始,因為它已經(jīng)是最后一個元素了,所以只返回它本身。[:-1]表示從第一個元素開始到最后一個元素。num[-2:-1]和num[-3:-1]大同小異。

數(shù)組的增刪查

我們已經(jīng)了解數(shù)組的基本概念,不過仍舊停留在查找,它不涉及數(shù)據(jù)的變化。工作中,更多需要操縱數(shù)組,對數(shù)組的元素進行添加,刪除,更改。

數(shù)組通過insert函數(shù)插入,函數(shù)的第一個參數(shù)表示插入的索引位置,第二個表示插入的值。

image.png

另外一種方式是append,直接在數(shù)組末尾添加上元素。它在之后講到迭代和循環(huán)時應(yīng)用較多。

image.png

如果要刪除特定位置的元素,用pop函數(shù)。如果函數(shù)沒有選擇數(shù)值,默認刪除最后一個元素,如果有,則刪除數(shù)值對應(yīng)索引的元素。

image.png

更改元素不需要用到函數(shù),直接選取元素重新賦值即可。

image.png

到這里,數(shù)組增刪改查已經(jīng)講完,但這只是一維數(shù)組,一維數(shù)組之上還有多維數(shù)組。如果現(xiàn)在有一份數(shù)據(jù)是關(guān)于學(xué)生信息,一共有三個學(xué)生,要求包含學(xué)生的姓名,年齡,和性別,應(yīng)該怎么用數(shù)組表示呢?

有兩種思路,一種是用三個一維數(shù)組分別表示學(xué)生的姓名,年齡和性別。

image.png

學(xué)生屬性被拆分成多個數(shù)組,利用索引來表示其信息,這里的索引有些類似SQL的主鍵,通過索引查找到信息。但是這種方法并不直觀,實際應(yīng)用會比較麻煩,更好的方法是表示成多維數(shù)組。

image.png

所謂多維數(shù)組,是數(shù)組內(nèi)再嵌套數(shù)組,圖中表示的是一個寬度為3,高度為3的二維數(shù)組。此時student[0]返回的是數(shù)組而不是單一值。這種方法將學(xué)生信息合并在一起,比第一個案例更容易使用。

如果想選擇第一個學(xué)生的性別,應(yīng)該怎么辦呢?很簡單,后面再加一個索引即可。

image.png

現(xiàn)在嘗試快速創(chuàng)建一個多維數(shù)組。

image.png

[0]*3將快速生成3個元素值為0的數(shù)組,這是一種快捷操作,而[row]*4則將其擴展成二維數(shù)據(jù),因為是4,所以是3*4的結(jié)構(gòu)。

這里有一個注意點,當我們想更改多維數(shù)組中的某一個元素而不是數(shù)組時,這種方式會錯誤。

image.png

按照正常的想法,martix[1][0]將會改變第二個數(shù)組中的第一個值為1,但是結(jié)果是所有數(shù)組的第一個值都變成1。這是因為在matrix = [row] * 4操作中,只是創(chuàng)建3個指向row的引用,可以簡單理解成四個數(shù)組是一體的。一旦其中一個改變,所有的都會變。

比較穩(wěn)妥的方式是直接定義多維數(shù)組,或者用循環(huán)間接定義。多維數(shù)組是一個挺重要的概念,它也能直接表示成矩陣,是后續(xù)很多算法和分析的基礎(chǔ)(不過在pandas中,它是另外一種形式了)。

元組

tuple叫做元組,它和數(shù)組非常相似,不過用圓括號表示。但是它最大的特點是不能修改。

image.png

當我們想要修改時就會報錯。

image.png

而選擇和數(shù)組沒有差異。

image.png

元組可以作為簡化版的數(shù)組,因為它不可更改的特性,很多時候可以作為常量使用,防止被篡改。這樣會更安全。

字典

字典dict全稱dictionary,以鍵值對key-value的形式存儲。所謂鍵值,就是將key作為索引存儲。用大括號表示。

image.png

圖中的’qinlu’是key,18是value值。key是唯一的,value可以對應(yīng)各種數(shù)據(jù)類型。key-value的原理不妨想象成查找字典,拼音是key,對應(yīng)的文字是value(當然字典的拼音不唯一)。

字典和數(shù)組的差異在于,因為字典以key的形式存儲和查找,所以它的查詢速度非???,畢竟翻字典的時候你只要知道拼音就能快速定位了。對dict數(shù)據(jù)結(jié)構(gòu),10條記錄和10萬條記錄的查找沒有區(qū)別。

這種查找方式的缺點是占用內(nèi)存大。數(shù)組則相反,查找速度隨著元素的增加逐漸下降,這個過程想象成程序在一頁頁的翻一本沒有拼音的字典,直到找到內(nèi)容。數(shù)組的優(yōu)點是占用的內(nèi)存空間小。

所以數(shù)組和字典的優(yōu)缺點相反,dict是空間換時間,list是時間換空間,這是編程中一個比較重要的概念。實際中,數(shù)據(jù)分析師的工作不太涉及工程化,選用數(shù)組或者字典沒有太嚴苛的限制。

細心的讀者可能已經(jīng)發(fā)現(xiàn),字典定義時我的輸入順序是qinlu,lulu,qinqin,而打印出來是lulu,qinlu,qinqin,順序變了。這是因為定義時key的順序和放在內(nèi)存的key順序沒有關(guān)系,key-value通過hash算法互相確定,甚至不同Python版本的哈希算法也不同。這一點應(yīng)用中要避免出錯。

既然字典通過key-value對匹配查找,那么它自然不能不用數(shù)組的數(shù)值索引,它只能通過key值。

image.png

如果key不存在,會報錯。

image.png

通過in方法,可以返回True或False,避免報錯。

dict和list一樣,直接通過賦值更改value。

image.png

能不能更改key的名字?不能,key一旦確定,就無法再修改,好比字典定好后,你能修改字的拼音么?

dict中刪除key和list一樣,通過pop函數(shù)。增加key則是直接賦予一個新的鍵值對。

image.png

dict的keys和values兩個函數(shù)直接輸出所有的key值和value值。如果要轉(zhuǎn)換成數(shù)組,則再外面嵌套一個list函數(shù)。

image.png

items函數(shù),將key-value對變成tuple形式,以數(shù)組的方式輸出。

image.png

字典可以通過嵌套應(yīng)用更復(fù)雜的數(shù)據(jù)格式,和NoSQL與JSON差不多。

image.png

基礎(chǔ)的數(shù)據(jù)類型差不多了,更多函數(shù)應(yīng)用大家網(wǎng)上自行查閱文檔,這塊掌握了,在數(shù)據(jù)清洗過程中將會非常高效,尤其是讀取Excel數(shù)據(jù)時。當然不要求滾瓜爛熟,因為后面將學(xué)習(xí)更加強大的Numpy和Pandas。

相關(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ù)指標解讀

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

#專欄作家#

秦路,微信公眾號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ā)揮!