0
点赞
收藏
分享

微信扫一扫

Python可视化数据分析04、NumPy库使用


 

Python可视化数据分析04、NumPy库使用_数据分析

Python可视化数据分析04、NumPy库使用

📋前言📋


💝Python初始环境地址:【​​Python可视化数据分析01、python环境搭建​​】💝 

环境需求

环境:win10

开发工具:PyCharm Community Edition 2021.2

数据库:MySQL5.6

目录

​​Python可视化数据分析04、NumPy库使用​​

​​📋前言📋​​

​​环境需求​​

​​NumPy概述​​

​​安装NumPy​​

​​ 编辑 ​​

​​Ndarray对象​​

​​创建Ndarray对象​​

​​Demo1:基础操作​​

​​Demo2:数据类型对象dtype​​

​​NymPy数组​​

​​NumPy高级索引​​

​​数组索引:​​

​​布尔索引:​​

​​花式索引:​​

​​NumPy广播​​

​​NumPy迭代器对象​​

​​NumPy字符串函数​​

​​SciPy介绍​​

​​保存MATLAB文件​​

​​scipy. spatial模块​​

NumPy概述

NumPy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy通常与SciPy【saipai】(Scientific Python)和Matplotlib(绘图库)一起使用。SciPy是一个开源的Python算法库和数学工具包。Matplotlib是Python编程语言及其数值数学扩展包NumPy的可视化操作界面。主要用于数学、科学和工程计算。

安装NumPy

pip3 install numpy

 

Python可视化数据分析04、NumPy库使用_数据分析_02

 

网络慢的话就换镜像地址

pip3 config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple
pip3 config list

Ndarray对象

Ndarray对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。

Ndarray对象由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要跨过的字节数

创建Ndarray对象

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

object:数组或嵌套的数列。
dtype:数组元素的数据类型,可选。
copy:对象是否需要复制,可选。
order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)。
subok:默认返回一个与基类类型一致的数组。
ndmin:指定生成数组的最小维度。

Demo1:基础操作

import numpy as np

a = np.array([1, 2, 3])
print("基础数组:")
print(a)
# 大于一个维度
a = np.array([[1, 2], [3, 4]])
print("二维数组:")
print(a)
# 设置最小维度
a = np.array([1, 2, 3, 4, 5], ndmin=30)
print("设置最小数组层:")
print(a)

 

Python可视化数据分析04、NumPy库使用_数据分析_03

 

Demo2:数据类型对象dtype

类型

字符代码

bool

?, b1

int8

b, i1

uint8

B, u1

int16

h, i2

uint16

H, u2

int32

i, i4

uint32

I, u4

int64

q, i8

uint64

Q, u8

float16

f2, e

float32

f4, f

float64

f8, d

complex64

F4, F

complex128

F8, D

str

a, S(可以在S后面添加数字,表示字符串长度,

比如S3表示长度为三的字符串,不写则为最大长度)

unicode

U

object

O

void

V

import numpy as np

dt = np.dtype('i1') # int8, int16, int32, int64四种数据类型可以使用 'i1', 'i2','i4','i8' 代替
print(dt)
dt = np.dtype('<i1') # 字节顺序标注
print(dt)
dt = np.dtype([('age', np.int8)]) # 创建结构化数据类型
print(dt)
dt = np.dtype([('age', np.int8)]) # 将数据类型应用于ndarray对象
a = np.array([(10,), (20,), (30,)], dtype=dt)
print(a)
dt = np.dtype([('age', np.int8)]) # 类型字段名可以用于存取实际的age列
a = np.array([(10,), (20,), (30,)], dtype=dt)
print(a['age'])
# 结构化数据类型student,包含字符串字段name(大写字母O,代表Object类型),整数字段age,及浮点字段marks
student = np.dtype([('name', 'O'), ('age', 'i4'), ('marks', 'f4')])
print(student)
a = np.array([("文争鸣", 21, 50), ("祝枝山", 18, 75)], dtype=student)
print(a)

 

Python可视化数据分析04、NumPy库使用_python_04

 

NymPy数组

NumPy数组的维数称为秩(zhì)(rank),一维数组的秩为1,二维数组的秩为2,以此类推。
在NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。而轴的数量——秩,就是数组的维数。

 

Python可视化数据分析04、NumPy库使用_python_05

 

属性

说明

ndarray.ndim

秩,即轴的数量或维度的数量

ndarray.shape

数组的维度,对于矩阵,即为n行m列

ndarray.size

数组元素的总个数,相当于.shape中n*m的值

ndarray.dtype

ndarray对象的元素类型

ndarray.itemsize

ndarray对象中每个元素的大小,以字节为单位

ndarray.flags

ndarray对象的内存信息

ndarray.real

ndarray元素的实部

ndarray.imag

ndarray元素的虚部

ndarray.data

包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,

所以通常不需要使用这个属性。

示例1:

import numpy as np

a = np.arange(24)
print("一维一值", a.ndim) # a只有一个维度
b = a.reshape(2, 4, 3) # 现在调整其大小,b拥有三个维度
print("一维三值", b.ndim)
a = np.array([[1, 2, 3], [4, 5, 6]]) # 数组的维度
print("二维,三值", a.shape)
a = np.array([[1, 2, 3], [4, 5, 6]]) # 调整数组大小
a.shape = (3, 2)
print("三维二值", a)
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape(3, 2) # reshape 函数来调整数组大小
print("三维二值", b)
# 以字节的形式返回数组中每一个元素的大小
x = np.array([1, 2, 3, 4, 5], dtype=np.int8) # 数组的dtype为 int8(一个字节)
print("所占用字节长度:", x.itemsize)
y = np.array([1, 2, 3, 4, 5], dtype=np.float64) # 数组的 dtype为float64(8个字节)
print("所占用字节长度:", y.itemsize)

  

Python可视化数据分析04、NumPy库使用_数据分析_06

  

示例2:

import numpy as np

x = np.empty([3, 2], dtype=int) # empty 方法使用
print("随机", x)
x = np.zeros(5) # 默认为浮点数
print("空浮点数", x)
y = np.zeros((5,), dtype=np.int32) # 设置类型为整数
print("空整数", y)
# 自定义类型
z = np.zeros((2, 2), dtype=[('x', 'i4'), ('y', 'i4')])
print("俩二维数组,长度是2", z)
x = np.ones(5) # 默认为浮点数
print("长度5的浮点数", x)
# 自定义类型
x = np.ones([2, 2], dtype=int)
print("一个二维数组,值是2个:", x)

Python可视化数据分析04、NumPy库使用_数据分析_07

示例3:

import numpy as np

a = np.arange(5, 15) # 10个数
print(a) # 打印5-14
s = slice(2, 7, 2) # 从索引2开始到索引7停止,间隔为2
print(a[s])
a = np.arange(5, 15) # 10个数
print(a[2:7:2]) # 从索引2开始到索引7停止,间隔为2
a = np.arange(5, 15) # 10个数
print("下标是五:", a[5])
a = np.arange(5, 15) # 10个数
print(a[2:]) # 从下标是2开始打印
a = np.arange(5, 15) # 10个数
print("从下标2打印到下标5:", a[2:5])
print(np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]]))
print('从数组索引 a[1:] 处开始切割')
print(a[1:])
a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a[..., 1]) # 第2列元素
print(a[1, ...]) # 第2行元素
print(a[..., 1:]) # 第2列及剩下的所有元素

  

Python可视化数据分析04、NumPy库使用_字符串_08

NumPy高级索引

除了对Ndarray数组进行切片操作和索引操作,还可以对Ndarray数组进行整数数组索引、布尔索引及花式索引。

数组索引:

import numpy as np

x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0, 1, 2], [0, 1, 0]]
print(y)
# 4X3 数组中的四个角的元素。行索引是[0,0]和[3,3],而列索引是[0,2]和[0,2]
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('我们的数组是:')
print(x)
print('\n')
rows = np.array([[0, 0], [3, 3]])
cols = np.array([[0, 2], [0, 2]])
y = x[rows, cols]
print('这个数组的四个角元素是:')
print(y)

 

Python可视化数据分析04、NumPy库使用_numpy_09

 

布尔索引:

import numpy as np
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('我们的数组是:')
print(x)
# 现在打印出大于5的元素
print('大于5的元素是:')
print(x[x > 5])

