1|0Matplotlib
- 是专门用于开发2D图表(包括3D图表)
- 以渐进、交互式方式实现数据可视化
1|1实现一个简单的Matplotlib画图
①导入:matplotlib.pytplot包含了一系列类似于matlab的画图函数。
②图形绘制流程:
创建画布 -- plt.figure()
绘制图像 -- plt.plot(x, y)
显示图像 -- plt.show()
输出:
1|2扩展画图的功能
添加自定义x,y刻度
-
plt.xticks(x, **kwargs)
x:要显示的刻度值
-
plt.yticks(y, **kwargs)
y:要显示的刻度值
中文显示问题解决
添加网格显示
添加描述信息
图像保存
1|3在一个坐标系中绘制多个图像
只要多次plot就行
设置图形风格
颜色字符 | 风格字符 |
---|---|
r 红色 | - 实线 |
g 绿色 | - - 虚线 |
b 蓝色 | -. 点划线 |
w 白色 | : 点虚线 |
c 青色 | ' ' 留空、空格 |
m 洋红 | |
y 黄色 | |
k 黑色 |
显示图例
如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。
1|4多个坐标系显示— plt.subplots(面向对象的画图方法)
matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的图
画各种数学函数图像
正弦(sin),余弦(cos),正切(tan),反正弦(arcsin),反余弦(arccos),反正切(arctan)
1|5制折线图、散点图、柱状图、直方图、饼图
折线图:以折线的上升或下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)
api:plt.plot(x, y)
散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
api:plt.scatter(x, y)
柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。
特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)
api:plt.bar(x, width, align='center', **kwargs)
直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。
特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)
api:matplotlib.pyplot.hist(x, bins=None)
饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
特点:分类数据的占比情况(占比)
api:plt.pie(x, labels=,autopct=,colors)
2|0Numpy
Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
2|1简单认识
输出:
(8, 5)
2
40
4
int32
[[[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.]]]
3
(2, 4, 5)
2|2深拷贝与浅拷贝
输出:
[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]
[[100 2 3]
[ 4 5 6]]
2|3间隔数组,等差数组,等比数组
输出:
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48]
[ 10. 10.47615753 10.97498765 11.49756995 12.0450354
12.61856883 13.21941148 13.84886371 14.50828778 15.19911083
15.92282793 16.68100537 17.475284 18.3073828 19.17910262
20.09233003 21.04904145 22.0513074 23.101297 24.20128265
25.35364494 26.56087783 27.82559402 29.15053063 30.53855509
31.99267138 33.51602651 35.11191734 36.78379772 38.53528594
40.37017259 42.29242874 44.30621458 46.41588834 48.6260158
50.94138015 53.36699231 55.90810183 58.57020818 61.35907273
64.28073117 67.34150658 70.54802311 73.90722034 77.42636827
81.11308308 84.97534359 89.02150854 93.26033469 97.70099573
102.35310219 107.2267222 112.3324033 117.68119524 123.28467394
129.1549665 135.30477746 141.74741629 148.49682623 155.56761439
162.97508346 170.73526475 178.86495291 187.38174229 196.304065
205.65123083 215.443469 225.70197196 236.44894126 247.7076356
259.50242114 271.85882427 284.80358684 298.36472403 312.57158497
327.45491629 343.04692863 359.38136638 376.49358068 394.42060594
413.20124001 432.87612811 453.48785081 475.08101621 497.70235643
521.4008288 546.22772177 572.23676594 599.48425032 628.02914418
657.93322466 689.26121043 722.08090184 756.46332755 792.48289835
830.21756813 869.74900262 911.16275612 954.54845666 1000. ]
2|4生成0和1的数组
输出:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
2|5生成随机数组
[[ 0.21734627 -0.97992775 0.24635965 -0.52524527 0.61409397]
[-0.42891216 0.07972822 -0.09477911 1.77777235 -0.09798548]
[ 0.30071645 -0.95531024 0.30922396 -0.72969828 -0.43364537]
[-1.27946259 -1.05671799 0.74995682 0.51016288 0.50191553]]
2|6数组的索引、切片
一维、二维、三维的数组如何索引?
- 直接进行索引,切片
- 对象[:, :] -- 先行后列
输出:
[[-0.8475957 0.59500006 -0.99042764 -1.47068488 1.04488987]
[ 1.05759779 -0.34656605 0.25075867 1.26481382 -0.02561291]
[ 0.00384902 0.53486762 -0.94276903 -0.33453538 1.447024 ]
[ 0.60627864 0.26352157 0.61437243 -1.0099516 -1.34009347]]
[[-0.8475957 0.59500006 -0.99042764]
[ 1.05759779 -0.34656605 0.25075867]
[ 0.00384902 0.53486762 -0.94276903]]
2
2|7形状修改
源数据:[[-1.01605099 0.04340228 -0.13464495 1.15063668 -0.6123171 ]
[-2.47248818 0.92994026 -0.85258242 0.1856697 1.41896786]
[ 1.87231721 -0.26889703 -0.07252063 -0.40996587 0.21071932]
[-0.67559295 1.39530076 -0.20394447 -0.39996382 0.03839303]]
reshape为5行4列的新数据:[[-1.01605099 0.04340228 -0.13464495 1.15063668]
[-0.6123171 -2.47248818 0.92994026 -0.85258242]
[ 0.1856697 1.41896786 1.87231721 -0.26889703]
[-0.07252063 -0.40996587 0.21071932 -0.67559295]
[ 1.39530076 -0.20394447 -0.39996382 0.03839303]]
reshape为?行2列的新数据:[[-1.01605099 0.04340228]
[-0.13464495 1.15063668]
[-0.6123171 -2.47248818]
[ 0.92994026 -0.85258242]
[ 0.1856697 1.41896786]
[ 1.87231721 -0.26889703]
[-0.07252063 -0.40996587]
[ 0.21071932 -0.67559295]
[ 1.39530076 -0.20394447]
[-0.39996382 0.03839303]]
reshape为2行?列的新数据:[[-1.01605099 0.04340228 -0.13464495 1.15063668 -0.6123171 -2.47248818
0.92994026 -0.85258242 0.1856697 1.41896786]
[ 1.87231721 -0.26889703 -0.07252063 -0.40996587 0.21071932 -0.67559295
1.39530076 -0.20394447 -0.39996382 0.03839303]]
修改本身为10行2列后的数据:[[-1.01605099 0.04340228]
[-0.13464495 1.15063668]
[-0.6123171 -2.47248818]
[ 0.92994026 -0.85258242]
[ 0.1856697 1.41896786]
[ 1.87231721 -0.26889703]
[-0.07252063 -0.40996587]
[ 0.21071932 -0.67559295]
[ 1.39530076 -0.20394447]
[-0.39996382 0.03839303]]
转置后的数据:[[-1.01605099 -0.13464495 -0.6123171 0.92994026 0.1856697 1.87231721
-0.07252063 0.21071932 1.39530076 -0.39996382]
[ 0.04340228 1.15063668 -2.47248818 -0.85258242 1.41896786 -0.26889703
-0.40996587 -0.67559295 -0.20394447 0.03839303]]
修改数据的类型为int:[[-1 0 0 0 0 1 0 0 1 0]
[ 0 1 -2 0 1 0 0 0 0 0]]
转为字符串:b'x01x00x00x00x02x00x00x00x03x00x00x00x04x00x00x00x05x00x00x00x06x00x00x00x0cx00x00x00x03x00x00x00"x00x00x00x05x00x00x00x06x00x00x00x07x00x00x00'
数组去重后的数据:[1 2 3 4 5 6]
2|8array运算
2|9数组间的运算
[[ 3 6 9]
[ 9 12 15]]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
(2, 6)
(2, 1)
[[2 3 4 3 2 5]
[8 9 4 5 6 4]]
2|10矩阵乘法
np.matmul和np.dot的区别:
二者都是矩阵乘法。 np.matmul中禁止矩阵与标量的乘法。 在矢量乘矢量的內积运算中,np.matmul与np.dot没有区别。
输出:
[[81.8]
[81.4]
[82.9]
[90. ]
[84.8]
[84.4]
[78.6]
[92.6]]
[[81.8]
[81.4]
[82.9]
[90. ]
[84.8]
[84.4]
[78.6]
[92.6]]
[[800 860]
[820 800]
[850 780]
[900 900]
[860 820]
[820 900]
[780 800]
[920 940]]