NumPy数据分析基础:NumPy特性以及Python内置数据结构对比详解

简介: NumPy数据分析基础:NumPy特性以及Python内置数据结构对比详解

前言


作为数据分析三巨头Pandas、matplotlib、NumPy之一,必然要给足面子单独拿出来讲解一波。NumPy应用场景十分宽泛,Pandas很多函数转换后也都是NumPy数组类型的数据结构。在机器学习、深度学习以及一些数据处理操作中使用的频率甚至比Pandas都高。而且NumPy功能强大,使用起来也十分便捷,支持多种复杂操作。平时我的Pandas以及一些机器学习的文章都有用到NumPy,但是博客内容并没有详细解答NumPy的操作也没有记录有关NumPy操作的一些具体函数解答。对于我这种追求一站式服务需求的博主来说着实有点不妥,故把旧坑补上,出一期全新的一文速学系列-Numpy数据分析基础专栏。


此系列文章将被纳入我的专栏一文速学系列-NumPy数据分析基础,基本覆盖到使用NumPy数据分析日常业务以及常规的数学建模分析以及复杂操作方方面面的问题。从基础的数组操作逐步入门到处理矩阵矢量特征等复杂操作,以及专业的NumPy常用函数讲解,我都将花费了大量时间和心思创作,如果大家有需要从事数据分析或者数据开发、数学建模、Python工程的朋友推荐订阅专栏,将在第一时间学习到最实用常用的知识。此篇博客篇幅较长,值得细读实践一番,我会将精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。


一、Numpy与Python内置结构区别


一个用python实现的科学计算,包括:


1、一个强大的N维数组对象Array;


2、比较成熟的函数库;


3、用于整合C/C++和Fortran代码的工具包;


4、实用的线性代数、傅里叶变换和随机数生成函数。


Numpy和稀疏矩阵运算包scipy配合使用更加方便,配合Pandas数据分析更加全面。NumPy是Python中科学计算的基本包。它是一个Python库,提供多维数组对象、各种派生对象(如掩码数组和矩阵),以及对数组进行快速操作的各种例程,包括数学、逻辑、形状操作、排序、选择、I/O、离散傅里叶变换、基本线性代数、基本统计操作、随机模拟等。


NumPy包的核心是ndarray对象。这封装了同构数据类型的n维数组,为了提高性能,许多操作都在编译的代码中执行。NumPy数组和标准Python序列之间有几个重要区别:


与Python列表(可以动态增长)不同,NumPy数组在创建时具有固定大小。更改标准阵列的大小将创建一个新阵列并删除原始阵列。

NumPy数组中的元素都需要具有相同的数据类型,因此内存大小相同。例外情况是:可以有(Python,包括NumPy)对象的数组,从而允许不同大小的元素的数组。

NumPy数组便于对大量数据进行高级数学和其他类型的操作。通常,与使用Python的内置序列相比,此类操作的执行效率更高,代码更少。

越来越多的基于Python的科学和数学软件包正在使用NumPy数组;虽然它们通常支持Python序列输入,但它们在处理之前将此类输入转换为NumPy数组,并且通常输出NumPy数组。换句话说,为了有效地使用当今许多(甚至大多数)基于Python的科学/数学软件,仅仅知道如何使用Python的内置序列类型是不够的,还需要知道如何使用NumPy数组。


二、操作性能对比


序列大小和速度在科学计算中尤为重要。作为一个简单的例子,考虑将一维序列中的每个元素与另一个长度相同的序列中的相应元素相乘的情况。如果数据存储在两个Python列表a和b中,我们可以迭代每个元素:

a=[1,2,3,4]
b=[5,6,7,8]
c = []
for i in range(len(a)):
    c.append(a[i]*b[i])

但如果a和b都包含数百万个数字,Python中循环远远没有C言语高效。可以用C语言通过编写来更快地完成相同的任务(为了清晰起见,忽略了变量声明和初始化、内存分配等):

for (i = 0; i < rows; i++) {
  c[i] = a[i]*b[i];
}


但是存在多维数组的情况就十分的复杂了,尤其是多维数组中再进行聚合操作,将大大增加了代码的复杂度和时间复杂度。

for (i = 0; i < rows; i++) {
  for (j = 0; j < columns; j++) {
    c[i][j] = a[i][j]*b[i][j];
  }
}

但是NumPy基于以上两种方式的优化,它底层代码是由C语言编写,而且使用方法极其简单:当涉及到ndarray时,逐元素操作是“默认模式”,但逐元素操作由预编译的C代码快速执行:

import numpy as np
a=np.array([1,2,3,4])
b=np.array([5,6,7,8])
c=a*b


以接近C的速度执行前面的示例所做的操作,并且基于Python的代码具有简单性。使用NumPy甚至更简单。最后一个例子说明了NumPy的两个特性,它们是其强大功能的基础:矢量化和广播。


三、底层架构


