matplotlib及numpy等科学计算库的使用(附思维导图)

科学计算库

1.matplotlib

1.1 matplotlib绘制图形流程

  • 导包:matplotlib.pytplot包含了一系列类似于matlab的画图函数。
    import matplotlib.pyplot as plt
  • 创建画布 plt.figure(figsize=(), dpi=)
    figsize:指定图的长宽
    dpi:图像的清晰度
    返回fig对象
  • 绘制图像 – plt.plot(x, y)
  • 显示图像 – plt.show()
  • import matplotlib.pyplot as plt
    #创建画布
    plt.figure(figsize=(10,10),dpi=100)
    #添加数据点
    plt.plot([1,2,3],[4,5,6])
    #展示图形
    plt.show()

1.2 基础绘图功能

  • 自定义坐标轴

    • 添加自定义x,y刻度
      plt.xticks(x, **kwargs)
      x:要显示的刻度值
      plt.yticks(y, **kwargs)
      y:要显示的刻度值
  • 添加网格显示

    • 添加网格显示
      为了更加清楚地观察图形对应的值
      plt.grid(True, linestyle=’–’, alpha=0.5)
  • 添加描述信息

    • 添加描述信息
      添加x轴、y轴描述信息及标题
      通过fontsize参数可以修改图像中字体的大小
      plt.xlabel(“时间”)
      plt.ylabel(“温度”)
      plt.title(“中午11点0分到12点之间的温度变化图示”, fontsize=20)
  • 图像保存

    • 图像保存
      #保存图片到指定路径
      plt.savefig(“test.png”)
      注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。
  • 在一个图中绘制多个plot

    • 可以用color参数指定不同的颜色,linestyle指定不同的线条
    • 显示图例。注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。

1.3 常见图形绘制

  • 折线图
    能够显示数据的变化趋势,反映事物的变化情况。(变化)
    plt.plot()
  • 散点图
    判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
    plt.scatter()
  • 柱状图
    绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)
    plt.bar(x, width, align=“center”)
  • 直方图
    绘制连续性的数据展示一组或者多组数据的分布状况(统计)
    plt.hist(x, bins)
  • 饼图
    用于表示不同分类的占比情况,通过弧度大小来对比各种分类
    plt.pie(x, labels, autopct, colors)

2.numpy

2.1numpy介绍

  • Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
    Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
    Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

2.2ndarray

  • NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。
  • ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。
  • ndarray支持并行化运算(向量化运算)
    numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算
  • 效率远高于纯Python代码
    Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。
  • ndarray的优势
    内存块风格
    list – 分离式存储,存储内容多样化
    ndarray – 一体式存储,存储类型必须一样
    ndarray支持并行化运算(向量化运算)
    ndarray底层是用C语言写的,效率更高,释放了GIL

2.3ndarray属性

  • ndarray.shape 数组维度的元组
    ndarray.ndim 数组维数
    ndarray.size 数组中的元素数量
    ndarray.itemsize 一个数组元素的长度(字节)
    ndarray.dtype 数组元素的类型

2.4基本操作

  • 1.生成数组的方法
    生成0和1的数组
    np.ones(shape, dtype)
    np.ones_like(a, dtype)
    np.zeros(shape, dtype)
    np.zeros_like(a, dtype)

从现有数组生成
np.array(object, dtype)
np.asarray(a, dtype)
a = np.array([[1,2,3],[4,5,6]])
#从现有的数组当中创建
a1 = np.array(a)
#相当于索引的形式,并没有真正的创建一个新的
a2 = np.asarray(a)

生成固定范围的数组
1 np.linspace (start, stop, num, endpoint)
创建等差数组 — 指定数量
参数:
start:序列的起始值
stop:序列的终止值
num:要生成的等间隔样例数量,默认为50
endpoint:序列中是否包含stop值,默认为ture
#生成等间隔的数组
np.linspace(0, 100, 11)
返回结果:
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.])
- 2 np.arange(start,stop, step, dtype)
创建等差数组 — 指定步长
参数
step:步长,默认值为1
np.arange(10, 50, 2)
返回结果:
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,
44, 46, 48])
- 3 np.logspace(start,stop, num)
创建等比数列
参数:
num:要生成的等比数列数量,默认为50
#生成10^x
np.logspace(0, 2, 3)
返回结果:
array([ 1., 10., 100.])

生成随机数组

正态分布创建方式

-——np.random.randn(d0, d1, …, dn)
功能:从标准正态分布中返回一个或多个样本值
——np.random.normal(loc=0.0, scale=1.0, size=None)
loc:float
​ 此概率分布的均值(对应着整个分布的中心centre)
scale:float
​ 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size:int or tuple of ints
​ 输出的shape,默认为None,只输出一个值
——np.random.standard_normal(size=None)
返回指定形状的标准正态分布的数组。
举例1:生成均值为1.75,标准差为1的正态分布数据,100000000个
x1 = np.random.normal(1.75, 1, 100000000)
返回结果:
array([2.90646763, 1.46737886, 2.21799024, …, 1.56047411, 1.87969135,
0.9028096 ])

	- 均匀分布创建方式

		- ——np.random.rand(d0, d1, ..., dn)

