作者:林骥

     来源:林骥

引言

瀑布图,因为形似瀑布而得名,它能够比较好地体现数据分析的对比思维和细分思维。

比如说,假设某公司一月份销售额 1000 万,二月份销售额 500 万,为了体现各地区的销售额变化,我们可以画一张瀑布图如下。

通过对比,发现销售额下降了 50%;通过细分,发现不同地区的销售变化差异较大,其中上海地区的销售额增加了 30 万,湖北地区的销售额下降了 150 万,其他地区的销售额也都有不同程度的下降。

你可能会问,销售额增加的原因是什么?销售额下降的原因又是什么?这些都需要根据业务的实际情况,具体问题具体分析,找到问题的本质原因,从而有针对性地提出解决问题的办法,本文给出的数据完全是虚拟的,所以这里不做进一步的分析。

本文的重点,是介绍怎么使用 Python 画出瀑布图,让你能够举一反三,应用于自己的实际工作当中。你只需要把数据文件准备好,然后运行一遍代码,就能自动生成所需的瀑布图。

1. 读取数据

首先,我们导入所需的库,并从 Excel 文件中读取不同地区的销售额数据。

# 导入所需的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 设置正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']########## 准备绘图数据 ################ 从 Excel 文件中读取数据,第一列设置为索引
sale = pd.read_excel('data/不同地区的销售额变化.xlsx', index_col=0)sale

2. 处理数据

其次,我们对原始数据进行处理,把数据转换成绘图所需的格式。

########## 处理数据 ################ 计算销售额的变化
sale['销售变化'] = sale.iloc[:, 1] - sale.iloc[:, 0]# 把销售汇总作为第一行
change = pd.concat([pd.DataFrame(sale.sum()).T, sale])# 修改第一行的索引名称:上个月
change.rename(index={0: sale.columns[0]}, inplace=True)# 设置瀑布图的第一个数值
change.iloc[0, 2] = change.iloc[0, 0]# 排除没有变化的项目
change = change[abs(change.销售变化) > 0]# 降序排列
change = change.sort_values('销售变化', ascending=False)# 不要包含汇总,后面会自动计算
index = change.index
data = change.销售变化
trans = pd.DataFrame(data=data, index=index)# 为瀑布图创建空白序列,用于把柱子撑起来
blank = trans.销售变化.cumsum().shift(1).fillna(0)# 计算瀑布图的最后一个数值:当月收入
thismonth = sale.columns[1]
total = trans.sum().销售变化# 设置瀑布图中每个项目的变化
step = blank.reset_index(drop=True).repeat(3).shift(-1)
step[1::3] = np.nan# 最后一根柱子是从 0 开始
blank.loc[thismonth] = 0
trans.loc[thismonth] = totaltrans

3. 开始画图

接下来,我们开始画图,在画图函数所使用的数据中,trans 存储的是瀑布图中柱子对应的数据,blank 存储的是柱子底端的高度数据。

########## 开始画图 ################ 设置标题
title = '\n各地区销售额变化瀑布图\n'# 使用 Pandas 中的画图函数
waterfall = trans.plot(kind='bar', stacked=True, bottom=blank, legend=None, figsize=(16, 8), fontsize=20, width=0.8)# 设置 x 轴标签
waterfall.set_xlabel("")# 计算标签位置的偏移量
max = trans.max()
neg_offset = max / 25
pos_offset = max / 50
plot_offset = int(max / 10)# 获取标签的高度位置
y_height = trans.销售变化.cumsum().shift(1).fillna(0)# 循环设置标签
loop = 0
for index, row in trans.iterrows():x = row['销售变化']# 最后一个标签的位置不要双倍if x == total:y = y_height[loop]else:y = y_height[loop] + x# 决定向上还是向下偏移if x > 0:y += pos_offsetelse:y -= neg_offset# 添加数字标签,负数用红色waterfall.annotate("{:.1f}".format(x), (loop, y), ha="center", fontsize=20, color=('k' if x>0 else 'r'))loop+=1# 设置 y 轴的偏移量
waterfall.set_ylim(0, blank.max()+int(plot_offset))# 设置 x 轴标签的角度
waterfall.set_xticklabels(trans.index, rotation=0)# 设置标题并显示图片
plt.title(title, fontsize=36, loc='center', color='k')plt.show()

运行之后得到的图片,就是本文开头显示的那张瀑布图。

小结

本文介绍了瀑布图的一个应用案例,并给出了详细的 Python 实现代码,在公众号后台发送「瀑布」两个字,可以获得本文的数据文件和完整代码。

虽然 Excel 也能画瀑布图,但是我个人觉得用 Python 能够更加灵活高效。

Python 能让数据分析等工作变得更加自动化、标准化、流程化。

所以,我渐渐地把很多工作,都转换为使用 Python 来完成,以提升自己的工作效率和工作质量,让自己有时间去做更多更有价值的事情。

多花一些时间,去提升自己的能力,让自己获得成长和进步,我觉得是非常值得的,所谓「磨刀不误砍柴工」,这也是我们要学习时间管理的重要原因之一。

