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

        1.2 arange函数的使用

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

        参数说明:

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

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

# 整形
num1 = np.arange(10)
print(num1)
# 浮点型
num2 = np.arange(10.0)
print(num2)
# 限定终值和步长
num3 = np.arange(2, 30, 2)
print(num3)
# 参数指定
num4 = np.arange(20, step=3)
print(num4)
# 数据太大会自动跳过
num5 = np.arange(10000)
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返回的数组中元素都是浮点型,例子:

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

        1.4 logspace函数使用

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

        参数说明:

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

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

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

        1.5 数组元素的属性

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

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

# shape:查看行列,ndim:查看维度,size:数组元素个数
# 一维数组
num1 = np.array([1, 2, 3, 4, 5])
print('num1的维度:', num1.ndim)
print('num1的数组元素个数:', num1.size)
print('一维数组:', num1.shape)
print('元素大小:', num1.itemsize)
# 二维数组
num2 = np.array([[1, 2, 3], [4, 5, 6]])
print('num2的维度:', num2.ndim)
print('num2的数组元素个数:', num2.size)
print('二维数组:', num2.shape)
# 三维数组
num3 = np.array([[[1, 2, 3],
                  [4, 5, 6]],
                 [[1, 2, 4],
                  [4, 5, 6]]])
print('num3的维度:', num3.ndim)
print('num3的数组元素个数:', num3.size)
print('三维数组:', num3.shape)

# reshape 改变维度
a = np.arange(20).reshape((4, 5))
print(a)

# resize:如国新数组大于原始数组,新数组将填充a的重复副本
b = np.arange(20)
c = np.resize(b, (4, 6))
print(c)

        1.6 数组的切片和索引

        1.6.1 一维数组

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

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

        1.6.2 二维数组

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

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

                以坐标当索引,例子:

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

        1.6.3 bool运算

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

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

        1.6.4 广播机制

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

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

        1.7 numpy函数

        1.7.1 mean:求平均数

例子:

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

        1.7.2 median:求中位数

例子:

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

      1.7.3 std:标准差

例子:

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

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

例子:

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

        1.7.5 sum:求和

例子:

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

        1.7.6 average:加权平均数

例子:

# average:加权平均值
num7 = np.array([30, 55, 63])
weights = np.array([0.3, 0.3, 0.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:编码方式

        使用例子:

# txt文件
data = np.loadtxt('1.txt', dtype='int8')
print(data)

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

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

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

        1.9 numpy随机数

                例子:

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

        2.0 其它函数

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

        例子:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的蛐蛐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值