Python數據分析之潘大師(Pandas)入門


       數據分析,作爲大數據時下比較火的行業,想要轉行從事相關工作的人很多很多,那麼在工作中絕對繞不過的三個包是numpy、scipy和pandas。numpy是Python的數值計算擴展,專門用來處理矩陣,它的運算效率比列表更高效。scipy是基於numpy的科學計算包,包括統計、線性代數等工具。pandas是基於numpy的數據分析工具,能更方便的操作大型數據集,那麼什麼是numpy呢?它又是如何使用的呢?
在這裏插入圖片描述

一、Numpy 介紹

NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 與其它協作者共同開發,2005 年,Travis Oliphant 在 Numeric 中結合了另一個同性質的程序庫 Numarray 的特色,並加入了其它擴展而開發了 NumPy。NumPy 爲開放源代碼並且由許多協作者共同維護開發。

NumPy 是一個運行速度非常快的數學庫,主要用於數組的計算,包含:

  • 一個強大的N維數組對象 ndarray
  • 廣播功能函數
  • 整合C/C++/Fortran 代碼的工具
  • 線性代數、傅里葉變換、隨機數生成等功能

二、NumPy 的應用

NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫)一起使用, 這種組合廣泛用於替代 MatLab,是一個強大的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。

SciPy 是一個開源的 Python 算法庫和數學工具包

SciPy 包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。

Matplotlib 是 Python 編程語言及其數值數學擴展包 NumPy 的可視化操作界面。它爲利用通用的圖形用戶界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 嚮應用程序嵌入式繪圖提供了應用程序接口(API)。

學習鏈接

三、Numpy 中的 Ndarray對象

ndarray:他是一系列同類型數據的集合,以0位下標開始進行集合中元素的索引。

ndarray 對象是用於存放同類型元素的多維數組

ndarray 中每個元素在內存中都有相同存儲大小的區域

ndarray 內部由以下內容組成:

  • 一個指向數據(內存或內存映射文件中的一塊數據)的指針
  • 數據類型或者dtype,描述在數組中的固定大小值的格子
  • 一個表示數組形狀(shape)的元組,表示各維度大小的元組
  • 一個跨度元組(stride),其中的整數指的是爲了前進到當前維度下一個元素需要 “跨過” 的字節數

1、ndarray 的內部結構

其中的跨度可以是負數,這樣會使數組在內存中向後移動,比如切片obj[ : :-1] 或者 obj[:, :: -1] 就是如此。

2、創建ndarray對象:

import numpy as np

np.array(object, dtype = None, copy = True, order = None, subok = Fasle, ndmin = 0)

參數說明:

名稱 描述
object 數組或嵌套的數列
dtype 數組元素的數據類型,可選
copy 對象是否需要複製,可選
order 創建數組的樣式,C爲行方向,F爲列方向,A爲任意方向(默認)
subok 默認返回一個與基類類型一致的數組
ndmin 指定生成數組的最小維度

實例:

import numpy as np

#eg_1 單維度
a = np.array([1, 2, 3]) 
print(a)
#結果爲 : [1,2,3]

#eg_2 多維度
a = np.array([[1, 2], [3, 4]]) 
print(a)
'''
結果爲:[[1,2]
		3,4]]

''' 

#eg_3 最小維度
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
print(a)
'''
結果爲: [[1, 2, ]]  指定爲2個維度
'''

#eg_4 dtype參數
a = np.array([1, 2, 3], dtype = complex)
print(a)
'''
結果爲:[1. + 0.j, 2. + 0j, 3. + 0j]
'''

ndarray 對象是由計算機內存的連續一維部分組成,並結合索引模式,將每個元素映射到內存塊中的一個位置。內存塊以行順序或者列順序來保存元素。

四、NumPy 數據類型

numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數據類型對應上,其中部分類型對應爲 Python 內置的類型。

常用 NumPy 基本類型

