数据分析入门系列教程-常用图表

作者:周萝卜

来源:萝卜大杂烩

今天我们来学习下数据可视化,其实在前面的章节中,我们也接触到了一些数据可视化的知识,在分析数据集的时候,有效的可视化图表,可以帮助我们更好的了解数据。

常用的可视化图表

我们常用的图表其实也有很多,比如说文本表格,条形图,饼图等等。下面我就来简单介绍10种常见的图表

散点图

散点图一般是两个变量的二维图表,很适合展示两个变量之间的关系。当然也有三维散点图,不过使用的并不是很多

折线图

折线图可以很好的呈现数据随着时间迁移的变化趋势

直方图

直方图把横坐标等分成一定数量的区间,然后再每个区间内用矩形条展示该区间内的数值,可以很好的查看数据的分布情况

条形图

条形图可以查看数据中不同类别之间的分布请求

盒式图

是由五个数值组成:最大值(max)、最小值(min)、中位数(median)和上下四分位数(Q3,Q1),可以帮助我们分析数据的差异性、离散程度和异常值等信息

饼图

饼图可以很好的呈现每类数据所占总数据的比例情况

热力图

热力图是把数据用矩阵表示的形式,不同数据颜色不同,可以通过颜色直观的判断某个位置上的数值情况

雷达图

可以很好的显示一对多的关系,比如王者荣耀中的对局信息,就是雷达图

地理图表

对于按照不同地理位置区分的数据,使用地理图表可以很直观的呈现数据信息

词云图

词云图是非常好的可视化图表,在分析评论等场景非常常见

视化图表分类

其实,我们也可以根据数据之间的关系,把可视化图表分成如下几类

  1. 联系

查看多个变量之间的关系,例如:散点图,雷达图

  1. 比较

比较数据间各类别的关系,例如:条形图

  1. 趋势

展示数据随时间的变化趋势,例如:折线图

  1. 构成

各部分占总体的百分比,例如:饼图

  1. 分布

关注变量的分布情况,例如:直方图

下面有两张图片,很好的概括了不同情况下,该如何选择合适的图表

图片

在以后的工作中,如果遇到可视化工作,又不太确定如何更好的呈现数据,可以来看看上面的图片,也许能找到灵感。

十大图表实例

下面我们就来逐一完成上面的十个图表,看看 Python 带给你的视觉体验。

我们会分别使用 Matplotlib、Seaborn 和 Pyecharts 来完成作图,需要提前下载好对应的库

pip install matplotlib
pip install seaborn
pip install pyecharts

我们会使用 seaborn 自带的数据集为例子,所以需要导入数据集

import matplotlib.pyplot as pltimport seaborn as snstips = sns.load_dataset('tips')print(tips.head())>>>   total_bill   tip     sex smoker  day    time  size0       16.99  1.01  Female     No  Sun  Dinner     21       10.34  1.66    Male     No  Sun  Dinner     32       21.01  3.50    Male     No  Sun  Dinner     33       23.68  3.31    Male     No  Sun  Dinner     24       24.59  3.61  Female     No  Sun  Dinner     4

散点图

matplotlib 实现散点图

matplotlib.pyplot.scatter(x, y, c=None, marker=None)

几个重要的参数
x,y:数值坐标

c:点的颜色

marker:标记的符号,可以选择“x”,“>” 或 “o”

seaborn 实现散点图

sns.scatterplot(x=None, y=None, hue=None, style=None, size=None, data=None)

x,y:传入的数据间 data 的列的名字
hue:按照列名分组,不同组展示不同颜色

style:按照列名分组,不同分组使用不同的 marker

size:按照列名分组,不同分组符号大小不同

data:传入的数据集

plt.scatter(tips['total_bill'], tips['tip'], c='#bcbd22', marker='x')
plt.show()
sns.scatterplot(x='total_bill', y='tip', hue='time', style='time', size='time', data=tips)
plt.show()

Matplotlib 绘制:

Seaborn 绘制:

两种作图整体分布式类似的,不过 Seaborn 作为 Matplotlib 的更高级 API 实现,可以更加方便的处理数据的分组展示等功能。

pycharts 实现散点图

pyecharts 是基于 echarts 的 Python 实现,同样拥有强大的功能,而且拥有完善的中文文档,这里就不再过多讲解 pyecharts 的用法了。

scatter = Scatter()scatter.add_xaxis(tips['total_bill'])scatter.add_yaxis('小费金额', tips['tip'])scatter.set_global_opts(xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),                       yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),                        toolbox_opts=opts.ToolboxOpts(is_show=True)                       )scatter.render_notebook()  # 在 jupyter notebook 中展示# scatter.render('scatter.html')  # 生成 HTML 文件,可以在浏览器中打开查看

