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

时间:2022-12-12 00:39:55

注:很早之前就打算专门写一篇与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画图的基本设置:

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

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

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

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

图片如下:

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

图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画图的例子:

 import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline # example data
x = np.arange(0.1, 4, 0.5)
y = np.exp(-x) #设置error bar的(单侧)长度
error = 0.1 + 0.2 * x # 使用subplots返回fig和ax实例
fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True, figsize=(8, 6)) # 两个子图,返回两个Axes实例 # 第一个子图,对称的error bar
ax0.errorbar(x, y, yerr=error, fmt='-o')
ax0.set_title('variable, symmetric error') # 分别设置error bar两侧的长度
lower_error = 0.4 * error
upper_error = error
asymmetric_error = [lower_error, upper_error] # 第二个子图,不对称的error
ax1.errorbar(x, y, xerr=asymmetric_error, fmt='o')
ax1.set_title('variable, asymmetric error')
ax1.set_yscale('log')
fig.tight_layout()
fig.savefig('demo2.png', dpi=200) # 保存图片

结果如下:

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

图2:error bar的可视化

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

 import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
%matplotlib inline fig = plt.figure(figsize=(8, 6))
ax = plt.axes()
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))
ax.set_xlabel('x', size=14)
ax.set_ylabel('sin x', size=14)
ax.set_title('sin plot', size=16)
fig.tight_layout()
fig.savefig('demo3.png', dpi=200)

结果如下:

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

图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://*.com/questions/8248467/matplotlib-tight-layout-doesnt-take-into-account-figure-suptitle

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

  1. 2017年排名前15的数据科学python库

    2017年排名前15的数据科学python库 2017-05-22 Python程序员 Python程序员 Python程序员 微信号 pythonbuluo 功能介绍 最专业的Python社区,有每 ...

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

    Python 在解决数据科学任务和挑战方面继续处于领先地位.业已证明最有帮助的Python库,我们选择 20 多个库,因为其中一些库是相互替代的,可以解决相同的问题.因此,我们将它们放在同一个分组. ...

  3. 9 个鲜为人知的 Python 数据科学库

    除了 pandas.scikit-learn 和 matplotlib,还要学习一些用 Python 进行数据科学的新技巧. Python 是一种令人惊叹的语言.事实上,它是世界上增长最快的编程语言之 ...

  4. 为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字)

    为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字) 在PyData Seattle 2017中,Jake Vanderplas介绍了Python的发展历程以及最新动态.在这里我们把 ...

  5. 译:Dataiku 白皮书之《在银行和保险行业应用数据科学》

    原文链接:Data Science For Banking & Insurance 如果不能正常访问,请点击备份获取. 在银行和保险行业应用数据科学 互联网巨头和金融技术创业时代的求生和发展 ...

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

    Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题 问题描述: 我实在是太懒了,问题描述抄的网上的哈哈哈:https://www.jianshu.com/p/6ab7afa05 ...

  7. 深入对比数据科学工具箱:Python和R之争

    建议:如果只是处理(小)数据的,用R.结果更可靠,速度可以接受,上手方便,多有现成的命令.程序可以用.要自己搞个算法.处理大数据.计算量大的,用python.开发效率高,一切尽在掌握. 概述 在真实的 ...

  8. 数据科学20个最好的Python库

    Python 在解决数据科学任务和挑战方面继续处于领先地位.去年,我们曾发表一篇博客文章 Top 15 Python Libraries for Data Science in 2017,概述了当时业 ...

  9. 《Python 数据科学实践指南》读书笔记

    文章提纲 全书总评 C01.Python 介绍 Python 版本 Python 解释器 Python 之禅 C02.Python 基础知识 基础知识 流程控制: 函数及异常 函数: 异常 字符串 获 ...

随机推荐

  1. js面向对象基础总结

     js中如何定义一个类? 定义的function就是一个构造方法也就是说是定义了一个类:用这个方法可以new新对象出来. function Person(name, age){ this.name = ...

  2. 为什么没调用 didRegisterForRemoteNotificationsWithDeviceToken 和 didFailToRegisterForRemoteNotificationsWithError

    一步一步按照网上 push notification 教程走下来,发现didRegisterForRemoteNotificationsWithDeviceToken 和 didFailToRegis ...

  3. POJ 1503

    http://poj.org/problem?id=1503 对于这个题我也是醉了,因为最开始是有学长和我们说过这个题目的,我以为我记得题目是什么意思,也就没看题目,结果按案例去理解题意,结果WA了一 ...

  4. 454. 4Sum II ——查找本质:hash最快,二分次之

    Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such t ...

  5. 037_nginx第三方扩展

    一.ngx_func_limit_req.conf(nginx限制请求数配置) # limit req zone limit_req_zone $binary_remote_addr $http_us ...

  6. python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)

    先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.5.zip 注意:由于涉及到 ...

  7. WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标

    转自:http://blog.csdn.net/lovesunshine2008/article/details/4048158 设置坐标映射    (1)Windows坐标系统 Windows坐标系 ...

  8. Java学习之路-Burlap学习

    今天我们来学一下Burlap. Burlap是一种基于XML远程调用技术,但与其他基于XML的远程技术(例如SOAP或者XML-RPC)不同,Burlap的消息结构尽可能的简单,不需要额外的外部定义语 ...

  9. ExcelVBA实现一键生成word文字报告及批量操作[原创]

    在很多工作中,经常需要写一些类似的报告,使用同一个模板,只是里面的数据不同,人工操作工程量大且容易出错,如果能用程序直接实现可以省去不少麻烦. 本文使用ExcelVBA实现,主要思路是使用word邮件 ...

  10. iOS登录单例

    iOS登录单例 一,工程图. 二,代码. UserInfo.h #import <Foundation/Foundation.h> @interface UserInfo : NSObje ...