数据可视化旨在借助图形化的手段,将一组数据以图形的形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。
数据可视化发展历史
可视化其实是一个抽象的过程,它可以简单地理解为将一个不易描述的事物形成一个可感知画面的过程,也就是从数据空间到图形空间的映射。
无论原始数据被映射为哪种图形数据,最终要达到的目的只有一个,便是准确地、高效地、全面地传递信息,进而建立起数据间的关系,使人们发现数据间的规律和特征,并挖掘出有价值的信息,提高数据沟通的效率。
假设某公司员工在整理全年KPI报告时准备了表格和图形这两种形式的数据。
表格
表格可以帮助公司领导快速地知道各季度的具体数值,但无法快速地了解各季度之间的比较情况。
图形
图形可以帮助公司高层准确地了解各季度之间的比较情况,方便对公司下一年的工作做出有效地决策。
总结:综上所述,数据可视化是数据分析工作中重要的一环,对数据潜在价值的挖掘有着深远的影响。随着数据可视化平台的拓展、表现形式的变化,以及实时动态效果、用户交互使用等功能的增加,数据可视化的内涵正在不断扩大,相信数据可视化的应用领域会越来越广泛。
成都市4月23-29日的最高气温和最低气温的变化情况
2015-1018年阿里巴巴公司营收情况
2022年上半年快手用户对各类商品广告的关注率
某厂商对 100 个抽样产品的质量级别评定情况
柱形图与直方图的区别包括以下两点:
不同厂家所产地毯的耐用性
箱形图中每个图形的结构是相同的,包括一个矩形箱体、上下两条竖线、上下两条横线。
2022年全国居民的人均消费支出情况
股票回报率与基金回报率 的投资分析情况
散点图中数据点的分布情况可以体现变量之间的相关性。
若所有的数据点在一条直线附近呈波动趋势,说明变量之间是线性相关的。
若数据点在曲线附近呈波动趋势,说明变量之间是非线性相关的。
若数据点没有显示任何关系,说明变量之间是不相关的。
气泡图:气泡图是散点图的变形,它是一种能够展示多变量关系的图表。气泡图一般使用两个变量标注气泡在坐标系中的位置,使用第3个变量标注气泡的面积,适用于分类数据对比、多变量相关性等情况。
第 1 梯队和第 2 梯队主流 App 用户量与上线时间的分布情况
成都上半年的降雨量
某人通过霍兰德职业兴趣测试的结果
2021年2月1日中国新型冠状病毒肺炎疫情地图
豆粕期权隐含波动率
数据可视化的图标类型十分丰富,好的图表可以有效、清晰地呈现数据地信息。对于用户而言,选择正确地图表是十分关键地,不仅可以达到“一图胜千言”地效果,而且会直接影响分析的结果。
用户选择正确的数据可视化图表,需要明确数据的逻辑关系。数据的逻辑关系可分为4种:比较、分布、构成和联系。
由图可知,若数据按照时间进行比较,当数据周期少时可以选择柱形图或折线图,数据周期多时可以选择雷达图或折线图;若数据按分类进行比较,当每个项目中仅包含1个变量时可以选择表格、条形图或柱形图,当每个项目包含2个变量时可以选择不等宽柱形图。
由图可知,基于分布关系的数据包括单变量(例如文化程度)、2个变量(例如文化程度和收入期望)、3个变量(例如文化程度、收入期望和工作经验)。若数据为单变量,可以选择直方图或正态分布图;若数据为2个变量,可以选择散点图;若数据为3个变量,可以选择曲面图。
由图可知,基于构成关系的数据按照是否变化可分为静态数据和随时间变化的数据。若是静态数据,可以选择饼图、瀑布图或堆积柱形图;若为随时间变化的数据,则先按照周期数分为少数周期数据和多周期数据,对于少数周期数据可以选择堆积柱形图,对于多周期数据可以选择堆积面积图。
由图可知,基于联系关系的数据,若数据中包含2个变量,可以选择散点图进行展示;若数据中包含3个变量,可以选择气泡图进行展示。
Python作为数据分析的首选语言,它针对数据分析的每个环节都提供了很多库。常见的数据可视化库包括matplotlib、seaborn、ggplot、bokeh、pygal、pyecharts。
尽管在matplotlib的基础上封装了很多更轻量的库,但万变不离其宗,掌握matplotlib可以更好的掌握底层原理,也可以更快速的学习其他可视化库。
matplotlib是一个由John D.Hunter等人员开发的、主要用于绘制2D图表的Python库。matplotlib支持numpy、pandas的数据结构,具有绘制丰富的图表、定制图表元素或样式的功能。 matplotlib 还可用于绘制一些3D图表 。
matplotlib实际上是一个面向对象的绘图库,它所绘制的图标元素均对应一个对象。matplotlib官网提供了3种API:pyplot API(implicit API)、object-oriented API(explicit API)、pylab API 。
pyplot API是使用pyplot模块开发的接口,该接口封装了一系列与MATLAB命令同名的函数,使用这些函数可以像使用MATLAB命令一样快速地绘制图表。
object-oriented API是面向对象的接口,该接口封装了一系列对应图表元素的类,只有创建这些类的对象并按照隶属关系组合到一起才能完成一次完整的绘图。
pylab API是使用pylab模块开发的接口,它最初是为了模仿MATLAB的工作方式而设计的,包括pyplot、numpy模块及一些其它附加功能,适用于Python交互环境中。
**注:**matplotlib官方不建议使用pylab API进行开发,并在最新的版本中弃用了pylab API。用户在使用时可以根据自身的实际情况进行选择 ,若只是需要快速地绘制图表,可以选择pyplot API进行开发;若需要自定义图表,可以选择object-oriented API进行开发。
在安装matplotlib前,需要先安装配置好Python环境,此处采用Python3.10作为环境:
安装matplotlib有多种方式,可以通过pip命令(pip install matplotlib)直接安装,也可以使用Anaconda工具进行安装。Anaconda是一个开源的Python发行版本,包括conda、Python环境,以及诸如numpy、pandas、matplotlib、scipy等180多个科学计算包,既可以在同一台计算机上安装不同版本的软件包和依赖项,也能在不同环境之间进行切换,非常适合初学者使用。
Anaconda中文网可以作为安装学习参考。
Anaconda3
的“Anaconda Prompt”输入命令conda list
即可看到Anaconda
所集成的库: 绘制如下图表:
import numpy as np
import matplotlib.pyplot as plt
# 准备数据
data = np.array([1, 2, 3, 4, 5])
# 创建代表画布的Figure类的对象fig
fig = plt.figure()
# 在画布fig上添加坐标系风格的绘图区域
ax = fig.add_subplot(111)
# 绘制图表
ax.plot(data)
# 展示图表
plt.show()
下面使用pyplot的函数快速地绘制同一个图表:
import numpy as np
import matplotlib.pyplot as plt
# 准备数据
data = np.array([1, 2, 3, 4, 5])
plt.plot(data)
plt.show()
plot()函数与plot()方法地参数用法是相同地,它们唯一的区别在于plot()函数缺少了self
参数,可以直接被pyplot
模块调用;而plot()
方法只能被Axes类的对象调用。关于Canvas对象、Figure对象、Axes对象的结构如下图所示:
Axes对象拥有属于自己的坐标系,它可以是直角坐标系,即包含x轴和y轴的坐标系,也可以是三维坐标系(Axes的子类Axes3D对象),即包含x轴、y轴、z轴的坐标系。
假设大家想画一幅素描:
使用matplotlib绘制的图形主要由三层组成:容器层、图像层和辅助显示层: