【数据科学】Python数据可视化概述

注:很早之前就打算专门写一篇与Python数据可视化相关的博客,对一些基本概念和常用技巧做一个小结。今天终于有时间来完成这个计划了!

0. Python中常用的可视化工具



Python在数据科学中的地位,不仅仅是因为numpy, scipy, pandas, scikit-learn这些高效易用、接口统一的科学计算包,其强大的数据可视化工具也是重要组成部分。在Python中,使用的最多的数据可视化工具是matplotlib,除此之外还有很多其他可选的可视化工具包,主要包括以下几大类:

  • matplotlib以及基于matplotlib开发的工具包:pandas中的封装matplotlib API的画图功能,seaborn,networkx等;
  • 基于JavaScript和d3.js开发的可视化工具:plotly等,这类工具可以显示动态图且具有一定的交互性;
  • 其他提供了Python调用接口的可视化工具:OpenGL, GraphViz等,这一类工具各有特点且在特定领域应用广泛.

对于数据科学,用的比较多的是matplotlib和seaborn,对数据进行动态或交互式展示时会用到plotly.

1. matplotlib与MATLAB



Matplotlib是建立在NumPy数组基础上的多平台数据可视化程序库,John Hunter在2002年提出了matplotlib的初步构想——在Python中画出类似MATLAB风格的交互式图形。鉴于此种渊源,类似MATLAB风格的画图接口是matplotlib的两种画图接口之一。这类接口直观、便捷,许多语法与MATLAB类似,也是初学者常用的方式。

这种接口最重要的特性是有状态的(stateful):它会持续跟踪"当前的"图形和坐标轴,所有plt命令都可以应用。可以用plt.gcf()(获取当前图形)和plt.gca()(获取当前坐标轴)来查看具体信息。

matplotlib画图的基本设置:

1 import matplotlib as mpl
2 import matplotlib.pyplot as plt
3 mpl.rcParams[‘axes.linewidth‘] = 1.5 #set the value globally, 设置坐标轴线宽
4 import seaborn as sns
5 sns.set()  # 使用seaborn设置绘图风格

更多自定义设置可以参考官方文档:Customizing matplotlib

下面使用MATLAB风格画图,对一组分类变量(categorical variables)进行可视化

 1 names = [‘group_a‘, ‘group_b‘, ‘group_c‘]  # 不同分类的名称
 2 values = [1, 10, 100]  # 不同分类对应的值
 3
 4 plt.figure(1, figsize=(9, 3))  # 设置图片大小
 5
 6 plt.subplot(131)  # 1x3, 第一个子图
 7 plt.bar(names, values)  # 柱状图
 8 plt.subplot(132)  # 1x3, 第二个子图
 9 plt.scatter(names, values)  # 散点图
10 plt.subplot(133)  # 1x3, 第三个子图
11 plt.plot(names, values)  # 折线图
12 plt.suptitle(‘Categorical Plotting‘)  # 图片的标题
13 # w_pad设置子图之间的间隔宽度;rect设置整个图像部分(矩形)的左上点坐标和右下点坐标,默认值为[0, 0, 1, 1]
14 plt.tight_layout(w_pad=0.1, rect=[0, 0.03, 1, 0.95])
15 plt.savefig(‘demo1.png‘, dpi=200)  # 保存图片

图片如下:

图1:分类变量的可视化

这种方式画图非常直观,每一步都对"plt"对象有一个特定的操作,画图的过程至上而下,画好之后保存图片。其他命令说明如下:

  • subplot(131)表示设置子图为1行3列,且当前为第1个子图;
  • 在保存图片之前调用tight_layout()函数可以使图片更加紧凑,边框更窄,更多关于该函数的用法可参考官方文档
  • 保存图片是可以使用参数dpi设置图片的分辨率.

在官方文档中,这种风格的API被称为"pyplot API".

2. matplotlib的第二种风格——面向对象的画图接口



在面向对象编程中有一句口号:"一切皆对象",Python既然是一种面向对象的编程语言,画图也自然可以使用面向对象的方式。MATLAB风格的画图接口直观易用,但是遇到一些精细操作时,就会比较麻烦。面向对象的画图接口可以适应更复杂的场景,更精细的控制需要展示的图形。

在面向对象接口中,画图函数不再受到当前"活动"图形或坐标轴的限制,而变成了显式的Figure和Axes的方法。在画图的过程中,实际操作的是这两个类的实例:figure和axes.

figure(plt.Figure类的一个实例)可以被看成是一个能够容纳各种坐标轴、图形、文字和标签的容器。axes(plt.Axes类的一个实例)是一个带有刻度和标签的矩形,最终会包含所有可视化的图形元素。通常使用变量fig表示一个图形实例,用变量ax表示一个坐标轴实例或一组坐标轴实例。

