你必须掌握的Python数据分析工具之Numpy

简介: 你必须掌握的Python数据分析工具之Numpy

Python是数据分析领域极受喜爱的主流程序语言。这里主要介绍Numpy的常用用法。如果你是从事数据分析、或者人工智能等相关领域,而所用的语言又是Python的话,以下知识点都应该 “张口就来” 。建议收藏,有事没事拿出来看两遍。

Numpy

  在使用Numpy之前的话,我们需要先导入它:

import numpy as np

  常用语句

  • 将数据转化为标量
np.asscalar() # Convert an array of size 1 to its scalar equivalent.
  • 生成随机数

  np.random.seed(1233)设置随机种子,随机种子一旦固定,每次生成的数据都会固定,除非改变种子,随机数才会发生改变。

  rand生成均匀分布随机数:

# 产生2行三列均匀分布随机数组
print(np.random.rand(2,3))

  randn生成正太分布随机数:

# 三行三列正态分布随机数据
print(np.random.randn(3,3))

  randint生成指定范围内随机整数

# (1, 100)以内5行5列随机整数
print(np.random.randint(1,100,[5,5]))

  random生成10个随机浮点数

# (0,1)内10个随机浮点数
print(np.random.random(10))

  choice给定范围内随机选一个数

# [0,10)内10个随机选一个数
print(np.random.choice(10))

  生成正太分布数据:

mu = 1
sigma = 2
num = 10
print(np.random.normal(mu, sigma, num))

  按行打乱数据

rand_data = np.random.randint(1, 10, (3, 4))
np.random.shuffle(rand_data)

创建数组

  我们主要用numpy来创建数组,或者称之为构造变量,当然自己一个一个变量敲进电脑也是可以的,用numpy的话就会方便一点。

  • 手动创建一维的变量
a = np.array([1,2,3],dtype=np.int32)
• 1

  dtype是设置你创建变量的类型,你也可以选择float类型,这都没啥问题。如果把上面的代码print显示出来的话,如下所示:

>>>[1 2 3]
• 1
  • 手动创建二维的变量
b = np.array([[1,2],[3,4],[5,6]],dtype=np.int32)
• 1

  这样我们就能生成两行三列的数组,结果如下所示:

>>>[[1 2]
  [3 4]
  [5 6]]

arange

  • arange创建一维数组

  我们创建的数组如果比较小的话,我们可以手动输入,但是如果比较大了的话,我们手动输入就太费事了,需要调用一些函数,像arange函数就可以很方便地创建一维数组:

c = np.arange(1,10,2)
• 1

  代码所表示的意思就是,从1到10,每隔两个数字产生,输出显示出来就是:

>>>[1 3 5 7 9]
• 1

  这样产生的数据类型是numpy.ndarray,dtype是int64

linspace

  • linspace产生等差数列

  比如我们想从数字1到11产生5个数字,这些数字之间都是等间隔的:

d = np.linspace(1,11,5)
• 1

  结果显示如下所示:

>>>[ 1.   3.5  6.   8.5 11. ]
• 1

  这里的dtype是float64

logspace

  • logspace创建等比数列

  从1到10产生八个等比数列:

e = np.logspace(1,10,8)
• 1

  结果显示如下所示:

>>>[1.00000000e+01 1.93069773e+02 3.72759372e+03 7.19685673e+04
 1.38949549e+06 2.68269580e+07 5.17947468e+08 1.00000000e+10]

fromfunction

  • fromfunction创建数组

  该函数的第一个参数为计算数据元素的函数;第二个参数是代表数组的大小的序列,序列的每一个值代表数组对应维度的大小。

def funcA(i):
    return i+i
f = np.fromfunction(funcA, (10,))

  结果显示如下所示:

>>>[ 0.  2.  4.  6.  8. 10. 12. 14. 16. 18.]
• 1

  如果是两维数据做运算的话,代码如下所示:

def funcB(i,j):
    return i+j
g = np.fromfunction(funcB, (3,2))

  结果显示如下所示:

>>>[[0. 1.]
  [1. 2.]
  [2. 3.]]

shape和reshape

  除了产生数组之外,我们还会经常改变数组的维度,这就要求我们查看shape并使用reshape函数。

  • shape函数查看数组大小

  实现如下所示:

a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a.shape)

  结果显示如下所示:

>>>(3, 2)
• 1
  • reshape函数改变数组维度

  实现如下所示:

a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a.reshape(2,3))

  结果显示如下所示:

>>>[[1 2 3]
  [4 5 6]]

获取数组元素

  上面是如何生成数组,那我们如何从数组中拿元素呢?这里的操作就跟列表的操作类似了:

  • 取其中某一个元素
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][1])

  结果显示如下所示:

>>> 2
• 1
  • 取数组后半部分
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][0:])

  结果显示如下所示:

>>> [1 2]
  • 取数组前半部分
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][:-1])

  结果显示如下所示:

>>> [1]
• 1
  • 每隔两个取
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0::2])

  结果显示如下所示:

>>> [[1 2]
   [5 6]]
  • 依据下标能获取共享地址
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
b=a[:]
print('b',b)
b[2,0]=10
print('a',a)

  结果显示如下所示:

>>> b [[1 2]
     [3 4]
       [5 6]]
    a [[ 1  2]
       [ 3  4]
       [10  6]]
  • 依据整数序列不与原数组共享地址
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
b=a[[2]]
print('b',b)
b[0,0]=10
print('a',a)

  结果显示如下所示:

>>> b [[5 6]]
  a [[1 2]
     [3 4]
     [5 6]]
  • 使用bool数组作为下标获取数据
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print('bool',a>2)
print('a>2',a[a>2])

  结果显示如下所示:

