《数据分析实战 45 讲》 学习笔记 Day9

381 阅读13分钟

14丨数据可视化:掌握数据领域的万金油技能

数据可视化的视图都有哪些?
我们常用的可视化视图超过 20 种,分别包括:文本表、热力图、地图、符号地图、饼图、水平条、堆叠条、并排条、树状图、圆视图、并排圆、线、双线、面积图、双组合、散点图、直方图、盒须图、甘特图、靶心图、气泡图等。
当然,你不仅要掌握这些视图的使用,更要了解使用它们背后的目的是什么,这里我整理了下,可以分为以下的 9 种情况:

image.png
数据可视化工具都有哪些?
这些工具有很多,我从几个维度来给你介绍下。这几个维度分别是商业智能分析软件、可视化大屏、前端可视化组件和编程语言类。
商业智能分析
首先在商业智能分析软件中,最著名的当属 Tableau 和 PowerBI 了,另外中国帆软出品的 FineBI 也受到国内很多企业的青睐。
Tableau 是国外的商业软件,收费不低。它适合 BI 工程师、数据分析分析师。如果可以熟练掌握 Tableau,那么找到一份数据分析的工作是不难的。
PowerBI 是微软出品的,可以和 Excel 搭配使用,你可以通过 PowerBI 来呈现 Excel 的可视化内容。在 BI 行业中,Tableau 和 PowerBI 远超其他 BI 产品,处于行业的领导者的位置。
另外 FineBI 是中国的帆软出品,针对国内使用更加友好,同时也倾向于企业级应用的 BI。
可视化大屏类
大屏作为一种视觉效果强、科技感强的技术,被企业老板所青睐,可以很好地展示公司的数据化能力。
这里给你介绍两款可视化大屏的软件 DataV 和 FineReport。
DataV
DataV 是一款可视化的工具,天猫双十一大屏就是用它呈现的。你要做的就是选择相应的控件,配置控件的样式、数据传输和交互效果等。当然 DataV 本身有一些免费的模板,你可以直接通过模板来创建。不过一些特殊的控件和交互效果还是需要购买企业版才行。
FineReport
FineReport 是帆软出品的工具,你可以看出他家的产品基本上都是 Fine 开头的,包括刚才给你介绍的 FineBI。FineReport 可以做数据大屏,也可以做可视化报表,在很多行业都有解决方案,操作起来也很方便。可以实时连接业务数据,对数据进行展示。
前端可视化组件
如果你想要成为一名前端数据可视化工程师的话,至少熟练掌握一种前端可视化组件是必不可少的,不少公司招聘“高级前端工程师”的时候,都要求熟悉几个开源数据可视化组件。
可视化组件都是基于 Web 渲染的技术的。所以你需要了解一下几个典型的 Web 渲染技术:Canvas、SVG 和 WebGL。简单来说,**Canvas 和 SVG 是 HTML5 中主要的 2D 图形技术,WebGL 是 3D 框架。 **

Canvas 适用于位图,也就是给了你一张白板,需要你自己来画点。Canvas 技术可以绘制比较复杂的动画。不过它是 HTML5 自带的,所以低版本浏览器不支持 Canvas。 ECharts 这个可视化组件就是基于 Canvas 实现的。
SVG 的中文是可缩放矢量图形,它是使用 XML 格式来定义图形的。相当于用点和线来描绘了图形,相比于位图来说文件比较小,而且任意缩放都不会失真。
SVG 经常用于图标和图表上。它最大的特点就是支持大部分浏览器,动态交互性实现起来也很方便,比如在 SVG 中插入动画元素等。
**WebGL 是一种 3D 绘图协议,**能在网页浏览器中呈现 3D 画面技术,并且可以和用户进行交互。你在网页上看到的很多酷炫的 3D 效果,基本上都是用 WebGL 来渲染的。下面介绍的 Three.js 就是基于 WebGL 框架的。