下面是一个使用面向对象的API画图的例子:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 %matplotlib inline
 4
 5 # example data
 6 x = np.arange(0.1, 4, 0.5)
 7 y = np.exp(-x)
 8
 9 #设置error bar的(单侧)长度
10 error = 0.1 + 0.2 * x
11
12 # 使用subplots返回fig和ax实例
13 fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True, figsize=(8, 6))  # 两个子图,返回两个Axes实例
14
15 # 第一个子图,对称的error bar
16 ax0.errorbar(x, y, yerr=error, fmt=‘-o‘)
17 ax0.set_title(‘variable, symmetric error‘)
18
19 # 分别设置error bar两侧的长度
20 lower_error = 0.4 * error
21 upper_error = error
22 asymmetric_error = [lower_error, upper_error]
23
24 # 第二个子图,不对称的error
25 ax1.errorbar(x, y, xerr=asymmetric_error, fmt=‘o‘)
26 ax1.set_title(‘variable, asymmetric error‘)
27 ax1.set_yscale(‘log‘)
28 fig.tight_layout()
29 fig.savefig(‘demo2.png‘, dpi=200)  # 保存图片

结果如下:

图2:error bar的可视化

如上面的例子显示的那样,可以使用函数plt.subplots()返回fig和ax实例,也可以直接使用plt.Figure和plt.Axes这两个类来返回各自的实例:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 plt.style.use(‘seaborn-whitegrid‘)
 4 %matplotlib inline
 5
 6 fig = plt.figure(figsize=(8, 6))
 7 ax = plt.axes()
 8 x = np.linspace(0, 10, 100)
 9 ax.plot(x, np.sin(x))
10 ax.set_xlabel(‘x‘, size=14)
11 ax.set_ylabel(‘sin x‘, size=14)
12 ax.set_title(‘sin plot‘, size=16)
13 fig.tight_layout()
14 fig.savefig(‘demo3.png‘, dpi=200)

结果如下:

图3:sin函数图像

当我们获取fig和ax实例后,就可以直接操作这两个实例来完成想要可视化效果。操作这两个实例的方法众多,可参考下面的官方文档:

3. 统计作图以及图片的风格



除了matplotlib之外,seaborn是专门为统计制图开发的可视化工具。除了直接用于数据的可视化之外,还能够完成一些常见的统计功能来辅助画图,例如误差线的估计,密度估计,箱形图分位数的计算等。此外,与matplotlib相比,seborn画图的风格更美观。因此该可视化工具在数据分析中也用的比较多。

按照文档中对API的介绍,seaborn主要将统计制图分为下面几类:

  • 关系图
  • 分类图
  • 分布图
  • 回归图
  • 矩阵图:heatmap或聚类图

使用seaborn画图的例子可以参考:Example gallery

上面例子中涉及到两次对画图风格的设置,风格主要包括对图的配色,背景色、坐标轴、字体、透明度等的设置。在matplotlib中主要有以下风格可选:

> print(plt.style.available)

#---output---#
[‘dark_background‘, ‘seaborn-notebook‘, ‘seaborn-darkgrid‘, ‘_classic_test‘, ‘ggplot‘, ‘seaborn-bright‘, ‘classic‘, 

‘Solarize_Light2‘, ‘fast‘, ‘fivethirtyeight‘, ‘seaborn-dark-palette‘, ‘seaborn‘, ‘tableau-colorblind10‘, ‘seaborn-muted‘, 

‘seaborn-whitegrid‘, ‘seaborn-ticks‘, ‘seaborn-dark‘, ‘seaborn-white‘, ‘grayscale‘, ‘seaborn-deep‘, ‘seaborn-poster‘, 

‘seaborn-talk‘, ‘seaborn-colorblind‘, ‘bmh‘, ‘seaborn-pastel‘, ‘seaborn-paper‘]

参考上面的Customizing matplotlib链接,各种不同样式的比较可以参考:Matplotlib Style Gallery

4. 常见的作图类型及功能



matplotlib可以画大部分常见的图,例如柱状图、折线图、饼图、直方图等。

更多详情可以参考:Plotting-basic

Reference



https://tonysyu.github.io/raw_content/matplotlib-style-gallery/gallery.html

https://jakevdp.github.io/PythonDataScienceHandbook/

https://seaborn.pydata.org/index.html

https://matplotlib.org/index.html

https://stackoverflow.com/questions/8248467/matplotlib-tight-layout-doesnt-take-into-account-figure-suptitle

原文地址:https://www.cnblogs.com/Belter/p/9650433.html

时间: 2024-10-13 10:56:10

【数据科学】Python数据可视化概述的相关文章

2018年排名前20的数据科学Python库

Python 在解决数据科学任务和挑战方面继续处于领先地位.业已证明最有帮助的Python库,我们选择 20 多个库,因为其中一些库是相互替代的,可以解决相同的问题.因此,我们将它们放在同一个分组. 核心库和统计数据 1. NumPy (提交:17911,撰稿人:641) 官网:http://www.numpy.org/ NumPy 是科学应用程序库的主要软件包之一,用于处理大型多维数组和矩阵,它大量的高级数学函数集合和实现方法使得这些对象执行操作成为可能. 2. SciPy (提交:19150

