帶你深入AI(7)- 深度學習重要Python庫
系列文章,請多關注
Tensorflow原始碼解析1 – 核心架構和原始碼結構
自然語言處理1 – 分詞
帶你深入AI(1) - 深度學習模型訓練痛點及解決方法
帶你深入AI(2)- 深度學習啟用函式,準確率,優化方法等總結
帶你深入AI(3)- 物體分類領域:AlexNet VGG Inception ResNet mobileNet
帶你深入AI(4)- 目標檢測領域:R-CNN,faster R-CNN,yolo,SSD, yoloV2
帶你深入AI(5)- 自然語言處理領域:RNN LSTM GRU
帶你深入AI(6)- 詳解bazel
帶你深入AI(7)- 深度學習重要Python庫
1 pandas
pandas用來讀取csv等帶有標籤的列和索引,從中匯入資料,並快速的對資料進行過濾和轉換。
1.1 資料型別
分為Series和DataFrame兩種。Series為一維的資料型別,每個元素都有自己的標籤。
DataFrame為二維的,表格型的資料結構。
1.2 資料匯入
df = pd.read_csv('uk_rain_2014.csv', header=0)
header指定了哪一行是列名,如果沒有列名,則設定為None
1.3 資料讀取
檢視前 x 行的資料:
# Getting first x rows. df.head(5)
檢視最後幾行:
# Getting last x rows.
df.tail(5)
檢視列名
df.columns
檢視總行數
len(df)
1.4 檢視列和按列過濾
檢視某一列,通過列名來獲取
# Getting a column by label
df['question1']
過濾
# Filtering by multiple conditionals
df[(df.is_duplicated == 1) & (df.question2.str.startswith("花唄"))]
1.5 檢視行
按照行號索引檢視行,從0開始
# Getting a row via a numerical index
df.iloc[30]
df.iloc[0:2] 檢視第0行和第一行
df.iloc[:2] 檢視前兩行,也就是第0行和第一行。等同於df.iloc[0:2]
按行號排序,可以升序也可以降序
df.sort_index().head(5)
df.sort_index(ascending=False).head(5) #inplace=True to apple the sorting in place
1.6 合併資料集
# 將兩個相關聯的資料集合並在一起
rain_jpn = pd.read_csv('jpn_rain.csv')
rain_jpn.columns = ['year', 'jpn_rainfall']
uk_jpn_rain = df.merge(rain_jpn, on='year') # on指定了需要合併的列
uk_jpn_rain.head(5)
1.7 儲存資料集
# 儲存資料集
df.to_csv('uk_rain.csv')
1.8 繪圖
# 利用plot繪圖
uk_jpn_rain.plot(x='year', y=['rain_octsep', 'jpn_rainfall'])
2 numpy
2.1 陣列的建立
# 一維陣列建立
a = np.array([0, 1, 2, 3, 4]) # [0 1 2 3 4]
c = np.arange(5) # [0 1 2 3 4] 連續陣列
d = np.linspace(0, 2*np.pi, 5) # [ 0. 1.57079633 3.14159265 4.71238898 6.28318531]
# 多維陣列建立
a = np.array([[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]])
print(a[2,4]) # >>>25
# 全1和全0
e = np.ones((4), dtype=np.int64) # array([1, 1, 1, 1]) 全1,形狀為第一個引數shape,為一個元組
f = np.ones_like(a, dtype=np.float) # array([1., 1., 1., 1., 1.]) 全1,形狀和陣列a相同
g = np.zeros((4), dtype=np.int64) # array([0, 0, 0, 0]), 全0
h = np.zeros_like(a, dtype=np.float) # array([0., 0., 0., 0., 0.]) 全0
陣列的索引和Pythonz中的list列表相同,也可以使用切片等功能。
2.2 ndarray的屬性和資料型別
# 陣列屬性
print(type(a)) # >>><class 'numpy.ndarray'>
print(a.dtype) # >>>int64 # 每個資料的型別
print(a.size) # >>>25 # 總共多少個數據
print(a.shape) # >>>(5, 5) # 行列形狀
print(a.itemsize) # >>>8 # 每個資料佔用的位元組數,因為是int64,故佔8個位元組
print(a.ndim) # >>>2 # 陣列有多少維
print(a.nbytes) # >>>200
# np資料型別
np.int8 np.np.uint8, np.int16 np.uint16, np.int32 np.uint32, np.int64 np.uint64
np.float16, np.float32, np.float64, np.float128
np.complex64, np.complex128, np.complex256
np.bool
np.str
np.object
2.3 逐點運算
# 逐點進行加減乘除和乘方, 以及布林運算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5 7 9]
print(a - b) # [-3, -3, -3]
print(a * b) # [ 4, 10, 18]
print(a / b) # [0, 0, 0]
print(a ** 2) # [1, 4, 9]
print(a > b) # [False, False, False]
print(a < b) # [ True, True, True]
# 一元運算
a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b = np.array([-1.1, -0.6, -0.5, -0.1, 0.1, 0.5, 0.6, 1.1])
np.abs(b) # 絕對值
np.sqrt(a) # 開方
np.square(a) # 平方 x^2
np.exp(a) # 指數e^x
np.log(a) # 對數 log(x)
np.sign(b) # 正負號
np.ceil(b) # 向上取整
np.floor(b) # 向下取整
np.round(b) # 浮點數四捨五入, array([-1., -1., -0., -0., 0., 0., 1., 1.])
np.cos(b) np.sin(b) np.tan(b) np.tanh(b) # 三角函式
np.arccos(b), np.arcsin(b), np.arctan(b) # 反三角函式
np.clip(a, 2, 5) # array([2, 2, 2, 3, 4, 5, 5, 5, 5, 5]), 最小值2, 最大值5
2.4 統計相關運算
a = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.sum(a) # 總和,45
np.min(a) # >>>0
np.max(a) # >>>9
np.mean(a) # 平均值 4.5
np.std(a) # 標準差 2.87
np.var(a) # 方差 8.25
np.argmin(a) np.argmax(a) # 最小值和最大值對應的下標
2.5 切片和索引
# 切片,行和列兩個方向上分別切片即可。切片 [start: end(not include): step]
a = np.array([[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]])
print(a[0, 1:4]) # >>>[12 13 14]
print(a[1:4, 0]) # >>>[16 21 26]
print(a[::2,::2]) # >>>[[11 13 15]
# [21 23 25]
# [31 33 35]]
print(a[:, 1]) # >>>[12 17 22 27 32]
# 布林索引,返回為True的元素。也稱條件索引
a = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(a > 5) # [False, False, False, False, False, False, True, True, True, True]
print(a[a>5]) # [6, 7, 8, 9]
# where條件索引
print(np.where(a < 4)) # (array([0, 1, 2, 3]),)
print(np.where(a < 4)[0]) # array([0, 1, 2, 3])
2.6 集合運算
x = np.array([[1,6,2],[6,1,3],[1,5,2]])
y = np.array([1,6,5])
np.unique(x) # [1,2,3,5,6] x陣列中的唯一數值
np.in1d(x, y) # [ True True False True True False True True False] x的元素是否包含於y中
np.setdiff1d(x, y) # [2, 3] 在x而不在y中的元素,也就是差集
np.intersect1d(x, y) # [1 5 6] 在x且在y中的元素,也就是交集
np.union1d(x, y) # [1, 2,3, 5, 6] 在x或在y中的元素,也就是並集
2.7 線性代數運算
x = np.array([[1,6,2],[6,1,3],[1,5,2]])
np.diag(x) # array([1, 1, 2]), 對角向量
np.trace(x) # 4, 對角向量的和
np.invert(x) # 逆矩陣,array([[-2, -7, -3], [-7, -2, -4], [-2, -6, -3]])
np.rank(x) # x, 矩陣的秩
np.ndim(x) # 2, 矩陣維度
np.dot(a, b) # 點乘, 對應位置元素相乘後在相加
2.8 隨機數
利用np.random模組生成隨機數
np.random.randint(start, end, size) # 產生start到end(不包含)範圍內size個隨機整數
np.random.normal(size=(2, 2)) # 生成正態分佈 array([[ 0.72212515, -1.77705124],[-0.54233353, -0.53839069]])
np.random.uniform(size=(2, 2)) # 生成均勻分佈 array([[0.34487134, 0.82949115],[0.32910195, 0.15248309]])
2.9 陣列重塑(變形)
# 形狀變換,可以從一維變為二維或三維
a = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a.reshape(2, 5) # array([[0, 1, 2, 3, 4],[5, 6, 7, 8, 9]])
# 矩陣轉置
a = np.array([[1, 2], [3, 4]])
a.tranpose() # array([[1, 3],[2, 4]]) 矩陣轉置
# 拉平,變為一維
a.flatten() # [1, 2, 3, 4]
2.10 數組合並和拆分(concat, split)
x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.array([[7, 8, 9], [10, 11, 12]])
# concat連線,0表示行,1表示列。
np.concatenate([x,y], axis=0) # array([[ 1, 2, 3],[ 4, 5, 6],[ 7, 8, 9],[10, 11, 12]])
np.concatenate([x,y], axis=1) # array([[ 1, 2, 3, 7, 8, 9],[ 4, 5, 6, 10, 11, 12]])
# vstack垂直堆疊,可以理解為按行concat。hstack水平堆疊,可以理解為按列concat
np.vstack((x, y)) # array([[ 1, 2, 3],[ 4, 5, 6],[ 7, 8, 9],[10, 11, 12]])
np.hstack((x, y)) # array([[ 1, 2, 3, 7, 8, 9],[ 4, 5, 6, 10, 11, 12]])
# split分隔,0表示按行,1表示按列
np.split(x, 2, axis=0) # [array([[1, 2, 3]]), array([[4, 5, 6]])]
np.split(x, 3, axis=1) # [array([[1],[4]]), array([[2],[5]]), array([[3],[6]])]
3 matplotlib
繪圖就不多說了,知道幾個API就夠了
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 50)
plt.plot(x, np.sin(x)) # 繪圖,告知x軸和y軸即可。如果沒有輸入x軸,則將陣列的index作為x軸
plt.plot(x, np.sin(2*x))
plt.hist(x, 50) # 繪製直方圖
plt.close("all") # 關閉繪圖
4 scipy
scipy包含了科學計算中常見的各個工具箱,其子模組十分豐富,可以看做是Python版的MATLAB。其子模組主要有。
- scipy.cluster:向量量化
- scipy.constants: 數學物理常量
- scipy.fftpack:fft傅立葉變換
- scipy.integrate: 積分
- scipy.interpolate 插值
- scipy.io: 資料輸入輸出
- scipy.linalg: 線性代數程式
- scipy.ndimage: n維影象包
- scipy.optimize: 優化相關
- scipy.signal: 訊號處理
- scipy.sparse: 稀疏矩陣
- scipy.stats: 統計
5 其他
5.1 gensim
Python自然語言處理庫,將文件根據model轉換為詞向量表示。
5.2 itertools
操作迭代物件
5.3 jieba
分詞工具,有精確模式(預設)、全模式和搜尋引擎模式三種模式。
全模式是能分多少詞就分多少。
import jieba
a = u'花唄還款什麼時候。'
cut= jieba.cut(a)
print ",".join(cut) # 花,唄,還款,什麼,時候,。
5.4 pickle
物件持久化用的
pickle.dump(obj, file[, protocol])
pickle.load(file)
系列文章,請多關注
Tensorflow原始碼解析1 – 核心架構和原始碼結構
自然語言處理1 – 分詞
帶你深入AI(1) - 深度學習模型訓練痛點及解決方法
帶你深入AI(2)- 深度學習啟用函式,準確率,優化方法等總結
帶你深入AI(3)- 物體分類領域:AlexNet VGG Inception ResNet mobileNet
帶你深入AI(4)- 目標檢測領域:R-CNN,faster R-CNN,yolo,SSD, yoloV2
帶你深入AI(5)- 自然語言處理領域:RNN LSTM GRU
帶你深入AI(6)- 詳解bazel
帶你深入AI(7)- 深度學習重要Python庫