轻识Logo
目录

    「二八法则」的数据可视化:用帕累托图进行数据分析


    导读:借助帕累托图,有助于我们抓住问题的关键,从而解决核心的问题。


    作者 / 来源:林骥(ID:linjiwx)




    01 「二八法则」和帕累托图


    1897 年,意大利经济学家帕累托,在抽样调查的数据中发现,社会上 20% 的人拥有 80% 的财富。

    后来,人们发现这种「关键少数」的现象非常普遍,比如说:20% 的原因导致 80% 的问题,20% 的产品贡献 80% 的业绩,20% 的员工贡献 80% 的业绩,20% 的客户贡献 80% 的业绩 …… 因此,简称为「二八法则」

    为了纪念帕累托,我们把展现「二八法则」的图表,称之为帕累托图。

    下面举个例子,我们汇总导致质量问题的原因,计算每种原因出现的频次,然后按照从大到小进行排列,制作成一张帕累托图如下:


    与常见的帕累托图不同,我对图表细节做了一些调整:

    1. 线条从坐标原点开始,代表累计百分比从 0 开始;
    2. 没有使用双坐标轴,线条的高度就是频次的累计;
    3. 灰色边框的高度就是频次的总和,以便展现部分与整体之间的占比关系;
    4. 用虚线标记大致符合「二八法则」的位置;
    5. 用文字标签说明累计百分比的具体数字,在标题中体现图表想要传递的信息。

    借助帕累托图,有助于我们抓住问题的关键,从而解决核心的问题。


    02 用 Matplotlib 画帕累托图


    接下来,我们看看用 Matplotlib 画图的具体步骤。

    首先,导入所需的库,并设置中文字体和定义颜色等。

    # 导入所需的库
    import numpy as np
    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import matplotlib.image as image

    # 正常显示中文标签
    mpl.rcParams['font.sans-serif'] = ['SimHei']

    # 自动适应布局
    mpl.rcParams.update({'figure.autolayout'True})

    # 正常显示负号
    mpl.rcParams['axes.unicode_minus'] = False

    # 禁用科学计数法
    pd.set_option('display.float_format'lambda x: '%.2f' % x) 

    # 定义颜色,主色:蓝色,辅助色:灰色,互补色:橙色
    c = {'蓝色':'#00589F''深蓝色':'#003867''浅蓝色':'#5D9BCF',
         '灰色':'#999999''深灰色':'#666666''浅灰色':'#CCCCCC',
         '橙色':'#F68F00''深橙色':'#A05D00''浅橙色':'#FBC171'}

    其次,从 Excel 文件中读取数据,并定义画图用的数据。

    # 数据源路径
    filepath='./data/帕累托图数据源.xlsx'

    # 读取 Excel文件
    df = pd.read_excel(filepath)

    # 定义画图所需的数据
    x = df['原因']
    y = df['频次']

    # 让折线图从坐标原点开始
    x2 = np.arange(len(x)+1) - 0.5
    # 计算累计频次
    y_cumsum = [0] + list(y.cumsum())
    # 计算累计百分比
    y2 = y.cumsum()/y.sum()

    接下来,开始用「面向对象」的方法进行画图。

    # 使用「面向对象」的方法画图
    fig, ax = plt.subplots(figsize=(86))

    # 设置标题
    ax.set_title('\n%.1f%%' % (y_cumsum[2]/y.sum()*100) + '的质量问题是由20%的原因引起的\n'
                 fontsize=26, loc='left', color=c['深灰色'])

    # 用灰色方框代表总体的大小,体现每个数据的占比关系
    ax.bar(x, y.sum(), width=1, color='w', edgecolor=c['浅灰色'], zorder=0)

    # 画柱形图
    ax.bar(x, y, width=1, color=c['蓝色'], edgecolor=c['浅灰色'], zorder=1)

    # 画折线图
    ax.plot(x2, y_cumsum, ls='-', lw=2, color=c['橙色'], label='累计百分比', zorder=2)

    # 标记体现二八法则的虚线
    ax.hlines(y_cumsum[2], -0.51.5, color=c['橙色'], ls='--')
    ax.vlines(1.50, y_cumsum[2], color=c['橙色'], ls='--')

    # 隐藏边框
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['bottom'].set_visible(False)
    ax.spines['left'].set_visible(False)

    # 设置图形的位置,减少空白
    ax.spines['left'].set_position(('data'-0.51))

    # 隐藏 X 轴的刻度线
    ax.tick_params(axis='x', which='major', length=0)
    ax.tick_params(axis='y', which='major', length=0)
    ax.set_yticklabels([])

    # 设置坐标标签字体大小和颜色
    ax.tick_params(labelsize=16, colors=c['深灰色'])

    # 设置数据标签
    for a, a2, b, b2, b3 in zip(x, x2[1:], y, y_cumsum[1:], y2):
        ax.text(a, b, '%.0f' % b, ha='center', va= 'bottom', fontsize=16, color=c['蓝色'])


    # 标记 Y 轴标题
    ax.text(-1, y.sum(), '频\n次', fontsize=16, va='top', color=c['蓝色'])

    # 标记线条含义
    ax.text(1.5, y_cumsum[2]+10'累计%.1f%% ' % (y_cumsum[2]/y.sum()*100), fontsize=16, color=c['橙色'], va='bottom', ha='right', zorder=5)

    plt.show()

    下载画图用的数据和完整代码,你可以前往
    https://github.com/linjiwx/mp


    03 帕累托图的应用


    通过广泛寻找问题的原因,会发现影响因素有很多,但是各种因素对问题的影响程度并不相同,因此需要缩小范围,找出导致问题的主要原因。

    要识别问题的主要原因,可以借助帕累托图,对各种原因进行优先级排序,多问几个「为什么」,逐级分析,以确定根本原因。

    1951 年,管理学家戴克将帕累托图应用于库存管理,命名为 ABC 分析法。

    1963 年,德鲁克将 ABC 分析法进一步推广,使其成为企业提高效益的管理方法。

    对于个人来讲,我把自己的工作清单分成 3 大类:

    • A 类:需要投入巨大精力的长期工作。
    • B 类:需要及时响应并完成的工作。
    • C 类:需要快速跟进处理的工作。

    坚持「要事优先」的原则,每天分配时间给重要的事情,我认为这也算是「二八法则」的一种实际应用。


    划重点?


    干货直达?

    • 豆瓣8.5以上!这10本书,值得每个人读一遍

    • 6大准则+10道习题,终于有人把怎样选择图表讲明白了

    • 爱因斯坦耗费近十年的最伟大研究,推导出什么神预言?

    • pandas入门:Series、DataFrame、Index基本操作都有了!


    更多精彩?

    在公众号对话框输入以下关键词
    查看更多优质内容!

    PPT | 读书 | 书单 | 硬核 | 干货 | 讲明白 | 神操作
    大数据 | 云计算 | 数据库 | Python | 可视化
    AI | 人工智能 | 机器学习 | 深度学习 | NLP
    5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

    据统计,99%的大咖都完成了这个神操作
    ?


    浏览 67
    点赞
    评论
    收藏
    分享

    手机扫一扫分享

    举报
    数据分析之帕累托图
    Python与算法社区
    0
    python数据分析(数据可视化)
    数据科学与人工智能
    0
    用Python+PPT对某宝月饼数据进行可视化分析~
    大邓和他的Python
    0
    ParaView可视化数据分析
    ParaView是一种开放源代码,多平台的数据分析和可视化应用程序。 ParaView用户可以快速建
    ParaView可视化数据分析
    0
    ParaView可视化数据分析
    ParaView是一种开放源代码,多平台的数据分析和可视化应用程序。ParaView用户可以快速建立可视化,分析其数据使用定性和定量方法。勘探的数据可以做三维交互或编程方式使用ParaView的批处理
    ParaView可视化数据分析
    0
    数据分析之数据预处理、分析建模、可视化
    Python之王
    0
    12张图,二手房数据分析及可视化
    Python爬虫与数据挖掘
    0
    使用日历热图进行时序数据可视化
    俊红的数据分析之路
    0
    【实战】用Python进行10w+QQ说说数据分析
    数据分析1480
    0
    点赞
    评论
    收藏
    分享

    手机扫一扫分享

    举报

    聚圣源中秋节qq表情女孩起什么名光辉岁月国语版叫兽系列义乌家居饰品批发起名带宇名马氏女孩子起名郑氏女孩起名子我老婆明明是天后却过于贤惠了bipt多地推2.5天休假神舟笔记本怎么样赵诗敏公免费起名网房地产营销策划公司起名2020李姓龙凤胎起名字大全贩毒电影严禁征收过头税费专家取名起名大全单机小游戏大全宁波找房子你的爱如星光商店取名起名大全大全免费开店起名什么好船舶公司起什么名字好去哪儿网订机票女性私护品牌起名流行小说那金花和她的女婿大结局我是余欢水全集淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

    聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化