数据科学之数据预处理

h1 { margin-bottom: 0.08in } h1.western { font-family: "Liberation Sans", sans-serif; font-size: 18pt } h1.cjk { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt } h1.ctl { font-family: "FreeSans"; font-size: 18pt } p

数据科学引论——Python之道

什么是数据科学 什么是数据科学 研究数据从中提取知识 由来已久的科学:数据科学并不是一件新东西 现代信息技术只是推动了数据科学的发展:并不是说现代信息技术创造了数据科学 AlphaGo using Netural Network 之后出现了AlphaGo zero,发现了一个几千年都没有人发现的棋谱.在大数据和数据处理能力下,人们的能力远远不及计算机的计算能力. 可解释性比较弱,现在人工智能只是得到一个统计数据.大数据支撑了人工智能,机器学习帮助处理人类处理不了的大数据. 抽样是有偏差的 是有误

哪些数据科学技能是雇主所需要的

这是一个好消息,如果你希望在2016年找一份数据科学的工作-在该领域职位空缺的数量正在不断增加,企业希望利用大数据来获得竞争优势.但事实上,找一份梦寐以求的数据科学工作就意味着你要具备一些技能的组合,你可能会惊讶学习哪些技能是雇主所最需要的. 最近,人们在CrowdFlower上针对Linkedin的3490个数据科学职位做了分析,并对最常出现的21个技能进行了排序.有些结果并不那么令人惊讶-SQL排在最前,而其它的结果可能是数据科学领域不断发展的领先指标. 如上所述,SQL是最常见的技能,在L

数据保护平台如何为新一代应用,人工智能和数据科学提供动力

我最坚信的信念之一是,通过有效地构建,管理和发展其数据供应链来学习如何充分利用其数据的公司将获得持久的竞争优势.现在拥有如此多的数据,公司必须将其数据视为其最有价值的资产之一.这些数据供应链必须像其他任何系统或分发网络一样平稳运行. 然而,数据供应链提出了独特的挑战.要使数据供应链无缝运行非常困难,因为它必须从许多来源收集数据,将其提炼成有用的形式,然后能够根据需要将特定的子集交付给业务.数据不是万能的,因此您的数据供应链必须像数据多样化一样灵活. 为了构建最佳的数据供应链,公司应识别其库存中已

大数据科学新发展展望:不得不知的四大趋势

从2012年开始,几乎人人(至少是互联网界)言必称大数据,似乎不和大数据沾点边都不好意思和别人聊天.从2016年开始,大数据系统逐步开始在企业中进入部署阶段,大数据的炒作逐渐散去,随之而来的是应用的蓬勃发展期,一些代表成熟技术的标志性IPO在国内外资本市场也不断出现.转眼间,大数据几年前经历的泡沫正在无可争议地转移到人工智能身上.可以说,在过去的一年,AI所经历的共同意识"大爆炸"与当年的大数据相比,有过之而无不及.最近风口又转移到区块链上了,某种程度上也成为业内人士焦虑的一种诱因了.

Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题

Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题 问题描述: 我实在是太懒了,问题描述抄的网上的哈哈哈:https://www.jianshu.com/p/6ab7afa059d1 在做Python Data Science Handbook的实例学习,4.16.3 案例:探索马拉松比赛成绩里,有提示将时分秒的时间化为秒的总数,以方便画图.书里给出的指令是: data['split_sec']=data['split'].astype(int)/1E9 data['fi

最简洁的Python时间序列可视化:数据科学分析价格趋势,预测价格,探索价格

时间序列数据在数据科学领域无处不在,在量化金融领域也十分常见,可以用于分析价格趋势,预测价格,探索价格行为等. 学会对时间序列数据进行可视化,能够帮助我们更加直观地探索时间序列数据,寻找其潜在的规律. 本文会利用Python中的matplotlib[1]库,并配合实例进行讲解.matplotlib库是?个?于创建出版质量图表的桌?绘图包(2D绘图库),是Python中最基本的可视化工具. [工具]Python 3 [数据]Tushare [注]示例注重的是方法的讲解,请大家灵活掌握. 01 单个

【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇

作为一个理工男.用过了形形色色能够用于科学作图/数据可视化软件:从大学时做实验课推荐用于分析简单採集数据的 Origin; 毕业论文时用来呈现实验时序信号和离线分析脑电信号的 MATLAB.后面还发现了 Octave 以及 Gnuplot : 以及实验室师兄推荐用的 Matplotlib 软件; 工作后随着 HTML5 大红大紫,也发现了一些基于 Web 前端的软件,比方 d3js/Highcharts, 还有 Python 的 Bokeh-- 这些软件都有各自的优缺点,因为自己平时工作会做一些