2025-11
9

又想起了Python

By xrspook @ 8:44:06 归类于: 烂日记

大概两年前,我买了一本叫《超简单 用Python让Excel飞起来》的书。那本书是怎么买的呢?我搜索关于Python跟Excel的书,然后就看到了它。说白了就是教你用Python去处理Excel。前面的部分是一些批处理,后面的那些是利用Excel的数据作图。批处理的部分我看得挺认真,也实际操作过。感觉基本上都是可以实现的,我在VSCode里写Python,然后引用Excel文件,最后把结果输出到Excel。的确,这样干可以批处理一些基本的问题,但关键是我是个完美主义者,所以我对输出格式有一定的要求,实际上这本书教你的东西不怎么包括具体调整格式本身。通常来说做法大概是读取文件,然后通过pandas处理,最后输出。在这里我学得比较认真的部分是批处理文件,无论是把一个工作簿的每个工作表分别另存为单独的工作簿还是把某个文件夹里面的工作簿全部都合并到一个工作簿里。这些翻来覆去的操作其中一个跑不掉的是要进行一定的循环,循环的思路搞清楚了以后一切都好说。学的时候很认真,也都全部尝试过了,但一段时间之后不用还是会全部都忘光光,最后剩下的只是知道一定可以通过批处理实现这些功能。

在电脑里面安装Python,然后通过这种方式的确是可以处理Excel文件,后来我也进一步对那些输出的文件进行了格式控制,但总的来说,还是有些不如人意的地方。就数据处理本身来说,Python没有任何问题,但关键是跟VBA这个原生的东西相比,在处理格式方面还是显得有点有心无力,又或者无法控制。一个很明显的地方就在于跟VBA相比,Python读取文件跟输出文件都得一定时间,可能数据处理本身不需要多少性能,但关键是打开文件关闭文件这都需要时间。后来机缘巧合之下,我知道了在VBA里可以通过ADO的方式用SQL解决数据的问题。ADO的方式意味着我并不需要真的打开文件,这样就节省了很多时间。以至于后来我用VBA取代了Python的功能,因为Python之所以好用是因为把Excel的数据传进去了以后,它对数据进行了一个类似数据库的标准化改造,然后用标准的语言实现某些功能。相比之下我觉得SQL更简单易懂。所以自从迷上了ADO+SQL以后,我基本上就没再用Python处理Excel了。我一直也没有进行太多高端的操作。可以肯定的是,如果我要做的话,实现同样的功能,我可以通过这两种途径分别得出方案。

回到一开始那本书,前面部分说的是一些批处理,后面部分说的是用Python作图,其实那个时候我并不明白为什么要用Python作图,因为Excel本来就可以作图,而且就控制来说Excel是可视化的,Python全部都得写上去,所以后面作图的部分我看得很潦草,直接快速掠过,只是知道能干这种事而已。

直到这一次数据分析需要做箱形图。Excel可以做箱形图,但对箱形图的控制不如人意,我想到了Python,也想到了R语言。我知道这两个东西通过某些包就可以轻松做出我想得到或者想不到的图。

R语言被我放下了太远,以至于我已经基本不知道该如何操作了,所以我选择先用Python探索一下作图。

2025-11
8

Excel里的箱形图

By xrspook @ 8:17:33 归类于: 烂日记

不知道哪一次Microsoft 365升级以后,Excel的图表里面就多了一个箱形图。在做一些我一开始没什么头绪的图之前,我都会选择数据,然后让Excel给我推荐一下图表,我从来没有试过被推荐箱形图。我只是知道那个东西的存在。同时我也没有在Excel相关的公众号的推送里面看到过箱形图的使用方式。或许他们是有推送的,只是我越来越懒惰,忽略掉了,但我之所以会忽略掉另外一个很重要的原因,可能是他们有推送,但是推送的频率不高,而那些不高的频率又刚刚被我因为这样那样的错过了,所以我一直没看到。这个忽略掉其实也不完全怪我,微信也是一个很重要的因素,因为现在的公众号的信息不会全部展开,除了第1篇会展示以外,余下的那些就只会说还有一篇还有两篇,不手动点开根本看不到,所以万一箱形图的推送出现在那个地方,当然就很容易被我忽略掉。不知道为什么微信要做这样的设置,其实手指多划两下没什么问题,又或者我觉得微信可以让用户自行选择到底要不要展开。更精细化的管理可能是对这个公众号不折叠,对那个公众号只显示首篇。这种分类方讨论的方式就像是正常的群显示聊天条数和那些忽略的群只给一个红点。

只要你有一组数据,你就可以做出箱形图,因为它是根据最小值两个四分位数中位数以及最大值组成的。简单来说这个可以把一组数据浓缩成万物皆有的几个数,然后你就可以把它们放在一起作图或者分析,我感觉无论是箱形图还是小提琴图,都是一个可视化分析数据的工具,能更直观地看到数据的情况。跟箱形图相比,小提琴图还多了一个数据密度的展示。如果离散性很好的话,小提琴图显然更妙,但如果本来就不怎么符合正态分布,也就没必要做小提琴图了。

以前的Excel不能直接做出箱形图,大家只能做堆积柱状图,然后进行加工,得出类似箱形图的东西,但据说从Office 2021开始就有了这个功能,但是有些人说他们的版本里有,但有些人说他们的版本里没有,我猜这会不会跟家庭版和专业版的区别有关,又或者有些人进行了更新,但有些人选择永不更新?

虽然现在的Microsoft 365里面可以做箱形图,制图方式也很简单,但是跟其他图表比起来,箱形图的各种设置感觉都是怪怪的。无论是字体、字体大小、标题、坐标轴等等对其它图来说很好控制很容易实现的功能搞箱形图的时候都很奇怪感觉很别扭。其中一个让无数通过Excel直接做这个图的人感到很无奈的是理论上做箱形图的时候,第一行是标题,余下的那些行是数据,数据可以是同样大小的也可以是不同大小的。按照大家的理解,数据是通过箱体现的,第一行的标题应该就是X轴上的标签,但实际上无论你怎么操作。现在直接出来的箱形图那里的X轴标签都是1。搜索一下就发现很多人都遇到这个问题,貌似我只在一个地方看到了可能的解决方案,首先你把那个1去掉,然后插入图例,选择在底部展示。这样的话,上面的那些箱算是终于有了标签,虽然那个标签估计不会跟那个箱体完全对位。这个思路太诡异了,设计Excel箱形图的人怎么会想出这么离谱的事情。为什么在Excel里这个图可以直接生成,但实际上效果却这么的糟糕呢?同样让我无法理解的就是我无法控制几个箱之间的距离或者是箱体的宽度。高度是由数据本身决定的,但箱体的宽度,理论上用户可以自行设定。但貌似就没有一个直观的方式让你好好操控。那种感觉跟浪潮开发的软件有异曲同工之妙,功能有了,但好不好用我不管。

箱形图是数据分析里一个非常经典的可视化表达方式。Excel不能很好满足我的要求,我只能用其它方式实现。

© 2004 - 2026 我的天 | Theme by xrspook | Power by WordPress