python数据分析之numpy

NumPy简介

NumPy是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。接下来让我们了解了解NumPy模块。

Numpy基础
1.numpy创建数组(矩阵)

在创建之前我们需要安装numpy库 ,通过pip install numpy命令就可以下载这个模块,然后我们来实现一下

import numpy
import random
# 固定的创建
a = numpy.array([1,2,3])
print(a)
# 快速生成
a2 = numpy.array(range(10))
print(a2)
# 用numpy中特有的方法
a3 = numpy.arange(0,10)  # 等同于numpy.array(range(10))
print(a3)

在这里插入图片描述

2.numpy中的float类型,int类型,bool类型

下面我们看一下numpy中的dtype属性和astype属性

import numpy
import random
# numpy中的float类型
a4 = numpy.array(range(1,4),dtype="float64")
print(a4)
# numpy中的bool类型
t5 = numpy.array([1,1,0,1,0,0],dtype=bool)
print(t5)
# 调整数据类型
t6 = t5.astype("int64")
print(t6)
# numpy中的小数
t7 = numpy.array([random.random() for i in range(10)])
print(t7)
# 取几位小数
t8 = numpy.round(t7,3)
print(t8)

在这里插入图片描述

Numpy常用方法
1.numpy中的数组属性

首先numpy提供了shape属性查看数组的形状,reshape属性修改数组的形状,下面我们来实现一下

import numpy
import random
# shape 查看数组形状
t9 = numpy.array([[1,2,3],[4,5,6]])
print(t9.shape)
a1 = numpy.arange(12)
# print(a1)
# reshape 修改数组形状
# 二维
print(a1.reshape((2,6)))
# 三维
print(a1.reshape(2,2,3))

在这里插入图片描述
上面我们看到reshape属性可以修改数组的形状,可以数组变为任意维,这是有一个专用转一维的flatten()方法,下面我们来实现一下

import numpy
import random
a4 =numpy.arange(12).reshape((2,6))
# 变为1维
a3 = a4.reshape((a4.shape[0]*a4.shape[1],))
print(a3)
# flatten 转变为1维
a4 = a4.flatten()
print(a4)

在这里插入图片描述

2.numpy数组广播机制

这个机制可以完成好多东西,我们来看一些简单的计算
首先实现一个加法

import numpy
import random
# 加法
n = numpy.arange(12).reshape((3,4))
print(n)
print(n+2)

在这里插入图片描述
由上面我们看到加法就是在每个原数上面同时进行了计算,这样一来减法,乘法,除法都满足

import numpy
import random
#减法  满足乘法,除法
n = numpy.arange(12).reshape((3,4))
print(n)
# print(n+2)
print(n-1)
print(n*2)
print(n/2)

在这里插入图片描述
同时也满足两个同行同列的数组相加,相乘,相除

import numpy
import random
n = numpy.arange(12).reshape((3,4))
n1 = numpy.arange(12,24).reshape(3,4)
print(n1)
print(n+n1)

在这里插入图片描述
这是好多小伙伴就有疑问了,只能计算同行同列的列表吗?不这里还可以计算不同行同列的列表

import numpy
import random
n = numpy.arange(12).reshape((3,4))
n2 = numpy.arange(4).reshape((1,4))
print(n-n2)

在这里插入图片描述
当然也能计算同行不同列的列表

import numpy
import random
n3 = numpy.arange(3).reshape((3,1))
print(n-n3)

在这里插入图片描述
还可以计算不同维度的列表

import numpy
import random
n = numpy.arange(12).reshape((3,4))
n4 = numpy.arange(36).reshape(3,3,4)
print(n4-n)

在这里插入图片描述

3.numpy读取数据

