python数据分析之numpy详细学习笔记

简介: 简介:这篇文章是自己学习数据分析的第三篇了,正好写完了“数据分析三剑客”,因为本身也是初学者,所以知识点较为基础,希望能对你有所帮助。

一、学习前的准备


导入numpy

import numpy as np


二、numpy原生数组的创建


1、np.array()

array():创建一个数组

2、np.eye()

eye(N,M,K):创建一个对角线为1的二维数组

N:为输出的行数

M:为输出的列数,默认与N相同

K:可以理解为数值为1的对角线的偏移量,k为正,则向右移动,为负,则向左移动

3、np.zeros()

  • zeros():创建一个用指定形状用0填充的数组。

zeros(shape, dtype=float, order=‘C’)

shape:形状,也就是几行几列的数组

dtype:可选参数,数据类型,默认numpy.float64

order:可选参数,c代表与c语言类似,行优先;F代表列优先

4、np.ones()

  • ones():将创建一个用指定形状用1填充的数组

与ones用法类似

5、np.arrange()

  • arrange():创建一具有有规律递增值的数组

arrange()内的常见参数有三种情况(也可以加dtype参数):

1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。

2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。

3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数。

6、np.linspace()

  • linspace():将创建具有指定数量元素的数组,并在指定的开始值和结束值之间平均间隔。

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)此为默认值

1、将区间[start, stop]分成等间隔的num个数(包含start和stop两个数),并返回它们组成的数组;

2、若endpoint=False,就将区间[start, stop]分成等间隔的num+1个数,但返回的数组中不包括‘stop’项;

3、若retstep=True,返回值格式为 (数组部分, 间隔长度),即在原有数组部分的基础上,加上间隔长度的数据;

4、 dtype决定输出数组的数据类型,若是未指定,则根据输入参数决定。

5、 axis在二维数组上面有着一定的作用

7、np.indices()

  • indices():创建一组数组(堆积为一个更高的数组),每个维度一个,每个维度表示该维度中的变化。

示例:

# -*- coding: UTF-8 -*-
"""
@Author  :远方的星
@Time   : 2021/5/1 11:01
@CSDN    :https://blog.csdn.net/qq_44921056
@腾讯云   : https://cloud.tencent.com/developer/column/91164
"""
import numpy as np
print('---------------narry的例子--------------------')
print(np.array([5, 2.1, 'love', 'M']))
print('---------------eye默认情况--------------------')
print(np.eye(4))
print('---------------eye中参数M与N不一致------------')
print(np.eye(4, 3))
print('---------------eye中参数K为正数---------------')
print(np.eye(4, k=1))
print('---------------eye中参数K为负数---------------')
print(np.eye(4, k=-1))
print('---------------zeros中dtype取默认值-----------')
print(np.zeros((2, 3)))
print('---------------zeros中dtpye取int--------------')
print(np.zeros((2, 3), dtype=int))
print('---------------ones的一个小例子---------------')
print(np.ones((2, 3)))
print('---------------arrange不加入dtype参数---------')
print(np.arange(2, 10, 2))
print('---------------arrange加入dtype参数-----------')
print(np.arange(2, 10, 2, dtype=float))  # 这里更规范可以写成np.float
print('---------------linspace的例子-----------------')
print(np.linspace(start=1, stop=3, num=5, endpoint=True, retstep=False, dtype=None, axis=0))
print('---------------linspace中参数endpoint=False---')
print(np.linspace(start=1, stop=3, num=5, endpoint=False, retstep=False, dtype=None, axis=0))
print('---------------linspace中参数retstep=True-----')
print(np.linspace(start=1, stop=3, num=5, endpoint=True, retstep=True, dtype=None, axis=0))
print('---------------linspace中dtype参数------------')
print(np.linspace(start=1, stop=3, num=5, endpoint=True, retstep=False, dtype=float, axis=0))
print('---------------indices的第一个例子------------')
print(np.indices((3, 4)))
print('---------------indices的第2个例子------------')
print(np.indices((6, 5), dtype=float))

输出:

---------------narry的例子--------------------
['5' '2.1' 'love' 'M']
---------------eye默认情况--------------------
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
---------------eye中参数M与N不一致------------
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]
 [0. 0. 0.]]
---------------eye中参数K为正数---------------
[[0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]
 [0. 0. 0. 0.]]
---------------eye中参数K为负数---------------
[[0. 0. 0. 0.]
 [1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]]
---------------zeros中dtype取默认值-----------
[[0. 0. 0.]
 [0. 0. 0.]]
---------------zeros中dtpye取int--------------
[[0 0 0]
 [0 0 0]]
---------------ones的一个小例子---------------
[[1. 1. 1.]
 [1. 1. 1.]]
---------------arrange不加入dtype参数---------
[2 4 6 8]
---------------arrange加入dtype参数-----------
[2. 4. 6. 8.]
---------------linspace的例子-----------------
[1.  1.5 2.  2.5 3. ]
---------------linspace中参数endpoint=False---
[1.  1.4 1.8 2.2 2.6]
---------------linspace中参数retstep=True-----
(array([1. , 1.5, 2. , 2.5, 3. ]), 0.5)
---------------linspace中dtype参数------------
[1.  1.5 2.  2.5 3. ]
---------------indices的第一个例子------------
[[[0 0 0 0]
  [1 1 1 1]
  [2 2 2 2]]
 [[0 1 2 3]
  [0 1 2 3]
  [0 1 2 3]]]
