
【導語】在數據分析當中,python用到最多的第三方庫就是numpy,今天我們就來講講!
作者:王皓
來源:大數據DT(ID:hzdashuju)
01 ndarray創建與索引
在學習Numpy之前我們需要了解一個概念:數組維數。
在計算機科學中,數組數據結構(array data structure),簡稱數組(Array),是由相同類型的元素的集合所組成的數據結構,分配一塊連續的內存來存儲。按數組維數分類可分為:一維數組、二維數組、多維數組(N維數組)。
numpy是最著名的 python庫之一,常用于高性能計算。Numpy提供了兩種基本對象:ndarray和ufunc。
NumPy作為一個開源的Python科學計算基礎庫,包含:一個強大的N維數組對象ndarray ;廣播功能函數 ;整合C/C++/Fortran代碼的工具 ;線性代數、傅里葉變換、隨機數生成等功能。NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎。
當然這里就有一個問題出現了,Python已有列表類型,為什么需要一個數組對象(類型)?
因為:
但是Python內置的array模塊既不支持多維數組功能,又沒有配套對應的計算函數,所以基于Numpy的ndarray在很大程度上改善了Python內置array模塊的不足,將重點介紹ndarray的創建與索引。
1. 創建ndarray對象
1)ndarray數據類型
在《Python 3智能數據分析快速入門》該節內容中,作者羅列了15種數據類型,其中實數數據類型13種。這些實數數據類型之間可以互相轉換。
這時有人會問,為什么要支持這么多種數據類型?是因為對比Python語法來說僅支持整數、浮點數和復數3種類型,但是當科學計算涉及數據較多,對存儲和性能都有較高要求,所以對數據類型進行精細定義,有助于NumPy合理使用存儲空間并優化性能和程序員對程序規模有合理評估。
對于15種數據類型在這里筆者將不贅述,書上有詳細的解釋以及案例示范。
2)ndarray創建
在《Python 3智能數據分析快速入門》該節內容中,作者介紹了兩種創建ndarray的方法:
這里筆者再補充四種方法并整理出來:
對于方法②再補充5個常用函數:
3)隨機數
Numpy提供了強大的生成隨機數的功能,使用隨機數也能創建ndarray?;菊Z法格式:numpy.random.×××() 。在《Python 3智能數據分析快速入門》該節內容中,作者羅列了13個函數及其說明,筆者再補充2個函數:
2. ndarray的索引和切片
索引與切片是ndarray使用頻率最高的操作。相較于list,ndarray索引與切片在功能上更加豐富,在形式上更多樣。ndarray的高效率在很大程度上需歸功于其索引的易用性。
1)一維ndarray的索引
一維ndarray的索引方法很簡單,與list的索引方法一致,相關案例在書上有展示,這里不再贅述。
2)多維ndarray的索引
多維的每一個維度都有一個索引,各個維度的索引之間用逗號隔開,例如:arr[ [維度1(行)] , [維度2(列)] ]。
代碼清單如下:
import numpy as np print(np.arange(10))
輸出:[0 1 2 3 4 5 6 7 8 9]
arrnp.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]]) print('\n',arr)
輸出:
[[ 1 2 3 4 5]
[ 4 5 6 7 8]
[ 7 8 9 10 11]]
#訪問第0行中第3列和第4列元素 print('切片結果:',arr[0,3:5])
輸出:
切片結果:[4 5]
#訪問第1行和第二行中第2列、第3列和第4列的元素 print('切片結果:\n',arr[1:,2:])
輸出:
切片結果:
[6 7 8]
[9 10 11]
#訪問第2列的元素 print('切片結果:',arr[:2])
輸出:
切片結果:[3 6 9]
ndarray在索引與切片的時候除了使用整形的數據外,還可以使用布爾型,代碼清單如下:
# 索引第1、3行中第2列的元素。Define true 1, define false 0 mask=np.array([1, 0, 1], dtype=np.bool) print(arr[mask, 1])
輸出:
[2 8]
3)花式索引
花式索引是一個Numpy術語,是在基礎索引方式之上衍生出的功能更強大的索引方式。它能夠利用整數ndarray進行索引。
在這節的學習中,發現一個有趣的問題:在使用np.empty函數時,本想用arr = np.empty((4,7))創建一個空的多維數組,但是返回的結果是這樣:
語法格式數值等都沒有什么錯誤的情況下,初步懷疑是函數本身的原因,于是用help()函數查看它的詳細介紹,竟然查到了:
數據類型是可選且默認值是numpy.float64。(好家伙,書上可沒告訴我)所以只需在后面選擇int就行。
arr = np.empty((4,7),int) print(arr)
輸出:
另一個問題是關于ix函數生成區域索引器的問題,代碼如下:
arr = np.array([np.arange(i*4, i*4+4) for i in np.arange(6)]) print('創建的二維ndarray arr為:\n', arr)
輸出:
#利用np.ix函數將兩個一維的整數ndarray轉化為方形區域的索引器 print('使用ix成片索引arr結果為:\n', arr[np.ix_([5, 1, 4, 2], [3, 0, 1, 2])])
輸出:
out[15]為什么會返回這樣一個結果?是因為ix函數結果的排序是基于[5,1,4,2],[3,0,1,2]兩個數組產生的笛卡爾積,即(5,3),(5,0),(5,1),(5,2);(1,3),(1,0),(1,1),(1,2);(4,3),(4,0),(4,1),(4,2);(2,3),(2,0),(2,1),(2,2)。然后按照索引(5,3),(5,0),(5,1),(5,2)得到第0行元素:23 20 21 22,之后的以此類推。
02 ndarray的基礎操作
ndarray的基礎操作包括設置ndarray形狀、展平ndarray、組合ndarray、分割ndarray、ndarray的排序與搜索,以及ndarray的字符串操作等。
書中已經介紹了12種基本函數和它們的代碼演示:
在這里做幾點補充和說明:
但請注意深度分割函數dsplit的使用條件:
import numpy as np arr=np.arange(12)
arr.shape = (4, 3) print('\n', arr)
輸出:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
print('形狀改變后, ndarray arr的維度為:',arr.ndim)
輸出:形狀改變后,ndarray arr的維度為:2
''' dsplit分割的ndarray必須是三維ndarray, 且分割的數目必須為shape屬性中下標為2的值的公約數。 比如這里的分割數就是36,下標為2的值是4,符合要求 ''' arr = np.arange(36).reshape(3,3,4) print('創建的三維ndarrary arr為:\n',arr)
創建的三維 ndarrary arr為:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 12 13 14 15]
[ 16 17 18 19]
[ 20 21 22 23]]
[[ 24 25 26 27]
[ 28 29 30 31]
[ 32 33 34 35]]]
1. 排序與搜索
書中已經介紹了6種基本函數和它們的代碼演示:
在這里做幾點補充和說明:
其中注意argsort函數使用的方法類似于sort,只是返回的值不同,返回的是ndarray arr的下標。
2. 字符串操作
Numpy的char模塊提供的字符串操作函數可以運用向量化運算來處理整個ndarray,而完成同樣的任務,Python的列表則通常借助循環語句遍歷列表,并對逐個元素進行相應的處理。
Numpy的char模塊提供的常用字符串操作函數具有字符串的連接、切片、刪除、替換、字母大小寫轉換和編碼調用等功能,可謂是十分方便,書上有非常詳細的介紹,建議大家結合《Python 3智能數據分析快速入門》這本書美味食用。
03 ufunc
ufunc,全稱通用函數(universal function),是一種能夠對ndarray中所有元素進行操作的函數,而不是對ndarray對象操作。
廣播(Broadingcasting)是指不同形狀的ndarray之間執行算術運算的方式。若兩個ndarray的shape不一致,Numpy則會實行廣播機制。為了更好地使用廣播機制,需要遵循4個原則。原則及案例在書上第159頁有詳細演示,此處不再贅述。
常用的ufunc運算有算數運算、三角函數、集合運算、比較運算、邏輯運算和統計計算等。書上提供了若干種常用函數,對ndarray中所有元素的運算來說,在提供了極其方便與快捷的同時,又囊括一切強大的功能。相關函數及案例在書上第161頁有詳細演示,此處不再贅述。
04 matrix與線性代數
Numpy的matrix是繼承自Numpy的二維ndarray對象,不僅擁有二維ndarray的屬性、方法與函數,還擁有諸多特有的屬性與方法。同時,Numpy中的matrix與線性代數中的矩陣概念幾乎完全相同,同樣含有轉置矩陣、共軛矩陣、逆矩陣等概念。
只要是大學期間學過《線性代數》這門課程的同學,對于《Python 3智能數據分析快速入門》的學習完全沒有問題,相關專業術語及技術實現細節在本節中都有強調。詳情請從第169頁開始學習。
05 Numpy文件讀寫
讀寫文件是利用Numpy進行數據處理的基礎,Numpy中主要有二進制的文件讀寫和文件列表形式的數據讀寫兩種形式。其中二進制文件讀取使用書上第175頁中提到的load函數;二進制文件存儲使用save和savez函數。
但是在實際的數據分析任務中,更多使用文本格式的數據,如txt或csv,因此經常使用loadtxt函數執行對文本格式的數據的讀取任務和savetxt函數執行對文本格式的數據的存儲任務。
但是它們只能有效存取一維和二維數據,這里我再對多維數據的存取的方法進行補充:
a.tofile(frame, sep='', format='%s')
np.fromfile(frame, dtype=float, count=‐1, sep='')
需要注意的是,該方法需要讀取時知道存入文件時數組的維度和元素類型,a.tofile()和np.fromfile()需要配合使用,可以通過元數據文件來存儲額外信息。
參考文獻:
1. 《Python 3智能數據分析快速入門》 李明江、張良均、周東平、張尚佳 著,機械工業出版社出版。
2.中國大學MOOC,《Python數據分析與展示》作者:嵩天 。
3.百度百科:數組維數
4.CSDN:《花式索引與np.ix_函數》TzeSing 著
5.CSDN:《關于np.empty()函數的用法》愛數據的橙子 著
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23