折线图

matplotlib 实现折线图

matplotlib.pyplot.plot(x, y)

x,y:分别是横纵坐标,x 需要是按照大小排序的数组
seaborn 实现折线图

seaborn.lineplot(x=None, y=None, data=None)

关键的参数与散点图十分类似,这里不再赘述

tips_copy = tips.copy()
tips_copy.sort_values(by='total_bill', inplace=True)
plt.plot(tips_copy['total_bill'], tips_copy['tip'])
plt.show()
sns.lineplot(x='total_bill', y='tip', data=tips, )
plt.show()

Matplotlib 绘制:

Seaborn 绘制:

可以看到,使用 seaborn 库,x 轴上的元素会自动被排序

pyecharts 实现折线图

from pyecharts.charts import Lineline = Line()line.add_xaxis(tips_copy['total_bill'])line.add_yaxis('', tips_copy['tip'])line.render_notebook()

直方图

matplotlib 实现直方图

matplotlib.pyplot.hist(x, bins=None)

x:要输入的一维数组
bins:是直方图中区域的数量

seaborn 实现直方图

seaborn.distplot(a, kde=True)

a:观测数据
kde:是否画估计曲线

import numpy as np
x = np.random.randn(100)
plt.hist(x, 10)
plt.show()
sns.distplot(x, 10)
plt.show()

Matplotlib 绘制:

Seaborn 绘制:

Pyecharts(echarts) 并没有专门的直方图方法。

条形图

matplotlib 实现条形图

matplotlib.pyplot.bar(x, height, width=0.8)

x:x 轴的坐标值
height:y 轴的坐标值

width:条形的宽度

seaborn 实现条形图

seaborn.barplot(x=None, y=None, hue=None, data=None)

x,y,hue:分别是两个坐标轴的名称和图例名称
data:传入的数据

new_tips = tips.groupby('day').mean()plt.bar(new_tips.index.values.tolist(), new_tips['total_bill'].values.tolist(), width=0.5)plt.show()sns.barplot(x='day', y='total_bill', hue='sex', data=tips)plt.show()

Matplotlib 绘制:

Seaborn 绘制:

可以看到,Seaborn 可以进行方便的分组绘制。

pyecharts 实现条形图

from pyecharts.charts import Barbar = Bar()
bar.add_xaxis(new_tips.index.values.tolist())
bar.add_yaxis('', new_tips['total_bill'].values.tolist())
bar.render_notebook()

盒式图

matplotlib 实现盒式图(箱形图)

matplotlib.pyplot.boxplot(x, notch=None, label=None)

x:需要传入的数据
notch:为是否展示带有缺口的箱形

label:可以设置标签

seaborn 实现盒式图

seaborn.boxplot(x=None, y=None, hue=None, data=None)
plt.boxplot(tips['total_bill'], notch=True)plt.show()sns.boxplot(x=tips['day'], y='total_bill', data=tips)plt.show()

Matplotlib 绘制:

Seaborn 绘制:

Pyecharts 对于盒式图支持的并不友好,不推荐使用,这里只给出官网例子

from pyecharts.charts import Boxplot
v1 = [
        [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880]
        + [1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960],
        [960, 940, 960, 940, 880, 800, 850, 880, 900]
        + [840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800],
    ]
box = Boxplot()
box.add_xaxis(['expr1'])
box.add_yaxis('', box.prepare_data(v1))
box.render_notebook()

饼图

matplotlib 实现饼图

matplotlib.pyplot.pie(x, explode=None, labels=None)

x:需要用到的数据
explode:扇形偏移量

labels:扇形的标签

seaborn 并未提供饼图的高级 API

sizes = [17, 32, 44, 10]
labels = ['cat', 'dog', 'fox', 'tiger']
explode = (0, 0.1, 0, 0)
plt.pie(sizes, labels=labels, explode=explode)
plt.show()

pyecharts 实现饼图

from pyecharts.charts import Piemylist = [list(z) for z in zip(labels, sizes)]pie = Pie()pie.add('', mylist)pie.render_notebook()

热力图

对于热力图,一般使用 Seaborn 提供的更加高级的 API 来实现

seaborn.heatmap(data)

data:DataFrame 类型数据即可

flights = sns.load_dataset('flights')flights_new = flights.pivot(index='month', columns='year', values='passengers')sns.heatmap(flights_new)plt.show()

