数据分析之上篇---numpy模块
一、简介
Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。
安装方法:
pip install numpy
在jupyter中:需要加!,!pip3 install numpy
引用方式:
import numpy as np
这是官方认证的导入方式,可能会有人说为什么不用from numpy import *
,是因为在numpy当中有一些方法与Python中自带的一些方法,例如max
、min
等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法。
二、ndarray -多维数组对象
Numpy的核心特征就是N-维数组对——ndarray.
1、为什么要是用ndarray?
接下来我们可以通过具体的实例来展示一下ndarray的优势。
现在有这样一个需求:
已知若干家跨国公司的市值(美元),将其换算为人民币
按照Python当中的方法
第一种:是将所有的美元通过for循环依次迭代出来,然后用每个公司的市值乘以汇率
第二种:通过map方法和lambda函数映射
这些方法相对来说也挺好用的,但是再来看通过ndarray对象是如何计算的
通过ndarray这个多维数组对象可以让这些批量计算变得更加简单,当然这只它其中一种优势,接下来就通过具体的操作来发现。
2、创建ndarray对象
import numpy as np
np.array()
3、ndarray多维数组创建
接下来就多维数组举个例子:
有的人可能会说了,这个数组跟Python中的列表很像啊,它和列表有什么区别呢?
- 数组对象内的元素类型必须相同
- 数组大小不可修改
4、常用属性
属性 | 描述 | |
---|---|---|
T | 数组的转置(对高维数组而言) | |
dtype | 数组元素的数据类型 | |
size | 数组元素的个数 | |
ndim | 数组的维数 | |
shape | 数组的维度大小(以元组形式) |
T:转置
就相当于是将行变成列,列变成行,它也是一个比较常用的方法
5、数据类型
- dtype
类型 | 描述 | |
---|---|---|
布尔型 | bool_ | |
整型 | int_ int8 int16 int32 int 64 | |
无符号整型 | uint8 uint16 uint32 uint64 | |
浮点型 | float_ float16 float32 float64 | |
复数型 | complex_ complex64 complex128 |
整型:
int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数
无符号整型:
只能用来存正数,不能用来存负数
补充:
astype()方法可以修改数组的数据类型
6、ndarray 数组创建
方法 | 描述 | |
---|---|---|
array() | 将列表转换为数组,可选择显式指定dtype | |
arange() | range的numpy版,支持浮点数 | |
linspace() | 类似arange(),第三个参数为数组长度 | |
zeros() | 根据指定形状和dtype创建全0数组 | |
ones() | 根据指定形状和dtype创建全1数组 | |
empty() | 根据指定形状和dtype创建空数组(随机值) | |
eye() | 根据指定边长和dtype创建单位矩阵 |
# 1、arange()使用:
>>> np.arange(3)
array([0, 1, 2])
>>> np.arange(3.0)
array([ 0., 1., 2.])
>>> np.arange(3,7)
array([3, 4, 5, 6])
>>> np.arange(3,7,2)
array([3, 5])
-----------------------------------------------------------------
# 2、linspace()的使用
#解释:在1-10之间等比生成5个数,默认顾头顾尾。endpoint=False顾头不顾尾
# 每个数字之间的距离相等的,前后两个数做减法肯定相等
np.linspace(1,10,5)
执行结果:
array([ 1. , 3.25, 5.5 , 7.75, 10. ])
np.linspace(1,10,5,endpoint=False)
执行结果:
array([1. , 2.8, 4.6, 6.4, 8.2])
----------------------------------------------------------------
# 3、zeros() # 创建全0数组占位
>>> np.zeros(5)
array([ 0., 0., 0., 0., 0.])
>>> np.zeros((5,), dtype=int)
array([0, 0, 0, 0, 0])
>>> np.zeros((2, 1))
array([[ 0.],
[ 0.]])
>>> s = (2,2)
>>> np.zeros(s)
array([[ 0., 0.],
[ 0., 0.]])
---------------------------------------------------------------------
# 4、ones() # 厨房间全为1的数组占位
>>> np.ones(5)
array([1., 1., 1., 1., 1.])
>>> np.ones((5,), dtype=int)
array([1, 1, 1, 1, 1])
>>> np.ones((2, 1))
array([[1.],
[1.]])
>>> s = (2,2)
>>> np.ones(s)
array([[1., 1.],
[1., 1.]])
------------------------------------------------------------------------
# 5、empty()
np.empty(10)
执行结果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 这个方法只申请内存,不给它赋值
-----------------------------------------------------------------------
# 6、eye() # 生成对称矩阵 k控制向右偏移量
np.eye(5)
执行结果:
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
>>> np.eye(2, dtype=int)
array([[1, 0],
[0, 1]])
>>> np.eye(5,k=2)
array([[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
7、数组运算和转换
数组和标量(数字)之间运算
arr = np.array([1,2,3,4,5,6])
arr*2
# 执行结果:
array([ 2, 4, 6, 8, 10, 12])
-----------------------------------------------------------------------
arr = np.array([1,2,3,4,5,6])
arr1 = np.array([11,22,33,44,55,66])
arr*arr1
# 执行结果:
array([ 11, 44, 99, 176, 275, 396])
arr+arr1
# 执行结果:
array([12, 24, 36, 48, 60, 72])
一维数组与多维数组之间的转换
# 一维数组-->多维数组
res1 = np.arange(30).reshape(5,-1) # -1无任何作用,占位。系统自动算出几列
res1
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
# 多维数组-->一维数组
res2 = res1.reshape(30)
res2
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
8、索引和切片
索引取值
# 多维数组索引使用方法
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
现在有这样一组数据,需求:找到20
列表写法:arr[3][2]
数组写法:arr[3,2] # 中间通过逗号隔开就可以了
# 一维数组索引使用
array([1, 2, 3, 4, 5, 6])
arr[0] # 1
arr[2] # 3
# 花式索引,列表里放索引。需要提前知道索引
array([1, 2, 3, 4, 5, 6])
arr[[0,3]] # array([1, 4])
切片
# 一维数组切片:和python一至
array([1, 2, 3, 4, 5, 6])
arr[0:2] # array([1, 2]
arr[::-1] # array([6, 5, 4, 3, 2, 1])
arr[::2] # array([1, 3, 5])
# 多维数组切片:arr[行:列]
arr数组
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
arr[1:4,1:4] # 切片方式
执行结果:
array([[ 7, 8, 9],
[13, 14, 15],
[19, 20, 21]])
布尔型索引
现在有这样一个需求:给一个数组,选出数组种所有大于5的数。
array([1, 2, 3, 4, 5, 6])
arr > 4
array([False, False, False, True, True, True])
取值:
arr[arr>3]
array([4, 5, 6])
三、通用函数
能对数组中所有元素同时进行运算的函数就是通用函数
常见通用函数:
能够接受一个数组的叫做一元函数,接受两个数组的叫二元函数,结果返回的也是一个数组
1、一元函数
函数 | 功能 | |
---|---|---|
abs、fabs | 分别是计算整数和浮点数的绝对值 | |
sqrt | 计算各元素的平方根 | |
square | 计算各元素的平方 | |
exp | 计算各元素的指数e**x | |
log | 计算自然对数 | |
sign | 计算各元素的正负号 | |
ceil | 计算各元素的ceiling值 | |
floor | 计算各元素floor值,即小于等于该值的最大整数 | |
rint | 计算各元素的值四舍五入到最接近的整数,保留dtype | |
modf | 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似 | |
isnan | 计算各元素的正负号 | |
isinf | 表示那些元素是无穷的布尔型数组 | |
cos,sin,tan | 普通型和双曲型三角函数 |
2、二元函数
函数 | 功能 | |
---|---|---|
add | 将数组中对应的元素相加 | |
subtract | 从第一个数组中减去第二个数组中的元素 | |
multiply | 数组元素相乘 | |
divide、floor_divide | 除法或向下圆整除法(舍弃余数) | |
power | 对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B | |
maximum,fmax | 计算最大值,fmax忽略NAN | |
miximum,fmix | 计算最小值,fmin忽略NAN | |
mod | 元素的求模计算(除法的余数) |
补充内容:浮点数特殊值
浮点数:float
浮点数有两个特殊值:
1、nan(Not a Number):不等于任何浮点数(nan != nan)
---------------------------------------------
2、inf(infinity):比任何浮点数都大
---------------------------------------------
- Numpy中创建特殊值:np.nan、np.inf
- 数据分析中,nan常被用作表示数据缺失值
3、数学统计方法
函数 | 功能 | |
---|---|---|
sum | 求和 | |
cumsum | 求前缀和 | |
mean | 求平均数 | |
std | 求标准差 | |
var | 求方差 | |
min | 求最小值 | |
max | 求最大值 | |
argmin | 求最小值索引 | |
argmax | 求最大值索引 |
4、随机数
随机数生成函数在np.random的子包当中
常用函数
函数 | 功能 | |
---|---|---|
np.random.rand | 给定形状产生随机数组(0到1之间的数) | |
np.random.randint | 给定形状产生随机整数 | |
np.random.choice | 给定形状产生随机选择 | |
np.random.shuffle | 与random.shuffle相同 | |
np.random.uniform | 给定形状产生随机数组 |
数据分析之上篇---numpy模块的更多相关文章
- 数据分析01 /numpy模块
数据分析01 /数据分析之numpy模块 目录 数据分析01 /数据分析之numpy模块 1. numpy简介 2. numpy的创建 3. numpy的方法 4. numpy的常用属性 5. num ...
- 【Python 数据分析】Numpy模块
Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~g ...
- 开发技术--Numpy模块
开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...
- Python使用pip安装Numpy模块
安装Numpy模块一般有两种安装方法: 一:下载模块对应的.exe文件,直接双击运行安装 二:下载模块对应的.whl文件,使用pip安装 对于exe文件的安装比较简单,都是双击运行,这里就不说了. 这 ...
- numpy模块常用函数解析
https://blog.csdn.net/lm_is_dc/article/details/81098805 numpy模块以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter note ...
- numpy模块、matplotlib模块、pandas模块
目录 1. numpy模块 2. matplotlib模块 3. pandas模块 1. numpy模块 numpy模块的作用 用来做数据分析,对numpy数组(既有行又有列)--矩阵进行科学计算 实 ...
- pandas、matplotlib、Numpy模块的简单学习
目录 一.pandas模块 二.matplotlib模块 1.条形图 2. 直方图 3.折线图 4.散点图+直线图 三.numpy 一.pandas模块 pandas是BSD许可的开源库,为Pytho ...
- Python之路-numpy模块
这里是首先需要安装好Anaconda Anaconda的安装参考Python之路-初识python及环境搭建并测试 配置好环境之后开始使用Jupyter Notebook 1.打开cmd,输入 jup ...
- numpy模块(详解)
重点 索引和切片 级联 聚合操作 统计操作 矩阵 什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 数据分析是用适当的方法对收集来的大量数据进行分析,帮助 ...
随机推荐
- 从 ListView 到 RecyclerView 的用法浅析
文章目录 要走好明天的路,必须记住昨天走过的路,思索今天正在走着的路. ListView,一种在垂直滚动列表中显示条目的视图:RecyclerView,一种在局限的窗口呈现大数据集合的灵活视图.Rec ...
- JQuery之选择器篇(一)
今天回顾了之前学习的JQuery选择器,现在简单的总结一下. JQuery选择器类型 主要分为四类 基本选择器 层级选择器 过滤选择器 表单选择器 基本选择器 基本选择器是jQuery中最 ...
- 这个黑科技iPhone8会用吗?人体传送密码解开锁屏
随着现代化信息技术的发展,人们对信息安全也是愈发关注,数据安全始终是个热点和难点.通过WIFI或者蓝牙进行密码传输确实非常方便,但是它已经不再具备安全保障.因此为了解决信息安全的问题,华盛顿大学的 ...
- 自定义Toast的出现样式
使用下面的方法来获取一个Toast对象: private Toast showShortToast() { if (toast == null) { toast = new Toast(this); ...
- 软件工程实验一 Git代码版本管理
实验一 GIT 代码版本管理 一.实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)熟练掌握git的基本指令和分支管理指令: 二.实验内容: 1)安装git: 2)初始配置git ,gi ...
- c++获取屏幕大小
API: 要取得屏幕大小,可以用下面几个函数: # include <windows.h>int cx = GetSystemMetrics( SM_CXFULLSCREEN ); int ...
- fsLayuiPlugin数据表格动态转义
数据表格动态转义提供一种更简洁的方式,主要解决前端laytpl模板转义的问题,对于一些简单的,例如:状态展示,我们可以通过前端编写laytpl模板来处理:对于动态的数据,通过这种静态方式是没有办法处理 ...
- 如何优雅的把后台数据(通常是JSON)轻松渲染到html页面
如何优雅的把后台数据(通常是JSON)轻松渲染到html页面 在我们做前后端分离的时候,都有遇到过一些看起卡很简答,确无从下手的问题把.比方说后台给了前端一个list集合,集合里面有很多学生,我们现在 ...
- Mysql(Mariadb)之SET语法分析以及系统变量和用户变量分析(英文&中文)(转载)
SET Syntax SET variable_assignment [, variable_assignment] ... variable_assignment: user_var_name = ...
- 文本编辑器 - Sublime Text 3 换行无法自动缩进的解决方法
一.换行无法自动缩进的问题,如图: 稍微查了一下网上的办法,是把汉化文件删除,但是会造成菜单栏混乱,简直无法忍受... 那么这里介绍的是另一种解决办法.在用户的热键配置文件(preferences-k ...