名稱 描述
bool_ 布爾型數據類型(True 或者 False)
int_ 默認的整數類型(類似於 C 語言中的 long,int32 或 int64)
intc 與 C 的 int 類型一樣,一般是 int32 或 int 64
intp 用於索引的整數類型(類似於 C 的 ssize_t,一般情況下仍然是 int32 或 int64)
int8 字節(-128 to 127)
int16 整數(-32768 to 32767)
int32 整數(-2147483648 to 2147483647)
int64 整數(-9223372036854775808 to 9223372036854775807)
uint8 無符號整數(0 to 255)
uint16 無符號整數(0 to 65535)
uint32 無符號整數(0 to 4294967295)
uint64 無符號整數(0 to 18446744073709551615)
float_ float64 類型的簡寫
float16 半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位
float32 單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位
float64 雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位
complex_ complex128 類型的簡寫,即 128 位複數
complex64 複數,表示雙 32 位浮點數(實數部分和虛數部分)
complex128 複數,表示雙 64 位浮點數(實數部分和虛數部分)

NumPy 的數值類型實際上是 dtype 對象的實例,並對應唯一的字符,包括 np.bool_,np.int32,np.float32,等等

1、數據類型對象(dtype)

數據類型對象是用來描述與數組對應的內存區域如何使用,這依賴如下幾個方面:

  • 數據的類型(整數、浮點數、或者Python對象)

  • 數據的大小(例如 整數使用了多少個字節存儲)

  • 數據的字節順序(小端法或大端法)

  • 在結構化類型的情況下,字段的名稱、對每個字段的數據類型和每個字段所取的內存塊的部分

  • 如果數據類型是子數組,它的形狀和數據類型字節順序是通過數據類型預先設定 ’ < ‘ 或者 ’ > ’ 來決定的。

    • ’ < ‘ 意味着小端法(最小值存儲在最小的地址,即低位組放在最前面)。
    • ’ > '意味着大端法(最重要的字節存儲在最小的地址,即高位組放在最前面)。

    2、創建 dtype 對象

    import numpy as np
    
    np.dtype(obiect, align, copy)
    

參數說明:

名稱 描述
object 要轉換爲的數據類型對象
align 如果爲True,填充字段使其類似C的結構體
copy 複製dtype對象,如果爲False,則是對內置數據類型對象的引用

實例:

import numpy as np


#eg_1 使用標量類型
dt = np.dtype(np.int32)
print(dt)

'''
輸出結果爲: int32
'''

#eg_2 
'''
四種數據類型可以使用字符串來代替:
int8, int16, int32, int64
'i1',  'i2',  'i4',  'i8' 
'''
dt = np.dtype('i4')
print(dt)

'''
輸出結果爲:int32
'''

#eg_3 字節順序標註
dt = np.dtype('<i4')
print(dt)

'''
輸出結果爲:int32
'''

#eg_4 下面的例子展示結構化數據類型的使用,類型字段和對應的實際類型將被創建

#創建結構化數據類型
dt = np.dtype([('age',np.int32)])
print(dt)

'''
輸出結果爲:[('age', 'i1')]
'''

#將數據類型應用於 ndarray 對象
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a)

'''
輸出結果爲:([(10,), (20,), (30,)]
'''

# 類型字段名可以用於存取實際的 age 列
dt = np.dtype([('age',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a)
print(a['age'])
'''
輸出結果爲:[(10,) (20,) (30,)]
		  [10 20 30]
'''

#eg_5 該實例將定義一個結構化類型 student, 包含字符串字段 name, 整數字段 age,以及浮點數字段 marks,並將這個 dtype 應用到 ndarray 對象

student = np.dtype([('name','S20'),('age','i1'),('marks','f4')])
print(student)
'''
輸出結果爲:[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')]
'''

每一個內建類型內部都有一個唯一定義它的字符代碼

字符 對應類型
b 布爾型
i (有符號) 整型
u 無符號整型 integer
f 浮點型
c 複數浮點型
m timedelta(時間間隔)
M datetime(日期時間)
O (Python) 對象
S, a (byte-)字符串
U Unicode
V 原始數據 (void)

希望本文對初學者有所幫助,本文將持續更新,在後面各位讀者將會看到更多Numpy應用,以及Python數據分析的三劍客之二 潘大師(pandas) 的出現,如果錯誤或不足之處,還請各位讀者指出,感謝閱讀!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章