数据分析学习之numpy

引言

好久没写帖子了,确实变懒了,在这一个月里学习了爬虫,还有seleium自动化技术初步以及数据分析中的numpy,下一步就要学习pandas,但是欠了太多帖子没写,所以现在来补一下,现在来的是numpy的学习!

一.什么是numpy

NumPy 是一个 Python 包。 它代表 "Numeric Python"。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。

Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。

二.numpy操作

使用NumPy,开发人员可以执行以下操作:

  • 数组的算数和逻辑运算。

  • 傅立叶变换和用于图形操作的例程。

  • 与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。

三.numpy中ndarry对象

NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。

ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。

ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。

四.创建一个ndarry对象

1.ndarry()

数组转化

l = [1,2,3,4,5]
n = np.ndarry(l)
print(type(n))   #ndarry

2.zeros(shape,dtype)

创建一个元素全为零的ndarry对象

n = np.zeros((2,2),dtype = np.int8)
print(n)   

#[0,0
#0,0]

3. ones(shape,dtype)

创建一个元素全为一的ndarry对象

n = np.ones((2,2),dtype= np.int8)
print(n)

# [1,1
#  1,1]

4.full(shape,fill_value,dtype)

创建一个自定义填充物的ndarry对象

n = np.full((2,2),fill_value=4,dtype=np.int8)
print(n)

# [4,4
#  4,4]

5.eye(N,M,K=0,dtype)

创建一个对角线的矩阵,N为行数,M为列数(默认为行数),K为偏移量

n = np.eye(3,3,k=1,dtype= np.int8)
print(n)

# [ 0,1,0,
#   0,0,1,
#   0,0,0]

6.linspace(start,end,num,endpoint,retstep,dtyep)

创建一个等差数列ndarry对象

start和end:等差数列的头和尾

num:将等差数列中间的差值分割成为num份

endpoint:是否包含结束值

retstep:是否返回步长

n = np.linspace(5,20,15,dtype = np.int8)
print(n)


#[ 5  6  7  8  9 10 11 12 13 14 15 16 17 18 20]

7.arange((start),end,(step),dtype =None)

类似python中的range函数,这样理解就好多了,创建一个数值范围的数组

n = np.arange(10)
print(n)

#[0 1 2 3 4 5 6 7 8 9]

8.random.randint(low,high,size,dtype)

创建一个任意形状的随机元素数组,简单来说就是可以创建元素随机的多维数组

low和hight代表随机数的最大值和最小值,size表示形状

n = np.random.randint(2,9,size= (4,4),dtype = np.int8)
print(n)

#[[2 3 7 4]
 [5 2 5 8]
 [8 4 2 5]
 [2 2 7 6]]

9.random.randn(d0,d1,d2...)

创建一个服从标准正态分布的多维数组

正态分布是一个均值,其他值则在均值两侧呈现正态分布

n = np.random.randn(2,2)
print(n)

[[ 0.41904164 -1.77092805]
 [ 0.71053412 -0.37183897]]

10.random.normal(loc=0.0,scale=1.0,size = None)

创建一个正态分布,

loc为均值,即正态分布中心

scale为标准差,标准差越大,正态分布越缓,标准差越大,正态分布越陡

n = np.random.normal(0,2,(2,2))
print(n)


#[[-0.2796318  -0.87402175]
 [ 2.16434439 -0.43034606]]

11.random.random(size= None)

创建一个元素为0~1(左开右闭)的随机数集合

n = np.random.random((2,2))
print(n)

[[0.39221156 0.79644022]
 [0.18058806 0.76382577]]

12.random.rand(d0,d2,d3...)

和上面一样,一个d代表一个维度,d0表示第一维度为多少

n = np.random.rand(2,2)
print(n)

#[[0.54617447 0.48065742]
 [0.58453461 0.46653232]]

五.ndarry操作

1.索引

和正常数组一样,使用 数组名【索引】可以拿到该索引下面的值,也可以修改该索引下面的值

n = [ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]
    [13 14 15 16]

n[1][2] = n[1,2]  =1   #两种写法


