一.jupyter

1.简介

2.jupyter基本操作

二.matplotlib

快速上手:

import matplotlib.pyplot as plt

plt.figure()
plt.plot([1,0,9],[4,5,6])
plt.show()

matplotlib有三层结构:容器层(画布),图像层,辅助显示层

1.容器层(画布)

创建一个画布plt.figure()

可以有多个绘图区,画多张图。

a.设置图像属性

修改 plt.figure() 中的参数

'''创建画布'''
plt.figure()
# figsize:指定图的长度,(长,宽)
# dpi:图像清晰度

b.保存图片

plt.savefig(路径)

注:这行代码必须写在plt.show()后面。路径记得写上后缀.png。

c.一个画布上创建多个绘图区

(面向对象的画图方法)用figure, axes = plt.subplots(nrows=X ,ncols=X)代替plt.figure()

参数:

  • nrows:几行(默认1)
  • ncols:几列(默认1)

返回值有两个:图像和绘图区。为了区别我们是在那个绘图区画的,我们需要用参数接受返回值

figure, axes = plt.subplots(nrows=1,ncols=2)

axes[0]表示第一个图像,axes[1]表示第二个图像。

之前用plt.函数名()相当于面向过程的画图方法,这里用了对象,需要用axes[X].方法名()面向对象方法来作图。

大部分函数名和方法名都是一样的。常用的只有描述信息的 plt.xlabel(),plt.ylabel(),plt.title() 要加上set_改成axes[X].set_xlabel()....... ;plot.xticks(),plt.yticks()要加上set_以及修改一点名字变成axes[X].set_xticklables()

具体的可以先画图像看有哪里不对,然后去看文档。

2.图像层

a.折线图

import matplotlib.pyplot as plt

'''展示已知的上海一周的天气'''
'''1.创建画布'''
plt.figure()
# figsize:指定图的长度,(长,宽)
# dpi:图像清晰度
'''2.绘制图像'''
x = [1,2,3,4,5,6,7]
y = [17,17,18,15,11,11,13]
plt.plot(x,y)
'''3.显示图片'''
plt.show()

b.散点图(scatter)

用于 不同变量的关系、规律。

plt.scatter(x, y)

c.柱状图(bar)

用于 统计、对比

plt.bar(x, y)

其他参数:

  • width:宽度
  • color:颜色

注:如果要达到这种效果:

若两个plt.bar()传入的x都相同,第二个会把第一个覆盖掉

'''2.绘制图像'''
x = [1,2,3,4]
y1 = [17,17,18,15]
y2 = [10,11,13,16]
plt.bar(x, y1)
plt.bar(x, y2)

'''3.显示图片'''
plt.show()

需要对传入的x进行平移。(为了方便,可以直接用列表推导式)

'''2.绘制图像'''
x = [1,2,3,4]
y1 = [17,17,18,15]
y2 = [10,11,13,16]
plt.bar([a-0.2 for a in x], y1, width=0.4)
plt.bar([a+0.2 for a in x], y2, width=0.4)



'''3.显示图片'''
plt.show()

d.直方图(hist)

用于 数据的分布状况

直方图和柱状图的区别:

直方图展示的是数据的分布,柱状图是比较数据的大小

直方图的宽度是有意义的,柱状图的宽度无意义

代码:

plt.hist(x=, bins=)    #bins:组数

直方图用于分析一组数据,所以用一个参数x来传入要分析的数据列表+需要的组数 即可

求组数:设数据列表为x,我们要的组距为distance,用公式 bin = int(max(x)-min(x)) / distance

还需要修改x坐标,固定写:plt.xticks(range(min(x),max(x),distance))

'''2.绘制图像'''
x = [17,17,18,15,35,64,86,48,58]
distance = 3
bins = int( ( max(x)-max(x) ) / distance )
plt.hist(x, bins=bins)


#修改x轴坐标
plt.xticks(range(min(x),max(x),distance))

'''3.显示图片'''
plt.show()

e.饼图(pie)

用于 分类的占比情况,当分类太多(超过9个),饼图不能很好展示,建议用柱状图

plt.pie(x= ,labels=, autopct=, colors=)
plt.axis('equal')    #保证长宽一致,若没有这一行,输出的是一个椭圆

参数:

  • x:传入的一组数据的列表,会自动计算百分比
  • labels:每部分名称的列表
  • autopct:占比百分数,一般写 %1.2f%%
  • colors:每部分颜色的列表

3.辅助显示层

a.修改x、y轴刻度

plt.xticks(x刻度值的可迭代对象)

plt.yticks(y刻度值的可迭代对象)

b.添加网格显示

plt.grid()

参数:

  • linestyles='--':指定线条(默认是直线,'--'指定成虚线)
  • alpha=0.5 : 透明度

c.添加描述信息

plt.xlabel('内容')

plt.ylabel('内容')

plt.title('内容')

d.一个图上画多个曲线

用两个plt.plot()即可

e. plot参数:指定线条颜色、线条风格

线条颜色plt.plot(...... , color='r')

红色r,蓝色b,黄色y,黑色k......

线条风格plt.plot(...... , linestyle="--")

实线(-),虚线(--),点划线(-.) , 点虚线(:) , 留空(' ')

f. plot()参数: 图例

plt.plot(...... , label='内容')

图例可以指定显示的位置,一般在右上角,需要用的时候再去查。

三.Numpy

1.Numpy简介

Numpy是一个开源的Python科学计算库,用于快速处理任意维度的数组。

Numpy支持常见的数组和矩阵操作,对于同样的数值计算任务,使用Numpy比直接使用Python简洁

Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

ndarray存数据 比 列表存数据 快得多

  • ndarray存储风格:
    • ndarray:只能存相同类型
    • list:不同类型
  • ndarray支持并行化计算
  • numpy底层使用C语言编写,效率高

