Python数据分析可视化之NumPy的使用

NumPy(Numerical Python)是用Python编写的科学计算库,用来存储大型矩阵和执行大型矩阵的科学计算,在数据处理特别是科学计算方法具有独特优势,它包含:

  • 一个强大的N维数组对象ndarray
  • 丰富的广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数、博立叶变换、随机数生成等功能

一、数据获取

要分析某地区的空气 质量状况,首先要取得该地区空气质量的历史数据

1、通过网络爬虫获取

按需编写

2、直接从网站下载

二、数据预处理

1、读取数据

NumPy提供的loadtxt()函数,能够快速地实现文本数据的读取:

 import numpy as np
 data = np.loadtxt(fname="数据集/aqi.csv",delimiter=",",skiprows=1,dtype=float)
  • 首先导入NumPy库(简称np),通过NumPy的loadtxt函数读取csv文件。

loadtxt()函数常用参数

参数 含义 例子
fname 加载的文件路径 fname="../data/aqi.csv";读取上级目录data下的aqi.csv文件
delimiter 数据之间的间隔符 delimiter=",";数据集之间以逗号分离
skiprows 忽略数据的位置 skiprows=1;忽略第一行(第一行为标题,不需要读取
dtype 数据类型 dtype=float;设置数据类型为float
  • 查看data中的数据:

 print(data)
  • 查看data的属性

 print(data.shape)   # 数组的维度 (1236, 11)
 print(data.size)    # 数组中元素总个数 13596

2、合并多个数据

2.1、垂直合并

 data1 = np.loadtxt("数据集/aqi_2017.csv",delimiter=",",skiprows=1,dtype=float)
 data2 = np.loadtxt("数据集/aqi_2018.csv",delimiter=",",skiprows=1,dtype=float)
 data3 = np.vstack((data1,data2))    # 按行合并两个文件

通过vstack()函数实现垂直合并数据功能。需要注意的是,在合并的文件中,字段的顺序和数量要保持一致

2.2、水平合并

 data4 = np.loadtxt("数据集/aqi_1.csv",delimiter=",",skiprows=1,dtype=float)
 data5 = np.loadtxt("数据集/aqi_2.csv",delimiter=",",skiprows=1,dtype=float)
 data6 = np.hstack((data4,data5))

通过hstack()函数实现水平合并数据功能。注意:在合并的文件中,数据的数量和顺序要一样

2.3、其它方法

在NumPy中,除了上述两种方法外,还可以使用row_stack()column_stack()函数实现同样的功能。另外还可以使用concatenate()函数来实现垂直合并和水平合并功能:

 np.concatenate((data1,data2),axis=0)    # axis=0表示垂直合并
 np.concatenate((data4,data5),axis=1)    # axis=0表示水平合并

NumPy的dstack()方法可以实现深度合并:

 r = np.array([[1,2,3],
               [4,5,6],
               [7,8,9]])
 g = np.array([[10,11,12],
               [13,14,15],
               [16,17,18]])
 b = np.array([[20,30,40],
               [50,60,70],
              [80,90,100]])
 color = np.dstack((r,g,b))
 ​
 # 结果为:
 # [[[  1  10  20]
 #   [  2  11  30]
 #   [  3  12  40]]
 # 
 #  [[  4  13  50]
 #   [  5  14  60]
 #   [  6  15  70]]
 # 
 #  [[  7  16  80]
 #   [  8  17  90]
 #   [  9  18 100]]]
 # 可知,dstack方法将r,g,b中对应位置上的数合并起来,生成三位数组

3、ndarray数据结构

NumPy的多维数组对象:ndarray。类似于Python的列表。只能存储单一数据类型

参数 含义
np.array(x,dtype) 将x转换为ndarray对象
np.ones(shape,dtype) 生成一个维度为shape、值全为1的ndarray对象
np.zeros(shape,dtype) 生成一个维度为shape、值全为0的ndarray对象
np.empty(shape,dtype) 生成一个维度为shape、未初始化的ndarray对象
np.eye(N) 生成一个N*N的单位矩阵(对角线元素为1,其余元素为0)

4、去除冗余数据

4.1、去除无用数据

delete()函数可以删除任意行或列的数据

 data = np.delete(data,0,axis=1) # 删除第一列数据
 ​
 # 如果要一次性删除多列,比如删除前三列数据:
 data = np.delete(data,[0,1,2],axis=1)

4.2、去除重复数据

unique()函数可以删除重复的数据

data = np.unique(data,axis=0) # 按行删除重复数据
data = np.unique(data,axis=1) # 按列删除重复数据

5、数据持久化存储

5.1、保存为文本文件

savetxt()方法可以将数据保存为文本文件:

np.savetxt("aqi2.csv",data,fmt="%.2f",newline='\n')

5.2、保存为二进制文件

save()函数以二进制格式保存数据,load()方法从二进制文件中读取数据:

np.save("aqi",data) # 保存数据
data = np.load("aqi.npy") # 读取数据

三、科学计算

1、获取任意范围样本数据

5.1、索引的使用

  • 使用索引可以定位到行或列
  • 索引的值可以从0开始
  • 索引的值也可以从-1开始
  • 使用逗号分割行和列
# 获取第1行数据:
data[0] 	# 方式1:使用索引,自上而下
data[-8]	# 方式2:使用索引,自下而上

# 获取第2-4行数据:
data9[[1,2,3]] # 将所有要获取的行索引存放到列表中

# 获取第3行第4列的数据:
data[2,3]	# 使用逗号分隔行和列,逗号左边代表行索引,右边代表列索引

5.2、切片的使用

  • 使用切片抽取行或列中某个范围的数据
  • 切片的起止位置用冒号分隔开
  • 将索引和切片结合起来使用,可以截取任意范围的数据
# 获取前3行数据
data[0:3,:]	# 方法1
data[:3,:]	# 方法2
data[:3,]	# 方法3

# 获取第2-4行中第3-5列数据
data[1:4,3:5]	# 注意行和列的终止索引分别是4和5

# 获取第2-5列数据:
data[:,1:5]	# 注意逗号左边的冒号不可以省略

# 获取最后3列数据
data[:,-3:]	# 注意data[:,-3:-1]的写法是错误的

2、计算特征的最小值、最大值和平均值

ndarray常用计算函数

计算方法 说明
ndarray.mean(axis) 求平均值
ndarray.sum(axis) 求和
ndarray.cumsum(axis) 累加
ndarray.sumprod(axis) 累成
ndarray.std(axis) 求标准差
ndarray.var(axis) 求方差
ndarray.max(axis) 求最大值
ndarray.min(axis) 求最小值

例子:

# 计算数据集中data中AQI的平均值、最大值和最小值
data[:,-1].mean(axis=0)	# AQI的平均值
data[:,-1].max(axis=0)	# AQI的最大值
data[:,-1].min(axis=0)	# AQI的最小值

# 分别计算NO2、CO和O3的最小值
data[:,-4:-1].min(axis=0)

# ndarray数组还可以与标量进行运算:
data1 = [[1,2,3],
        [4,5,6]]
data2 = np.array(data1)
data2 = data2*2 + 1

# 将数组中所有的数都变为原来的一半
data1 = [[1,2,3],
        [4,5,6]]
data2 = np.array(data1)
data2 = data2/2

3、统计

where()函数能得到符合条件的数据的索引

# 首先统计空气质量等级为优的天数
t=np.where(data[:,-1]<35)	# 得到所有符合条件的索引
print(t)
style1=len(t[0]) # 得到索引的数量

# 统计空气质量等级为良的天数
t=np.where((data[:,-1]>=35) & (data[:,-1]<75)) # 使用&分隔多个筛选条件
style2=len(t[0])

# 统计空气质量等级为差的天数
t=len(np.where(data[:,-1]>=75)[0])

4、预测空气质量

4.1、矩阵乘法原则

已知矩阵A和矩阵B,AB表示两个矩阵相乘,计算方法是将矩阵A中的每一行分别与矩阵B中每一列对应的元素相乘再相加

矩阵A的列数必须等于矩阵B的行数

4.2、NumPy矩阵乘法

dot(A,B)函数可以实现矩阵A和矩阵B的乘法运算:

import numpy as np
data = np.loadtxt("数据集/aqi_new.csv",delimiter=",",skiprows=1,dtype=float)
A = data[:,3:-1]    # 提取特征
B = [1.4,0.2,-0.05,-0.01,2.4,0.1] # 参数
B = np.array(B) # 转换为ndarray对象
B = B.reshape(6,1)  # 转换为6行1列
result = np.dot(A,B)    # 矩阵乘法
print(result)

四、总结

数据分析流程和实现函数:

流程 具体任务 实现函数
项目需求分析 项目介绍,项目流程和项目目标
环境搭建 AnacondaPycharm的介绍和安装
数据获取 获取项目需要的数据集 方法1:通过网络爬虫从网络中获取。方法2:直接从提供数据的网站下载
数据预处理 读取数据 np.loadtxt():读取文本文件。np.load():读取二进制文件
合并多个数据 np.vstack():按行合并。np.hstack():按列合并
去除冗余数据 np.delete()
数据持久化存储 np.savetxt():存储为文本形式。np.save():存储为二进制形式
科学计算与统计 获取任意范围的样本数据 索引和切片
计算特征的最小值、最大值和平均值 ndarray.min()ndarray.max()ndarray.mean()
统计不同空气质量等级的数量 np.where()
计算空气质量 np.dot()

相关推荐

  1. Python数据分析NumPy使用

    2024-04-12 01:00:03       14 阅读
  2. 使用Python进行数据分析

    2024-04-12 01:00:03       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-12 01:00:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-12 01:00:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-12 01:00:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-12 01:00:03       20 阅读

热门阅读

  1. Leaflet.js常用API记录

    2024-04-12 01:00:03       14 阅读
  2. 【运行环境】加载资源的形式

    2024-04-12 01:00:03       16 阅读
  3. Hutool是什么依赖?

    2024-04-12 01:00:03       16 阅读
  4. debian内核版本升级步骤详解

    2024-04-12 01:00:03       14 阅读
  5. jmeter生成随机数的详细步骤及使用方式

    2024-04-12 01:00:03       15 阅读
  6. 深入探讨string类的奥秘

    2024-04-12 01:00:03       13 阅读
  7. LISP入门

    2024-04-12 01:00:03       14 阅读
  8. node 中的 nextTick 和 vue 中的 nextTick 的区别

    2024-04-12 01:00:03       13 阅读
  9. Testng测试框架(5)--依赖

    2024-04-12 01:00:03       13 阅读
  10. sql语句自连接使用场景 案例

    2024-04-12 01:00:03       15 阅读