python数据建模优缺点_Python 数据建模总结和实战(共两万字)

前言:对于初学者来说,Python 是一个不错的语言,Python 语言简单易懂,而且有着丰富的数据库以及活跃的社区,对于大数据分析有很明显的帮助。学 Python 数据分析的,好好看我长篇文章。

Numpy

NumPy 软件包是 Python 生态系统中数据分析、机器学习和科学计算的主力军。它极大地简化了向量和矩阵的操作处理。Python 的一些主要软件包(如 scikit-learn、scipy、pandas 和 tensorflow)都以 NumPy 作为其架构的基础部分。除了能对数值数据进行切片(slice)和切块(dice)之外,使用 NumPy 还能为处理和调试上述库中的高级实例带来极大便利。

本节将介绍使用 NumPy 的一些主要常见方法,示例讲解如下。

创建、修改 array、shape 与 reshape 函数

>>> # 导入 numpy

>>> import numpy as np

>>> a = np.array([1, 2, 3])

>>> b = np.array([[1, 2, 3], [4, 5, 6]])

>>> a.dtype

int32

>>> b.shape

(2 3)

>>> 将 b 的第一行第一列的 5 改为 10

>>> b[1,1]=10

>>> b

array([[ 1, 2, 3],

[ 4, 10, 6]])

>>> b.reshape(3,2)

array([[ 1, 2],

[ 3, 4],

[10, 6]])

函数 shape 属性获得数组的大小,通过 dtype 获得元素的属性。如果你想对数组里的数值进行修改的话,直接赋值即可,注意下标是从 0 开始计的。

数组切片和选取

Numpy 的切片和 Python 列表完全一样。一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step),当只有一个“:”时,默认第三个参数 step=1。

如下图所示,以 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 为例:

>>> a = np.arange(10)

>>> a

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> a * 10

array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

>>> a[2:8:2]

array([2, 4, 6])

>>> a[3:5] = a[3:5] *10

>>> a

array([ 0, 1, 2, 30, 40, 5, 6, 7, 8, 9])

>>> import numpy as np

>>> # 二维

>>> b = np.array([[1,2,3],[4,5,6]])

>>> b

array([[1, 2, 3],

[4, 5, 6]])

>>> b[:,1]

array([2, 5])

>>> b[:,0:2]

array([[1, 2],

[4, 5]])

数组的布尔值运用

布尔值也是 Python 中的一种数据类型,专门用来用于些逻辑判断。常用的布尔值分别有:~ 反、& 并、| 或 。

现在我们新建一个数组 a,现在取出其中元素值大于 3 且小于 6 的所有元素,并改为 0,其他为 1:

>>> a = np.arange(0,10,1)

>>> a

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> np.sum(a>5)

4

>>> np.sum(~(a>5))

6

>>> a[(a>3)&(a<6)] = 0

>>> a[~(a>3)&(a<6)] = 1

>>> a

array([1, 1, 1, 1, 1, 1, 6, 7, 8, 9])

axis 的应用

如下图所示,axis 实际上就是表示轴。对于一个二维空间,axis=1 代表横轴,axis=0 按照竖轴。

>>> a = np.array([[1,4],[3,2]])

>>> b = np.array([[5,6],[7,8]])

>>> concatenate 的将两个 Array 聚合起来

>>> np.concatenate((a,b),axis=0)

array([[1, 4],

[3, 2],

[5, 6],

[7, 8]])

>>> np.concatenate((a,b),axis=1)

array([[1, 4, 5, 6],

[3, 2, 7, 8]])

>>> 如果排序的时候,没有指定 axis,默认 axis=1

>>> np.sort(a)

array([[1, 4],

[2, 3]])

>>> np.sort(a, axis=0)

array([[1, 2],

[3, 4]])

>>> 如果需要运算,需要指定对应的 axis

>>> a.sum()

10

>>> a.sum(axis=0)

array([4, 6])

>>> a.sum(axis=1)