n  = [ 1  2  3  4]
    [ 5  6  1  8]
    [ 9 10 11 12]
    [13 14 15 16]

2.切片

类似于列表的切片 【start:end:step】

取一行:  n[0]
连续取n行:  n[a:n-a]
只取1,2,7行:  n[1,2,7]

取一列: n[:,0]
连续取n列:  n[:,a:n-a]
只取1,2,7列:  n[:,[1,2,7]]

3.翻转

将行翻转或者将列翻转

行翻转: n[::-1]
列翻转: n[:,::-1]

4.修改形状

这里说的形状是多维数组,2*3,5*2就是两种形状 reshape(数组,size)

注意:修改后的形状所包含的元素要和原形状的元素数量保持一致

n = np.reshape(n,(2,2))

5.级联操作(合并操作)

级联操作主要使用的是concatenate((n1,n2),axis)函数,n1,n2分别为两个矩阵,axis决定哪个维度合并,0为行,1为列。还有两个少见的合并hstack()水平合并,vstack()垂直合并。

6.拆分(切分,切割)

和列表的类似,split(),hsplit()水平,vsplit()垂直

n = [ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]
    [13 14 15 16]

a = np.split(n,4)

print(a)

#[array([[1, 2, 3, 4]]), 
array([[5, 6, 7, 8]]), 
array([[ 9, 10, 11, 12]]), 
array([[13, 14, 15, 16]])]

7.复制(拷贝,副本)

copy(),学过开发,没啥好说的

8.聚合函数

max      最大值
argmax   最大值下标
min      最小值
argmin   最小值下标
average  平均值
mean     平均值
median   中位数
percentile 百分位数
std      标准差
var      方差
argwhere 寻找某个数的所有下标
power    次方


#一些数学函数,到时候查找方便
abs      绝对值
sqrt     平方根
square   平方
exp      指数
log      对数
sin      正弦
cos      余弦
tan      正切
round    四舍五入
floor    向下取整
ceil     向上取整
cumsum   求和累加

六.矩阵操作

1.基本矩阵操作

加减乘除

n+10   n-10   n*10   n/10

2.矩阵积

注意:第一个矩阵的列数必须是第二个矩阵的行数

(2*3)*(3*5)=(2*5)

np.dot()

3.矩阵逆

了解内容

线性代数:  np.linalg
矩阵逆:    np.linalg.inv(n)
行列式:    np.linalg.det(n)
矩阵的秩:  np.linalg.matrix_rank(n)

4.广播机制

了解内容

  • 规则一:为缺失的维度补齐维度

  • 规则二:为缺失的元素用已有值取填充

    m = [ 1,1,1
          1,1,1]
    n = [0,1,2]
    
    m+n = [1,1,1   +   [0,1,2    = [1,2,3,
            1,1,1]      0,1,2]      1,2,3]
    

5.排序

np.sort()      不改变原数组
ndarry.sort()  改变原数组

6.文件操作

存:
save   保存数组到npy文件中
savez  将多个array保存到要给npz文件中


取:
load    读取npy文件
load("文件名.npz")['数组名']    读取npz文件


csv和txt的读写操作

csv:  np.savetxt("arr.csv",n,delimiter=',')
txt:  np.savetxt("arr.txt",n)


读取: np.loadtxt('文件名')

结语

ok了啊,现在是北京时间23:35,写完睡觉,拜拜了,老铁们,奥对,今天是数据分析的小白,梦想是做月入过万的男人,明天我倒是看看有没有时间写一下seleium的帖子,mai起!

相关推荐
HC182580858322 分钟前
“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
学习·生活
学习路上_write7 分钟前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
非概念12 分钟前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
无敌最俊朗@2 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
EterNity_TiMe_2 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
幸运小新2 小时前
数据分析-Excel基础操作
数据分析
L_cl2 小时前
Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
学习
前端SkyRain3 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
提笔惊蚂蚁3 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析
DDDiccc3 小时前
JAVA学习日记(十五) 数据结构
数据结构·学习