【數據分析】Numpy

2021-02-08 上海老男孩教育

目錄

    1.簡介

    2.ndarray

    3.通用函數

    4.其他


               ✦ ✦ ✦ ✦ ✦ ✦1、簡介

Numpy是高性能科學計算和數據分析的基礎包。它也是pandas等其他數據分析的工具的基礎,基本所有數據分析的包都用過它。NumPy為Python帶來了真正的多維數組功能,並且提供了豐富的函數庫處理這些數組。它將常用的數學函數都支持向量化運算,使得這些數學函數能夠直接對數組進行操作,將本來需要在Python級別進行的循環,放到C語言的運算中,明顯地提高了程序的運算速度。

安裝方法:

pip install numpy

引用方式:

import numpy as np

這是官方認證的導入方式,可能會有人說為什麼不用from numpy import *,是因為在numpy當中有一些方法與Python中自帶的一些方法,例如max、min等衝突,為了避免這些麻煩大家就約定俗成的都使用這種方法。

2、ndarray -多維數組對象

Numpy的核心特徵就是N-維數組對——ndarray.

1、為什麼要是用ndarray?

接下來我們可以通過具體的實例來展示一下ndarray的優勢。  

現在有這樣一個需求:

已知若干家跨國公司的市值(美元),將其換算為人民幣

按照Python當中的方法  

第一種:是將所有的美元通過for循環依次迭代出來,然後用每個公司的市值乘以匯率  

第二種:通過map方法和lambda函數映射

這些方法相對來說也挺好用的,但是再來看通過ndarray對象是如何計算的

通過ndarray這個多維數組對象可以讓這些批量計算變得更加簡單,當然這隻它其中一種優勢,接下來就通過具體的操作來發現。 

2、創建ndarray對象
np.array()

3、ndarray是一個多維數組列表

接下來就多維數組舉個例子:

有的人可能會說了,這個數組跟Python中的列表很像啊,它和列表有什麼區別呢?

4、常用屬性屬性描述
T數組的轉置(對高維數組而言)
dtype數組元素的數據類型
size數組元素的個數
ndim數組的維數
shape數組的維度大小(以元組形式)
T:轉置
li1 = [
   [1,2,3],
   [4,5,6]
]
a = np.array(li1)
a.T
執行結果:
array([[1, 4],
      [2, 5],
      [3, 6]])
就相當於是將行變成列,列變成行,它也是一個比較常用的方法

5、數據類型類型描述
布爾型bool_
整型int_ int8 int16 int32 int 64
無符號整型uint8 uint16 uint32 uint64
浮點型float_ float16 float32 float64
複數型complex_ complex64 complex128
整型:
int32隻能表示(-2**31,2**31-1),因為它只有32個位,只能表示2**32個數

無符號整型:
只能用來存正數,不能用來存負數

補充:
astype()方法可以修改數組的數據類型

6、ndarray-創建方法描述
array()將列錶轉換為數組,可選擇顯式指定dtype
arange()range的numpy版,支持浮點數
linspace()類似arange(),第三個參數為數組長度
zeros()根據指定形狀和dtype創建全0數組
ones()根據指定形狀和dtype創建全1數組
empty()根據指定形狀和dtype創建空數組(隨機值)
eye()根據指定邊長和dtype創建單位矩陣
1、arange():
np.arange(1.2,10,0.4)
執行結果:
array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. ,
      6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6])
# 在進行數據分析的時候通常我們遇到小數的機會遠遠大於遇到整數的機會,這個方法與Python內置的range的使用方法一樣

2、linspace()
np.linspace(1,10,20)
執行結果:
array([ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684,
       3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789,
       5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895,
       8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ])
# 這個方法與arange有一些區別,arange是顧頭不顧尾,而這個方法是顧頭又顧尾,在1到10之間生成的二十個數每個數字之間的距離相等的,前後兩個數做減法肯定相等
----
3、zeros()
np.zeros((3,4))
執行結果:
array([[0., 0., 0., 0.],
      [0., 0., 0., 0.],
      [0., 0., 0., 0.]])
