Python数据分析必备工具——Numpy模块
我们知道,列表是一种数据的存储容器,但它不具有任何计算能力,我们无法直接用列表进行运算。虽然我们可以通过逐渐取出列表中的元素,也就是利用循环进行运算,但是有更好的操作,那就是利用数组。
数组定义
数组是编程中一种强大的数据结构,它允许您存储和操作相同类型元素的集合。在 Python 中,数组是通过数组模块创建的,该模块提供了一个简单的接口来创建、操作和处理数组。特别的:矩阵是一种二维数组。
一维数组
# 导入功能包
import numpy as np
height = [176,158,172,177,169,180]
weight = [82,61,70,70,89,90]
# 将列表转换成数组(借助于array函数可以将列表或元组转换为数组)
Height = np.array(height)
Weight = np.array(weight)
# 计算BMI
BMI = Weight/(Height/100)**2
print(BMI)
输出:
[26.47210744 24.43518667 23.66143862 22.34351559 31.1613739 27.77777778]
并且利用数组的方式,相比于循环的速度更快。
二维数组
import numpy as np
# 基于嵌套列表创建二维数组
arr1 = np.array([[1,3,5,7],
[2,4,6,8],
[11,13,15,17],
[12,14,16,18],
[100,101,102,103]])
# 基于嵌套元组创建二维数组
arr2 = np.array(((8.5,6,4.1,2,0.7),(1.5,3,5.4,7.3,9),
(3.2,3,3.8,3,3),(11.2,13.4,15.6,17.8,19)))
# 二维数组的打印结果
print(arr1,'\n')
print(arr2)
输出:
数组的构造
数组元素的返回
1)在一维数组中,列表的所有索引方法都可以使用在数组中,而且还可以使用间断索引和逻辑索引;
2)在二维数组中,位置索引必须写成[rows,cols]的形式,方括号的前半部分用于锁定二维数组的行索引,后半部分用于锁定数组的列索引;
3)如果需要获取二维数组的所有行或列元素,那么,对应的行索引或列索引需要用英文状态的冒号表示;
import numpy as np
# 一维数组
age = np.array([13,19,22,14,19,45])
print(age[-1],age[:3],age[[0,3,5]],age[age<18])
# 二维数组
arr1 = np.array([[1,3,5,7],
[2,4,6,8],
[11,13,15,17],
[12,14,16,18],
[100,101,102,103]])
# 假如我们取出18,对行无约束取出第四列,对列无约束取出第四行
print(arr1[3,3], arr1[:,3], arr1[3,:])
输出:
45 [13 19 22] [13 14 45] [13 14]
18 [ 7 8 17 18 103] [12 14 16 18]
数组运算符
注意:两个数组必须相同的行与列
数学运算
比较运算(可以用符号也可以用函数)
统计函数
例子:
import numpy as np
# 二维数组
arr1 = np.array([[1,3,5,7],
[2,4,6,8],
[11,13,15,17],
[12,14,16,18],
[100,101,102,103]])
# 计算每一行的和
Sum = []
Sum1 = []
for i in range(5):
Sum.append(np.sum(arr1[i,:]))
Sum1 = np.sum(arr1, axis=1)
print(Sum, Sum1)
# 计算每一列的平均
Avg = []
Avg1 = []
for i in range(4):
Avg.append(np.average(arr1[:,i]))
Avg1 = np.mean(arr1, axis=0)
print(Avg, Avg1)
输出:
[16, 20, 56, 60, 406] [ 16 20 56 60 406]
[25.2, 27.0, 28.8, 30.6] [25.2 27. 28.8 30.6]
随机生成函数
import numpy as np
# 随机整数
np.random.randint()
# 随机均匀分布
np.random.uniform()
# 随机正态分布
np.random.normal()
例子:理想赌场下的结局
# 导入功能包
import numpy as np
# 生成0-1之间的随机均匀分布
R = np.random.uniform(0,1,1500)
# 初始钱
initial = 1000
# 钱包变化存储
packages=[initial]
# 循环赌局
for time in R:
if time<0.5:
initial-=8
else:
initial+=8
packages.append(initial)
print(packages)
# 我们可以利用matplotlib功能包进行数据可视化(我们后面细讲)
import matplotlib.pyplot as plt
plt.plot(range(1501),packages)
plt.show()
输出: