Python数据分析(一)—— Numpy快速入门

简介: Python数据分析(一)—— Numpy快速入门



NumPy(Numerical Python)是Python科学计算的基础包,极大地简化了向量和矩阵的操作处理。

1 创建Numpy对象

Numpy最重要的就是其N NN维数组对象ndarray,它是一个通用的同构数据多维容器,其中的所有元素必须是相同类型。每个数组都有一个shape(表示各维度大小)和一个dtype(表示数据数据类型)。

(1) np.array

使用 np.array创建 NumPy 数组,它接受一切序列型的对象,如python列表等。

嵌套序列(等长列表组成的列表)将会被转换为一个多维数组。

更多维度:

import numpy as np
data1 = [1,2,3,4,5]
arr1 = np.array(data1)
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
print(data1)
print(data2)

(2)其他创建函数

  • arange:相当于内置的range,返回一个ndarray对象,常与reshape搭配产生给定形状数组。
  • ones/ ones_like:根据指定形状和dtype创建一个全1数组/ones_like以另一个数组为参数,根据其形状和dtype创建一个全1数组
  • zeros/zeros_like:与 ones/ ones_like,产生全0数组
  • empty:创建新数组,只分配内存空间不填充任何值
  • eye/identify:创建一个N × N N \times NN×N单位矩阵

numpy.random对Python内置的random进行了补充,增加了一些用于高效生产多种概率分布的样本值的函数

  • random(size=None):产生[ 0 , 1 ) [0,1)[0,1)上随机值
  • rand(d0, d1, ..., dn):产生[ 0 , 1 ) [0,1)[0,1)上均匀分布的样本值
  • randint(low, high=None, size=None, dtype='l'):给定的上下限范围内随机选取整数
  • randn(d0, d1, ..., dn):产生正态分布(平均值为0,标准差为1)的样本值
  • binomial(n, p, size=None):产生二项分布的样本值
  • normal(loc=0.0, scale=1.0, size=None):产生正态(高斯)分布的样本值
  • beta(a, b, size=None):产生Beta分布的样本值
  • chisquare(df, size=None):产生卡方分布的样本值
  • gamma(shape, scale=1.0, size=None):产生Gamma分布的样本值
  • uniform(low=0.0, high=1.0, size=None):产生[ l o w , h i g h ) [low,high)[low,high)上长均匀分布的样本值



    When you print a 3-dimensional NumPy array, the text output visualizes the array differently than shown here. NumPy’s order for printing n-dimensional arrays is that the last axis is looped over the fastest, while the first is the slowest.
np.arange(6)
np.arange(6).reshape(2,3)
np.ones((3,2))
np.zeros((3,2))
np.empty((3,2))
np.eye(5)
np.random.random((3,2))
np.random.rand(2,3)
np.random.randint(1,10,size=(2,3))
np.random.randn(2,3)
np.random.uniform(5,10,size=(2,3))

2 索引与切片

Numpy数组的索引和切片与Python列表功能差不多,跟列表的重要区别在于,数组切片是原始数组的试图,数据不会被复制,视图上的任何修改都会直接反应到源数组上。

(1)基本索引与切片

数组的索引与切片

矩阵的索引与切片

(2)布尔型索引

对于数组names,假设每个名字对应data数组的一行,选出名字为’Bob’的所有行:对names数组和字符串’Bob’的比较运算将会产生一个布尔型数组,这个数组可用于数组索引(该数组长度必须与被索引轴的长度一致)。

names = np.array(['Bob','Joe','Will','Will','Alice','Joe','Bob'])
names=='Bob'
names[names=='Bob']
names[names!='Bob']

(3) 花式索引

花式索引(Fancy indexing)是一个Numpy术语,指的是利用整数数组进行索引,以特定顺序选取行子集或列子集。

arr = np.arange(20).reshape(5,4)
arr[[2,0,3]]  #按顺序分别选取第2、0、3行
arr[:,[1,2]]  #按顺序分别选取第2、3列

3 数学运算