矢量化描述了代码中没有任何显式循环、索引等,当然,这些都是在优化、预编译的C代码中“幕后”发生的。矢量化代码有许多优点,其中包括:


矢量化代码更简洁,更易于阅读

更少的代码行通常意味着更少的bug

代码更接近于标准的数学符号(通常更容易正确编码数学结构)

矢量化会产生更多的“Pythonic”代码。如果没有矢量化,我们的代码将充斥着低效和难以阅读的循环。

广播是用于描述操作的隐式元素逐个元素行为的术语;一般来说,在NumPy中,所有操作,不仅是算术操作,而且是逻辑、位、函数等,都以这种隐式的逐元素方式表现,即它们广播。此外,在上面的示例中,a和b可以是相同形状的多维数组,或者是一个标量和一个数组,甚至是具有不同形状的两个数组,前提是较小的数组可以“扩展”为较大的数组的形状,从而使生成的广播明确无误。有关广播的详细“规则”,请参见:


Broadcasting — NumPy v1.24.dev0 Manual


NumPy完全支持面向对象的方法,再次从ndarray开始。例如,ndarray是一个类,拥有许多方法和属性。它的许多方法都是由最外层的NumPy名称空间中的函数镜像的,允许程序员以他们喜欢的任何范式进行编码。这种灵活性使NumPy数组方言和NumPy-ndarray类成为Python中使用的多维数据交换的事实语言。

目录
相关文章
|
2天前
|
SQL 并行计算 API
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
19 9
|
3天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
【7月更文挑战第12天】Python的Pandas和NumPy库助力高效数据处理。Pandas用于数据清洗,如填充缺失值和转换类型;NumPy则擅长数组运算,如元素级加法和矩阵乘法。结合两者,可做复杂数据分析和特征工程,如产品平均销售额计算及销售额标准化。Pandas的时间序列功能,如移动平均计算,进一步增强分析能力。掌握这两者高级技巧,能提升数据分析质量和效率。
17 4
|
3天前
|
算法 Python
逆袭之路!用 Python 玩转图的 DFS 与 BFS,让数据结构难题无处遁形
【7月更文挑战第12天】图的遍历利器:DFS 和 BFS。Python 中,图可表示为邻接表或矩阵。DFS 沿路径深入,回溯时遍历所有可达顶点,适合找路径和环。BFS 层次遍历,先近后远,解决最短路径问题。两者在迷宫、网络路由等场景各显神通。通过练习,掌握这些算法,图处理将游刃有余。
10 3
|
2天前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
9 1
|
1天前
|
数据采集 数据挖掘 数据处理
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
【7月更文挑战第14天】Python的Pandas和NumPy库是数据分析的核心工具。Pandas以其高效的数据处理能力,如分组操作和自定义函数应用,简化了数据清洗和转换。NumPy则以其多维数组和广播机制实现快速数值计算。两者协同工作,如在DataFrame与NumPy数组间转换进行预处理,提升了数据分析的效率和精度。掌握这两者的高级功能是提升数据科学技能的关键。**
7 0
|
2天前
|
存储 数据可视化 数据处理
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
4 0
|
3天前
|
数据挖掘 数据处理 决策智能
Python 数据分析工具箱:深挖 Pandas 与 NumPy 高级功能,驱动智能决策
【7月更文挑战第12天】Python的Pandas和NumPy是数据分析的基石。Pandas提供灵活的数据结构如DataFrame,用于高效处理关系型数据,而NumPy则以多维数组和科学计算功能著称。两者结合,支持数据合并(如`pd.merge`)、时间序列分析(`pd.to_datetime`)和高级数组运算。通过掌握它们的高级特性,能提升数据分析效率,应用于各领域,如金融风险评估、市场分析和医疗预测,助力数据驱动的决策。学习和熟练运用Pandas与NumPy是成为出色数据分析师的关键。
|
6天前
|
机器学习/深度学习 监控 算法
Python数据分析与机器学习在金融风控中的应用
Python数据分析与机器学习在金融风控中的应用
32 12
|
4天前
|
机器学习/深度学习 存储 数据可视化
这份Excel+Python飞速搞定数据分析手册,简直可以让Excel飞起来
微软在 UserVoice 上运营着⼀个反馈论坛,每个⼈都可以在这⾥提交新点⼦供他⼈投票。票数最⾼的功能请求是“将 Python 作为Excel 的⼀门脚本语⾔”,其得票数差不多是第⼆名的两倍。尽管⾃2015 年这个点⼦发布以来并没有什么实质性进展,但在 2020 年年末,Python 之⽗ Guido van Rossum 发布推⽂称“退休太无聊了”,他将会加入微软。此事令 Excel ⽤户重燃希望。我不知道他的举动是否影响了 Excel 和 Python 的集成,但我清楚的是,为何⼈们迫切需要结合 Excel 和 Python 的⼒量,⽽你⼜应当如何从今天开始将两者结合起来。总之,这就是本
|
6天前
|
数据采集 机器学习/深度学习 数据挖掘
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战