在了解这些 Web 渲染协议之后,我再来带你看下这些常用的可视化组件: Echarts、D3、Three.js 和 AntV。
ECharts 是基于 H5 canvas 的 Javascript 图表库,是百度的开源项目,一直都有更新,使用的人也比较多。它作为一个组件,可以和 DataV、Python 进行组合使用。你可以在 DataV 企业版中接入 ECharts 图表组件。也可以使用 Python 的 Web 框架(比如 Django、Flask)+ECharts 的解决方案。这样可以让你的项目更加灵活地使用到 ECharts 的图表库,不论你是用 Python 语言,还是用 DataV 的工具,都可以享受到 ECharts 丰富的图表库样式。
D3 的全称是 Data-Driven Documents,简单来说,是一个 JavaScript 的函数库,因为文件的后缀名通常为“.js”,所以 D3 也常使用 D3.js 来称呼。它提供了各种简单易用的函数,大大简化了 JavaScript 操作数据的难度。你只需要输入几个简单的数据,就能够转换为各种绚丽的图形。由于它本质上是 JavaScript,所以用 JavaScript 也是可以实现所有功能的。
Three.js,顾名思义,就是 Three+JS 的意思。“Three”表示 3D 的意思,“Three.js”就是使用 JavaScript 来实现 3D 效果。Three.js 是一款 WebGL 框架,封装了大量 WebGL 接口,因为直接用 WebGL API 写 3D 程序太麻烦了。
AntV 是蚂蚁金服出品的一套数据可视化组件,包括了 G2、G6、F2 和 L7 一共 4 个组件。其中 G2 应该是最知名的,它的意思是 The grammar Of Graphics,也就是一套图形语法。它集成了大量的统计工具,而且可以让用户通过简单的语法搭建出多种图表。G6 是一套流程图和关系分析的图表库。F2 适用于移动端的可视化方案。L7 提供了地理空间的数据可视化框架。
编程语言
下面我简单介绍下,如何使用 Python 和 R 进行数据可视化。
在 Python 里包括了众多可视化库,比如 Matplotlib、Seaborn、Bokeh、Plotly、Pyecharts、Mapbox 和 Geoplotlib。其中使用频率最高,最需要掌握的就是 Matplotlib 和 Seaborn。Matplotlib 是 Python 的可视化基础库,作图风格和 MATLAB 类似,所以称为 Matplotlib。一般学习 Python 数据可视化,都会从 Matplotlib 入手,然后再学习其他的 Python 可视化库。
Seaborn 是一个基于 Matplotlib 的高级可视化效果库,针对 Matplotlib 做了更高级的封装,让作图变得更加容易。你可以用短小的代码绘制更多维度数据的可视化效果图

在 R 中也有很多可视化库可供选择。其中包括了 R 自带的绘图包 Graphics 以及工具包 ggplot2、ggmap、timevis 和 plotly 等。其中 ggplot2 是 R 语言中重要的绘图包,这个工具包将数据与绘图操作进行了分离,所以使用起来清晰明了,画出的图也漂亮。其实在 Python 里后来也引入了 ggplot 库,这样在 Python 中也可以很方便地使用到 ggplot,而且和 R 语言中的 ggplot2 代码差别不大,稍作修改,就能直接在 Python 中运行了。
如何开始数据可视化的学习
1. 重点推荐 TableauTableau 在可视化灵活分析上功能强大,主要目标用户更多是较专业的数据分析师。同时在工作场景中使用率高,因此掌握 Tableau 对于晋升和求职都很有帮助。不过 Tableau 是个商业软件,收费不低。而且上手起来有一些门槛,需要一定数据基础。2. 使用微图、DataV前面我给你讲过八爪鱼的使用,微图和八爪鱼是一家公司的产品,使用起来非常方便,而且免费。当你用八爪鱼采集数据之后,就直接可以用微图进行数据可视化。DataV 是阿里推出的数字大屏技术,不过它是收费的产品。它最大的好处,就是可以分享链接,让别人可以在线浏览,不需要像 Tableau 一样安装客户端才能看到数据可视化的结果。另外 DataV 有一些模板,你直接可以使用。你可以先使用微图和 DataV 作为你的数据可视化体验工具,因为成本低,上手起来快。这样你对数据可视化可以有个直观的了解。如果你想从事数据可视化这份工作,你可以花更多的精力去研究和学习 Tableau。3. Python 可视化Python 是数据分析的首选语言,如果你不进行编程,可以使用我在上文中提到的数据可视化的工具。如果你的目标是个数据挖掘工程师,或者算法工程师,那么最重要的就是要了解,并且熟练掌握 Python 的数据可视化。
总结我今天给你介绍了数据可视化的视图,然后带你讲解了当前主流的数据可视化工具。Tableau 和 PowerBI 是 BI 商业智能行业的领导者,是很多大公司里商业数据分析工作必备的工具。如果你使用 Python 作为数据分析的语言,那么也需要对 Python 数据可视化有所掌握。

image.png

15丨一次学会Python数据可视化的10种技能

可视化视图都有哪些?
按照数据之间的关系,我们可以把可视化视图划分为 4 类,它们分别是比较、联系、构成和分布。我来简单介绍下这四种关系的特点:
比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;联系:查看两个或两个以上变量之间的关系,比如散点图;构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图;分布:关注单个变量,或者多个变量的分布情况,比如直方图。
同样,按照变量的个数,我们可以把可视化视图划分为单变量分析和多变量分析。单变量分析指的是一次只关注一个变量。比如我们只关注“身高”这个变量,来看身高的取值分布,而暂时忽略其他变量。多变量分析可以让你在一张图上可以查看两个以上变量的关系。比如“身高”和“年龄”,你可以理解是同一个人的两个参数,这样在同一张图中可以看到每个人的“身高”和“年龄”的取值,从而分析出来这两个变量之间是否存在某种联系。可视化的视图可以说是分门别类,多种多样,今天我主要介绍常用的 10 种视图,这些视图包括了散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图、二元变量分布和成对关系。

