阅读更多

1顶
0踩

编程语言
数据可视化是数据科学家工作中的重要组成部分。在项目的早期阶段,你通?;峤刑剿餍允莘治觯‥xploratory Data Analysis,EDA)以获取对数据的一些理解。创建可视化方法确实有助于使事情变得更加清晰易懂,特别是对于大型、高维数据集。在项目结束时,以清晰、简洁和引人注目的方式展现最终结果是非常重要的,因为你的受众往往是非技术型客户,只有这样他们才可以理解。

Matplotlib 是一个流行的 Python 库,可以用来很简单地创建数据可视化方案。但每次创建新项目时,设置数据、参数、图形和排版都会变得非常繁琐和麻烦。在这篇博文中,我们将着眼于 5 个数据可视化方法,并使用 Python Matplotlib 为他们编写一些快速简单的函数。与此同时,这里有一个很棒的图表,可用于在工作中选择正确的可视化方法!

散点图

散点图非常适合展示两个变量之间的关系,因为你可以直接看到数据的原始分布。 如下面第一张图所示的,你还可以通过对组进行简单地颜色编码来查看不同组数据的关系。想要可视化三个变量之间的关系? 没问题! 仅需使用另一个参数(如点大?。┚涂梢远缘谌霰淞拷斜嗦?,如下面的第二张图所示。


现在开始讨论代码。我们首先用别名 “plt” 导入 Matplotlib 的 pyplot 。要创建一个新的点阵图,我们可调用 plt.subplots() 。我们将 x 轴和 y 轴数据传递给该函数,然后将这些数据传递给 ax.scatter() 以绘制散点图。我们还可以设置点的大小、点颜色和 alpha 透明度。你甚至可以设置 Y 轴为对数刻度。标题和坐标轴上的标签可以专门为该图设置。这是一个易于使用的函数,可用于从头到尾创建散点图!
import matplotlib.pyplot as pltimport numpy as npdef scatterplot(x_data, y_data, x_label="", y_label="", title="", color = "r", yscale_log=False):

    # Create the plot object
    _, ax = plt.subplots()    # Plot the data, set the size (s), color and transparency (alpha)
    # of the points
    ax.scatter(x_data, y_data, s = 10, color = color, alpha = 0.75)    if yscale_log == True:
        ax.set_yscale('log')    # Label the axes and provide a title
    ax.set_title(title)
    ax.set_xlabel(x_label)
    ax.set_ylabel(y_label)

折线图

当你可以看到一个变量随着另一个变量明显变化的时候,比如说它们有一个大的协方差,那最好使用折线图。让我们看一下下面这张图。我们可以清晰地看到对于所有的主线随着时间都有大量的变化。使用散点绘制这些将会极其混乱,难以真正明白和看到发生了什么。折线图对于这种情况则非常好,因为它们基本上提供给我们两个变量(百分比和时间)的协方差的快速总结。另外,我们也可以通过彩色编码进行分组。

这里是折线图的代码。它和上面的散点图很相似,只是在一些变量上有小的变化。
def lineplot(x_data, y_data, x_label="", y_label="", title=""):
    # Create the plot object
    _, ax = plt.subplots()    # Plot the best fit line, set the linewidth (lw), color and
    # transparency (alpha) of the line
    ax.plot(x_data, y_data, lw = 2, color = '#539caf', alpha = 1)    # Label the axes and provide a title
    ax.set_title(title)
    ax.set_xlabel(x_label)
    ax.set_ylabel(y_label)

直方图

直方图对于查看(或真正地探索)数据点的分布是很有用的。查看下面我们以频率和 IQ 做的直方图。我们可以清楚地看到朝中间聚集,并且能看到中位数是多少。我们也可以看到它呈正态分布。使用直方图真得能清晰地呈现出各个组的频率之间的相对差别。组的使用(离散化)真正地帮助我们看到了“更加宏观的图形”,然而当我们使用所有没有离散组的数据点时,将对可视化可能造成许多干扰,使得看清真正发生了什么变得困难。

下面是在 Matplotlib 中的直方图代码。有两个参数需要注意一下:首先,参数 n_bins 控制我们想要在直方图中有多少个离散的组。更多的组将给我们提供更加完善的信息,但是也许也会引进干扰,使得我们远离全局;另一方面,较少的组给我们一种更多的是“鸟瞰图”和没有更多细节的全局图。其次,参数 cumulative 是一个布尔值,允许我们选择直方图是否为累加的,基本上就是选择是 PDF(Probability Density Function,概率密度函数)还是 CDF(Cumulative Density Function,累积密度函数)。
def histogram(data, n_bins, cumulative=False, x_label = "", y_label = "", title = ""):
    _, ax = plt.subplots()
    ax.hist(data, n_bins = n_bins, cumulative = cumulative, color = '#539caf')
    ax.set_ylabel(y_label)
    ax.set_xlabel(x_label)
    ax.set_title(title)

想象一下我们想要比较数据中两个变量的分布。有人可能会想你必须制作两张直方图,并且把它们并排放在一起进行比较。然而,实际上有一种更好的办法:我们可以使用不同的透明度对直方图进行叠加覆盖??聪峦?,均匀分布的透明度设置为 0.5 ,使得我们可以看到他背后的图形。这样我们就可以直接在同一张图表里看到两个分布。

对于重叠的直方图,需要设置一些东西。首先,我们设置可同时容纳不同分布的横轴范围。根据这个范围和期望的组数,我们可以真正地计算出每个组的宽度。最后,我们在同一张图上绘制两个直方图,其中有一个稍微更透明一些。
# Overlay 2 histograms to compare themdef overlaid_histogram(data1, data2, n_bins = 0, data1_name="", data1_color="#539caf", data2_name="", data2_color="#7663b0", x_label="", y_label="", title=""):
    # Set the bounds for the bins so that the two distributions are fairly compared
    max_nbins = 10
    data_range = [min(min(data1), min(data2)), max(max(data1), max(data2))]
    binwidth = (data_range[1] - data_range[0]) / max_nbins    if n_bins == 0
    	bins = np.arange(data_range[0], data_range[1] + binwidth, binwidth)    else: 
    	bins = n_bins    # Create the plot
    _, ax = plt.subplots()
    ax.hist(data1, bins = bins, color = data1_color, alpha = 1, label = data1_name)
    ax.hist(data2, bins = bins, color = data2_color, alpha = 0.75, label = data2_name)
    ax.set_ylabel(y_label)
    ax.set_xlabel(x_label)
    ax.set_title(title)
    ax.legend(loc = 'best')

柱状图

当你试图将类别很少(可能小于10)的分类数据可视化的时候,柱状图是最有效的。如果我们有太多的分类,那么这些柱状图就会非常杂乱,很难理解。柱状图对分类数据很好,因为你可以很容易地看到基于柱的类别之间的区别(比如大小);分类也很容易划分和用颜色进行编码。我们将会看到三种不同类型的柱状图:常规的,分组的,堆叠的。在我们进行的过程中,请查看图形下面的代码。

常规的柱状图如下面的图1。在 barplot() 函数中,xdata 表示 x 轴上的标记,ydata 表示 y 轴上的杆高度。误差条是一条以每条柱为中心的额外的线,可以画出标准偏差。

分组的柱状图让我们可以比较多个分类变量??纯聪旅娴耐?。我们比较的第一个变量是不同组的分数是如何变化的(组是G1,G2,……等等)。我们也在比较性别本身和颜色代码??匆幌麓?,y_data_list 变量实际上是一个 y 元素为列表的列表,其中每个子列表代表一个不同的组。然后我们对每个组进行循环,对于每一个组,我们在 x 轴上画出每一个标记;每个组都用彩色进行编码。

堆叠柱状图可以很好地观察不同变量的分类。在图3的堆叠柱状图中,我们比较了每天的服务器负载。通过颜色编码后的堆栈图,我们可以很容易地看到和理解哪些服务器每天工作最多,以及与其他服务器进行比较负载情况如何。此代码的代码与分组的条形图相同。我们循环遍历每一组,但这次我们把新柱放在旧柱上,而不是放在它们的旁边。



def barplot(x_data, y_data, error_data, x_label="", y_label="", title=""):
    _, ax = plt.subplots()
    # Draw bars, position them in the center of the tick mark on the x-axis
    ax.bar(x_data, y_data, color = '#539caf', align = 'center')
    # Draw error bars to show standard deviation, set ls to 'none'
    # to remove line between points
    ax.errorbar(x_data, y_data, yerr = error_data, color = '#297083', ls = 'none', lw = 2, capthick = 2)
    ax.set_ylabel(y_label)
    ax.set_xlabel(x_label)
    ax.set_title(title)



def stackedbarplot(x_data, y_data_list, colors, y_data_names="", x_label="", y_label="", title=""):
    _, ax = plt.subplots()
    # Draw bars, one category at a time
    for i in range(0, len(y_data_list)):
        if i == 0:
            ax.bar(x_data, y_data_list[i], color = colors[i], align = 'center', label = y_data_names[i])
        else:
            # For each category after the first, the bottom of the
            # bar will be the top of the last category
            ax.bar(x_data, y_data_list[i], color = colors[i], bottom = y_data_list[i - 1], align = 'center', label = y_data_names[i])
    ax.set_ylabel(y_label)
    ax.set_xlabel(x_label)
    ax.set_title(title)
    ax.legend(loc = 'upper right')



def groupedbarplot(x_data, y_data_list, colors, y_data_names="", x_label="", y_label="", title=""):
    _, ax = plt.subplots()
    # Total width for all bars at one x location
    total_width = 0.8
    # Width of each individual bar
    ind_width = total_width / len(y_data_list)
    # This centers each cluster of bars about the x tick mark
    alteration = np.arange(-(total_width/2), total_width/2, ind_width)

    # Draw bars, one category at a time
    for i in range(0, len(y_data_list)):
        # Move the bar to the right on the x-axis so it doesn't
        # overlap with previously drawn ones
        ax.bar(x_data + alteration[i], y_data_list[i], color = colors[i], label = y_data_names[i], width = ind_width)
    ax.set_ylabel(y_label)
    ax.set_xlabel(x_label)
    ax.set_title(title)
    ax.legend(loc = 'upper right')

箱形图

我们之前看了直方图,它很好地可视化了变量的分布。但是如果我们需要更多的信息呢?也许我们想要更清晰的看到标准偏差?也许中值与均值有很大不同,我们有很多离群值?如果有这样的偏移和许多值都集中在一边呢?

这就是箱形图所适合干的事情了。箱形图给我们提供了上面所有的信息。实线框的底部和顶部总是第一个和第三个四分位(比如 25% 和 75% 的数据),箱体中的横线总是第二个四分位(中位数)。像胡须一样的线(虚线和结尾的条线)从这个箱体伸出,显示数据的范围。

由于每个组/变量的框图都是分别绘制的,所以很容易设置。xdata 是一个组/变量的列表。Matplotlib 库的 boxplot() 函数为 ydata 中的每一列或每一个向量绘制一个箱体。因此,xdata 中的每个值对应于 ydata 中的一个列/向量。我们所要设置的就是箱体的美观。

def boxplot(x_data, y_data, base_color="#539caf", median_color="#297083", x_label="", y_label="", title=""):
    _, ax = plt.subplots()

    # Draw boxplots, specifying desired style
    ax.boxplot(y_data
               # patch_artist must be True to control box fill
               , patch_artist = True
               # Properties of median line
               , medianprops = {'color': median_color}
               # Properties of box
               , boxprops = {'color': base_color, 'facecolor': base_color}
               # Properties of whiskers
               , whiskerprops = {'color': base_color}
               # Properties of whisker caps
               , capprops = {'color': base_color})

    # By default, the tick label starts at 1 and increments by 1 for
    # each box drawn. This sets the labels to the ones we want
    ax.set_xticklabels(x_data)
    ax.set_ylabel(y_label)
    ax.set_xlabel(x_label)
    ax.set_title(title)

结语

使用 Matplotlib 有 5 个快速简单的数据可视化方法。将相关事务抽象成函数总是会使你的代码更易于阅读和使用!我希望你喜欢这篇文章,并且学到了一些新的有用的技巧。

英文原文:5 Quick and Easy Data Visualizations in Python with Code
  • 大小: 251.3 KB
  • 大小: 60.9 KB
  • 大小: 87.3 KB
  • 大小: 199.8 KB
  • 大小: 137.6 KB
  • 大小: 34.5 KB
  • 大小: 14.4 KB
  • 大小: 16.2 KB
  • 大小: 18.7 KB
  • 大小: 16.8 KB
来自: oschina
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Python数据可视化使用Python画柱状图和折线图

    Python爬虫太火了,没写过爬虫,都不敢说自己学过Python?! 可是刚一开始学我就遇到了难题----数据分析!听起来很高大上,有没有? 想要做爬虫,就得先学会使用数据分析工具,制作图表这是最基本的。网上发现一个讲Python做柱状图和折线图的小视频,我觉得讲的超基础,很适合小白,特来分享给大家~ 如果你也想学习数据分析,跟我一起看看下方视频,听知名技术专家李刚老师对Python可视化??橄晗?..

  • Python 代码轻松实现数据可视化5使用方法

    散点图 散点图非常适合展示两个变量之间的关系,因为你可以直接看到数据的原始分布。 如下面第一张图所示的,你还可以通过对组进行简单地颜色编码来查看不同组数据的关系。想要可视化三个变量之间的关系? 没问题! 仅需使用另一个参数(如点大?。┚涂梢远缘谌霰淞拷斜嗦?,如下面的第二张图所示。 现在开始讨论代码。我们首先用别名 “plt” 导入 Matplotlib 的 pyplot 。要创建一个新的点...

  • Python代码实现5种最好的、简单的数据可视化!

    数据可视化数据科学家工作的重要组成部分。在项目的早期阶段,您通?;峤刑剿餍?em class='related_suggestion_highlight'>数据分析(EDA)以获得对数据的一些见解。创建可视化确实有助于使事情更清晰、更容易理解,尤其是对于更大、更高维度的数据集。在项目即将结束时,能够以清晰、简洁和引人注目的方式呈现您的最终结果非常重要,以便您的受众(通常是非技术客户)能够理解。 Matplotlib是一个流行的Python库,可用于轻松创建数据可视化。但是...

  • 有这5小段代码在手,轻松实现数据可视化Python+Matplotlib)

    本文要讲的是Matplotlib,一个强大的Python可视化库。一共5小段代码,轻松实现散点图、折线图、直方图、柱状图、箱线图,每段代码只有10行,也是再简单不过了吧!...

  • 词云可视化:四行Python代码轻松上手到精通

    词云可视化:四行Python代码轻松上手到精通 文章目录词云可视化:四行Python代码轻松上手到精通本课概要关于本课程`粉丝答疑交流QQ群:953712961``微信赞赏码`不需要写代码——词云图片制作微信小程序安装本课程所需的Python第三方??橐恍忻畎沧埃ㄍ萍?,适用于99.999%的情况)如果安装过程中报错(0.001%会发生)四行Python代码上手词云制作1号词云:《葛底斯堡演说》词...

  • matplotlib-实现数据可视化

    1、matplotlib数据可视化 Matplotlib是一个Python的2D绘图库,开发者使用Matplotlib仅需要几行代码便可以轻松绘图,生成柱状图、散点图、折线图、盒图、琴图等。 #数据可视化 import numpy as np import matplotlib.pyplot as plt from pylab import * x = np.arange(0.,10,0...

  • https://blog.csdn.net/yexing/article/details/6194060

  • 70种方法,轻松入门Python可视化编程

    图形可视化是展示数据的一个非常好的手段,好的图表自己会说话。毋庸多言,在Python的世界里,matplotlib是最著名的绘图库,它支持几乎所有的2D绘图和部分3D绘图,被广泛地应用在科学计算和数据可视化领域。但是介绍matplotlib的中文书籍很少,大部分书籍只是在部分章节中提到了matplotlib的基本用法,因此在内容和深度上都力有不逮?!禤y...

  • Vega数据可视化工具—教你轻松玩转大数据可视化 | 附代码

    摘要:?Vega是一种大数据可视化的高效工具,本文以分析游隼的迁徙情况为例,展示了Vega工具的强大能力及易学易用特点。 目前我们处于信息时代,万物联网的时代已经到来。从我们的日常生活中可以发现,小到身边的智能家居,再到平时出行的共享单车、滴滴等打车软件等,无时无刻不在产生大量的数据。这几年的时间里产生的数据量,已经远远超过了历史上其它时间的总和。那么这么多的数据汇聚成一个大数据,如何对...

  • 轻松玩转AI(从Python开始之Python3入门)

    九步: 从Python开始 描述性统计和推论性统计 使用 Pandas 及其它 Python数据展示和可视化 概率回归模型 机器学习基础 非结构化数据处理 机器学习进阶 深度学习——神经网络 注:图来源网络 从Python开始 Python入门 Python进阶 Python简介 Python的特点:优雅、明确、简单 Python适合的领域: Web...

  • https://blog.csdn.net/m0_38106923/article/details/100130354

    河南快赢481计划 www.ifuci.tw 目录 1、搜索引擎 2、PPT 3、图片操作 4、文件共享 5、应届生招聘 6、程序员面试题库 7、办公、开发软件 8、高清图片、视频素材网站 9、项目开源 10、在线工具宝典大全 程序员开发需要具备良好的信息检索能力,为了备忘(收藏夹真是满了),将开发过程中常用的网站进行整理。 1、搜索引擎 1.1、秘迹搜索 一款无敌有良心、无敌安全的搜索引擎,不会收集私人信息,保...

  • 我花了一夜用数据结构给女朋友写个H5走迷宫游戏

    起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,?;嵛实溃禾焯煨凑馔嬉?,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...

  • https://blog.csdn.net/qq_36903042/article/details/100798101

    写在前边 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当我去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很多边界条件想不全面,一紧张,代码写的乱七八糟。如果遇到没有做过的算法题,思路也不知道从何寻找。面试吃了亏之后,我就慢慢的做出总结,开始分类的把数据结构所有的题型和解题思路每周刷题做出的系统性总结写在了 Github...

  • https://blog.csdn.net/anlian523/article/details/100865538

  • 代码整洁 vs 代码肮脏

    写出整洁的代码,是每个程序员的追求?!禼lean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、什么是整洁代码;然后通过大量的刻意练习,才能真正写出整洁的代码。 WTF/min是衡量代码质量的唯一标准,Uncle Bob在书中称糟糕的代码为沼泽(wading),这只突出了我们是糟糕代码的受害者。国内有一个更适合的词汇:屎山,虽然不是很文雅但是更加客观,程序员既是受害者也是加害者。 对...

  • https://blog.csdn.net/ybhuangfugui/article/details/100913641

    今天给大家带来点快乐,程序员才能看懂。 来源:https://zhuanlan.zhihu.com/p/47066521 1. 公司实习生找 Bug 2.在调试时,将断点设置在错误的位置 3.当我有一个很棒的调试想法时 4.偶然间看到自己多年前写的代码 5.当我第一次启动我的单元测试时 ...

  • https://blog.csdn.net/sinat_33224091/article/details/100980160

    点击蓝色“GitHubDaily”关注我加个“星标”,每天下午 18:35,带你逛 GitHub!作者 | SevDot来源 | //1t.click/VE8W...

  • 阿里资深工程师教你如何优化 Java 代码!

    作者 | 王超 责编 | 伍杏玲 明代王阳明先生在《传习录》谈为学之道时说: 私欲日生,如地上尘,一日不扫,便又有一层。着实用功,便见道无终穷,愈探愈深,必使精白无一毫不彻方可。 代码中的"坏味道",如"私欲"如"灰尘",每天都在增加,一日不去清除,便会越累越多。如果用功去清除这些"坏味道",不仅能提高自己的编码水平,也能使代码变得"精白无一毫不彻"。这里,整理了日常工作中的一...

  • https://blog.csdn.net/devcloud/article/details/101024677

    欢迎添加华为云小助手微信(微信号:HWCloud002或HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群;输入关键字“最新活动”,获取华为云最新特惠促销?;浦疃嗉际醮罂?、特惠活动等你来撩! 前些天,场主的朋友圈被一首歌刷屏了。 数据有多牛逼?除了揽获各大新闻头条,新歌发售3小时,数字专辑就在QQ音乐卖了360万张。以单价3元计算,一首《说好不哭》已狂揽千万...

  • https://blog.csdn.net/m0_38106923/article/details/101050788

    目录 1、AdminLTE 2、vue-Element-Admin 3、tabler 4、Gentelella 5、ng2-admin 6、ant-design-pro 7、blur-admin 8、iview-admin 9、material-dashboard 10、layui 项目开发中后台管理平台必不可少,但是从零搭建一套多样化后台管理并不容易,目前有许多开源、免费、...

Global site tag (gtag.js) - Google Analytics