2023-07
30

半半的坎

By xrspook @ 11:14:37 归类于: 烂日记

当我把python的脚本修改完毕,觉得没什么问题了之后我把那发给我的同事,理论上她的电脑上已经安装过python,但实际上当她双击打开py的时候,会默认弹出VSCode,并不能运行python本身。这是我之前从来没有遇到过的,因为我安装的都是python的官方程序,启动器在安装的时候只要你默认,基本上都会装上,但问题是我同事安装的是anaconda。现在的python教程通常都会推荐用anaconda,那里自带的编辑器是jupyter notebook。jupyter notebook到底怎么用实际上我没搞懂的,虽然实际上py文件也能运行,但jupyterr notebook默认的保存文件不是py,所以用普通的python到底能不能打开jupyter notebook保存的文件我还真没试过。从我开始学习python,我用的就是VSCode。当我很长时间不用VSCode以后,当我再次打开,我会发现VSCode里面默认帮我装上了jupyter notebook的插件。

双击点py文件就用VSCode打开,然后还得找终端,但实际上因为可能anaconda安装python的时候并没有默认安装启动器,所以在那里双击没有运行cmd,双击打开py文件的时候,依然是VSCode本身,变成一个运行不了的死循环。 VSCode本身没有问题,问题是py文件的关联没做好,这才是问题所在。

要做到的不过是双击就能直接打开py文件运行,所以把py文件默认用cmd打开运行就好了。在cmd里输入python会显示拜访的版本,这没有问题,这意味着电脑已经安装了python,但问题是当输入where python的时候显示的是一个C盘很长很长的地址。按照那个地址打开文件夹,的确是有python的。再把这串地址上面的exe文件输入到py文件的打开方式的时候,py文件就终于可以双击运行了。双击的确可以弹窗运行,但问题是如果py文件运行的时候出现状况,比如说一闪就没了,就意味着可能文件没有正常运行,而是遇到了某个东西中断了。第一次成功设置好双击的时候,的确就出现了这种情况,直觉告诉我肯定是出状况了。在py文件所在的那个文件夹里输入cmd,然后再运行py文件,结果发现提示没有安装pandas插件。我的同事觉得很不可思议,因为anaconda本身理论上这些插件都是齐全的。我觉得之所以会这样是因为anaconda把插件安装在了自己的那个地方,而现在是单独运行python本身,而python本身的文件夹里面没有这个插件,所以这就导致了插件缺失。需要安装插件,要怎么个装法,对我这种人来说,我第一个想到的就得先设定插件下载来源为清华的镜像。如果你使用python官方路径下载,估计要很长时间,即便花了很长时间也可能会下载不全,因为非常有可能因为时间太长,网速太差丢包。虽然安装一个pandas的插件,但实际上要支持电脑运行,也要安装其它的插件,任何一个不齐全都可能会导致最终无法运行。在知道她得重新安装pandas的时候,我就已经把清华镜像的设置发给了她,但是她还要是没有意识到必须得先设置国内的镜像路径,然后再去下载。虽然单位的网速进行了限制,但是下载清华大学的镜像还是很快的,相比于python官方的下载来说清华基本上可以说是一些典插件安装的必然选择。如果你安装的是一些开源性自行设计小众插件,清华的镜像可能没有,那时候你就只能通过开发者提供的路径去下载。

其实我并不需要她完全按照我的思路来,我告诉她要什么,她只需要实现就行了,现在挺反映出来的状态是她大概知道我要做什么,但是她没有反应到用她的方法应该怎么做,有可能是她没想过要去想。一半他的一半的最终结果就是,我不知道她到底卡在了什么地方,因为以我的方式是完全不会卡的,她估计也会觉得我带她走了不少弯路。

不是人人都天生喜欢自发创新,该怎么找到这种人呢?

2023-07
29

最后的小计也出来了

By xrspook @ 10:03:24 归类于: 烂日记

又花了大半个下午的时间,我把python跨表查询版最后的那个小计功能也开发出来了。其实前一天晚上我已经找到了类似的案例,只要按研究透的那个东西,接着往我自己那里套就可以了。我大概明白里面用到的公式到底是干什么用的,但是把它们套起来了以后,我发现用在我的那里无论如何都不对,所以我就在案例里不断套脚手架,不断地做注视去掉东西。最终发现让我失败的原因是我的那个dataframe是没有索引的,这就让我后面折腾了好长一段时间。

