• python数据分析(numpy)


    目录

    1. numpy详解

            1.1 array函数使用

            1.2 arange函数的使用

            1.3 linspace函数使用

            1.4 logspace函数使用

            1.5 数组元素的属性

            1.6 数组的切片和索引

            1.7 numpy函数

            1.8 numpy文件操作

            1.9 numpy随机数

            2.0 其它函数


    1. numpy详解

            1.1 array函数使用

            numpy.array(object,dtype=none,copy=True,order=none,subok=False,ndmin=0)

            参数说明:

    • 1.object:表示一个数据序列
    • 2.dtype:可以修改数据类型
    • 3.copy:数组能否被复制
    • 4.ndmin:指定数据维度
    • 5.subok:默认使用object内部数据类型

            在使用numpy内部模块时,都需要导入模块:

    import numpy as np
    •  array在传入数据序列时,可以是列表,元组或者是迭代器,如:
    1. # 放入列表
    2. a = np.array([1, 2, 3, 4, 5])
    3. print(type(a)) # 转变成numpy数组类型
    4. # 放入元组
    5. b = np.array((1, 2, 3, 4, 5))
    6. print(type(b)) # 转变成numpy数组类型
    7. # 放入迭代器
    8. c = np.array(range(10)) # 把迭代器的数据保存为一个数组
    9. print(c)
    • 在传入的数据序列中如果有一个元素是浮点型,所有的元素都会被转变为数组的浮点型,可以使用dtype参数强制转换为int类型,如果是浮点类型转换为整形会向下取整:
    1. # 浮点型
    2. e = np.array([1, 2, 3.14, 4, 5]) # 有一个为浮点型都会转换成浮点型
    3. print(e)
    4. e = np.array([1, 2, 3.14, 4, 5], dtype='int') # 使用dtype强制转换为int类型
    • 当object参数传入两个元素相同的序列时,会变成一个二维数据,使用 数组名.ndim可以查看数组的维度,使用 数组名.shape 可以查看数组的行列情况:
      1. # 嵌套数组
      2. f = np.array([[1, 2, 3, 4, 5], ('a', 'b', 'c', 'd', 'e')]) # 两个序列的数据数量一样才可以转换成二维的
      3. print(f.ndim) # 查看维度
      4. print(f.shape) # 查看行列情况
      5. print(f)
    •  array在复制中,使用 arr2 = np.array(arr1) 这样的复制类型,是一种深拷贝,拷贝出来的地址是不一样的,使用 arr2 = arr1 这样的复制类型,是一种浅拷贝,只要有一个元素改变,另一个也会改变:
      1. # 复制操作
      2. arr1 = np.array([1, 2, 3, 4, 5])
      3. 深拷贝
      4. arr2 = np.array(arr1)
      5. # 在这里的复制是深拷贝,而列表中的复制是浅拷贝
      6. print('arr1:', id(arr1), 'arr2:', id(arr2)) # id 可以输出变量的地址
      7. # 浅拷贝
      8. arr3 = arr1 # 这种拷贝修改任何一个另一个都会跟着修改

            1.2 arange函数的使用

            numpy.arange(start,stop,step,dtype)

            参数说明:

    • 1.start:起始值,默认为0
    • 2.stop:终止值,不包含
    • 3.step:步长,默认为1
    • 4.dtype:返回数组类型

            使用该函数可以只传递stop参数,也可以指定参数名,如step=2,当数据过大时,输出结果会以省略号替代:

    1. # 整形
    2. num1 = np.arange(10)
    3. print(num1)
    4. # 浮点型
    5. num2 = np.arange(10.0)
    6. print(num2)
    7. # 限定终值和步长
    8. num3 = np.arange(2, 30, 2)
    9. print(num3)
    10. # 参数指定
    11. num4 = np.arange(20, step=3)
    12. print(num4)
    13. # 数据太大会自动跳过
    14. num5 = np.arange(10000)
    15. print(num5)

            1.3 linspace函数使用

            numpy.linspace(start,stop,num,endpoint,retstop,dtype) 这是一个生成等差数列的函数

            参数说明:

    • 1.num:生成的元素个数
    • 2.endpoint:这是一个bool类型的参数,为True时会包含stop值
    • 3.retstop:这是一个bool类型的参数,为True时生成的数据会显示间距

            linspace返回的数组中元素都是浮点型,例子:

    1. # 等步长生成
    2. num1 = np.linspace(1, 10, 10) # 输出浮点型
    3. print(num1)
    4. #
    5. num2 = np.linspace(0, 4, 9)
    6. print(num2)
    7. num3 = np.linspace(0, 4.1, 9)
    8. print(num3)
    9. # 设置endpoint参数
    10. num4 = np.linspace(2.0, 3.0, num=5, endpoint=True)
    11. print(num4)
    12. # 设置显示retstep显示计算后的步长
    13. num5 = np.linspace(2.0, 3.0, num=5, retstep=True)
    14. print(num5)

            1.4 logspace函数使用

            numpy.logspace(start,stop,num,endpoint,base,dtype) 这是一个生成等比数列的函数

            参数说明:

    • 1.num:要生成的等步长的元素数量
    • 2.endpoint:这是一个bool类型的参数,为True时会包含stop值
    • 3.base:对数log的底数,默认为10

            该函数使用返回的结果都是浮点型,例子:

    1. # base指定底数
    2. num1 = np.logspace(0, 9, 10, base=2) # 返回结果都是浮点型
    3. print(num1)
    4. # 使用前三个数均分为等份的数
    5. num2 = np.logspace(1, 5, 3, base=2)
    6. print(num2)

            1.5 数组元素的属性

    1. ndim:查看数组的维度
    2. shape:查看数组行列的情况
    3. size:查看数组元素的总个数
    4. dtype:数组的元素类型
    5. itemsize:数组中每个元素的大小

           上面属性的使用都在以下的代码段中,属性 reshape(元组),可以改变数组的维度, resize(数组,元组),这里会重新改变数组维度,并且会重复填写数组的元素,例子:

    1. # shape:查看行列,ndim:查看维度,size:数组元素个数
    2. # 一维数组
    3. num1 = np.array([1, 2, 3, 4, 5])
    4. print('num1的维度:', num1.ndim)
    5. print('num1的数组元素个数:', num1.size)
    6. print('一维数组:', num1.shape)
    7. print('元素大小:', num1.itemsize)
    8. # 二维数组
    9. num2 = np.array([[1, 2, 3], [4, 5, 6]])
    10. print('num2的维度:', num2.ndim)
    11. print('num2的数组元素个数:', num2.size)
    12. print('二维数组:', num2.shape)
    13. # 三维数组
    14. num3 = np.array([[[1, 2, 3],
    15. [4, 5, 6]],
    16. [[1, 2, 4],
    17. [4, 5, 6]]])
    18. print('num3的维度:', num3.ndim)
    19. print('num3的数组元素个数:', num3.size)
    20. print('三维数组:', num3.shape)
    21. # reshape 改变维度
    22. a = np.arange(20).reshape((4, 5))
    23. print(a)
    24. # resize:如国新数组大于原始数组,新数组将填充a的重复副本
    25. b = np.arange(20)
    26. c = np.resize(b, (4, 6))
    27. print(c)

            1.6 数组的切片和索引

            1.6.1 一维数组

                    一维数组的切片和索引与列表的一样:

    1. # 一维数组操作
    2. # 数组切片索引和列表的一样
    3. a = np.array([1, 2, 3, 4, 5])
    4. print(a[2:4:2])
    5. # 使用下标切成不重叠的两部分
    6. print('a[:2]:', a[:2])
    7. print('a[2:]:', a[2:])

            1.6.2 二维数组

                   下面例子中,第五个是在二维数组中取出了第二第三行,变成一个两行四列的数组,再从中取出第二行数据,例子:

    1. # 二维数组操作
    2. num1 = np.array(range(20)).reshape(4, 5)
    3. print(num1[2]) # 拿到一行数据
    4. print(num1[2][2]) # 拿到一个数据
    5. print(num1[2, 2]) # 第一个操作行,第二列操作列
    6. print(num1[2:, 2:]) # 可以对数组行列各自操作
    7. print(num1[2:][1]) # 第一个参数先取出行,第二个参数再取出行
    8. print(num1[2:]) # 对行数进行切片

                    以坐标当索引,例子:

    1. # 用坐标当索引
    2. num2 = np.array(range(12)).reshape(3, 4)
    3. rest1 = num2[[0, 1, 2], [0, 0, 0]] # 以坐标作为索引,第一列参数是行坐标,第二列参数为列坐标
    4. rest2 = num2[:2, :2] # 取出范围内的数据,按会以矩阵形式输出

            1.6.3 bool运算

                   在使用bool类型数组进行数据取出时,True类型的数量必须要一致,例子:

    1. # bool运算:可以使用算式拿到想要的数据
    2. num3 = np.array(range(12)).reshape(3, 4)
    3. print(num3[num3 > 6]) # 返回所有数值大于6的数字
    4. print(num3[num3 % 2 == 1]) # 返回奇数
    5. print(num3[(num3 > 4) & (num3 < 9)]) # &:和的意思
    6. print(num3[(num3 < 4) | (num3 > 9)]) # |:或的意思
    7. row1 = np.array([True, False, True]) # 作为一个数组作用到另一个数组上,行和列一一对应,当为True时,即拿到该行数据,否则不能
    8. colum1 = np.array([True, False, True, False])
    9. print(num3[row1, colum1]) # 合用时True数量要一致
    10. print(num3[row1])
    11. print(num3)
    12. temp = num3[::2] # 先拿出行
    13. temp = temp[:, [0, 2, 3]] # 再拿出列
    14. print(temp)

            1.6.4 广播机制

                    广播机制其实就是数组的运算,例子:

    1. # 广播机制:不同的数组进行计算,数组的列必须相同,且必须有一个数组是单个值
    2. num4 = np.array([1, 2, 3, 4])
    3. num5 = np.array([10, 20, 30, 40])
    4. print(num4*num5) # 相同维度的运算
    5. num6 = np.array([[1, 2, 3, 4], [10, 20, 30, 40], [100, 200, 300, 400]])
    6. num7 = np.array([[2, 3, 4, 5]]) # 数组的运算必须要列的长度相同
    7. # 在数组运算中行是和行相乘的,一行对应一行,当列数为1时,无论多少行都可以相乘,如 {(2,1)和(2, 4)} {(2, 1)和(1, 4)}
    8. num8 = np.array([[1], [2]])
    9. num9 = np.array([[1, 2, 3, 4], [2, 3, 4, 5]])
    10. print(num8*num9) # 不同维度的运算

            1.7 numpy函数

            1.7.1 mean:求平均数

    例子:

    1. # mean:求平均数
    2. num1 = np.array(range(20)).reshape(4, 5)
    3. print(num1.mean()) # 计算数组中的函数
    4. print(num1.mean(axis=0)) # axis=0 按列从上往下运算
    5. print(num1.mean(axis=1)) # axis=1 按行从左往右

            1.7.2 median:求中位数

    例子:

    1. # median:中位数
    2. num2 = np.array(range(12)).reshape(3, 4)
    3. print(np.median(num2)) # median:找到数组中的中位数

          1.7.3 std:标准差

    例子:

    1. # std:标准差
    2. num3 = np.array([95, 85, 75, 65, 55, 45])
    3. num4 = np.array([73, 72, 71, 69, 67, 68])
    4. print(np.std(num3)) # 求标准差
    5. print(np.std(num4))

            1.7.4 max:求最大值,min:求最小值

    例子:

    1. # max:最大值 min:最小值
    2. num5 = np.array([[1, 3, 5, 3, 6, 99, 4, 7], [4, 4, 1, 2, 7, 2, 2, 55]])
    3. print(num5.max(axis=0), num5.max(axis=1)) # 找最大值 axis=0:从上往下找,axis=1:从左往右找
    4. print(num5.min()) # 找最小值

            1.7.5 sum:求和

    例子:

    1. # sum:求和
    2. num6 = np.array(range(20)).reshape(4, 5)
    3. print('从上往下累加:', num6.sum(axis=0), '从左往右累加:', num6.sum(axis=1))

            1.7.6 average:加权平均数

    例子:

    1. # average:加权平均值
    2. num7 = np.array([30, 55, 63])
    3. weights = np.array([0.3, 0.3, 0.4]) # 权重
    4. print(np.average(num7, weights=weights)) # 权重和数组行列数一致

            1.8 numpy文件操作

            关键字:loadtxt

            loadtxt(fname,dtype,comments,delimiter,coverters,skiprows,usecols,unpack,ndmin,encoding)

            参数说明:

    • 1.fname:文件名称,支持压缩文件
    • 2.comments:字符串或字符串组成的列表
    • 3.delimiter:字符串,作为分割字符
    • 4.converters:字典
    • 5.skiprows:跳过特定行数据
    • 6.usecols:传入的参数是元组,取出特定列
    • 7.unpack:bool类型
    • 8.encoding:编码方式

            使用例子:

    1. # txt文件
    2. data = np.loadtxt('1.txt', dtype='int8')
    3. print(data)
    4. # csv文件
    5. data1 = np.loadtxt('3.csv', dtype='int32', delimiter=',', encoding='utf8') # delimiter:使用了 , 分割符
    6. print(data1)
    7. # csv中不同的数据类型
    8. # dt是一个自定义类型,为了符合csv文件中的数据类型
    9. dt = np.dtype([('name', 'U10'), ('age', 'int'), ('weight', 'float')]) # 字符串需要的字符格式 Un
    10. data2 = np.loadtxt('2.csv', dtype=dt, delimiter=',', encoding='utf8') # 文件中一行是一个元组,返回的是列表
    11. print(data2['name'])
    12. print(data2)
    13. # 跳行使用 skiprows
    14. data3 = np.loadtxt('4.txt', dtype=dt, skiprows=1, encoding='utf8') # 文件中一行是一个元组,返回的是列表,跳过第一行
    15. print(data3)
    16. # 取出特定列:文件中的列是从0开始数
    17. data4 = np.loadtxt('4.txt', usecols=(1, 2), skiprows=1, encoding='utf8') # usecols用元组的方式取出数据
    18. print(data4)

            使用自定义类型去判断获取数据:

    1. # 计算女生的平均身高
    2. dt1 = np.dtype([('name', 'U10'), ('sex', 'U1'), ('age', 'int'), ('height', 'int')])
    3. data5 = np.loadtxt('5.txt', dtype=dt1, skiprows=1, encoding='utf8')
    4. print(data5)
    5. isgirl = (data5['sex'] == '女') # 判断是否是女生
    6. print(isgirl)
    7. height = data5['height'][isgirl] # 拿到身高
    8. print(np.mean(height)) # 算出平均身高

            1.9 numpy随机数

                    例子:

    1. # 生成分布均匀的随机数
    2. avg = np.random.rand(1, 3, 3) # 第一个参数是范围,第二个参数是组数,第三个参数是每组中的列数
    3. print(avg)
    4. # 和 rand 一样,但是生成的是一组正态分布的数
    5. avg1 = np.random.random(3)
    6. print(avg1)
    7. # 随机生成整数:random(low,high,size,dtype)
    8. # 1.返回随机数,范围区间在[low,high],包含low,不包含high
    9. # 2.low:最小值 high:最大值 size:数组维度大小 dtype:数据类型
    10. # 3.high没有填写时默认随机数范围[0,low]
    11. avg2 = np.random.randint(1, 20, size=(2, 4, 5)) # 生成两个3行4列的二维数组
    12. print(avg2)
    13. # sample:随机生成0到1的随机数,参数控制数量
    14. avg3 = np.random.sample(3)
    15. print(avg3)
    16. # seed:随机种子,控制每次生成随机数时数据都一样
    17. np.random.seed(2)
    18. a = np.random.randn(3, 3)
    19. np.random.seed(2) # 每次调用随机数时都要先调用随机数种子
    20. b = np.random.randn(3, 3)
    21. print('a', a)
    22. print('b', b)
    23. # 正态分布函数:normal(参数1,参数2,元组)
    24. # 1.参数1:均值
    25. # 2.参数2:是标准差
    26. # 3.元组:控制生成的是几行几列
    27. avg4 = np.random.normal(1, 3, (2, 4))
    28. print(avg4)

            2.0 其它函数

    1. resize:返回指定形状的新数组
    2. append:将元素添加到数组的末尾
    3. insert:按规定的轴将元素值插入到指定的元素
    4. delete:删掉某个轴上的子数组,并返回新数组
    5. argwhere:返回数组内符合条件的索引值
    6. unique:删除数组中的重复元素,并按从大到小返回一个新数组
    7. sort:对数组进行排序,并返回一个副本
    8. argsort:按指定的轴,对数组进行排序,并返回排序后元素的索引数组

            例子:

    1. # resize:使用
    2. num1 = np.array(range(20)).reshape(4, 5) # 重复填充
    3. print(np.resize(num1, (5, 7)))
    4. # append:使用
    5. num2 = np.array([[1, 2, 3], [4, 5, 6]])
    6. print(np.append(num2, [[7, 8, 9]])) # 添加数据
    7. print(np.append(num2, [[7, 8, 9]], axis=0)) # 沿轴 0 添加元素 从上往下
    8. print(np.append(num2, [[7, 8, 9], [10, 11, 12]], axis=1)) # 沿轴 1 添加元素 从左往右
    9. # insert:使用
    10. num3 = np.array([[1, 2], [2, 3], [3, 4]])
    11. print(np.insert(num3, 1, [11], axis=0)) # 从上往下的第二行加入11
    12. print(np.insert(num3, 1, [11], axis=1)) # 从左往右的第二列加入11
    13. # delete:使用
    14. num4 = np.array(range(12)).reshape(3, 4)
    15. print(np.delete(num4, 1)) # 删除指定索引的元素
    16. print(np.delete(num4, [1, 2, 3, 6])) # 删除指定元素
    17. # argwhere:使用
    18. num5 = np.array([[1, 2, 3], [4, 5, 6]])
    19. print(np.argwhere(num5 > 3)) # 返回了索引值
    20. # unique:使用
    21. num6 = np.array([1, 2, 2, 3, 6, 4, 7, 3, 5])
    22. print(np.unique(num6)) # 去重,并从小到大排序
    23. a, b = np.unique(num6, return_index=True) # 返回去重后的数组,和原在原数组时的索引位置
    24. print(a, '\n', b)
    25. c, d = np.unique(num6, return_counts=True) # 返回数组,以及元素在原数组中出现的次数
    26. print(c, '\n', d)
    27. # sort:使用
    28. num7 = np.array([[1, 3, 2], [4, 3, 6], [2, 1, 3]])
    29. print(np.sort(num7)) # 默认是从左到右排序
    30. print(np.sort(num7, axis=0)) # 从上到下排序
    31. # argsort:使用
    32. num8 = np.array([1, 4, 2, 6, 1])
    33. print(np.argsort(num8)) # 返回排序后的索引值

  • 相关阅读:
    ElasticSearch es 插件开发
    Linux Kernel 之十 虚拟化、VirtIO 架构及规范、VirtQueue & VRing
    openmmlab 教程1-安装
    Linux——系统对设备的访问方式、设备管理、设备驱动
    【深入理解TcaplusDB技术】如何实现Tmonitor单机安装
    MySQL高阶语句(一)
    【USB】macOS usb内核驱动开发入门
    PyTorch中ReduceLROnPlateau的学习率调整优化器
    288页18万字智能化校园总体设计 目录
    MybatisX插件 逆向工程
  • 原文地址:https://blog.csdn.net/weixin_62859191/article/details/126725621