分享

Python数据分析之NumPy第一练:为什么会有NumPy库

 网摘文苑 2022-05-05 发布于新疆

业务背景

在Python数据分析之爬虫的练习中,我们只是按部就班滴把爬虫的应用流程执行了一遍,并没有过多地介绍数据类型方面的内容,使用的都是Python自带的类型,比如列表等。

page_date = '<span class='c-color.*?aria-label='发布于:(.*?)''date = re.findall(page_date, page, re.S)print(date)print(type(date)) # 通过type()函数查询数据类型'''查询结果为:['4天前', '7天前', '5天前', '5天前', '6天前', '昨天16:16', '419', '420', '昨天16:16', '4天前']<class 'list'> '''

但是这只是整个数据分析流程的第一步:数据获取和预处理,我们拿到数据后还需要进行必要的数据计算、数据建模等环节,如果只是使用Python默认的数据类型就会比较麻烦,需要使用专精于科学计算和数学分析的工具包,主要是本篇所提到的NumPy以及以此为基础的Pandas。

什么是NumPy

NumPy是Python中科学计算的基础包,它提供了多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种例程,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。

Python数据分析之NumPy第一练:为什么会有NumPy库

Numpy

NumPy包的核心是ndarray对象,封装了相同数据类型的n维数组,许多操作在编译代码中执行以提高性能。

NumPy数组和标准Python序列之间有几个重要的区别

  • NumPy数组在创建时具有固定大小,更改ndarray的大小将创建一个新数组并删除原始数组,这与Python列表可以动态增长不同。
  • NumPy数组中的元素都必须具有相同的数据类型,因此在内存中的大小相同。当然,对于可以有对象(Python,包括 NumPy)的数组,允许不同大小元素的数组。
  • NumPy数组有助于对大量数据进行高级数学运算和其他类型的运算。一般地,与使用 Python的内置序列相比,此类操作的执行效率更高,代码更少。
  • 越来越多的基于Python的科学和数学包正在使用 NumPy数组。

综上所述,为了有效地使用当今许多(甚至大部分)基于Python的科学或数学软件包,除了知道如何使用Python内置序列类型外,必须需要知道如何使用NumPy数组。

下面两个链接分别是NumPy的官方文档和新手指南地址,有需要的伙伴请自行查阅,当然有需要中文版的伙伴也可以留言,鄙人友情提供

NumPy的官方文档地址:
https:///doc/stable/

Numpy官方新手指南地址:
https:///doc/stable/user/absolute_beginners.html

NumPy应用示例

本文先只对常规的用法予以举例说明,我的观点还是够用就好,随用随学,这样在实际需求或者项目中应用,会比单纯地为了学习而学习掌握的效果更好

首先,给出一个Python列表(list)和NumPy数组(ndarray)对比的例子。

import numpy as np  # 用np代替numpy,后续调用比较简洁# help(np)  # 如果有需要可以通过help()查阅帮助文档# 数组与列表的对比a = [1, 2, 3, 4]b = np.array(a)print(a)  # 列表list的展现形式print(type(a))print(b)  # 数据ndarray的展现形式print(type(b))print(a[1])  # 索引查询结果print(b[1])print(a[0:2])  # 切片查询结果print(b[0:2])'''输出结果为:[1, 2, 3, 4]<class 'list'>[1 2 3 4]<class 'numpy.ndarray'>22[1, 2][1 2]'''

从上面的例子中可以看到,其实列表和数组在基本表现上的差异并不大。

Python数据分析之NumPy第一练:为什么会有NumPy库

list与数组的对比

那么为什么Python又要创建一个NumPy库呢?主要有两点:

  • 第一,NumPy作为一个数据处理的库,能很好地支持一些数学运算,而列表则较为麻烦。
  • 第二,数组支持多维数据,而列表通常只能存储一维数据。一维数据和多维数据是什么意思呢?我们可以借用立体几何中的概念来帮助理解:一维类似一条直线,多维则类似平面(二维)或立体(三维)等。
# 数组的优势1-数组方便数学运算c = a * 2d = b * 2print(c)print(d)'''输出结果为:[1, 2, 3, 4, 1, 2, 3, 4][2 4 6 8]'''# 数组的优势2-数组可以是多维的e = [[1, 2], [3, 4], [5, 6]] # 列表里的元素为小列表f = np.array([[1, 2], [3, 4], [5, 6]]) # 创建二维数组的一种方式print(e)print(f)'''输出结果为:[[1, 2], [3, 4], [5, 6]][[1 2] [3 4] [5 6]]'''

既然数据具有如此明显的优势,那么该如何创建数组呢?

# 创建一维数组g = np.array([1, 2, 3, 4])# 创建二维数组h = np.array([[1, 2], [3, 4], [5, 6]])print(g)print(h)# 其他创建数组的方式# 1.通过np.arange()函数创建# 一个参数 参数值为终点,起点取默认值0,步长取默认值1i = np.arange(5)# 两个参数 第一个参数为起点,第二个参数为终点,步长取默认值1,左闭右开j = np.arange(5,10)# 三个参数 第一个参数为起点,第二个参数为终点,第三个参数为步长,左闭右开k = np.arange(5, 10, 0.5)print(i)print(j)print(k)# 2.通过np.random.randn()创建随机一维数组l = np.random.randn(3)print(l)# 3.通过np.arange()函数和reshape方法产生二维数组m = np.arange(12).reshape(3,4)print(m)# 4.创建一个随机二维数组n = np.random.randint(0, 10, (4, 4))print(n)'''输出结果为:[1 2 3 4][[1 2] [3 4] [5 6]][0 1 2 3 4][5 6 7 8 9][5.  5.5 6.  6.5 7.  7.5 8.  8.5 9.  9.5][-0.10869424 -1.22276509 -0.53978378][[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11]][[0 8 7 5] [9 0 2 5] [9 4 1 5] [7 2 4 5]]'''
Python数据分析之NumPy第一练:为什么会有NumPy库

创建一维数组

Python数据分析之NumPy第一练:为什么会有NumPy库

通过单调序列初始化数组

上面的可视化图形引用自译言网的《图解 | NumPy可视化指南》,它详细地给出了NumPy的使用指南,有全面了解需求的伙伴可以自行查询,访问地址为:
https://www./TextTranslation/3198。

一起动手练

最后,又到了一起动手连环节,请伙伴们根据自己的数据需求练习下NumPy的操作。再次强调下,本偏的NumPy只是后面Pandas的基础,够用即可,后续可以在实战环境中不断学习,丰富自己的知识网络。

欢迎给位伙伴互动评论,U're welcome~~~

Python数据分析之NumPy第一练:为什么会有NumPy库

学习学习

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多