array([5, 5])

>>> 通过 ndim 查看 array 的维度

>>> a.ndim

2

数列的创建和算术运算

等比数列:logspace 中,开始点和结束点是 10 的幂,0 代表 10 的 0 次方,9 代表 10 的 9 次方。生成从 10 的 a 次方到 10 的 b 次方之间按对数等分的 n 个元素的行向量。

等差数列:linspace 是 linear space 的缩写,代表线性等分向量的含义。linspace() 通过指定 初始值、终值、元素个数 来创建等差数列的一维数组。注意:这个区间的端点可以任意的被排除在外。

通过 NumPy 可以自由地创建等差数组,同时也可以进行加、减、乘、除、求 n 次方和取余数。同时也可以进行加、减、乘、除、求 n 次方和取余数。

>>> # 在 100 和 1000 中生成 num=4 的等比序列

>>> np.logspace(2.0, 3.0, num=4)

array([ 100. , 215.443469 , 464.15888336, 1000. ])

>>> # endpoint=Falseb 表示 1000 不能在序列中

>>> np.logspace(2.0, 3.0, num=4, endpoint=False)

array([100. , 177.827941 , 316.22776602, 562.34132519])

>>> # base=2.0 表示不再以 10 的幂,而是以 2 作为幂

>>> np.logspace(2.0, 3.0, num=4, base=2.0)

array([4. , 5.0396842 , 6.34960421, 8. ])

>>> a = np.linspace(1,10,5)

>>> b = np.linspace(10,1,5)

>>> a

array([ 1. , 3.25, 5.5 , 7.75, 10. ])

>>> b

array([10. , 7.75, 5.5 , 3.25, 1. ])

>>> np.add(a, b) #加法

array([11., 11., 11., 11., 11.])

>>> np.subtract(a, b) #减法

array([-9. , -4.5, 0. , 4.5, 9. ])

>>> np.multiply(a, b) #乘法

array([10. , 25.1875, 30.25 , 25.1875, 10. ])

>>> np.divide(a, b) #除法

array([ 0.1 , 0.41935484, 1. , 2.38461538, 10. ])

>>> np.power(a,b) #乘方

array([1.00000000e+00, 9.27034822e+03, 1.18030648e+04, 7.76659275e+02,

1.00000000e+01])

>>> np.remainder(a, b) #取余数

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

重要 random 的函数

rand:根据给定维度生成 [0,1) 之间的数据,包含 0,不包含 1

randn:返回均值=0,标准差=1,具有标准正态分布

normal:normal 是正态分布,但可以修改均值和标准差,第一个是均值,第二个是标准差,还可以传入 size

randint:返回随机整数,范围区间为[low,high),包含 low,不包含 high

choice:从给定的区间生成相对应个随机数

>>> np.random.rand(3,4)

array([[0.00910588, 0.26719767, 0.96195156, 0.66325403],

[0.77108254, 0.73961889, 0.4332318 , 0.6130871 ],

[0.24454375, 0.96344155, 0.91942036, 0.16383334]])

>>>np.random.randn(3,4)

array([[0.31124855, 0.3970361 , 0.86046835, 0.36587692],

[0.94543601, 0.84770308, 0.13784751, 0.69106204],

[0.80672147, 0.78469807, 0.12474456, 0.38386812]])

>>> np.random.normal(5,1,size=(3, 4))

array([[5.05484712, 5.11948961, 4.74160469, 5.73573086],

[4.93939144, 6.52482878, 3.83668001, 6.62767368],

[4.74056406, 4.00017621, 6.32218076, 5.48900825]])

>>> np.random.randint(1, 10, 10)

array([3, 2, 6, 5, 7, 6, 6, 5, 1, 3])

>>> # 从给定的 0 到 3 中生成 3 个随机数

>>> np.random.choice(3,3)

array([2, 0, 2])

如果想每次都固定随机数,需要设置 seed 随机种子:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值