你必须掌握的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

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

相关文章
|
13天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
41 0
|
8天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
19 2
|
5天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
6天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
7天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
8天前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第33天】本文将介绍如何使用Python编程语言进行数据分析和可视化。我们将从数据清洗开始,然后进行数据探索性分析,最后使用matplotlib和seaborn库进行数据可视化。通过阅读本文,你将学会如何运用Python进行数据处理和可视化展示。
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
77 2
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
171 4
|
3月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
84 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
数据分析之旅:用Python探索世界
数据分析之旅:用Python探索世界
26 2