要在dataframe里加小计,首先需要对进行小计的项目进行分组处理。前一天我已经了解过,这样分组出来结果就只是那些聚合的数据。这些聚合的数据如果你不需要带入特殊的分组词,那么你跟原数据合并,然后根据你的分组项目名排序,小计就会合体到原来的dataframe里。如果你要加入小计这样的词语,你就得虚拟新增一列以非分组项目为名称的列名,内容就是小计之类的词。这样的分组结果我不知道为什么那个案例最后要设定以分组项目为索引,因为我在折腾那个案例的时候发现做不做这一步出来的结果没区别。

最最关键,让我折腾半天的根本原因是我要加小计的那个dataframe在从Excel读取数据的时候就已经设定了不添加索引。我发现当我去掉了案例的默认索引以后,和我的脚本出现了同样的问题。所以解决方案是先给我的datafame添加一个默认索引,然后再进行上面说到的分组操作,接着把有默认索引的dataframe跟分组结果结合在一起。同时对分组项目排序。分组后的结果有没有默认索引都无所谓,因为合并时都得重置索引。我没有试过如果这个dataframe也自带了默认索引,最后能不能成功合并。纯粹为了探索,我应该了解这个,但因为我运气好,在研究之前就已经得到了我想要的结果,所以我就没有继续下去,接下来我会继续拿那个案例把玩一下。

为什么会在Excel的单元格数据传入pandas的时候就把默认索引禁止掉呢?其实不禁止也完全没有问题。因为在最后把加工过的东西输出的时候,我可以控制不输出。之所以会有这样的习惯,写出这样的控制,是因为我看的第一本用python批处理Excel的书里面是这么写的。在看那本书的时候,我觉得那本书写得一般般,因为他给出了一个例子,然后大概告诉你要实现什么功能,接着就是展示脚本。我觉得起码你得在介绍那个例子的时候,除了源数据本身,也得展示一下你最终的效果是什么。他们还偶尔说不清具体需求是什么,唯有去研究他们的代码,你才知道原来具体他们要干那个。

在一个明细数据表里加入小计这东西是完全可以实现的,但是从数据处理的角度考虑,为什么我要把明细跟汇总合并在一起呢?如果用我的Excel思维去考虑这个问题,我觉得明细表就是,明细表汇总表用透视表表达出来就好了。因为数据透视表是很灵活的,可以用任意的汇总维度去观察同一个源数据。python可以轻松处理Excel的数据,但是到了Excel以后,展示的方式的控制好像python的插件就有点难以直接控制,而要控制这个最好的方法就是通过api,用VBA控制,因为vba是原生office的自带工具。

我发现python批处理Excel脚本的运行速度跟电脑的CPU有很大关系,跟内存大小关系不大。用我办公室的电脑运行,但需不到6秒,用我宿舍的电脑运行大概需要7秒,用我家里的电脑运行大概需要7.5秒。这是在正常的情况下,如果我的电脑正在执行多任务,这些时间就会说不准了。之所以我说这跟电脑的CPU性能有关,因为运行脚本的时候我盯着任务管理器。发现有段时间Excel的CPU会飙升最大40%,虽然维持的时间很短。不同性能的电脑同样CPU,封顶都会飙到40,这就意味着CPU的核数越多,单核的性能越好,那么这个脚本的运行速度就会越快。6系的i5运行6秒,2系的i3运行8秒,是有差距,但经历过Power Pivot得12秒起,python很爽了。

我觉得这个python脚本还有继续改进的空间,继续努力。

2023-07
28

跨表查询python版搞定

By xrspook @ 22:30:18 归类于: 烂日记

花了一整天的时间去做python版本的发跨表查询,最终还真的被我做到了,唯一有点小瑕疵的就是出入进度里我还没有实现批次小计。我基本已经想好需要一个什么样的数据处理,但是怎么把那些东西结合起来我还没有一个成熟的思路,估计会有一些类似的案例,我可以参考一下。