---------------indices的第2个例子------------
[[[0. 0. 0. 0. 0.]
  [1. 1. 1. 1. 1.]
  [2. 2. 2. 2. 2.]
  [3. 3. 3. 3. 3.]
  [4. 4. 4. 4. 4.]
  [5. 5. 5. 5. 5.]]
 [[0. 1. 2. 3. 4.]
  [0. 1. 2. 3. 4.]
  [0. 1. 2. 3. 4.]
  [0. 1. 2. 3. 4.]
  [0. 1. 2. 3. 4.]
  [0. 1. 2. 3. 4.]]]


三、一些操作


a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = np.eye(4)
d = np.array([False, True, True, False, True])
e = np.array([False, False, False, True, True])
print(a)
print(b)
print(c)
print(d)
print(e)

输出:

[1 2 3 4]  # a
[5 6 7 8]  # b
[[1. 0. 0. 0.]  # c
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
[False  True  True False  True]  # d
[False False False  True  True]  # e

注:以下操作以此为基础

1、获取数值、修改数值

print('--------读取a索引值为1的数值-------')
print(a[3])
print('--------读取c第二行的数值----------')
print(c[1])
print('--------读取c第三列的数值----------')
print(c[:, 2])
print('--------读取c第一行第一列的数值----')
print(c[0, 0])
print('--------修改c第一行第一列的数值----')
c[0, 0] = 2
print(c)

输出:

--------读取a索引值为1的数值-------
4
--------读取c第二行的数值----------
[0. 1. 0. 0.]
--------读取c第三列的数值----------
[0. 0. 1. 0.]
--------读取c第一行第一列的数值----
1.0
--------修改c第一行第一列的数值----
[[2. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

2、查看维度、维度的长度、数组元素类型

print('-----------查看a和c的维度-------')
print(a.ndim)
print(c.ndim)
print('-----------查看a和c的各维度长度--')
# 第一个是行,第二个是列
print(a.shape)
print(c.shape)
print('-----------查看a、e数组元素类型--')
print(a.dtype)
print(d.dtype)

输出:

-----------查看a和c的维度-------
1
2
-----------查看a和c的各维度长度--
(4,)
(4, 4)
-----------查看数组元素类型------
int32
bool

3、四则运算及逻辑运算

print('-----------a与b相加------')
print(b+a)
print('-----------a与b相减------')
print(b-a)
print('-----------a与b相乘------')
print(b*a)
print('-----------a与b相除------')
print(b/a)
print('-----------d与e相与------')
print(np.logical_and(d, e))
print('-----------d与e相或------')
print(np.logical_or(d, e))
print('-----------d取非---------')
print(np.logical_not(d))
print('-----------d与e异或------')
print(np.logical_xor(d, e))

输出:

-----------a与b相加------
[ 6  8 10 12]
-----------a与b相减------
[4 4 4 4]
-----------a与b相乘------
[ 5 12 21 32]
-----------a与b相除------
[5.         3.         2.33333333 2.        ]
-----------d与e相与------
[False False False False  True]
-----------d与e相或------
[False  True  True  True  True]
-----------d与e非--------
[ True False False  True False]
-----------d与e异或------
[False  True  True  True False]

4、reshape:更改数组形状

# 将一行四列的数组改为两行两列的数组
print(a.reshape(2, 2))

输出:

[[1 2]
 [3 4]]
  • 当reshape中的数字为负数时,则代表未指定具体要求,可用来只获得行或列
print('---------只获得列------')
print(a.reshape(-1, 1))
print('---------只获得行------')
print(a.reshape(1, -2))

输出:

---------只获得列------
[[1]
 [2]
 [3]
 [4]]
---------只获得行------
[[1 2 3 4]]

5、索引及其一些切片操作

首先,可以来认识一下索引,索引分为正索引和负索引,下面是一个数组,正负索引相对应的图解image.png基本切片语法是 i:j:k,其中 i 是起始索引,j 是停止索引,k 是步骤(k默认为1),且a[i,j]是可以理解为左闭右开的。

  • ①以一维数组a为例
print('----------从索引值0到索引值1的结果------------')
print(a[0: 2])
print('----------从索引值0到索引值2的结果------------')
print(a[: 3])
print('----------从索引值0到索引值2增长的步长为2------')
print(a[0: 3: 2])
print('----------从索引值-1到索引值-2的结果-----------')
print(a[-1: -3])
print('----------从索引值1到索引值-2的结果------------')
print(a[1: -1])

输出:

----------从索引值0到索引值1的结果------------
[1 2]
----------从索引值0到索引值2的结果------------
[1 2 3]
----------从索引值0到索引值2增长的步长为2------
[1 3]
----------从索引值-1到索引值-2的结果-----------
[]
----------从索引值1到索引值-2的结果------------
[2 3]

注意:有一个结果为空,所以,索引是不能以负索引为起始索引。

  • ②以二维数组c为例
print('----------对应图中的红色区域部分-------------')
print(c[1, 2:4])
print('----------对应图中的蓝色区域部分-------------')
print(c[2:4, 0:2])
print('----------对应图中的绿色区域部分-------------')
print(c[0, :])

输出:

----------从索引值0到索引值1的结果------------
[0. 0.]
----------从索引值0到索引值1的结果------------
[[0. 0.]
 [0. 0.]]
----------从索引值0到索引值1的结果------------
[1. 0. 0. 0.]

image.png


四、参考:


官方文档

参考博文


五、Blogger’s speech


如有不足,还请大佬评论区留言或私信我,我会进行补充。

感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。

相关文章
|
6天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
24 0
|
16天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
2天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
7天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
18 3
|
9天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
28 5
|
7天前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
22 2
|
7天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
20 1
|
13天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
19 2
|
14天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
32 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式