>>> bool: [[False False]
      [ True  True]
          [ True  True]]
     a>2: [3 4 5 6]

ufunc函数

  ufunc的全称是universal function,即通用处理函数。Numpy提供的ufunc函数大致可以划分为五类:分别为:Math operations(数学操作)、Trigonometric function(三角函数)、Bit-twiddling function(位操作)、Comparison function(比较函数)以及Floating function(浮点函数)。

  • 加法运算
a = np.array([1,2,3,4],dtype=np.int32)
b = np.array([5,6,7,8],dtype=np.float32)
print(np.add(a,b))

  结果显示如下所示:

>>> [ 6.  8. 10. 12.]
• 1
  • 减法运算
a = np.array([1,2,3,4],dtype=np.int32)
b = np.array([5,6,7,8],dtype=np.float32)
print(np.subtract(a,b))

  结果显示如下所示:

>>> [-4. -4. -4. -4.]
• 1
  • 三角函数

  主要有np.sinnp.cos等,其参数并不直接代表三角函数的度数,而是使用pi替代。

  • 位操作函数

  包含按位的与、或、异或、左移、右移等操作:

a = np.binary_repr(5)
b = np.binary_repr(7)
c = np.bitwise_and(5,7)
d = np.bitwise_or(5,7)
e = np.left_shift(5,2)
f = np.right_shift(5,2)
print('a:{}, b:{}, c:{}, d:{}, e:{}, f:{}'.format(a,b,c,d,e,f))

  结果显示如下所示:

>>> a:101, b:111, c:5, d:7, e:20, f:1
• 1
  • 比较函数

  包含了数值比较逻辑运算取最大值取最小值等操作。

  1. 比大小greater函数:

a = np.array([1,5])
b = np.array([0,10])
print(np.greater(a, b))

  结果显示如下所示:

>>> [ True False]
• 1

  2. 比相等equal函数

a = np.array([0,5])
b = np.array([0,10])
print(np.equal(a, b))

  结果显示如下所示:

>>> [ True False]
• 1

  3. 逻辑判断logical_and函数:

x = np.arange(1,5)
print(np.logical_and(x>1, x<3))

  结果显示如下所示:

>>> [False  True False False]
• 1

  4. 浮点函数

  包含了类型判别、是否是最大值、向上取整等操作

  a . 如果具有非零虚部,则比较复杂:

x = [3+1j, 6+0j, 7.5, 6, 2j]
print(np.iscomplex(x))

  结果显示如下所示:

>>> [ True False False False  True]
• 1

   b. 判断是否是无穷大:

print(np.isinf(np.inf))
• 1

   结果:

>>> [ True False False False  True]
• 1

   c. 向正无穷取整:

x = [2.1, -2.1, 3.54, 7.2, -7.2]
print(np.ceil(x))

  结果:

>>> [ 3. -2.  4.  8. -7.]
• 1

  d. 取下界:

x = [2., -3., 3., 7., -8.]
print(np.floor(x))

  结果:

>>> [ 2. -3.  3.  7. -8.]
• 1

文件IO

  Numpy提供一些文件存取操作,方便将ndarray数组元素存储到文件以及从文件读取数据来初始化数组。其中tofilefromfile以二进制形式的方式存取;saveload函数以Numpy的专有格式存取;savez可以保存多个数组到同一个文件,并可以通过load循环取出。tofilefomfile示例如下:

  • tofilefromfile示例
x = np.array([2.1, -2.1, 3.54, 7.2, -7.2])
x.tofile('a.bin')
y = np.fromfile('a.bin',dtype=np.float64)
print(y)

  结果:

>>> [ 2.1  -2.1   3.54  7.2  -7.2 ]
• 1
  • saveload示意
x = np.array([2.1, -2.1, 3.54, 7.2, -7.2])
x.tofile('a.bin')
y = np.fromfile('a.bin',dtype=np.float64)
print(y)

  结果:

>>> [ 2.1  -2.1   3.54  7.2  -7.2 ]
• 1
  • savezload示例
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3])
c = np.array([1.2,3.1,3.3])
np.savez('data.npz',a,b,c)
arr = np.load('data.npz')
print('arr_0',arr['arr_0'])
print('arr_1',arr['arr_1'])
print('arr_2',arr['arr_2'])

  结果:

>>> arr_0 [[1 2 3]
       [4 5 6]]
  arr_1 [1 2 3]
  arr_2 [1.2 3.1 3.3]

我的微信公众号名称深度学习与先进智能决策

微信公众号ID:MultiAgent1024

公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!

相关文章
|
25天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
28天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
83 4
数据分析的 10 个最佳 Python 库
|
19天前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
80 7
|
22天前
|
监控 数据可视化 数据挖掘
数据看板制作工具评测:这6款工具能如何提升企业的数据分析效率?
本文介绍了6款数据看板制作工具,包括板栗看板、Tableau、Power BI、Qlik Sense、Google Data Studio和Looker,从功能、适用场景等方面进行了详细对比,旨在帮助企业选择最合适的工具以实现高效的数据可视化和管理决策。
|
27天前
|
数据挖掘 关系型数据库 Serverless
利用数据分析工具评估特定业务场景下扩缩容操作对性能的影响
通过以上数据分析工具的运用,可以深入挖掘数据背后的信息,准确评估特定业务场景下扩缩容操作对 PolarDB Serverless 性能的影响。同时,这些分析结果还可以为后续的优化和决策提供有力的支持,确保业务系统在不断变化的环境中保持良好的性能表现。
29 2
|
1月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
|
1月前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势
|
1月前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
141 4
|
1月前
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
|
1月前
|
数据采集 数据可视化 数据挖掘
掌握Python数据分析,解锁数据驱动的决策能力
掌握Python数据分析,解锁数据驱动的决策能力