之所以这个脚本居然用了一整天,是因为最后我算了一下字数,居然有4000多字。因为我用的是VSCode,所以实际上敲代码已经很高效了,因为几乎所有符号都会配对出现,一旦有手误的地方基本上都会提醒,但是有些东西是VSCode不会提醒我的,比如我要用到pandas各种格式的数据,有些事不能直接用print打印出来的,必须要用个循环才能把那些东西展示出来。如果我用python处理Excel,我会用xlwings进去,然后用pandas。之所以用xlwings,因为这个东西支持Excel的版本比较多,老一点的插件有的只支持xlsx有些不支持xlsb,有些仅仅支持xls,而我选择的这个xlwings基本上我用的Excel格式都支持了。现在我主要用xlsx和xlsb。因为做这个python查询之前,我已经在PQ和PP上做了两遍,所以我完全知道自己要做些什么,但具体那些东西该如何实现,应该用什么样的表达式去实现,是我花时间的地方。

昨天之前我对pandas里面的dataframe并不太熟悉。我知道那个结构很类似于Excel的表格,但实际上用起来又跟表格不太一样。我觉得那个东西最好的地方就是不像PQ那样,经常被高手套叠起来,于是你想半天都搞不懂那到底是什么。作为一个不是python新手的人,我还是喜欢用短语句完成,然后再连接起来。自学python让我觉得最成功的地方在于我喜欢用for循环,而且还非常习惯使用套叠循环。如果在我大二学C语言的时候,我也能把循环玩得这么溜。估计我就不会为冒泡法这种东西发愁了。

虽然花了一整天时间,才终于把这个东西整出来,但我个人感觉还是比较愉快的,尤其是敲代码的过程,因为相对于在Microsoft 365的PQ或PP的编辑器里面敲代码,VSCode里敲代码实在太爽了。PP会经常提醒我公式错误,因为PP那个你看不到的循环实在会把你整得很惨。PQ里我不过是删了个文字,不知道为什么它会自动给我加半边括号,所以搞了半天,我都搞不懂自己到底哪里错了,最后发现不知道为什么,多了个括号,又或者在调整某些语句的时候多了或少了个逗号。英文和中文逗号在编程的世界里是有区别的,在VSCode里可以看得很清楚,但在PQ的高级编辑器里。因为字体太小,你还没办法快捷变大,非常折磨我这种眼睛不太好的老人家。

高中的时候我的数学老师经常一节课就只讲一道题,他会用很多方法把那道题解出来。现在,我也喜欢上了这种别人可能非常难理解的行为。

2022-11
22

我想用Python

By xrspook @ 10:24:39 归类于: 烂日记

几天前我开始看关于把Python跟Excel结合的书。其实那些书一年多前我已经已经买了,只是一直都放在那里,甚至还没开封。因为同期购买的还有一大堆Power BI的书,所以Python跟SQL我都还没有开封。现在之所以开封是因为突然想到想抓取一下网上的官方新冠疫情数据。之前我没想过要自己抓取,后来发现各大门户网站的看板都只有几个月的数据。顶多只能看到今年8月,之前的就没有办法了,要怎么抓取那些数据,然后以我想要的方式展示出来,显然依靠看板是不行的。那个东西不是给我这种较真的人去看的,只是给大伙看一下今天的情况怎么样,近期的情况怎么样,而且都只是了解个大概而已。新冠疫情的数据应该是官方的,当然是找国家卫计委和各省的卫健委。国家卫健委的东西我感觉我暂时用不上,原因是颗粒度就只是到省份而已。我之所以要收集这些新冠疫情的数据,是因为我想看一下新冠疫情和我单位的业务到底有没有关系,是否因为新冠疫情的零星散发导致广东省又或者是东莞市周边的各种防疫政策突然严格起来,甚至出现区域封控,最终导致我库的业务量大受影响。因为总的来说,和我库发生业务的那些单位大都是拉到周边,跨省的偶尔也会有,但不多。相对于之前来说,今年的装卸船都没有那么繁忙,所以新冠疫情数据主要看广东省,尤其是深圳、广州、惠州、佛山这几个地方大概就差不多了。因为从东莞疾控发布的消息来看,东莞是非常看重跟它接壤的那些地市的疫情情况的。我的真实感受是广州卫健委那边还没官方宣布消息,东莞卫健委这边就已经在官方公众号上发布要对广州采取加码防控。

