带你深入AI(7)- 深度学习重要Python库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013510838/article/details/80412127

系列文章,请多关注
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。其子模块主要有。

  1. scipy.cluster:矢量量化
  2. scipy.constants: 数学物理常量
  3. scipy.fftpack:fft傅里叶变换
  4. scipy.integrate: 积分
  5. scipy.interpolate 插值
  6. scipy.io: 数据输入输出
  7. scipy.linalg: 线性代数程序
  8. scipy.ndimage: n维图像包
  9. scipy.optimize: 优化相关
  10. scipy.signal: 信号处理
  11. scipy.sparse: 稀疏矩阵
  12. 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库

猜你喜欢

转载自blog.csdn.net/u013510838/article/details/80412127