# 會用0生成三行四列的一個多維數組
----
4、ones()
np.ones((3,4))
執行結果:
array([[1., 1., 1., 1.],
      [1., 1., 1., 1.],
      [1., 1., 1., 1.]])
# 會用1生成三行四列的一個多維數組
--
5、empty()
np.empty(10)
執行結果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 這個方法只申請內存,不給它賦值
-
6、eye()
np.eye(5)
執行結果:
array([[1., 0., 0., 0., 0.],
      [0., 1., 0., 0., 0.],
      [0., 0., 1., 0., 0.],
      [0., 0., 0., 1., 0.],
      [0., 0., 0., 0., 1.]])

7、索引和切片
li1 = [
   [1,2,3],
   [4,5,6]
]
a = np.array(li1)
a * 2
運行結果:
array([[ 2,  4,  6],
      [ 8, 10, 12]])
     

# l2數組
l2 = [
   [1,2,3],
   [4,5,6]
]
a = np.array(l2)

# l3數組
l3 = [
   [7,8,9],
   [10,11,12]
]
b = np.array(l3)

a + b  # 計算

執行結果:
array([[ 8, 10, 12],
      [14, 16, 18]])

# 將一維數組變成二維數組
arr = np.arange(30).reshape(5,6) # 後面的參數6可以改為-1,相當於佔位符,系統可以自動幫忙算幾列
arr

# 將二維變一維
arr.reshape(30)

# 索引使用方法
array([[ 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]])
現在有這樣一組數據,需求:找到20
列表寫法:arr[3][2]
數組寫法:arr[3,2]  # 中間通過逗號隔開就可以了

arr數組
array([[ 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]])
arr[1:4,1:4]   # 切片方式
執行結果:
array([[ 7,  8,  9],
      [13, 14, 15],
      [19, 20, 21]])

切片不會拷貝,直接使用的原視圖,如果硬要拷貝,需要在後面加.copy()方法

最後會發現修改切片後的數據影響的依然是原數據。有的人可能對一點機制有一些不理解的地方,像Python中內置的都有賦值的機制,而Numpy去沒有,其實是因為NumPy的設計目的是處理大數據,所以你可以想像一下,假如NumPy堅持要將數據複製來複製去的話會產生何等的性能和內存問題。

現在有這樣一個需求:給一個數組,選出數組種所有大於5的數。

現在有這樣一個需求:給一個數組,選出數組種所有大於5的數。

li = [random.randint(1,10) for _ in range(30)]
a = np.array(li)
a[a>5]
執行結果:
array([10,  7,  7,  9,  7,  9, 10,  9,  6,  8,  7,  6])
-
原理:
a>5會對a中的每一個元素進行判斷,返回一個布爾數組
a > 5的運行結果:
array([False,  True, False,  True,  True, False,  True, False, False,
      False, False, False, False, False, False,  True, False,  True,
      False, False,  True,  True,  True,  True,  True, False, False,
      False, False,  True])
-
布爾型索引:將同樣大小的布爾數組傳進索引,會返回一個有True對應位置的元素的數組

3、通用函數

能對數組中所有元素同時進行運算的函數就是通用函數

常見通用函數:  

能夠接受一個數組的叫做一元函數,接受兩個數組的叫二元函數,結果返回的也是一個數組

函數功能
abs、fabs分別是計算整數和浮點數的絕對值
sqrt計算各元素的平方根
square計算各元素的平方
exp計算各元素的指數e**x
log計算自然對數
sign計算各元素的正負號
ceil計算各元素的ceiling值
floor計算各元素floor值,即小於等於該值的最大整數
rint計算各元素的值四捨五入到最接近的整數,保留dtype
modf將數組的小數部分和整數部分以兩個獨立數組的形式返回,與Python的divmod方法類似
isnan計算各元素的正負號
isinf表示那些元素是無窮的布爾型數組
cos,sin,tan普通型和雙曲型三角函數
函數功能
add將數組中對應的元素相加
subtract從第一個數組中減去第二個數組中的元素
multiply數組元素相乘
divide、floor_divide除法或向下圓整除法(捨棄餘數)
power對第一個數組中的元素A,根據第二個數組中的相應元素B計算A**B
maximum,fmax計算最大值,fmax忽略NAN
miximum,fmix計算最小值,fmin忽略NAN
mod元素的求模計算(除法的餘數)