2.ndarray属性

属性名字属性解释
ndarray.shape数组维度,返回的是元组
ndarray.ndim数组维数
ndarray.size数组中元素数量
ndarray.itemsize一个数组元素的长度(字节)
ndarray.dtype数组元素的类型

常用属性:

  • shape:知道shape就能知道维数(ndim)和元素数量(size)
  • dtype:知道dtype就能知道一个元素所占的字节大小(itemsize)
import numpy as np

score = np.array([[80, 89, 86, 67, 79],
                  [78, 97, 89, 67, 81],
                  [90, 94, 78, 67, 74],
                  [91, 91, 90, 67, 69],
                  [76, 87, 75, 67, 86],
                  [70, 79, 84, 67, 84],
                  [94, 92, 93, 67, 64],
                  [86, 85, 83, 67, 80]])
print(score.shape)    # (8,5) —— 8行5列
print(score.ndim)     # 2     —— 二维
print(score.size)     # 40    —— 40个元素
print(score.dtype)    # int32 —— 没有指定类型时,默认为int32或int64
print(score.itemsize) # 4     —— int32占8个字节

ndarray常用属性——形状shape

a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3,4])
c = np.array([[ [1,2,3],[4,5,6] ],[ [1,2,3],[4,5,6] ]])

print(a.shape)  #(2,3)
print(b.shape)  #(4,)    元组只有一个元素时,后面会自己有一个,
print(c.shape)  #(2,2,3) 三个[]嵌套,是三维

ndarray常用属性——类型dtype

指定ndarray类型:

3.生成数组的方法

3.1.生成0和1

生成0:

np.zeros(shape=(行数,列数))

a = np.zeros(shape=(2,3))
print(a)

生成1:

np.ones(shape=(行数,列数))

3.2.从现有数组生成

三种方法:

  • 新数组 = np.array(原数组)
  • 新数组 = np.asarray(原数组)
  • 新数组 = np.copy(原数组)

都是将原数组赋值给新数组,区别:

  • np.array()np.copy()深拷贝:修改原数组,新数组不变
  • np.asarray()浅拷贝:修改原数组,新数组也变
原数组 = np.array([[80, 89, 86, 67, 79],
                  [78, 97, 89, 67, 81],
                  [90, 94, 78, 67, 74],
                  [91, 91, 90, 67, 69],
                  [76, 87, 75, 67, 86],
                  [70, 79, 84, 67, 84],
                  [94, 92, 93, 67, 64],
                  [86, 85, 83, 67, 80]])

新数组1 = np.array(原数组)
新数组2 = np.asarray(原数组)
新数组3 = np.copy(原数组)

原数组[(0,0)] = 10000
print("array:\n",新数组1)
print("asarray:\n",新数组2)
print("copy:\n",新数组3)

3.3.生成固定范围的数组

  • np.linspace(起始,终止,个数)
    • 特点:左闭右也闭。等距离
  • np.arange(起始,终止,步长)
    • 特点:和range()完全一样
l = np.linspace(0,5,3)
a = np.arange(0,5,2)
print("linspace:",l)
print("arange:",a)

3.4.生成随机数组

可以指定分布状况 —— 均匀分布、正态分布、指数分布、泊松分布......

a.均匀分布

np.random.uniform(起始,终止,size) #左闭右开,size:左闭右开

data = np.random.uniform(-1, 1, 100000)
print("linspace:",data)

b.正态分布

np.random.normal(loc= ,scale= ,size=)

  • loc:均值μ
  • scale:方差σ
  • size:几行几列
data = np.random.uniform(1.75, 1, 100000)
print("linspace:",data)

3.5.数组切片

跟python其他序列切片一样,不过数组有多维,可以在[x,y,z,...]指定维数的地方切片即可。

a = np.array([[80, 89, 86, 67, 79],
              [78, 97, 89, 67, 81],
              [90, 94, 78, 67, 74],
              [91, 91, 90, 67, 69],
              [76, 87, 75, 67, 86],
              [70, 79, 84, 67, 84],
              [94, 92, 93, 67, 64],
              [86, 85, 83, 67, 80]])
print(a[3, 2:4])

注:切片仍是左闭右开

3.6.shape形状修改

a.维数修改

返回新数组 —— reshape():

np.ndarray.reshape(原数组,(行数,列数,....))原数组.reshape(行数,列数,......)

a = np.array([1, 2, 3, 4, 5, 6])
b = np.ndarray.reshape(a, (2,3))
# b = a.reshape(2,3)
print(b)

注:要是维数设置错误的话,比如六个数要指定二行四列,则会报错。

原地修改 —— resize():

np.ndarray.resize(原数组,(行数,列数,......))原数组.resize(行数,列数,......)

a = np.array([1, 2, 3, 4, 5, 6])
b = np.ndarray.resize(a, (2,3))
# b = a.resize(2,3)
print(b)
print(a)

b.转置

上面维数修改的函数也可以用来转置。

但是有专门用于转置的函数: 原数组.T

注:

  • 不能用np.ndarray.T(原数组)
  • 多维数组也能转置,不止二维。
a = np.array([[1, 2, 3],
              [4, 5, 6]])
print(a.T)

3.7.类型修改

原数组.astype(类型)

3.8.多维数组去重合并成一维

python序列中,可以用set()生成去重集合,但set()不能用于多维数组(只能用于一维数组)。

np.unique(数组)

a = np.array([[1, 2, 3],
              [4, 5, 6]])
b = np.unique(a)
print(b)

4.ndarray运算

4.1.逻辑运算

4.2.通用判断函数

4.3.np.where(三元运算符)

4.4.统计运算