pyecharts 实现热力图

x = flights_new.columns.values.tolist()
y = flights_new.index.values.tolist()
value = flights_new.values.tolist()L = []
i = j = 0
for inner_list in value:
    for v in inner_list:
        L.append([i, j, v])
        j += 1
    i += 1
    j = 0
from pyecharts.charts import HeatMap
from pyecharts import options as opts
heatmap = HeatMap()
heatmap.add_xaxis(x)
heatmap.add_yaxis('', y, L)
heatmap.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(max_=650, min_=90)
)
heatmap.render_notebook()

雷达图

Matplotlib 和 Seaborn 都没有直接提供雷达图的 API,我们需要手动实现一个

import numpy as npimport matplotlib.pyplot as pltfrom 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()

plt.figure 相当于是创建一个画板,add_subplot 就是将画板划分,然后再通过 plot 和 fill 作画

pyecharts 实现雷达图

from pyecharts.charts import Radar
ability = [[83, 61, 95, 67, 76, 88]]
radar = Radar()
radar.add_schema(
schema=[
opts.RadarIndicatorItem(name='推进', max_=100),
opts.RadarIndicatorItem(name='KDA', max_=100),
opts.RadarIndicatorItem(name='生存', max_=100),
opts.RadarIndicatorItem(name='团战', max_=100),
opts.RadarIndicatorItem(name='发育', max_=100),
opts.RadarIndicatorItem(name='输出', max_=100),
]
)
radar.add('', ability)
radar.render_notebook()

地理图表

对于需要展示地理分布的数据,使用地图分布图表是非常方便的,echarts 提供了好好的支持,因此我们也可以使用 pyecharts 的高级 API 来制作地理图表

from pyecharts.charts import Geoprovinces = ['广东', '北京', '上海', '江西', '湖南', '浙江', '江苏']values = [120, 96, 72, 97, 54, 138, 97]geo = Geo()geo.add_schema(maptype='china')geo.add('', [list(z) for z in zip(provinces, values)])geo.render_notebook()

只需要传入一个列表,列表里包含省份名称和对应省份的数值。这个数值就是具体的业务数据,比如可以是该省份的产值,高校数量,人口总数等等。

词云图

from pyecharts.charts import WordCloud
words = [
    ('开心', 1000),
    ('伤心', 4002),
    ('吃饭', 5008),
    ('上课', 3000),
    ('工作', 5980),
    ('学习', 2357),
    ('算法', 5300),
    ('Python', 3478),
    ('入门', 2300),
    ('同学', 4000),
    ('出发', 5378),
    ('java', 6700),
    ('Linux', 1000),
    ('教学', 2198),
    ('公司', 4570),
    ('政府', 1000),
    ('同事', 4350),
    ('朋友', 3444),
    ('家人', 1000),
    ('亲人', 4300),
    ('城市', 2000),
]
wordcloud = WordCloud()
wordcloud.add('', words)
wordcloud.render_notebook()

同样是传入列表,包含需要展示的词语和该词语对应的频度,该频度也会决定词语的大小。

相信大家通过上面10个图表的学习,已经能够基本掌握 Python 可视化的知识了。你也应该发现,在数据分析的过程中,大多数情况下使用 Seaborn 是比较方便的,它可以很好的结合 DataFrame 数据类型,而在最后的数据展示时,使用 Pyecharts(echarts)则是很好的选择,它涵盖了非常强大的 API,可以对生成的图表再做后续的操作,当然 Matplotlib 是最为基础,也是最为强大的工具,在实际的工作中,需要好好衡量,选择最适合的工具来做可视化的工作。

总结

今天我们一起学习了常用的可视化图表以及如何制作相关图表。对于 Matplotlib、Seaborn 和 Pyecharts 工具包的使用一定要熟练的掌握,在数据分析的过程中会经常使用。同时还要知道,Seaborn 是基于 Matplotlib 的更加高级的可视化库,类似于 NumPy 和 Pandas 的关系。

同时我们还按照数据之间的关系,划分了不同类型的图表,希望能够在未来帮助你更好的选择图表。当然对于单分类和多分类数据,也可以使用组合图表来进行可视化处理。这三个工具包的官方文档都是非常好的学习工具,希望大家能够在后面的学习中好好利用,多加探索。

练习题

其实 Seaborn 自带了很多好玩的数据集,比如我们用到的 tips 和 flights 数据集,还有 car_crashes 数据集,是一个关于车祸的数据集,那么你能够使用该数据集,做一些探索吗,看看可以制作出哪些好玩的可视化图表?