補充內容:浮點數特殊值

浮點數:float

浮點數有兩個特殊值:

1、nan(Not a Number):不等於任何浮點數(nan != nan)

2、inf(infinity):比任何浮點數都大

3.1、數學統計方法函數功能
sum求和
cumsum求前綴和
mean求平均數
std求標準差
var求方差
min求最小值
max求最大值
argmin求最小值索引
argmax求最大值索引
3.2、隨機數

隨機數生成函數在np.random的子包當中

常用函數

函數功能
rand給定形狀產生隨機數組(0到1之間的數)
randint給定形狀產生隨機整數
chocie給定形狀產生隨機選擇
shuffle與random.shuffle相同
uniform給定形狀產生隨機數組


相關焦點

  • Python數據分析 - Numpy
    前言NUMPY(以下簡稱NP)是Python數據分析必不可少的第三方庫,np的出現一定程度上解決了Python運算性能不佳的問題,同時提供了更加精確的數據類型。如今,np被Python其它科學計算包作為基礎包,已成為Python 數據分析的基礎,可以說,NP是SciPy、Pandas等數據處理或科學計算庫最基本的函數功能庫。因此,理解np的數據類型對python數據分析十分有幫助。下面,本文將介紹Np的常用操作和基本數據類型。NP提供了以下重點功能。
  • python數據分析專題 (9):numpy基礎
    NumPy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。新手可能不理解這句話的含義,這個需要慢慢去理解 。總之,知道numpy是python數據分析最重要的基礎包就可以了。
  • python數據分析:numpy入門
    微信公眾號:學點啥玩點啥小白友好型python數據分析:numpy入門numpy:一個在python中做科學計算的基礎庫,重在數值計算,也是大部分python科學計算庫的基礎庫,多用於在大型、多維數組上執行數值計算。
  • Python 數據分析:Numpy 介紹
    如今,np被Python其它科學計算包作為基礎包,已成為Python 數據分析的基礎,可以說,NP是SciPy、Pandas等數據處理或科學計算庫最基本的函數功能庫。因此,理解np的數據類型對python數據分析十分有幫助。下面,本文將介紹Np的常用操作和基本數據類型。NP提供了以下重點功能。
  • 數據分析-numpy庫快速了解
    NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎2.numpy庫有什麼用numpy用途是很廣的,涉及到數字計算等都可以使用,它的優勢在於底層是C語言開發的數據非常快。 數組對象可以去掉元素間運算所需的循環,使一維向量更像單個數據 設置專門的數組對象,經過優化,可以提升這類應用的運算速度觀察:科學計算中,一個維度所有數據的類型往往相同 數組對象採用相同的數據類型,有助於節省運算和存儲空間具體可以看下面一個例子:(來源嵩天老師案例)3.numpy庫怎麼使用先安裝numpy
  • 再見Numpy,Pandas!又一個數據分析神器橫空出現!
    轉自:菜鳥學Python對於數據分析的工具,想必大家都或多或少的有一定的了解,常見的像是numpy和pandas更是大家日常使用的數據分析工具。但是面對大數據的處理時,像是numpy和pandas的在加載數據時,會看到內存用量的飆升,而dask卻可以將這些大的數據進行並行計算。今天小編就帶領大家學習一個並行的計算庫——dask。
  • Python數據分析之numpy學習(一)
    在學完《廖雪峰Python2.7教程》感覺受益匪淺,掌握了基本的語法之後開始接觸用Python進行數據分析。這裡向大家推薦兩本書《Python數據分析》和《利用Python進行數據分析》,而這兩本書也是目前我正在學習的材料,雖然這兩本書都是基於Python2.x,但對於Python3.x也能正常運行。
  • Python 數據分析:NumPy 基礎知識
    簡介NumPy(Numerical Python)是一個開源的 Python 科學計算擴展庫,主要用來處理任意維度數組與矩陣,通常對於相同的計算任務,使用 NumPy 要比直接使用 Python 基本數據結構要簡單、高效的多。安裝使用 pip install numpy 命令即可。2.
  • 從零開始學Python數據分析【4】-- numpy
    作者:劉順祥個人微信公眾號:每天進步一點點2015前文傳送門:從零開始學Python數據分析
  • Python數據分析之Numpy學習 2——NumPy 基礎 ndarray對象
    Python數據分析之Numpy學習 2 —— NumPy 基礎學習NumPy(Numerical Python)是高性能科學計算和數據分析的基礎包。約定:import numpy as npndarray對象的常用屬性創建ndarray函數說明
  • Python數據分析之numpy數組全解析
    1 什麼是numpy2 numpy數組創建2.1 基本方法:np.array()2.2 通用方法:np.ones()、np.zeros()、np.eye()2.3 讀取外部數據3 numpy中數組的數據類型4 numpy中數組的形狀5 索引與切片5.1 按索引取值
  • 數據分析入門 | numpy基礎:數組和矢量計算
    本文是一篇對《利用Python進行數據分析》的學習筆記,如有錯誤,歡迎評論指正。注意:因為這是本人的第二次學習,所以一些關於numpy的基礎知識會跳過,想要全面學習的小夥伴可以關注我的公眾號,私信文末的關鍵詞獲取pdf版《利用Python進行數據分析》、本文相關代碼以及我個人推薦的相關博客。
  • 學員筆記||Python數據分析之:numpy入門(一)
    (點擊上方公眾號,快速關注一起學AI)這是我學<Python數據分析>時整理出來的numpy基礎速讀筆記,內容大致分為
  • 數據系列教程之numpy( 三)
    數據分析系列教程之numpy( 一)數據分析系列教程之numpy(二)上周講了數據分析入門的前兩節,numpy
  • 使用Python玩轉數據分析(4):掌握NumPy數組及基礎運算
    Numpy操作的數據結構是數組,本文的重點掌握NumPy數組和數組的運算。數據分析用到的數學運算離不開數學運算庫。
  • Python數據分析之NumPy數值計算
    數據類型對象 (dtype)數據類型對象(numpy.dtype 類的實例)用來描述與數組對應的內存區域是如何使用,它描述了數據的以下幾個方面::•數據的類型(整數,浮點數或者 Python 對象)•數據的大小(例如, 整數使用多少個字節存儲)•數據的字節順序(小端法或大端法)•在結構化類型的情況下,欄位的名稱、每個欄位的數據類型和每個欄位所取的內存塊的部分
  • Python數據分析基礎之NumPy學習 (上)
    去找答案。 在使用 numpy 之前,需要引進它,語法如下:這樣你就可以用 numpy 裡面所有的內置方法 (build-in methods) 了,比如求和與均值。但是每次寫 numpy 字數有點多,通常我們給 numpy 起個別名 np,用以下語法,這樣所有出現 numpy 的地方都可以用 np 替代。為什麼要專門學習數組呢?看
  • Python數據分析之numpy學習(二)
    我們接著《Python數據分析之numpy學習(一)》繼續講解有關numpy方面的知識!
  • Python乾貨 | Python數據分析之numpy數組全解析
    1 什麼是numpy2 numpy數組創建2.1 基本方法:np.array()2.2 通用方法:np.ones()、np.zeros()、np.eye()2.3 讀取外部數據3 numpy中數組的數據類型4 numpy中數組的形狀5 索引與切片5.1 按索引取值
  • 從numpy開啟Python數據科學之旅
    另一個路徑是按照數據科學的角度來學習Python,這條路徑是想將R語言的數據處理和分析能力搬到Python上,主要是學習一些可用於數據分析的Python庫,包括NumPy、Pandas、SciPy、Matplotlib、Seaborn和scikit-learn等等。    第一個路徑學習所使用的資料是廖雪峰老師Python3教程 廖雪峰Python3教程 。