Github連結

嗨嗨,如果覺得圖片不清楚,都可以直接參考我的Github喔


攝影師:Aleksey Kuprikov,連結:Pexels



2.0章 NumPy介紹

重要觀念:無論哪種數據類型,要使它變成可分析,第一步就是將他們轉換為數值


1.如何使各類型的數據轉換成可分析的數據集?數據處理的第一步是什麼?

  • 背景:數據集的來源可能非常不同,而不同的來源,可能擁有非常不同的格式,像是文檔、圖像、聲音片段、數值測量等等,這些數據的異質性相當高
  • 方法:將所有的數據抽象成為數值組成的數組,就能對數據集進行分析
  • 舉例:

1.數字圖片,可以被轉為簡單的二維數組

2.聲音片段,可以被轉為一維數組,包括著時間範圍內聲音強度的數值

3.文本,可以使用二進制數字來代表某個單詞或短語的出現頻率


2. NumPy是什麼?

  • 說明:Numerical Python(數值Python)的縮寫,它提供了強大的接口,讓我們存儲和操作密集的數據緩衝區(dense data buffers)
  • Python關聯:NumPy的數組像是Python內建的列表(list)型態,但是NumPy數組在儲存和操作大量數據時,提供了比Python本身更好的效能
  • 重要性:NumPy數組接近是整個Python數據科學領域工具鏈的核心,許多我們所使用的數據分析與處理套件都是以它為基礎構建的


3. 查看已安裝的NumPy版本

import numpy as np
np.__version__ 
						

執行結果

'1.18.1'
						


4. 提醒 - 內建幫助文檔

  • 使用?: 查看所有文檔
np? 
						
  • 使用<Tab>鍵:查看所有的屬性方法
np.<Tab>
						



2.1章 理解Python中的數據類型與運作原理


1. 程式語言的動態與靜態類型

  • 靜態類型的語言:每個變數都要明確的宣告,如C、Java
  • 動態類型的語言:沒有[每個變數都要明確宣告]的規定,變數類型可以進行動態轉換(ex. Int <-> Str),如Python,這也是為什麼Python具有易用性的重要原因

舉例:在C中,我們會將for迴圈宣告成如下:

int total = 0
for(int i = 0; i < 100; i++){
  total +=i
}
						

而在Python中,我們如果寫一樣的程式

total = 0
for i in range(1000):
  total += i
						

重要觀察與觀念釐清:從Python和C上面的範例可以看出差別,在C中每個變數都要明確宣告類型(ex. int),而在Python中的類型卻是動態去推斷的,這代表著在Python中我們可以給任何變數賦予任何數據類型的值,像是:

## Python
x = 6
x = "七"
x = "seven"
						

重要觀念:

在Python的例子中,我們先將變數X賦予整數值,然後又再賦予字串類型的值,變數X會自動從整數轉換成字串類型,但這在C中,可能會導致報出一個編譯錯誤或其他無法預料的錯誤資訊(取決於哪種編譯器的使用)

/*C */
int x = 7
x = "seven" //會報錯
						


2. 動態類型語言 - Python - 易用性背後需要付出的代價

Python擁有數據類型自動轉換的靈活性,但也因為這個特性,Python必須得付出額外的儲存空間代價,Python中的變數不僅僅存儲數據本身,還需要存儲其變數相應的數據類型


3. Python中的整數不僅僅是個整數 - 整數的架構

重要觀念:

  • 標準的Pythªª列表裡面的每個元素都是一個完整的Python物件(object)
  • 推論與解決方法: 1.如果在所有的元素都是同種類型的情況下,就表示列表裡面絕大部分的資訊都是多餘的 2.所以如果我們將數據存儲在一個固定類型的數組中,顯然會更加高效 - NumPy就是固定類型的數組
  • 圖片:比較了動態類型的列表(Python List)與固定類型的列表(NumPy Array)



圖片來源:引用書本

  • 圖片說明:
  1. NumPy Array: 從實作層(implementation level)來看,數組僅僅包含了一個指針指向一個連續的內å21834-eb16-479b-b023-9ac85dadcb69.png" loading="lazy">



    6. Python的固定類型數組 - Fixed-Type Arrays

    Python中提供了相當多樣的選項,讓我們可以高效地存儲數據 - 固定類型數組


    Python中內建的array套件 - 用來創建全部元素都為同一類型的數組

    import array
    x = list(range(10))
    ## i 代表整數類型
    a = array.array('i', x)
    print(a)
    ## f 代表浮點數類型
    b = array.array('f', x)
    print(b)
    														  

    執行結果

    array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    array('f', [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0])
    														  
    • 程式碼中的"i"代表著指定數據類型為整數,而"f"代表指定為浮點數類型的數據



    NumPy Array - ndarray套件

    導入NumPy套件

    import numpy as np
    														  


    範例一:使用np.array將Python列表轉變成數組

    import numpy as np
    np.array([1,4,66,58])
    														  

    執行結果

    array([ 1, 4, 66, 58])
    														  

    重要提醒:NumPy數組與Python列表不同,它只能包含一種數據類型喔


    範例二:如果列表中其中一筆數據元素為浮點數類型,NumPy會試著向上擴展類型(下面的程式碼中將會將整數向上擴展為浮點數)

    import numpy as np
    np.array([6.68,7,9,9])
    														  

    執行結果

    array([6.68, 7. , 9. , 9. ])
    														  


    範例三:如果需要明確指定數據的類型,就需要使用drype參數

    impo„元素的值保留為原有的內存空間值

    np.eye(6)
    														  

    執行結果

    array([[1., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 1.]])
    														  


    範例十: empty用法 - 創建一個為初始化的數組,數組元素的值,數組元素的值保留為原有的內存空間數值

    np.empty(6)
    														  

    執行結果

    array([1., 1., 1., 1., 1., 1.])
    														  



    8.NumPy中可以指定的標準數據類型

    • 由於NumPy數組只能包含一種數據類型,所以他的類型系統和Python並不同,因為對於每一種NumPy類型,它都需要包含著更詳細的類型資訊和限制
    • NumPy是由C建構的,所以它的類型系統與C、Fortran一樣
    • 指定數據類型的兩種寫法


    使用'(類型)'

    np.zeros(10, dtype = 'int32')
    														  

    執行結果

    array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
    														  


    或是np.(類型

    np.zeros(10, dtype = np.int32)
    														  

    執行結果

    array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
    														  


    • 類型圖表