Python数据分析利器:NumPy、pandas与Matplotlib库

今天先介绍第一个,本文借鉴于一本名为《Python大数据分析与机器学习》的参考书资料,大家也可自行跟着学习,亲身学习经验是不要懒!跟着边敲边练,查看结果!

1.NumPy库基础
1.1 NumPy库与数组

NumPy库的主要特点是引入了数组的概念。数组其实和列表有点类似,所以下面借助列表来初步认识数组的基本概念。演示代码如下。

import numpy as np  # 用np代替numpy,让代码更简洁
a = [1, 2, 3, 4]  # 创建列表a
b = np.array([1, 2, 3, 4])  # 从列表a创建数组b,array就是数组的意思
print(a)
print(b)
print(type(a))  # 打印a的类型
print(type(b))  # 打印b的类型

[1, 2, 3, 4]
[1 2 3 4]
<class 'list'>
<class 'numpy.ndarray'>

通过索引和切片访问列表和数组中的元素,代码如下。

print(a[1])
print(b[1])
print(a[0:2])
print(b[0:2])

2 # 列表a索引调用的结果
2 # 数组b索引调用的结果
[1, 2] # 列表a切片的结果,注意列表切片是“左闭右开”
[1 2] # 数组b切片的结果,数组切片也是“左闭右开”

从输出结果可以看出,列表和数组有着相同的索引机制,唯一的区别就是数组中的元素通过空格分隔,而列表中的元素通过逗号分隔。

1.2 数组与列表的区别

数组和列表非常相似,那么为什么我们在数据分析中要使用数组而不使用列表呢?其原因很多,这里主要讲两点。

  • 第一,NumPy作为一个专门用于数据处理的库,能很好地支持一些数学运算,而用列表进行数学运算则较为麻烦。
c = a * 2
d = b * 2
print(c)
print(d)

 [1, 2, 3, 4, 1, 2, 3, 4]
 [2 4 6 8]

乘法运算,列表是把元素复制了一遍,而数组则是对每个元素做了乘法。

  • 第二,列表存储的是一维数据,而数组则能存储多维数据。

一维类似一条直线,多维则类似平面(二维)或立体(三维)等。列表中的数据是一维的,而Excel工作表中的表格数据则是二维的。演示代码如下。

e = [[1, 2], [3, 4], [5, 6]]  # 列表里的元素为小列表
f = np.array([[1, 2], [3, 4], [5, 6]])  # 创建二维数组的一种方式

[[1, 2], [3, 4], [5, 6]]  # 列表e的打印输出结果
[[1 2]  # 数组f的打印输出结果
[3 4]
[5 6]]

可以看到,列表e虽然包含3个小列表,但其结构是一维的。而数组f则是3行2列的二维结构,这也是之后学习pandas库的核心内容,因为数据处理中经常用到二维数组,即二维的表格结构

1.3 创建数组的几种方式

前面我们已经了解了创建数组的一种方式,即np.array(列表)。这里简单总结一下,演示代码如下。

# 创建一维数组 
b = np.array([1, 2, 3, 4]) 
# 创建二维数组 
f = np.array([[1, 2], [3, 4], [5, 6]])

可以使用np.arange()函数来创建一维数组,括号里可以输入1~3个参数,会得到不同的效果。

# 1个参数:参数值为终止值,起始值取默认值0,步长取默认值1,左闭右开
x = np.arange(5)
# 2个参数:第1个参数为起始值,第2个参数为终止值,步长取默认值1,左闭右开
y = np.arange(5, 10)
# 3个参数:第1个参数为起始值,第2个参数为终止值,第3个参数为步长,左闭右开
z = np.arange(5, 10, 0.5)
[0 1 2 3 4]
[5 6 7 8 9]
[5.  5.5 6.  6.5 7.  7.5 8.  8.5 9.  9.5]

使用np.random中的函数可以创建随机一维数组。例如,通过np.random.randn(3)创建一个一维数组,其中包含服从标准正态分布(均值为0、标准差为1的分布)的3个随机数,代码如下。

a = np.random.randn(3)
[-2.93662602  0.93166992  1.33914204]

如果把np.random.randn(3)换成np.random.rand(3),那么生成的一维数组中包含的就是0~1之间的3个随机数。这个函数在2.3.1小节中演示散点图的绘制时会用到。

b = np.random.rand(3)
[0.21563803 0.57151123 0.89319114]

SyntaxError: invalid character '(' (U+FF08) "U+FF08" 是一个 Unicode 编码,表示全角的左括号字符

至于二维数组,可以利用创建一维数组的np.arange()函数和reshape()函数来创建。

例如,将包含0~11这12个整数的一维数组转换成3行4列的二维数组,代码如下。

a = np.arange(12).reshape(3, 4)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

这里再简单介绍一种创建随机整数二维数组的方法,代码如下。

a = np.random.randint(0, 10, (4, 4))
 [[4 1 6 3]
  [3 0 4 8]
  [7 8 1 8]
  [4 6 3 6]]

np.random.randint()函数用于创建随机整数,括号里第1个参数0为起始数,第2个参数10为终止数,第3个参数(4,4)则表示创建一个4行4列的二维数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值