(0)

相关推荐

  • pyecharts生成各种图表

    pyecharts的使用 pyecharts 是一个用于生成 Echarts 图表的类库. echarts 是百度开源的一个数据可视化 JS 库,主要用于数据可视化.pyecharts 是一个用于生成 ...

  • Py之seaborn:seaborn库的简介、安装、使用方法之详细攻略

    Py之seaborn:seaborn库的简介.安装.使用方法之详细攻略 相关文章 Py之seaborn:seaborn库的简介.安装.使用方法之详细攻略 Py之seaborn:数据可视化seaborn ...

  • (1条消息) python常见图形代码可视化大全整理(包括动图)更新中...

    目录 一.离散型变量的可视化 1 饼图 1.1 matplotlib模块 1.2 panda模块 2 条形图 2.1 matplotlib模块 2.1.1 垂直或水平条形图 2.1.2 堆叠条形图 2 ...

  • 编程干货|这么多Python数据可视化库,你最喜欢哪个?

    而这个问题就正好涉及到了Python的数据可视化了. 很多同学学习Python的主要目的就是为了实现数据可视化. 而如何将我们的数据的特征更好的.更直观的展示出来,Python给出了很多解决方案. 今 ...

  • 盘点12个Python数据可视化库,通吃任何领域

    大家普遍第一次接触到的Python数据可视化库基本上都是Matplotlib.Python还有很多数据可视化库,本文盘点了12款常用的Python数据可视化库,挑选适合自己业务的那一款吧! 深入学习P ...

  • 六种数据分析的基本可视化

    Matplotlib实用指南 数据可视化是数据科学中非常重要的一部分.在探索和理解数据时非常有用.在某些情况下,可视化在传达信息方面比普通数字要好得多. 使用数据可视化技术可以轻松发现变量之间的关系, ...

  • Seaborn常用的10种数据分析图表

    seaborn内置了十几个示例数据集,通过load_dataset函数可以调用.其中包括常见的泰坦尼克.鸢尾花等经典数据集. 作者:Python课堂来源:今日头条|2020-08-10 06:16   ...

  • 数据分析入门系列教程-决策树原理

    今天我们一起来学习决策树,那么什么是决策树呢,其实在生活中,我们无时无刻不在使用它. 比如现在有朋友给海伦介绍约会对象,她会做如下的判断: 海伦:小伙儿帅嘛? 朋友:很帅 海伦:身高多少? 朋友:17 ...

  • .Net5 WPF快速入门系列教程

    dotNET跨平台 今天 一.概要 在工作中大家会遇到需要学习新的技术或者临时被抽调到新的项目当中进行开发.通常这样的情况比较紧急没有那么多的时间去看书学习.所以这里向wpf技术栈的开发者分享一套wp ...

  • SAP PM 入门系列7 - 常用Function Modules

    SAP PM 入门系列7 - 常用Function Modules Function Module Description Object BADI_EQMT_MODIFY You can update ...

  • 「吉他弹唱入门系列教程」第三十三集-「蓝莲花」许巍

    「吉他弹唱入门系列教程」第三十三集-「蓝莲花」许巍

  • 场地数据分析系列教程-Bison (1)

    又是新的一周,制图教室和大家准时相见~ 对于建筑和景观专业的学生而言,场地的数据化分析是设计过程中不可忽略的重要环节,无论是对于地形坡度的分析亦或是对于土方量的估算,乃至地表径流等一系列的模拟,都可以 ...

  • 场地数据分析系列教程-Bison (2)

    又是新的一周,制图教室和大家准时相见~ 在上期的Bison教程中,我们了解了Bison的地形导入和地形优化功能,并且学习了其中最为重要的地形分析中的坡向分析,高程分析,凹凸度分析,土方量分析. 那么在 ...

  • 场地数据分析系列教程-Bison (3)

    又是新的一周,制图教室和大家准时相见~ 在上期的Bison教程中,我们了解了Bison的地形分析的剩余功能,以及地形标注的相关内容. 那么在今天的教程中我们将继续进行Bison最后两个版本:地形修改和 ...

  • K线密码之裸K线入门基础知识系列教程(一)

    2019-06-26拾荒网 编辑:K线炮手 在股票市场如果不能坚持学习 那你是不可能有进步的,想进步就要不断学习股票各种技巧,其中k线的形态就能完美的体现出主力的意图 只要紧跟主力庄家我们才能收获多多 ...

  • K线密码之裸K线入门基础知识系列教程(二)

    K线密码之裸K线入门基础知识系列教程(二)