◆ ◆ ◆  ◆ ◆

长按二维码关注我们


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!

● 互联网大佬学历&背景大揭秘,看看是你的老乡还是校友

● 上万条数据撕开微博热搜的真相!

● 你相信逛B站也能学编程吗?

瀑布图有什么用?怎么画?相关推荐

  1. 如何用python画数据图-利用Python绘制数据的瀑布图的教程

    介绍 对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具.不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图. 在往下进行之前,我想先告诉大家我指代的是哪种类型的图 ...

  2. 下如何画出频率瀑布图_用maftools一行代码画出瀑布图

    昨天本科的一个师姐问我关于瀑布图的画法,想要画个瀑布图,问我有没有有什么工具可以画的,目标图如下 于是给师姐介绍了maftools这个R包,这个R包功能非常强大,可以做各种各样的图,今天就拿瀑布图为例 ...

  3. 使用python画图表_利用Python绘制数据的瀑布图的教程

    介绍 对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具.不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图. 在往下进行之前,我想先告诉大家我指代的是哪种类型的图 ...

  4. 画瀑布图_道砟石上的庐山瀑布惟妙惟肖

    江南都市报讯 全媒体记者章娜.喻雪君.实习生廖铖报道:一群天天与道砟接触的铁路人,在采石的时候,萌发艺术的灵感,于是他们在一块块经过大自然冲刷雕琢的石块上作画,绘制出一个又一个生动的石绘艺术作品:庐山 ...

  5. 用html5画瀑布图,使用Excel2016才发现瀑布图如此简单

    瀑布图是形似瀑布的图表,它是用来展示一系列增加值或减少值对初始值的影响,可以直观的反映数据增减变化的图表,这个图表在职场中很多场景都可以应用,Excel2016版本开始,图表中增加了瀑布图,可以不用原 ...

  6. python瀑布图怎么做_教你用Python创建瀑布图

    介绍 对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具.不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图. 在往下进行之前,我想先告诉大家我指代的是哪种类型的图 ...

  7. python瀑布图怎么做_利用Python绘制数据的瀑布图的教程

    介绍 对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具.不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图. 在往下进行之前,我想先告诉大家我指代的是哪种类型的图 ...

  8. 使用ICGC数据库进行肿瘤组织突变分析,绘制瀑布图等

    癌症组织突变分析 文章目录 癌症组织突变分析 ICGC 数据库 下载数据 ICGC下载突变数据 genecode网站下载基因注释文件 数据预处理 读入突变数据 对data文件进行基因注释 瀑布图 R包 ...

  9. [Excel图表]瀑布图的完美解决方案

    瀑布图是经营分析工作中的常用图表,用来解释从一个数字到另一个数字的变化过程,比如: 从去年的业务收入到今年的业务收入,哪些产品各影响收入增减多少从销售收入到税后利润,各类成本费用各影响多少 ..... ...

  10. GenVisR绘制瀑布图/突变图谱

    一 R包的下载 下载地址:http://bioconductor.org/packages/release/bioc/html/GenVisR.html 学习过程中参考的两篇文章(感谢): https ...

最新文章

  1. 腾讯游戏分享汇:天天飞车六大研发经验
  2. struts-Result- Configuration
  3. linux GUI程序开发
  4. Unix整理笔记-vi简介-里程碑M8
  5. go 原子操作 atomic
  6. java利用xml生成excel_代码快速 实现xml 转换为 Excel(xml转excel通用类-java-完成代码可作工具使用).doc...
  7. 全国计算机等级考试一级模拟考,全国计算机等级考试一级模拟试题一
  8. ipad4越狱显示服务器维修,iPad越狱后怎么恢复出厂设置及恢复中所出现问题的解决方法...
  9. 利用Lightroom添加边框及批量导出
  10. interactive governor study for android
  11. ROS——基于python3实现opencv图像处理任务
  12. cgb2007-京淘day02
  13. Matlab 调用Optris Pi 450i红外相机direct SDK相关函数摘记
  14. 点划线的两种实现方法
  15. django模型层FQ查询,only,defer关键字,orm简单事务
  16. 我的世界不退出服务器切换账号,我的世界服务器退出指令
  17. 通过股票代码识别所属板块(20190730)
  18. linux 网络属性,Linux网络属性配置详解
  19. 智慧协同新应用:FEv6.6,让组织更灵动/敏捷!
  20. 【GNN报告】GNN-LOGS部分报告汇总

热门文章

  1. Android 打开系统文件管理器选择文件
  2. 游戏中学会写代码:这些编程学习网站不容错过
  3. Ubuntu配置locale
  4. 算法设计与分析第七章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  5. html基础学习笔记
  6. 河南的抗疫英雄(C语言嘞)
  7. data[i] is underfined
  8. 《springboot学习》 十九 springboot集成mybatis-plus
  9. 小学教师计算机校本培训材料,教师业务学习材料及校本培训材料
  10. 医师计算机考试,医师资格考试机考-计算机作答的操作指导