一、Numpy Pandas
1.1 简介
方便数组 矩阵运算
1.2 优势
运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, 是 numpy 的升级版本。
消耗资源少:采用的是矩阵运算,会比 python 自带的字典或者列表快好多。
代码更简洁:大量的数学函数【数组、矩阵】
性能更高效:数组 自己的存储格式,比原生的List好很好。
二、安装Numpy
2.1 anaconda
1.自带了Numpy,继承了非常多的库,首选安装环境。
2.pip install numpy
import numpy as np
三、Numpy vs Python
3.1 数组加法
1.数组 A B为1~N的数字的平方和立方
1 2 4 9 …
1 3 27 64 …
四、Numpy-Array
1.Numpy的核心数据结构,就叫做array就是数组, array对象可以是一维数组, 也可以是多维数组;
2.Python的List也可以实现相同的功能, 但是aray比List的优点在于性能好、 包含数组元数据信息大量的便捷函数;
3.Numpy成为事实上的Scipy. Pandas、 Scikit-Learn. Tensorflow. PaddlePaddle等框架的“通用底层语言”
4.Numpy的array和Python的List的一 个区别,它元素必须都是同一种数据类型,比如都是数字int类型,这也是Numpy高性能的一个原因;
array本身的属性
●shape: 返回一个元组,表示array的维度
●ndim: -个数字,表示array的维度的数目
●size: -个数字,表示array中所有数据元素的数目
●dtype: array中元素的数据类型
4.1 Array创建操作
1.从Python的列表L ist和嵌套列表创建array
2.使用预定函数arange. ones/ones_ like. zeros/zeros_ ike. empty/empty like. fllulll like. eye等函数创建
3.生成随机数的np.random模块构建
import numpy as np
# 1.创建数组
x = np.array([1,2,3,4,5,6,7,8])
y = np.array([[123,456,789],[123,456,789]])
print(x) # [1 2 3 4 5 6 7 8]
print(y) # [[123 456 789] [123 456 789]]
# 2.array数组的属性
print(x.shape) # (8,)
print(y.shape) # (2, 3)
print(y.size) # 6
print(x.dtype) # int32
# 3.创建便捷函数
z1 = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
z2 = np.arange(2,10,2) # [2 4 6 8]
print(np.random.rand()) # 0.8003246658237291
print(np.random.rand(3)) # [0.22203232 0.07369858 0.02427968]
print(np.random.rand(3,2)) # [[0.66349363 0.86112248] [0.11068548 0.89208492] [0.34897576 0.57025273]]
4.2 数组索引查询
1.给已有的数据添加多行,比如增添一些样本数据进去;
2.给已有的数据添加多列,比如增添一些特征进去;
以下操作均可以实现数组合并:
●np.concatenatelarray_ list, axis=0/1) : 沿着指定axis进行数组的合并
●np.vstack或者np.row_ stackarray_ list) :垂直vertically.按行row wise进行数据合并
●np.hstack或者np.column_ stackarray_ Jist) :水平horizontally.按列column wise进行数据合并
Numpy与Pandas数据的相互转换
Pandas是在Numpy基础上建立的非常流行的数据分析类库;
提供了强大针对异构、表格类型数据的处理与分析能力。
本节绍Numpy和Pandas的转换方法:
- Numpy数组怎样输入给Pandas的Series、DataFrame ;
- Pandas的Series、 DataFrame怎样转换成Numpy的数组
import numpy as np
# 1.创建数组
x = np.array([1,2,3,4,5,6,7,8])
y = np.array([[123,456,789],[123,456,789]])
print(x) # [1 2 3 4 5 6 7 8]
print(y) # [[123 456 789] [123 456 789]]
# 2.array数组的属性
print(x.shape) # (8,)
print(y.shape) # (2, 3)
print(y.size) # 6
print(x.dtype) # int32
# 3.创建便捷函数
z1 = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
z2 = np.arange(2,10,2) # [2 4 6 8]
print(np.random.rand()) # 0.8003246658237291
print(np.random.rand(3)) # [0.22203232 0.07369858 0.02427968]
print(np.random.rand(3,2)) # [[0.66349363 0.86112248] [0.11068548 0.89208492] [0.34897576 0.57025273]]
# 4.改变reshape
print(np.arange(10).reshape(2,5).shape) # (2, 5) 以为数组 转换成 2行5列的数组
# 5.索引查询
a = np.arange(10)
b = np.arange(20).reshape(4,5)
print(a[2],a[5],a[-1]) # 2 5 9
print(a[2:4]) # [2 3]
print(a[2:-1]) # [2 3 4 5 6 7 8]
print(a[2:]) # [2 3 4 5 6 7 8 9]
print(a[:6]) # [0 1 2 3 4 5]
print(b[0,0]) # 0
print(b[-1,2]) # 17
print(b[:-1]) # [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]]
print(b[:2,2:4]) # [[2 3] [7 8]]
# 布尔索引
print(a>5) # [False False False False False False True True True True]
print(a[a>5]) # [6 7 8 9]
# 6.random随机函数
np.random.seed(666)
print(np.random.rand(5))
print(np.random.rand(3, 4))
print(np.random.rand(2, 3, 4))
print(np.random.randn(5)) # [-1.20990266 -0.04618272 -0.44118244 0.46953431 0.44325817]
print(np.random.randint(1,10)) # 9
print(np.random.randint(10,30,size=(5,))) # [25 13 29 15 15]
print(np.random.randint(10,30,size=(2,3,4)))
print(np.random.random(5)) # [0.2026436 0.63279787 0.18935861 0.1308497 0.75765845]
print(np.random.random(size=(3,4)))
c = np.arange(10)
print(np.random.shuffle(c))
d = np.random.normal(1,10,10) # 均值为1 方差为10 的10个高斯分布数字
# 7.统计学函数
arr = np.arange(12).reshape(3,4)
print(np.sum(arr)) # 66
print(np.prod(arr)) # 0
print(np.cumsum(arr)) # [ 0 1 3 6 10 15 21 28 36 45 55 66]
print(np.cumprod(arr)) # [0 0 0 0 0 0 0 0 0 0 0 0]
print(np.min(arr)) # 0
print(np.mean(arr)) # 5.5
print(np.std(arr)) # 3.452052529534663
print(np.var(arr)) # 11.916666666666666
# 8.axis=0 代表行 axis=1 代表列
print(arr.sum(axis=0)) # [12 15 18 21]
print(arr.sum(axis=1)) # [6 22 38]
# 9.机器学习标准化 A = (A - mean(A,axis=0))/std(A,axis=0)
mean = np.mean(arr,axis=0) # 计算每列的均值
std = np.std(arr,axis=0) # 计算每列的方差
# 10.数据合并操作
# 不同来源数据的合并,行【数据】列【特征】
e = np.arange(6).reshape(2,3)
f = np.random.randint(10,20,size=(4,3))
print(np.concatenate([e, f]))
print(np.vstack([e, f]))
print(np.row_stack([e, f]))
# 列合并
g = np.arange(12).reshape(3,4)
h = np.random.randint(10,20,size=(3,2))
np.concatenate([e, f],axis=1)
np.hstack([e, f])
np.column_stack([e, f])
# 11.计算逆矩阵求解线性方程组
A = np.array([
[1,1,1],
[0,2,5],
[2,5,-1]
])
B = np.linalg.inv(A) # B为A的逆矩阵
print(np.matmul(A, B))
# 12.Numpy 与 Pandas 数据转换
# 13.Numpy输入到sklearn