Advertisement

Python实战笔记-数据分析-Numpy

阅读量:

Numpy模块:使运用高效、代码简洁
核心:
一、数组的构造及其优势;
二、常用的数学函数与统计函数;

一、数组的构造及其优势
A、数组的构造 (一维数组)
背景:列表只是一种数据的存储容器,它不具有任何计算能力!

#身高
height = [176,168,163,177,172,169]
#体重
weight = [82,98,102,126,99,88]
#BMI指数(身高质量指数=体重(Kg)/身高(m)的平方)
BMI = weight / (height/100)**2
在这里插入图片描述
#解决方案(将两个列表中对应元素取出来,做数学运算)
BMI = []
for i in range(len(height)):
BMI.append(weight[i] / (height[i]/100)**2)
BMI

细节说明:
a,len() 用于计算列表的元素的数量
b,循环需要将列表中的元素进行保留,用append

#优化以上案例,采用数组形式进行运算 (一维数组,二维矩阵)

#借助于array函数可以将列表或元组转换为数组

#导入第三方模块
import numpy as np

#将列表转换为数组
Height = np.array(height)
Weight = np.array(weight)
BMI = Weight / (Height/100)**2

#返回BMI
BMI

#案例:讲解数组的高效性

#导入第三方模块
import numpy as np
import random

#伪造数据
h = []
w = []
for i in range(10000000):
h.append(random.randint(153,180))
w.append(random.uniform(51,88))

%%time
bmi = []
for i in range(10000000):
bmi.append(w[i]/(h[i]/100)**2)

#数组运算更快
H = np.array(h)
W =np.array(w)

%%time
BMI = W/(H/100)**2

B、数组的构造 (二维数组即矩阵)

#基于嵌套列表创建二维数组
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.6,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)

C、数组元素的返回
1)在一维数组中,列表的所有索引方法都可以使用在数组中,而且还可以使用间断索引和逻辑索引;
2)在二维数组中,位置索引必须写成[rows,cols]的形式,方括号的前半部分用于锁定二维数组的行索引,后半部分用于锁定数组的列索引;
3) 如果需要获取二维数组的所有行或列元素,那么,对应的行索引或列索引需要用英文状态的冒号表示;

案例1:
#查询未成年
age = np.array([18,11,22,13,6,9,30])

age[-2]
age[:3]
#间断索引
age[[1,3,4,5]]
#逻辑索引(布尔运算,用得最多)
age[age<18]

案例2:
#查询2行3列位置的数
arr1 = np.array([[1,3,5,7],
[2,4,6,8],
[11,13,15,17],
[12,14,16,18],
[100,101,102,103]])

arr1[1,2]
#查询第2行
arr1[1,:]
#查询第3列
arr1[:,2]

二、数组的运算

A、数学运算符: +、-、*、/、=、%、**、//
B、比较运算符:

np.greater(arr1,arr2)
= np.greater_equal(arrq,arr2)
< np.less(arr1,arr2)
<= np.less_equal(arr1,arr2)
== np.equal(arr1,arr2)
!= np.not_equal(arr1,arr2)

C、常用的数学函数
np.round(arr) 对各元素四舍五入
np.sprt(arr) 计算各元素的算术平方根
np.square(arr) 计算各元素的平方值
np.exp(arr) 计算以e为底的指数
np.power(arr,α) 计算各元素的指数
np.log2(arr) 计算以2为底各元素的对数
np.log10(arr) 计算以10为底各元素的对数
np.log(arr) 计算以e为底各元素的对数

D、常用的统计函数(重要)
np.min(arr,axis) 按照轴的方向计算最小值
np.max(arr,axis) 按照轴的方向计算最大值
np.mean(arr,axis) 按照轴的方向计算平均值
np.median(arr,axis) 按照轴的方向计算中位数
np.sum(arr,axis) 按照轴的方向计算和
np.std(arr,axis) 按照轴的方向计算标准差
np.var(arr,axis) 按照轴的方向计算方法

注意:
axis=0时,计算数组各列的统计值
axis=1时,计算数组各行的统计值

#创建二维数组
arr2 = np.array(((8.6,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)))

#计算每一行的和
Sum = []
for row in range(4):
Sum.append(np.sum(arr2[row,:]))

#优化
np.sum(arr2, axis=1)

#计算每一列的和
Sum = []
for col in range(5):
Sum.append(np.sum(arr2[:,col]))
#优化
np.sum(arr2, axis=0)

引申案例:

#构造3x3的二维矩阵
arr3 = np.array([[1,10,100],[2,20,200],[3,30,300]])

print(arr3)
print(‘垂直方向(列)计算数组的和:\n’,np.sum(arr3,axis=0))
print(‘水平方向(行)计算数组的和:\n’,np.sum(arr3,axis=1))

out:
[[ 1 10 100]
[ 2 20 200]
[ 3 30 300]]
垂直方向(列)计算数组的和:
[ 6 60 600]
水平方向(行)计算数组的和:
[111 222 333]

E、随机数的生成
几个典型的随机数生成函数

import numpy as np

#随机整数
np.random.randint()
#随机均匀分布
np.random.randuniform()
#随机正态分布
np.random.normal()

案例分享 – 理想赌场下的结局

initial = 1000
packages = [initial]

R = np.random.uniform(0,1,1500)
for time in R:
if time < 0.5:
initial -=8
else:
initial +=8
packages.append(initial)

#数据可视化处理
import matplotlib.pyplot as plt
plt.plot(range(1501),packages)
plt.show()

全部评论 (0)

还没有任何评论哟~