数据分析与可视化之numpy

110 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

numpy基础

Numpy是python的一种开源数值计算扩展库,包含很多功能,比如n维数组创建,对数组进行函数运算,数值积分等。他提供了两种基本对象,ndarray(存储单一数据类型的多维数组) ufunc对数组进行处理的函数。

使用其需要导入:import numpy as np,as后面是别名

numpy创建数组

创建多维数组对象

通常来说,ndarray是一个通用的同构数据容器,即其中的所有元素都需要相同的类型。利用array函数可创建ndarray数组

  • array函数格式:np.array(object,dtype,ndmin)

| 参数名称 | 说明 | | Object | 接收array,想要创建的数组 | | dtype | 接收data-type 表示数组需要的数据类型,为给定则选择保存对象所需要的最小类型默认维None | | ndmin | 接收int,制定生成数组应该具有的最小维数,默认None |

import numpy as np
data=[1,3,5,7]# 列表
w1=np.array(data)
print("w1"+w1)
data1=(2,3,4,5)# 元组
w2=np.array(data1)
print("w2"+w2)
data2=[[1,2,3,4],[5,6,7,8]]# 多维数组
w3=np.array(w3)
print("w3"+w3)

输出:

image.png

在创建数组时,NumPy会为新建的数组推断出一个合适的数据类型,并保存在dtype中,当序列中有整数和浮点数时,NumPy会把数组的dtype定义为浮点数据类型。

创建数组的函数

  • arange函数:创建等差一维数组

np.arange([start,]stop,[step,]dtype)

| 参数名称 | 说明 | | start | 起始值,默认为0 | | stop | 结束值,生成的元素不包括结束值 | | step | 步长,默认为1,可省略 | | dtype | 设置元素的数据类型,默认使用输入数据的类型 |

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

输出:[0 1 2 3 4 5 6 7 8 9]

warray=np.arange(0,1,0.2)
print(warray)

输出:[0 0.2 0.4 0.6 0.8]

  • linspace函数:创建等差一维数组,接收元素作为参数

np.linspace(start,stop,num,endpoint,retstep=False,dtype=None)

| 参数名称 | 说明 | | start | 起始值,默认为0 | | stop | 结束值,生成元素不包括结束值 | | num | 生成等间隔样例数量 |

warray=np.arange(0,1,5)
print(warray)

输出:[0 0.25 0.5 0.75 1]

  • logspace函数:创建等比一维数组

np.logspace(start,stop,num,endpoint=true,base=10.0,dtype=None)

logspace的参数中,start, stop代表的是10的幂,默认基数base为10,第三个参数元素个数。

warray=np.logspace(0,1,5)
print(warray)

输出:[1 1.77827941 3.16227766 5.62341325 10]

  • zeros:指定长度或者形状全0的数组

np.zeros(shape,dtype=flost,order='C')

  • ones:指定长度或者形状全1的数组

np.ones(shape,dtype=flost,order='C')

  • diag:创建应该对角阵

np.diag(v,k=0)

此外,使用eye函数可创建一个对角线为 1 其他位置全为 0 的矩阵。

ndarray对象属性和数据转换

Numpy 创建的ndarray 对象属性,主要有shape,size等属性

image.png

image.png

生成随机数

在NumPy.random模块中,提供了多种随机数的生成函数。如randint函数生成指定范围的随机整数来构成指定形状的数组。

用法: np.random.randint(low, high = None, size = None)

image.png

数组交换

1.数组重塑 reshape的参数中的其中一个可以设置为-1,表示数组的维度可以通过数据本身来推断。

image.png

与reshape相反的方法是数据散开(ravel)或数据扁平化(flatten)

2.数组合并

hstack函数:实现横向合并 vstack函数:实现纵向组合是利用vstack将数组纵向合并; concatenate函数:可以实现数组的横向或纵向合并,参数axis=1时进行横向合并,axis=0时进行纵向合并。

concatenate函数可以实现数组的横向或纵向合并,其中的参数axis = 1时进行横向合并,axis = 0时进行纵向合并。

3.数组分割

与数组合并相反,hsplit函数、vsplit函数和split函数分别实现数组的横向、纵向和指定方向的分割

arr = np.arange(16).reshape(4,4)

print('横向分割为:\n',np.hsplit(arr,2))

print('纵向组合为:\n',np.vsplit(arr,2))

split在参数axis = 1时实现数组的横向分割,axis = 0时则进行纵向分割。

数组的索引和切片

numpy主要对象是同构多维数组 numpy库:一个非常强大的库

第一个:轴 数组维度叫轴 数组维度里面的元素个数叫轴长 比如:数组[1,2,3]有一个轴,轴长为3 数组[[1,2],[3,4],[5,6]] 是一个二维数组,看最前面方括号个数。 它只是三行两列 维度:3行2列二维数组,轴数为2, 第一维:3个元素(3行)轴长为3 第二维:两个元素(2列)轴长为2 [[1,2,1],[2,1,1],[3,3,3],[4,4,4]] 四行三列二维数组 轴: 2

第一维:轴长 4

第二维:轴长 3

数组形状用元组表示 [1,2,3]->形状(3,) [[1,2],[3,4],[4,5]]->形状(3,2) 两个元素,表示两个维度,3 表示第一轴轴长,2表示第二轴轴长 比如: (3,2,4)-》表示维度 3,第一轴长度3,第二2,第三4 [[[,,,],[,,,]], [[,,,],[,,,,]], [[,,,],[,,,]]]

例题

鸢尾花实验: 1.导入模块

import numpy as np
import csv

2.获取数据 使用csv.reader读取csvfile中的文件

iris_data = []
with open("data//iris.csv") as csvfile:
csv_reader = csv.reader(csvfile)
# 读取第一行每一列的标题
birth_header = next(csv_reader)
# 将csv 文件中的数据保存到birth_data中
for row in csv_reader:
iris_data.append(row)
iris_data

3.数据清理:去掉索引号

iris_list = []
for row in iris_data:
iris_list.append(tuple(row[1:]))
iris_list