返回[0.0,1.0)内的一组均匀分布的数。
np.random.uniform(low=0.0, high=1.0, size=None)
功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
参数介绍:
low: 采样下界,float类型,默认值为0;
high: 采样上界,float类型,默认值为1;
size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出mnk个样本,缺省时输出1个值。
返回值:ndarray类型,其形状和参数size中描述一致。
——np.random.randint(low, high=None, size=None, dtype=‘l’)
从一个均匀分布中随机采样,生成一个整数或N维整数数组,
取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
#生成均匀分布的随机数
x2 = np.random.uniform(-1, 1, 100000000)
返回结果:
array([ 0.22411206, 0.31414671, 0.85655613, …, -0.92972446,
0.95985223, 0.23197723])

数组的切片索引
直接进行索引,切片
对象[:, :] – 先行后列

形状修改
ndarray.reshape(shape, order)
返回一个具有相同数据域,但shape不一样的视图
行、列不进行互换
#在转换形状的时候,一定要注意数组的元素匹配
stock_change.reshape([5, 4])
stock_change.reshape([-1,10]) # 数组的形状被修改为: (2, 10), -1: 表示通过待计算
- ndarray.resize(new_shape)
修改数组本身的形状(需要保持元素个数前后相同)
行、列不进行互换
stock_change.resize([5, 4])

#查看修改后结果
stock_change.shape
(5, 4)
- ndarray.T
数组的转置
将数组的行、列进行互换
stock_change.T.shape
(4, 5)

类型修改
ndarray.astype(type)
返回修改了类型之后的数组
stock_change.astype(np.int32)
- ndarray.tostring([order])或者ndarray.tobytes([order])
构造包含数组中原始数据字节的Python字节
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]])
arr.tostring()

去重
np.unique()
temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
np.unique(temp)
array([1, 2, 3, 4, 5, 6])

2.5ndarrary运算

  • 逻辑运算

    生成10名同学,5门功课的数据
    score = np.random.randint(40, 100, (10, 5))

取出最后4名同学的成绩,用于逻辑判断
test_score = score[6:, 0:5]

逻辑判断, 如果成绩大于60就标记为True 否则为False
test_score > 60
array([[ True, True, True, False, True],
[ True, True, True, False, True],
[ True, True, False, False, True],
[False, True, True, True, True]])

BOOL赋值, 将满足条件的设置为指定的值-布尔索引
test_score[test_score > 60] = 1
test_score
array([[ 1, 1, 1, 52, 1],
[ 1, 1, 1, 59, 1],
[ 1, 1, 44, 44, 1],
[59, 1, 1, 1, 1]])

  • 通用判断函数

    • np.all()
      判断前两名同学的成绩[0:2, :]是否全及格
      np.all(score[0:2, :] > 60)
      False
      np.any()
      判断前两名同学的成绩[0:2, :]是否有大于90分的
      np.any(score[0:2, :] > 80)
      True
  • 三元运算

    • np.where()

判断前四名学生,前四门课程中,成绩中大于60的置为1,否则为0
temp = score[:4, :4]
np.where(temp > 60, 1, 0)
- 复合逻辑需要结合np.logical_and和np.logical_or使用
判断前四名学生,前四门课程中,成绩中大于60且小于90的换为1,否则为0
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)

#判断前四名学生,前四门课程中,成绩中大于90或小于60的换为1,否则为0
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)

  • 统计运算

    • min(a, axis)
      Return the minimum of an array or minimum along an axis.
      max(a, axis])
      Return the maximum of an array or maximum along an axis.
      median(a, axis)
      Compute the median along the specified axis.
      mean(a, axis, dtype)
      Compute the arithmetic mean along the specified axis.
      std(a, axis, dtype)
      Compute the standard deviation along the specified axis.
      var(a, axis, dtype)
      Compute the variance along the specified axis.
    • 进行统计的时候,axis 轴的取值并不一定,Numpy中不同的API轴的值都不一样,在这里,axis 0代表列, axis 1代表行去进行统计

2.6数组间运算

  • 数组arr1是4行1列,arr2是1行3列。这两个数组要进行相加,按照广播机制会对数组arr1和arr2都进行扩展,使得数组arr1和arr2都变成4行3列。

    • 广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可。
      1.数组的某一维度等长。
      2.其中一个数组的某一维度为1 。
      广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。

2.7矩阵乘法api

  • np.matmul(arr1,arr2)
    np.dot(arr1,arr2)
  • np.matmul和np.dot的区别:
    二者都是矩阵乘法。 np.matmul中禁止矩阵与标量的乘法。 在矢量乘矢量的內积运算中,np.matmul与np.dot没有区别。

XMind: ZEN - Trial Version

你可能感兴趣的:(python,numpy,数据分析)