Python可视化数据分析04、NumPy库使用_数组_10

花式索引:

import numpy as np

x = np.arange(32).reshape((8, 4)) # 传入顺序索引数组
print(x[[4, 2, 1, 7]])
print('\n')
x = np.arange(32).reshape((8, 4)) # 传入倒序索引数组
print(x[[-4, -2, -1, -7]])
print('\n')
x = np.arange(32).reshape((8, 4)) # 传入多个索引数组
print(x[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])])

Python可视化数据分析04、NumPy库使用_字符串_11

NumPy广播

import numpy as np

a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
print(a * b, '\n')
# 当运算中的2个数组的形状不同时,numpy将自动触发广播机制
a = np.array([[0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]])
b = np.array([1, 2, 3])
print(a + b, '\n')
# 4x3的二维数组与长为3的一维数组相加,等效于把数组b在二维上重复4次再运算
a = np.array([[0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]])
b = np.array([1, 2, 3])
bb = np.tile(b, (4, 1))
print(a + bb)

Python可视化数据分析04、NumPy库使用_数组_12

NumPy迭代器对象

控制遍历顺序
使用numpy.nditer迭代器对象可以根据需要,采用列序优先或行序优先的方式控制遍历顺序。具体说明如下:
for x in np.nditer(a, order='F'):Fortran order,列序优先。
for x in np.nditer(a.T, order='C'):C order,行序优先

F风格:

import numpy as np
a = np.arange(0, 60, 5)
a = a.reshape(3, 4)
print('原始数组是:')
print(a, '\n')
print('原始数组的转置是:')
b = a.T
print(b, '\n')
print('以 F 风格顺序排序:')
c = b.copy(order='F')
print(c)
for x in np.nditer(c):
print(x, end=", ")

Python可视化数据分析04、NumPy库使用_字符串_13

C风格:

import numpy as np
a = np.arange(0, 60, 5)
a = a.reshape(3, 4)
print('原始数组是:')
print(a, '\n')
print('原始数组的转置是:')
b = a.T
print(b, '\n')
print('以 C 风格顺序排序:')
c = b.copy(order='C')
print(c)
for x in np.nditer(c):
print(x, end=", ")

 

Python可视化数据分析04、NumPy库使用_numpy_14

 

修改数组值:

import numpy as np

a = np.arange(0, 60, 5)
a = a.reshape(3, 4)
print('原始数组是:')
print(a, '\n')
for x in np.nditer(a, op_flags=['readwrite']):
x[...] = 2 * x
print('修改后的数组是:\n', a)

Python可视化数据分析04、NumPy库使用_python_15

NumPy字符串函数

NumPy中有专门处理字符串的函数,这些函数包含在numpy.char中。
NumPy字符串的函数的说明见下表:

函数

描述

add()

对两个数组的逐个字符串元素进行连接

multiply()

返回按元素多重连接后的字符串

center()

居中字符串,并使用指定字符在左侧和右侧进行填充

capitalize()

将字符串第一个字母转换为大写

title()

将字符串的每个单词的第一个字母转换为大写

lower()

数组元素转换为小写,它对每个元素调用str.lower()函数

upper()

数组元素转换为大写,它对每个元素调用str.upper()函数

split()

指定分隔符对字符串进行分割,并返回数组列表。默认情况下,分隔符为空格

splitlines()

返回元素中的行列表,以换行符分割

strip()

移除元素开头或者结尾处的特定字符

join()

通过指定分隔符来连接数组中的元素

replace()

使用新字符串替换字符串中的所有子字符串

encode()

对数组中的每个元素调用str.encode()函数。默认编码是utf-8,可以使用标准Python库中的编解码器

decode()

对编码的元素进行str.decode()解码

import numpy as np