numpy能帮我们处理数值型的数据,numpy为我们提供了loadtxt()方法
numpy.loadtxt(frame,dtype=numpy.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
frame: 文件,字符串或生成器,可以是.gz或bz2压缩文件
dtype: 数据类型,可选,CSV的字符串以什么数据类型读入数组中,默认numpy.float
delimiter: 分隔字符串,默认是任何空格,改为逗号
skiprows: 跳过前x行,一般跳过第一行表头
usecols: 读取指定的列,索引,元组类型
unpack: 如果True,读入属性将分别写入不同数组变量,False读入数据只写入一个数组变量,默认False

import numpy
z = ".\\ss.csv"
t2 = numpy.loadtxt(z,delimiter=",",dtype="int",unpack=False)
print(t2)

在这里插入图片描述

4.numpy中的转置

numpy中有三种方法可以实现转置
1.transpose()函数
2.转置T
3.用swapaxes(1,0)轴的交换实现转置

import numpy
# 转置 transpose
s1 = numpy.arange(12).reshape((3,4))
print(s1)
t5 = s1.transpose()
print(t5)
# 转置T
t3 = s1.T
print(t3)
# 用swapaxes(1,0)轴的交换实现转置
t4 = s1.swapaxes(1,0)
print(t4)

在这里插入图片描述

5.numpy索引和切片以及数值修改

我们通过代码来说明索引和切片

import numpy
z = ".\\ss.csv"
t1 = numpy.loadtxt(z,delimiter=",",dtype="int",unpack=True)
"""
numpy索引和切片
"""
print(t1)
# 获取第二行
print(t1[1])
# 获取二行后面的全部行
print(t1[1:])
# 获取不连续多行数据
print(t1[[1,3,4]])
# 取列
print(t1[:,0])
# 取连续的多列
print(t1[:,13:])
# 取不连续的多列
print(t1[:,[0,2]])
# 取行和列,取第三行,第四列的值
print(t1[2,3])
# 取多行和多列
print(t1[0:5,0:4])
# 取不相邻的多个点
print(t1[[0,2],[3,2]])

在这里插入图片描述
下来我们看一下数值得修改,其实这里也没有啥固定的方法,我发现就用基础语法便可实现

import numpy
z = ".\\ss.csv"
t1 = numpy.loadtxt(z,delimiter=",",dtype="int",unpack=True)
# 直接赋值法数值修改
t1[t1 < 10]=30
print(t1)

在这里插入图片描述

6.numpy中的三元运算符

逻辑:如果小于等于10就等于0否则等于12

import numpy
z = ".\\ss.csv"
t1 = numpy.loadtxt(z,delimiter=",",dtype="int",unpack=True)
print(numpy.where(t1<=20,0,12))

在这里插入图片描述

7.numpy中的clip裁剪

小于左边的替换成左边的,大于右边的替换为右边的

import numpy
z = ".\\ss.csv"
t1 = numpy.loadtxt(z,delimiter=",",dtype="int",unpack=True)
print(t1.clip(10,20))

在这里插入图片描述

8.numpy中的数组拼接和数组行列交换

numpy中提供了特有的拼接方法vstack 竖直拼接
hstack 水平拼接

import numpy
b1 = numpy.arange(6)
print(b1)
b2 = numpy.arange(12).reshape(2,6)
print(b2)
# 竖直拼接
print(numpy.vstack((b1,b2)))
# 水平拼接
b1 = b1.reshape(2,3)
print(b1)
print(numpy.hstack((b1,b2)))

在这里插入图片描述
numpy中行列交换没有特定的函数所以要实现这个功能也很简单,用python基础就可以实现

import numpy
b2 = numpy.arange(12).reshape(2,6)
b2[:,[0,1]] = b2[:,[1,0]]
print(b2)

在这里插入图片描述

9.构造特殊列表

在numpy中我们有类似于zeros()函数生成特殊的列表,构造全为0的数据 = numpy.zeros(),构造全为1的数据 = numpy.zeros(),构造对角线全为1的数据 = numpy.eye(1)

import numpy
# 构造全为0的数据
zeros_data = numpy.zeros((4,2))
# 构造全为1的数据
ones_data = numpy.ones((4,2))
print(zeros_data)
print(ones_data)
# 构造对角线全为1的数据
aa4 = numpy.eye(4)
print(aa4)

在这里插入图片描述

10.numpy生成随机数

numpy中提供了产生随机数的方法
numpy.random.rand(行,列) 随机均匀分布
numpy.random.randn() 正态分布
numpy.random.randint(起始数,终止数,(行,列)) 范围随机整数
numpy.random.uniform(起始数,终止数,(行,列)) 均分布数
numpy.random.normal(分布中心,标准差,(行,列)) 正态分布抽样
numpy.random.seed(种子值) 保持其余不变

import numpy
r1 = numpy.random.rand(2,3)
print(r1)
r2 = numpy.random.randn(2,3)
print(r2)
# r6 = numpy.random.seed(10)
r3 = numpy.random.randint(10,20,(2,3))
print(r3)
r4 = numpy.random.uniform(10,20,(2,3))
print(r4)
r5 = numpy.random.normal(0.1,1,(2,3))
print(r5)

在这里插入图片描述

11.numpy中的copy和view

cc = c[:] view 试图,创建新的对象a,但是a的数据完全有b保管,两者数据变化一样
cc1 = c.copy() 复制,两者互不影响

import numpy
c = numpy.arange(10).reshape(2,5)
cc = c[:]
print(c)
print(cc)
cc1 = c.copy()
print(cc1)

在这里插入图片描述

12.numpy中的nan和inf

nan读取本地文件的时候有缺失,0除0,无穷大-无穷大等出现
nan与任何数计算都是nan
numpy.nan != numpy.nan
inf 表示正无穷,-int表示负无穷
numpy.count_nonzero() 非零的个数
c2 = numpy.sum(c,axis=0) 和列数保持一致
c3 = numpy.sum(c,axis=1) 和行数保持一致

import numpy
print(numpy.nan != numpy.nan)
c2 = numpy.sum(c,axis=0)
print(c2)
c3 = numpy.sum(c,axis=1)
print(c3)

在这里插入图片描述

13.numpy中的基础值计算

c5 = c3.mean(axis=0) 计算列均值
c6 = c3.mean(axis=1) 计算行均值
median(列表,axis=(1,0)(行致/列致)) 中值计算
max(axis=(1,0)(行致/列致)) 最大值
ptp(axis=(1,0)(行致/列致)) 极值
std(axis=(1,0)(行致/列致)) 标准差 与平均值的分散程度,值越大越不稳定

import numpy
c = numpy.arange(10).reshape(2,5)
c3 = numpy.sum(c,axis=1)
c4 = c3.mean(axis=0)
print(c4)
c5 = c3.ptp(axis=0)
print(c5)
c6 = c3.std(axis=0)
print(c6)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值