广东卫健委的网站,我感觉挺漂亮,没什么多余的东西,开的速度也很快。我研究了一番那个网站的源代码,好像没找出是基于什么做出来,但我总感觉从那个网址的展示形式看来非常有可能是基于WordPress的网站。从网站的头部信息看来,写脚本的那个人很用心,因为他把信息整理得非常整齐,不同类别的还会特意用个空行分隔开,css也是整理得很漂亮。那个网站如果在不同的终端查看,估计会是不一样的效果,会有针对平板或者手机之类的版本。网站做得这么细致,里面也有不少的javascript,所以会不会有反爬技术还真很难说。最终发现如果我用最初级的爬虫去抓取数据,仅仅能爬到网页头的搜索,然后就戛然而止了。或许用上一些高端的手段能把网站爬下来。但我需要的不过是其中一段少则百余字,多则几百字的东西而已。尝试太凶猛,卫健委把我的IP给封了,我连看都看不了,问题更大。所以最终我采取的措施是在Firefox浏览器上安装一个叫download them all的插件,批量下载他们的网页。在做这些事之前,我已经试过手动下载其中一个网页,然后用Python正则提取我想要的东西。事实证明批量下载网页是可行的,Python正则抓取信息也是可行的。最终问题就归结为抓取到了某些信息以后,怎么才可以让那些信息以我想要的方式表达出来。最终我要什么效果,要什么样的颗粒度,实际上我没想好,但起码离线的网页已经在手,就没什么好纠结了。

于是这也带出了我翻出那些Python跟Excel结合的书,找一下灵感。

2020-11
24

2020只剩下一个月了

By xrspook @ 9:35:11 归类于: 烂日记

昨天当我重新配置VSCode的时候,我发现python的东西我好像都已经忘干净了。之前几个月,我花了那么多时间去研究折腾,现在,除了最核心的东西,格式上的问题我好像全部都忘干净了,大概研究一下就可以重新上手,但现在如果叫我写脚本,我会彻底一片空白。同样一片空白的还有我的git的文件夹。换了个硬盘,要重新配对上显然不容易了。当时放到网络上的东西只是一部分,最根本的那些我还没往上面放。所以这就意味着其实我的电脑还是要装一个git的,然后把那些东西整理好以后往上放。什么时候才做呢?我自己也没想好。之所以没想好,大概是因为我还有一个羁绊。

今年我们已经写了两篇统计分析,但无论写多少,年底还是得有一篇对应2020整年的分析。那个东西该怎么写?如果按照从前的套路,直接在从前的数据上面更新数据,肯定没什么难度,但是我要做的显然不仅仅是那些,因为每一年的状况都会略有不同,最重要的我觉得是把握那些不同点,但我也明白不同点只是一部分而已,整体的思路还是得延续从前的风格,但从前的风格是不是一定就靠谱呢?具体的细节我还没想好要怎么整,整体的规划,暂时也没有一个很确切的想法。现在我我的状态是想做又不想做,摇摆中。情况就像我想逃避,但我又非常明白这根本逃避不了。还剩下一个月的时间。这个东西必须得整出来,我知道其实一个月的时间很充裕了。要解决一个细节上的问题,几天就足够。但毕竟这不是我一个人做的事,所以我不能把那算得那么死。应该用什么样的风格?应该用什么样的图表去表达呢?今年前两个分析,跟之前的风格不一样,因为都是专题类的,要凸显出某些东西,而这一次,全年的分析显然侧重点不在那里。这是我重新接手统计的第四年。印象之中,前几年我好像从来没有在这个问题上费过多少心。现在,数据的整理已经常规化,所以我会在细节问题上纠结。从前如果要做一个年底的分析,我大概是到年末的时候才开始整理数据,但现在每个月末我都会整理。所以总的来说,我的查询表相对而言已经比较固定完善,但这也说不准什么时候我又蹦出来有一些新想法,是之前的那些数据收集方式无法覆盖到的。在2020年里搞定这些事,接下来的那两个月不过是等过年而已,没有烦恼。秋普已经过去,剩下最后一个比较大型的就只有绩效考核。如果你问我,春秋普查慌一点还是绩效考核慌一点,其实我都无所谓。如果我说两个我都不慌的话不知道有没有人会相信,因为实际上,那些检查要求做的事,在日常工作中我已经都做了。

我的方糖12月28就可以完成最后一次的打卡,如果能坚持到那一天的话,方糖2就算是被我白嫖到了。理论上,在那一天之前,我就应该完成今年的统计分析的绝大部分,剩下的只有更新最后几天的数据而已。

纠结要做什么的时候是最浪费时间的。

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