点击上方“小白学视觉”,选择加"星标"或“置顶”
作者:橡鱼 转自:Datawhale
数据可视化,就是指将结构或非结构数据转换成适当的可视化图表,然后将隐藏在数据中的信息直接展现于人们面前。相比传统的用表格或文档展现数据的方式,可视化能将数据以更加直观的方式展现出来,使数据更加客观、更具说服力。
数据可视化已经被用于工作科研的方方面面,如工作报表、科研论文等,成为了不可或缺的基础技能。现在,就让我们一起来学习下数据可视化的基础知识。
Python有许多用于数据可视化的库,例如常见的有seaborn、pyecharts(echarts的Python版本)、ggplot(移植于R语言的ggplot2,但是有些差别,Python有其他方法可以调用R语言的ggplot2)、bokeh、Plotly(同时支持Python和R语言)等等,这些大多是基于Matplotlib进行开发封装的。
Matplotlib是一个Python 2D绘图库(使用Matplotlib发布的mpl_toolkits库可以画3D图形 ),能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的图表。
Matplotlib 是 Python 最著名的绘图库,它提供了一整套和 MATLAB 相似的命令 API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,使用在Python脚本,Python和IPython Shell、Jupyter notebook,Web应用程序服务器和各种图形用户界面工具包等上面。
Matplotlib的图像是画在figure(如windows,jupyter窗体)上的,每一个figure又包含了一个或多个axes(一个可以指定坐标系的子区域)。最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。
声明:以下使用的是IPython Shell
%matplotlib # 在IPython Shell调用Matplotlib绘图接口,需要加这行代码
import matplotlib.pyplot as plt
import numpy as np
fig, ax= plt.subplots() # 创建一个包含一个axes的figure
# 绘图
ax.plot([1, 2, 3, 4], [1, 4, 3, 2])
这里有一个小知识点,很小很小,但是对于刚刚接触数据可视化的新手可能容易弄混。ax.plot([1, 2, 3, 4], [1, 4, 3, 2])
这句代码里面第一个参数是数据集里各个数据点的X值的集合,第二个参数数据集里各个数据点的Y值的集合。所以这里输入的参数值并不是数学上常见的成对坐标点如(x1,y1)、(x2,y2)、...、(xn,yn)的格式,而是 (x1,x2,...,xn)和(y1,y2,...,yn) 。
和MATLAB命令类似,你还可以通过一种更简单的方式绘制图像,matplotlib.pyplot
方法能够直接在当前axes上绘制图像,如果用户未指定axes,matplotlib会帮你自动创建一个。所以上面的例子也可以简化为以下这一行代码。
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
这里有个trick(坑)需要注意一下。如上所示,在IPython或jupyter notebook的同一个代码框中,如果不对其声明画在哪个图上(可以使用 plot()
函数里面的 ax
参数进行指定),就会自动画到最后一个创建的图上(即最后一个Figure对象的最后一个Axes子图里)。
plt.figure() # 创建一个新的Figure对象
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
更多例子可以在Matplotlib官网查看:
https://matplotlib.org/gallery/index.html
现在我们来深入看一下figure的组成。通过一张figure解剖图,我们可以看到一个完整的matplotlib图像通常会包括以下四个层级,这些层级也被称为容器(container),下一节会详细介绍。在matplotlib的世界中,我们将通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果,一副完整的图像实际上是各类子元素的集合。
Figure:顶层级,用来容纳所有绘图元素。
Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成。
Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素。
Tick:axis的下属层级,用来处理所有和刻度有关的元素。
matplotlib提供了两种最常用的绘图接口
显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)。
依赖pyplot自动创建figure和axes,并绘图。
使用第一种绘图接口,是这样的:
x = np.linspace(0, 2, 100)
fig, ax = plt.subplots()
ax.plot(x, x, label='linear')
ax.plot(x, x**2, label='quadratic')
ax.plot(x, x**3, label='cubic')
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend()
而如果采用第二种绘图接口,绘制同样的图,代码是这样的:plt.figure()
IPython 里面需要加这行,jupyter notebook则不用,原因见<2.2 例子2>。
x = np.linspace(0, 2, 100)
plt.figure() # IPython里面需要加这行,jupyter notebook则不用
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
个人经验:
① 在机器学习中,数据可视化经常用于各种算法模型拟合效果的直观展示。
例子2:机器学习聚类算法的K-MEANS算法和DBSCAN算法对数据集划分类别的效果对比。
下图来源:K-MEANS可视化网站https://www.naftaliharris.com/blog/visualizing-k-means-clustering/
下图来源:DBSCAN算法可视化网站https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/
② 在数据分析和数据挖掘中经常用来检查数据的分布,以及窥探数据集内在的规律或事件发展的规律。以下是个人在数据分析和数据挖掘中使用到数据可视化的2个案例。
例1:使用黄氏曲线评估零售店促销活动效果
例2:Kaggle项目:Predict Future Sales(商品未来销量预测)
参考连接:(数据可视化开源教程)
https://github.com/datawhalechina/fantastic-matplotlib
小白团队出品:零基础精通语义分割↓↓↓
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~