(1)数组运算

Numpy数组运算使得不用编写循环即可对数据执行批量运算,通常称为矢量化(Vectorization)

不同大小数组之间的运算称为广播(broadcasting),如以下向量与标量直接的运算

(2)矩阵运算

算数运算

点积运算

计算过程如下:

numpy.linalg中有一组标准的矩阵分解、求逆和行列式的方法,与Matlab和R语言使用的是相同的行业标准级Fortran库,主要如下:

  • diag:以一维数组的形式返回方阵对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
  • dot:矩阵乘法
  • trace:对角线元素的和
  • det:矩阵行列式
  • eig:方阵的本征值和本征向量
  • inv:方阵的逆
  • pinv:矩阵的Moore-Penrose伪逆
  • qr:QR分解
  • svd:SVD分解
  • solve:解线性方程组A x = b Ax = bAx=bA AA为方阵
  • lstsqA x = b Ax=bAx=b的最小二乘解

4 统计方法

基本统计方法

  • sum:全部或轴向元素求和
  • mean:算数平均数。
  • std/var:标准差/方差
  • min/max:最小值/最大值
  • argmin/argmax:最大和最小元素的索引
  • cumsum:所有元素的累积和
  • cumprod:所有元素累积积

数组的聚合统计

矩阵的聚合统计

既可以基于行,也可以基于列

5 函数

Numpy可以看做简单函数的矢量化包装器。

(1)一元通用函数

  • abs:绝对值
  • sqrt:平方根
  • square:平方
  • exp:指数e x e^xex
  • log/log10/log2:分布对应底数为e ee(自然对数)、底数为10、底数为2的log ⁡ \loglog
  • ceil:大于等于该值的最小整数
  • floor:小于等于该值的最大整数

(2)二元通用函数

  • add:数组对应元素相加
  • subtract:数组对应元素相减
  • multiply:数组元素相乘
  • divide:数组元素相除
  • power:计算A B A^BAB,其中A AA为第一个数组中的元素,B BB为第二个数组中的元素
  • mod:元素级求模

6 其他方法

(1)转置

进行矩阵运算时,经常需要该操作,如利用np.dot计算矩阵内积X T X X^TXXTX。数组不仅有transpose方法,还有一个T属性。

arr = np.arange(15).reshape((3,5))
np.dot(arr,arr.T)

(2)np.where

np.where是三元表达式x if condition else y的矢量化版本。

arr = np.random.randn(4,4)
np.where(arr>0,2,-2) #正值设为2,负值设为-2

7 应用

(1)文本

对于文本需要将句子分成一个token 数组(基于通用规则的单词或单词的一部分),然后使用词汇表中的ID替换每个单词。

由于这些 ID 仍然没有为模型提供太多信息价值,一般使用word2vec嵌入(本例中为 50 维 word2vec 嵌入),NumPy 数组的维度为 [embedding_dimension x sequence_length] 。

像 BERT 这样的模型期望的输入形式是:[batch_size,sequence_length,embedding_size]:

(2)图像

对于彩色图像,每个像素由表示红绿蓝的三个数字表示,因此彩色图像由尺寸为(高 x 宽 x3)的 三维ndarray 表示:

(3)音频

CD质量的音频每秒包含44,100个样本,每个样本是-65535到65536之间的整数。音频文件是样本的一维数组,每个样本都是一个数字,代表音频信号的一小部分。对于10 秒的 CD 质量 WAVE 文件,可以将其加载到长度为10 × 44 , 100 = 441 , 000 10 \times 44,100 = 441,00010×44,100=441,000 的 NumPy 数组中。

Reference

https://jalammar.github.io/visual-numpy/

相关文章
|
19天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
57 4
数据分析的 10 个最佳 Python 库
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
41 2
|
1月前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
39 3
|
1月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
65 5
|
1月前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
59 2
|
1月前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
2月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--进阶
Python数据分析篇--NumPy--进阶
21 0
|
4月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
88 2
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
213 4
|
4月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
92 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析