Python数据科学
1.Numpy
Numpy是python提供的对数据处理的一个包,数据存储方式类似于python列表,但是数据的类型必须一致。Python的list可以包含不同类型。
导入Numpy使用:import numpy as np
1.1Numpy创建数组
实例1:
#创建数组
def numpy1():
"""
python numpy创建数组
numpy数组中数据类型相同
"""
#创建0数组
array0 = np.zeros(5,dtype=int)
print(array0)
#通过列表,创建数组
array1 = np.array([1,2,4,8,5])
print(array1)
#不指定类型,会自动向上转型,保持类型一致
array2 = np.array([1,3,1.2,3])
print(array2)
# 指定数据类型
array3 = np.array([1,3,1.3],dtype='float')
print(array3)
#创建多维数组
range_list = [range(i,i+3) for i in [2,4,6]]
array5 = np.array(range_list)
print(array5)
#创建3x5的浮点数组,全为1.0
array6 = np.ones((3,5),dtype=float)
print(array6)
#创建2x5的整数数组,全为10
array7 = np.full((2,5),10)
print(array7)
#arange创建数组,start = 0,stop = 20,step = 4
array8 = np.arange(0,20,4)
print(array8)
#创建一个线性数组,start = 0 stop = 20 size = 5
array9 = np.linspace(0,20,5)
print(array9)
#创建一个随机数组(4,2)
array10 = np.random.random((4,2))
print(array10)
#创建一个随机int类型数组
array11 = np.random.randint(1,5,(3,2))
print(array11)
#创建一个均值为1,方差为4的数组
#正态分布数组4x5
array12 = np.random.normal(1,4,(4,5))
print(array12)
#创建单位矩阵,4x4
array13 = np.eye(4)
print(array13)
#创建一个未初始化数组
array14 = np.empty(4,dtype=int)
print(array14)
1.2Numpy数据类型
Numpy只能包含同一类型值,支持的标准数据类型
实例1:
def numpy2():
'''
numpy的数据类型
:return:
'''
#bool_ 布尔类型
#int_ 整型
#intc_ C语言整型
#intp_ 索引的整型
#int8 1字节长度整型 int16 int32 int64
#uint8 无符号整型 uint16 uint32 uint64
#float_ 浮点
#float16 半精度浮点
#float32 单精度浮点
#float64 双精度浮点
#complex_ 复数
#complex64 两个32位浮点表示
#complex128 两个64位浮点表示
array1 = np.zeros(10,dtype=np.float16)
print(array1)
array2 = np.ones((3,5),dtype="float_")
print(array2)
1.3Numpy数组属性
实例:
def numpy3():
'''
numpy数组属性
:return:
'''
#设置随机数种子
np.random.seed(0)
array1 = np.random.randint(10,size=5)
print(array1)
#二维数组
array2 = np.random.randint(10,size=(3,5))
print(array2)
#三维数组
array3 = np.random.randint(10,size=(4,3,2))
print(array3)
#numpy的属性
#维度
print(array3.ndim)
#size,形状
print(array3.shape)
#总大小
print(array3.size)
#数据类型
print(array3.dtype)
#每个数组元素字节大小
print(array3.itemsize)
#整个数组字节大小
print(array3.nbytes)
1.4Numpy数组索引
实例:
def numpy4():
'''
numpy数组索引,切片
:return:
'''
array1 = np.random.randint(10, size=(20))
print(array1)
#和python列表索引类似,0开始,-1结束
print(array1[2])
print(array1[-2])
#多维数组
array2 = np.random.randint(10,size=(5,5))
print(array2)
#第1行第5列
print(array2[1,-1])
#第0行第2列
print(array2[0,2])
#可以通过索引修改指定位置值
array2[0,3] = 10
print(array2)
#数组切片
#start=1,end =-1,step=2
array3 = array1[1:-1:2]
print(array3)
#索引5以前的数据
array4 = array1[:5]
print(array4)
#索引3到倒数第二个数
array5 = array1[3:-2]
print(array5)
#逆序数组
array6 = array1[::-1]
print(array6)
#每隔3位逆位
print(array1[::-3])
#多维数组切片
#前三行,前三列
array7 = array2[:3,:3]
print(array7)
#前三行,所有列,每隔两列
array8 = array2[:3,::2]
print(array8)
#行列逆序
array9 = array2[::-1,::-1]
print(array9)
#获取单行
array10 = array2[0,:]
print(array10)
#获取单列
array11 = array2[:,2]
print(array11)
#获取的切片值修改后,原数组值也会修改
array10[3] = 0
print(array2)
#copy方式获取切片,修改切片值,不会影响原数组值
array12 = array2[0,:].copy()
array12[3] = 10
print(array2)
#组合索引
array13 = np.random.randint(10,size=(6,6))
print(array13)
#获取行值1,3,2 行数据
array14 = array13[[1,3,2]]
print(array14)
#获取第二行,第5,4,2列值
array15 = array13[2,[5,4,2]]
print(array15)
1.5Numpy数组变形
实例:
def numpy5():
'''
numpy数组变形,拼接
:return:
'''
array1 = np.arange(1,10)
print(array1)
#转换为3x3矩阵,大小必须保持一致
array2 = array1.reshape((3,3))
print(array2)
#将一维数组转换为行或列向量
#行向量
array3 = array1[np.newaxis,:]
print(array3)
#列向量
array4 = array1[:,np.newaxis]
print(array4)
#数组拼接
array5 = np.arange(1,20,3)
array6 = np.arange(1,10,1)
array7 = np.concatenate([array5,array6])
print(array7)
#多维数组拼接
array8 = np.random.randint(10,size =(3,2))
array9 = np.random.randint(10,size =(3,2))
#垂直拼接,列必须相等
array10 = np.concatenate([array8,array9])
#水平拼接,行必须相等
array11 = np.concatenate([array8,array9],axis=1)
#垂直拼接
array12 = np.vstack([array8,array9])
#水平拼接
array13 = np.hstack([array8,array9])
print(array8)
print(array9)
print(array10)
print(array11)
#数组分裂
array14 = np.arange(1,20,2)
print(array14)
#参数2:拆分的索引位置列表
a1,a2,a3 = np.split(array14,[3,5])
print(a1,a2,a3)
#垂直拆分
array15 = np.random.randint(10,size=(5,5))
a11,a22,a33 = np.vsplit(array15,[2,4])
print(a11,a22,a33)
#水平拆分
h11,h22 = np.hsplit(array15,[3])
print(h11,h22)
1.5Numpy的运算
包含Numpy中基础加减乘除运算,三角函数,指数运算,聚合运算,布尔运算,排序
实例:
def numpy6():
'''
numpy的运算
:return:
'''
#通用函数
#各个运算符的实现,通过numpy的通用函数
#运算符:+,-,*,/
array1 = np.array([1,2,4,6])
array2 = array1 + 5
print(array2)
array3 = array1 - 2
print(array3)
array4 = array1 * 2
print(array4)
array5 = array1 / 3
print(array5)
#整除
array6 = array1 // 3
print(array6)
#负号
array7 = -array1
print(array7)
#** 平方
array8 = array1 ** 2
print(array8)
#% 取余
array9 = array1 % 2
print(array9)
#通用函数
#+
array21 = np.add(array1,5)
print(array21)
#-
array22 = np.subtract(array1,2)
print(array22)
#负号
array23 = np.negative(array1)
print(array23)
#*
array24 = np.multiply(array1,4)
print(array24)
#/
array25 = np.divide(array1,3)
print(array25)
#整除,//
array26 = np.floor_divide(array1,2)
print(array26)
#**
array27 = np.power(array1,3)
print(array27)
#% 取余
array28 = np.mod(array1,4)
print(array28)
#获取绝对值
array31 = np.abs(np.array([-1,0,-4,5]))
print(array31)
array32 = np.absolute(np.array([-1,0,-4,5]))
print(array32)
array33 = abs(np.array([-1,0,-4,5]))
print(array33)
#三角函数
array41 = np.linspace(0,np.pi,3)
print(np.sin(array41))
print(np.cos(array41))
print(np.tan(array41))
#反三角函数
array42 = np.array([-1,0,1])
print(np.arcsin(array42))
print(np.arccos(array42))
print(np.arctan(array42))
#指数运算
array51 = np.array([2,5,1,6])
#底数为e
print(np.exp(array51))
#底数为2
print(np.exp2(array51))
#底数为3
print(np.power(3,array51))
#指数逆运算
array52 = np.array([3,5,20,66])
print(np.log(array52))
print(np.log2(array52))
print(np.log10(array52))
#指定运算结果位置
array61 = np.array([1,3,6,3])
array62 = np.empty(4)
array63 = np.zeros(8)
np.multiply(array61,2,out=array62)
print(array62)
#每隔2位插入
np.multiply(array61,2,out=array63[::2])
array63[::2] = array61 * 2
print(array63)
#聚合运算
array71 = np.array([-1,5,-4,4])
#求和
print(np.add.reduce(array71))
print(np.sum(array71))
#类乘
print(np.multiply.reduce(array71))
#外积
print(np.add.outer(array71,array71))
#最大最小值
array81 = np.array([3,55,24,29,33])
print(np.max(array81))
print(np.min(array81))
#多维度聚合
array82 = np.random.randint(10,size=(4,3))
print(array82)
#每一列最小
print(array82.min(axis=0))
#每一行最小
print(array82.min(axis=1))
#乘积
print(np.prod(array82,axis=0))
#NaN安全计算乘积
print(np.nanprod(array81))
#均值
print(np.mean(array81))
print(np.nanmean(array81))
#标准差
print(np.std(array81))
print(np.nanstd(array81))
#方差
print(np.var(array81))
print(np.nanvar(array81))
#中位数
print(np.median(array81))
print(np.nanmedian(array81))
#最小值索引
print(np.argmin(array81))
print(np.nanargmin(array81))
#最大值索引
print(np.argmax(array81))
print(np.nanargmax(array81))
#分位值
#四分之一
print(np.percentile(array81,25))
#四分之三
print(np.percentile(array81,75))
#验证任何元素是否为真
print(np.any(array81))
#验证所有元素是否为真
print(np.all(array81))
#布尔运算
array91 = np.array([1,5,3,5,2,6])
#布尔运算 < > <= >= == !=
array92 = array91 < 3
array92 = np.less(array91,3)
#等于
array93 = np.equal(array91,3)
#不等于
array94 = np.not_equal(array91,3)
#小于等于
array95 = np.less_equal(array91,3)
#大于
array96 = np.greater(array91,3)
#大于等于
array97 = np.greater_equal(array91,3)
#操作布尔数组
#统计True个数
print(np.count_nonzero(array92))
#是否存在任意数大于3
print(np.any(array91>3))
#是否所有数大于3
print(np.all(array91>3))
#布尔运算符
#& 与
#| 或
#^ 异或
#~ 非
print(np.any(array91==3) & np.any(array91>4))
#排序
array100 = np.array([10,20,22,2,5,29])
print(array100.sort())
#返回排序后数组索引
print(array100.argsort())
array101 = np.random.randint(10,size=(4,4))
print(array101)
#每列排序
print(np.sort(array101,axis=0))
#每行排序
print(np.sort(array101,axis=1))
#部分排序
#每行前3个值最小,其余不变
print(np.partition(array101,3,axis=1))
#索引
print(np.argpartition(array101,3,axis=1))