print('连接两个字符串:')
print(np.char.add(['hello'], [' The World']))
print('连接示例:')
print(np.char.add(['hello', 'girl'], [' Hi', ' boy']))
print(np.char.multiply('幸福安康*3', 3))
print(np.char.center('幸福安康', 20, fillchar='*'))
print(np.char.capitalize('幸福安康'))
print(np.char.title('i like 幸福安康'))
print(np.char.lower(['幸福安康', 'GOOGLE'])) # 操作数组
print(np.char.lower('幸福安康')) # 操作字符串
print(np.char.upper(['幸福安康', '和谐美满'])) # 操作数组
print(np.char.upper('幸福安康')) # 操作字符串
print(np.char.split('i like 幸福安康?')) # 分隔符默认为空格
print(np.char.split('www.baidu.com', sep='.')) # 分隔符为 .
print(np.char.splitlines('i\nlike 幸福安康?')) # 换行符 \n
print(np.char.splitlines('i\rlike 幸福安康?'))
# 移除字符串头尾的 a 字符
print(np.char.strip('ashok 幸福安康的', '的'))
# 移除数组元素头尾的 a 字符
print(np.char.strip(['幸福安康', 'admin', 'java'], 'a'))
print(np.char.join(':', '幸福安康')) # 操作字符串
# 指定多个分隔符操作数组元素
print(np.char.join([':', '-'], ['幸福安康', '和谐美满']))
print(np.char.replace('i like 幸福安康', 'oo', 'cc'))
a = np.char.encode('幸福安康', 'utf-8')
print(a)
print(np.char.encode('幸福安康', 'utf-8'))
print(np.char.decode(a, 'utf-8'))

 

Python可视化数据分析04、NumPy库使用_数组_16

 

舍入函数

around()函数:返回指定数字的四舍五入值。
floor()函数:返回数字的下舍整数。
ceil()函数:返回数字的上入整数。

算术函数

add()函数:返回指定数字的加法。
subtract()函数:返回指定数字的减法。
multiply()函数:返回指定数字的乘法。
divide()函数:返回指定数字的除法。
reciprocal()函数:返回参数逐元素的倒数。
power()函数:将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。
mod()函数:计算输入数组中相应元素的相除后的余数

统计函数

amin()函数:用于计算数组中的元素沿指定轴的最小值。
amax()函数:用于计算数组中的元素沿指定轴的最大值。
ptp()函数:计算数组中元素最大值与最小值的差(最大值-最小值)。
median()函数:用于计算数组中元素的中位数(中值)。
mean()函数:返回数组中元素的算术平均值。
average()函数:根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值 

SciPy介绍

SciPy是一个用于数学、科学和工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值的求解和信号处理等问题。
Numpy和SciPy协同工作,可以高效解决数据处理问题。

安装SciPy

pip3 install scipy

 

Python可视化数据分析04、NumPy库使用_数据分析_17

 

模块名

应用领域

scipy.cluster

向量计算/Kmeans

scipy.constants

物理和数学常量

scipy.fftpack

傅立叶变换

scipy.integrate

积分程序

scipy.interpolate

插值

scipy.io

数据输入输出

scipy.linalg

线性代数程序

scipy.ndimagen

维图像包

scipy.odr

正交距离回归

scipy.optimize

优化

scipy.signal

信号处理

scipy.sparse

稀疏矩阵

scipy.spatial

空间数据结构和算法

scipy.special

一些特殊的数学函数

scipy.stats

统计

保存MATLAB文件

from scipy import io as spio
import numpy as np

a = np.ones((5, 2, 7))
# 写入
spio.savemat('f.mat', {'a': a})
# 读取
data = spio.loadmat('f.mat', struct_as_record=True)
print(data['a'])

 

Python可视化数据分析04、NumPy库使用_数组_18

 

scipy. spatial模块

该模块的distance()函数用于计算两点之间的距离

在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。使用这个距离,欧氏空间成为度量空间。相关联的范数称为欧几里得范数。较早的文献称之为毕达哥拉斯度量。

欧氏距离

|x| = √( x[1]2 + x[2]2 + … + x[n]2 )

from scipy.spatial.distance import cdist
import numpy as np

x1 = np.array([[1, 2]])
x2 = np.array([[4, 5]])
# 通过cdist函数,计算两个点之间的距离·欧氏距离
distance = cdist(x1, x2, "euclidean")
print(distance)

Python可视化数据分析04、NumPy库使用_numpy_19

这块很多时候需要具体问题具体分析,用的时候搜索公式就行了。

 

举报

相关推荐

Python数据分析与可视化

python数据分析与可视化

0 条评论