如何七周成為數據分析師19:Python的數據結構

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

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

Python一共有三大數據結構,它是Python進行數據分析的基礎,分別是tuple元組,list數組以及dict字典。本文通過這三者的學習,打下數據分析的基礎。

數組

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

image.png

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

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

image.png

sum是求和,len則是統計數組中的元素個數。

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

image.png

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

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

image.png

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

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

image.png

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

image.png

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

image.png

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

數組的增刪查

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

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

image.png

另外一種方式是append,直接在數組末尾添加上元素。它在之后講到迭代和循環時應用較多。

image.png

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

image.png

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

image.png

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

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

image.png

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

image.png

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

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

image.png

現在嘗試快速創建一個多維數組。

image.png

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

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

image.png

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

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

元組

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

image.png

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

image.png

而選擇和數組沒有差異。

image.png

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

字典

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

image.png

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

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

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

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

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

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

image.png

如果key不存在,會報錯。

image.png

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

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

image.png

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

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

image.png

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

image.png

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

image.png

字典可以通過嵌套應用更復雜的數據格式,和NoSQL與JSON差不多。

image.png

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

相關閱讀

互聯網數據分析能力的養成,需一份七周的提綱

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

如何七周成為數據分析師02:Excel技巧大揭秘

如何七周成為數據分析師03:手把手教你Excel實戰

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

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

如何七周成為數據分析師04:數據可視化之經典圖表合集

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

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

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

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

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

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

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

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

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

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

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

如何七周成為數據分析師16:數據分析必須懂的假設檢驗

如何七周成為數據分析師17:最全的運營數據指標解讀

如何七周成為數據分析師18:Python的新手教程

#專欄作家#

秦路,微信公眾號ID:tracykanc,人人都是產品經理專欄作家。

本文由 @秦路?原創發布于人人都是產品經理。未經許可,禁止轉載。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!