本系列文章 md 笔记(已分享)次要探讨人工智能相干常识。次要内容包含,理解机器学习定义以及利用场景,把握机器学习根底环境的装置和应用,把握利用罕用的科学计算库对数据进行展现、剖析,学会应用 jupyter notebook 平台实现代码编写运行,利用 Matplotlib 的基本功能实现图形显示,利用 Matplotlib 实现多图显示,利用 Matplotlib 实现不同画图品种,学习 Numpy 运算速度上的劣势,晓得 Numpy 的数组内存块格调,理解 Numpy 与 Pandas 的不同,学习 Pandas 的应用,利用 crosstab 和 pivot_table 实现穿插表与透视表,利用 Pandas 实现数据的读取和存储,并且理解残缺机器学习我的项目的流程。
全套笔记代码自取 gitee 仓库:
请移步这里获取文档和代码
感兴趣的小伙伴能够自取哦,欢送大家点赞转发~
共 7 章,33 子模块
Matplotlib
学习指标
- 利用 Matplotlib 的基本功能实现图形显示
- 利用 Matplotlib 实现多图显示
- 利用 Matplotlib 实现不同画图品种
3.2 根底绘图性能 — 以折线图为例
学习指标
-
指标
- 把握给图形增加辅助性能(如:标注、x,y 轴名称、题目等)
- 晓得图形的保留
- 晓得如何屡次 plot 绘制图形
- 晓得如何多个坐标系显示图形
- 晓得折线图的利用场景
1 欠缺原始折线图 — 给图形增加辅助性能
为了更好地了解所有根底绘图性能,咱们通过天气温度变动的绘图来交融所有的根底 API 应用
需要:画出某城市 11 点到 12 点 1 小时内每分钟的温度变动折线图,温度范畴在 15 度~18 度
成果:
1.1 筹备数据并画出初始折线图
import matplotlib.pyplot as plt
import random
# 画出温度变动图
# 0. 筹备 x, y 坐标的数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1. 创立画布
plt.figure(figsize=(20, 8), dpi=80)
# 2. 绘制折线图
plt.plot(x, y_shanghai)
# 3. 显示图像
plt.show()
1.2 增加自定义 x,y 刻度
- plt.xticks(x, **kwargs)
x: 要显示的刻度值
- plt.yticks(y, **kwargs)
y: 要显示的刻度值
# 减少以下两行代码
# 结构 x 轴刻度标签
x_ticks_label = ["11 点 {} 分".format(i) for i in x]
# 结构 y 轴刻度
y_ticks = range(40)
# 批改 x,y 轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
如果没有解决过中文问题的话,会显示这个样子:
1.3 中文显示问题解决
解决方案一:
下载中文字体(黑体,看准零碎版本)
- 步骤一:下载 SimHei 字体(或者其余的反对中文显示的字体也行)
-
步骤二:装置字体
- linux 下:拷贝字体到 usr/share/fonts 下:
sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
- windows 和 mac 下:双击装置
- 步骤三:删除~/.matplotlib 中的缓存文件
cd ~/.matplotlib
rm -r *
- 步骤四:批改配置文件 matplotlibrc
vi ~/.matplotlib/matplotlibrc
将文件内容批改为:
font.family : sans-serif
font.sans-serif : SimHei
axes.unicode_minus : False
解决方案二:
在 Python 脚本中动静设置 matplotlibrc, 这样也能够防止因为更改配置文件而造成的麻烦,具体代码如下:
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
有时候,字体更改后,会导致坐标轴中的局部字符无奈失常显示,此时须要更改 axes.unicode_minus 参数:
# 设置失常显示符号
mpl.rcParams["axes.unicode_minus"] = False
1.4 增加网格显示
为了更加分明地察看图形对应的值
plt.grid(True, linestyle='--', alpha=0.5)
1.5 增加形容信息
增加 x 轴、y 轴形容信息及题目
通过 fontsize 参数能够批改图像中字体的大小
plt.xlabel("工夫")
plt.ylabel("温度")
plt.title("中午 11 点 0 分到 12 点之间的温度变动图示", fontsize=20)
1.6 图像保留
# 保留图片到指定门路
plt.savefig("test.png")
- 留神:plt.show()会开释 figure 资源,如果在显示图像之后保留图片将只能保留空图片。
残缺代码:
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置失常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 0. 筹备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1. 创立画布
plt.figure(figsize=(20, 8), dpi=100)
# 2. 绘制图像
plt.plot(x, y_shanghai)
# 2.1 增加 x,y 轴刻度
# 结构 x,y 轴刻度标签
x_ticks_label = ["11 点 {} 分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 增加网格显示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 增加形容信息
plt.xlabel("工夫")
plt.ylabel("温度")
plt.title("中午 11 点 --12 点某城市温度变动图", fontsize=20)
# 2.4 图像保留
plt.savefig("./test.png")
# 3. 图像显示
plt.show()
2 在一个坐标系中绘制多个图像
2.1 屡次 plot
需要:再增加一个城市的温度变动
收集到北京当天温度变动状况,温度在 1 度到 3 度。怎么去增加另一个在同一坐标系当中的不同图形,其实很简略只须要再次 plot 即可,然而须要辨别线条,如下显示
# 减少北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]
# 绘制折线图
plt.plot(x, y_shanghai)
# 应用屡次 plot 能够画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')
咱们仔细观察,用到了两个新的中央,一个是对于不同的折线展现成果,一个是增加图例。
2.2 设置图形格调
色彩字符 | 格调字符 |
---|---|
r 红色 | – 实线 |
g 绿色 | – – 虚线 |
b 蓝色 | -. 点划线 |
w 红色 | : 点虚线 |
c 青色 | ‘ ‘ 留空、空格 |
m 洋红 | |
y 黄色 | |
k 彩色 |
2.3 显示图例
- 留神:如果只在 plt.plot()中设置 label 还不能最终显示出图例,还须要通过 plt.legend()将图例显示进去。
# 绘制折线图
plt.plot(x, y_shanghai, label="上海")
# 应用屡次 plot 能够画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
# 显示图例
plt.legend(loc="best")
Location String | Location Code |
---|---|
‘best’ | 0 |
‘upper right’ | 1 |
‘upper left’ | 2 |
‘lower left’ | 3 |
‘lower right’ | 4 |
‘right’ | 5 |
‘center left’ | 6 |
‘center right’ | 7 |
‘lower center’ | 8 |
‘upper center’ | 9 |
‘center’ | 10 |
残缺代码:
# 0. 筹备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 1. 创立画布
plt.figure(figsize=(20, 8), dpi=100)
# 2. 绘制图像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 增加 x,y 轴刻度
# 结构 x,y 轴刻度标签
x_ticks_label = ["11 点 {} 分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 增加网格显示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 增加形容信息
plt.xlabel("工夫")
plt.ylabel("温度")
plt.title("中午 11 点 --12 点某城市温度变动图", fontsize=20)
# 2.4 图像保留
plt.savefig("./test.png")
# 2.5 增加图例
plt.legend(loc=0)
# 3. 图像显示
plt.show()
2.4 练一练
练习屡次 plot 流程(从下面复制代码, 到本人电脑, 确保每人环境能够失常运行),
同时明确每个过程执行实现的具体成果
3 多个坐标系显示— plt.subplots(面向对象的画图办法)
如果咱们想要将上海和北京的天气图显示在同一个图的不同坐标系当中,成果如下:
能够通过 subplots 函数实现(旧的版本中有 subplot,应用起来不不便),举荐 subplots 函数
- matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创立一个带有多个 axes(坐标系 / 绘图区)的图
Parameters:
nrows, ncols : 设置有几行几列坐标系
int, optional, default: 1, Number of rows/columns of the subplot grid.
Returns:
fig : 图对象
axes : 返回相应数量的坐标系
设置题目等办法不同:set_xticks
set_yticks
set_xlabel
set_ylabel
对于 axes 子坐标系的更多办法:参考 https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes
- 留神:plt. 函数名 () 相当于面向过程的画图办法,axes.set_办法名 () 相当于面向对象的画图办法。
# 0. 筹备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]
# 1. 创立画布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2. 绘制图像
# plt.plot(x, y_shanghai, label="上海")
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 增加 x,y 轴刻度
# 结构 x,y 轴刻度标签
x_ticks_label = ["11 点 {} 分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
# 2.2 增加网格显示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)
# 2.3 增加形容信息
# plt.xlabel("工夫")
# plt.ylabel("温度")
# plt.title("中午 11 点 --12 点某城市温度变动图", fontsize=20)
axes[0].set_xlabel("工夫")
axes[0].set_ylabel("温度")
axes[0].set_title("中午 11 点 --12 点某城市温度变动图", fontsize=20)
axes[1].set_xlabel("工夫")
axes[1].set_ylabel("温度")
axes[1].set_title("中午 11 点 --12 点某城市温度变动图", fontsize=20)
# # 2.4 图像保留
plt.savefig("./test.png")
# # 2.5 增加图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 3. 图像显示
plt.show()
4 折线图的利用场景
- 出现公司产品 (不同区域) 每天沉闷用户数
- 出现 app 每天下载数量
- 出现产品新性能上线后, 用户点击次数随工夫的变动
-
拓展:画各种数学函数图像
- 留神:plt.plot()除了能够画折线图,也能够用于画各种数学函数图像
代码:
import numpy as np
# 0. 筹备数据
x = np.linspace(-10, 10, 1000)
y = np.sin(x)
# 1. 创立画布
plt.figure(figsize=(20, 8), dpi=100)
# 2. 绘制函数图像
plt.plot(x, y)
# 2.1 增加网格显示
plt.grid()
# 3. 显示图像
plt.show()
5 小结
-
增加 x,y 轴刻度【晓得】
- plt.xticks()
- plt.yticks()
- 留神: 在传递进去的第一个参数必须是数字, 不能是字符串, 如果是字符串吗, 须要进行替换操作
-
增加网格显示【晓得】
- plt.grid(linestyle=”–“, alpha=0.5)
-
增加形容信息【晓得】
- plt.xlabel()
- plt.ylabel()
- plt.title()
-
图像保留【晓得】
- plt.savefig(“ 门路 ”)
-
屡次 plot【理解】
- 间接进行增加就 OK
-
显示图例【晓得】
- plt.legend(loc=”best”)
- 留神: 肯定要在 plt.plot()外面设置一个 label, 如果不设置, 没法显示
-
多个坐标系显示【理解】
- plt.subplots(nrows=, ncols=)
-
折线图的利用【晓得】
- 1. 利用于察看数据的变动
- 2. 可是画出一些数学函数图像