image.png
散点图
` import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns

数据准备

N = 1000 x = np.random.randn(N) y = np.random.randn(N)

用Matplotlib画散点图

plt.scatter(x, y,marker='x') plt.show()

用Seaborn画散点图

df = pd.DataFrame({'x': x, 'y': y}) sns.jointplot(x="x", y="y", data=df, kind='scatter'); plt.show()`

mtimage.png
sea

image.png
折线图
` import pandas as pd import matplotlib.pyplot as plt import seaborn as sns

数据准备

x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019] y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35]

使用Matplotlib画折线图

plt.plot(x, y) plt.show()

使用Seaborn画折线图

df = pd.DataFrame({'x': x, 'y': y}) sns.lineplot(x="x", y="y", data=df) plt.show()`

image.png

image.png
直方图
` import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns

数据准备

a = np.random.randn(100) s = pd.Series(a)

用Matplotlib画直方图

plt.hist(s) plt.show()

用Seaborn画直方图

sns.distplot(s, kde=False) plt.show() sns.distplot(s, kde=True) plt.show()`

image.png

image.png

image.png
条形图
` import matplotlib.pyplot as plt import seaborn as sns

数据准备

x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5'] y = [5, 4, 8, 12, 7]

用Matplotlib画条形图

plt.bar(x, y) plt.show()

用Seaborn画条形图

sns.barplot(x, y) plt.show()`

image.png

image.png
箱线图
`

数据准备

生成10*4维度数据

data=np.random.normal(size=(10,4)) labels = ['A','B','C','D']

用Matplotlib画箱线图

plt.boxplot(data,labels=labels) plt.show()

用Seaborn画箱线图

df = pd.DataFrame(data, columns=labels) sns.boxplot(data=df) plt.show()`

image.png

image.png
饼图
` import matplotlib.pyplot as plt

数据准备

nums = [25, 37, 33, 37, 6] labels = ['High-school','Bachelor','Master','Ph.d', 'Others']

用Matplotlib画饼图

plt.pie(x = nums, labels=labels) plt.show()`

image.png
热力图
` import matplotlib.pyplot as plt import seaborn as sns

数据准备

flights = sns.load_dataset("flights") data=flights.pivot('year','month','passengers')

用Seaborn画热力图

sns.heatmap(data) plt.show()`

image.png
蜘蛛图
` import numpy as np import matplotlib.pyplot as plt import seaborn as sns from matplotlib.font_manager import FontProperties

数据准备

labels=np.array([u"推进","KDA",u"生存",u"团战",u"发育",u"输出"]) stats=[83, 61, 95, 67, 76, 88]

画图数据准备,角度、状态值

angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False) stats=np.concatenate((stats,[stats[0]])) angles=np.concatenate((angles,[angles[0]]))

用Matplotlib画蜘蛛图

fig = plt.figure() ax = fig.add_subplot(111, polar=True)
ax.plot(angles, stats, 'o-', linewidth=2) ax.fill(angles, stats, alpha=0.25)

设置中文字体

font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)
ax.set_thetagrids(angles * 180/np.pi, labels, FontProperties=font) plt.show()`

image.png
二元变量分布
` import matplotlib.pyplot as plt import seaborn as sns

数据准备

tips = sns.load_dataset("tips") print(tips.head(10))

用Seaborn画二元变量分布图(散点图,核密度图,Hexbin图)

sns.jointplot(x="total_bill", y="tip", data=tips, kind='scatter') sns.jointplot(x="total_bill", y="tip", data=tips, kind='kde') sns.jointplot(x="total_bill", y="tip", data=tips, kind='hex') plt.show()`

image.png

image.png

image.png
成对关系
` import matplotlib.pyplot as plt import seaborn as sns

数据准备

iris = sns.load_dataset('iris')

用Seaborn画成对关系

sns.pairplot(iris) plt.show()`

image.png
总结我今天给你讲了 Python 可视化工具包 Matplotlib 和 Seaborn 工具包的使用。他们两者之间的关系就相当于 NumPy 和 Pandas 的关系。Seaborn 是基于 Matplotlib 更加高级的可视化库。另外针对我讲到的这 10 种可视化视图,可以按照变量之间的关系对它们进行分类,这些关系分别是比较、联系、构成和分布。当然我们也可以按照随机变量的个数来进行划分,比如单变量分析和多变量分析。在数据探索中,成对关系 pairplot() 的使用,相好比 Pandas 中的 describe() 使用一样方便,常用于项目初期的数据可视化探索。在 Matplotlib 和 Seaborn 的函数中,我只列了最基础的使用,也方便你快速上手。当然如果你也可以设置修改颜色、宽度等视图属性。你可以自己查看相关的函数帮助文档。这些留给你来进行探索。关于本次 Python 可视化的学习,我希望你能掌握:视图的分类,以及可以从哪些维度对它们进行分类;十种常见视图的概念,以及如何在 Python 中进行使用,都需要用到哪些函数;需要自己动手跑一遍案例中的代码,体验下 Python 数据可视化的过程。 image.png