2023-09
8

不就是想找个价格

By xrspook @ 8:24:51 归类于: 烂日记

每次写统计分析肯定会让我想粮价这个事情。除此以外,我对这个东西一点都不关心,但每次要写的时候我都会很为这个发愁,应该去哪里找到这些粮价呢?这一次因为我玩得比较大,我需要的是2018年7月到2023年8月的粮价。横跨那么多年,想想都觉得应该很疯狂,真的要去找的时候感觉更疯狂。粮价这种事情以前我也有找过,每一次都是临急抱佛脚,但是抱完佛脚以后,我也是有坚持过一段时间持续去人肉爬虫,但是爬了一段时间以后没有继续下去。在我还可以人肉爬的时候,那些价格大概一周出一次。对我来说一周这个频率太长了,所以过上一段时间就会忘记,而且别人出价格的时间还不那么稳定,虽然说是一周一次,但是说不准就是哪一天,可能是周一可能是周三,也可能是后补回去。被这样拖来拖去,久而久之我也就不记得了。这一次因为要找的跨度很大,我要做图的话,就没有必要把数据找那么细,大概一个月一个价格就行了,至于如果一个月变动很大,那就人肉平均一下,毕竟5年的价格下来,即便以月为单位也是个不小的数目,我需要表达的是整体趋势。

如果粮价时间跨度不是很大,只需要一年或者半年的话,一个地方大概就能把东西找齐,但现在我发现在一个地方找,根本找不全,最根本的原因是有些之前我人爬价格的地方做到某一年就不再干下去了。有些有新价格,但是最早的那个是2022年。有些有2018年的价格,但是他们干到2021年就不干了。还有一些地方比较屌丝,在网页上他们要会员注册,然后给钱成为VIP,才能看到数据。在公众号上他们展示了一些试看文章。试看文章里有我需要的数据,但问题是那个是周报,这就意味着,如果我要拿到2018年的数据我起得起码得翻到2019年头,因为通常那个微信公众号的试看文章展示的图表是一年的玉米价格曲线。显然公众号就只是吊一下你的胃口,最终他们想做的是你去他们的PC版网站注册并交会员费,于是我也就只能用最常规的方式去刷取他们微信公众号上面的历史文章。历史文章这种东西理论上是无限的,但那是一个动态加载的过程。那个历史文章的页面比较屌丝,必须要在微信的浏览器上打开,一般的浏览器无法直接打开。这就意味着实际上在打开的过程中我个人的账号给绑定了,限制了我的刷新频率。在那个历史页面,你只要点击进去了,就会直接到达那个文章,当你返回的时候又回到了一开始的那个列表。我需要加载很久很久以前的历史文章,所以我就得不断滚动、不断加载。当我好不容易到点2020年初的文章的时候,一个不小心点错了,我应该在广东玉米,结果我却点了饲料的,文章打开了,但是却不是我想要的,再次进去重新刷鼠标,却发现无论如何都再也load不出我要的列表。不仅仅是电脑端无能,手机端也被限制了,所以估计可能好长一段时间我都不能再加载到这个公众号上面的历史文章列表。如果腾讯非常狠,可能这个公众号上的历史文章列表我永远都刷不开了。所以为什么会有这么屌丝的设定呢?明明文章是有的,但是你却看不到。我明明只想要以前的文章,但是你永远都是用倒序去排列,不允许我对时间进行任何筛选,这样的话你就强迫我不得不一次又一次动态加载你的列表,加载多了你又禁止我这个行为。如果你有记录过我这个加载的意图的话,就会发现我并不是要打开你们所有的文章。我也没有复制粘贴偷龙转凤之类。这样的防止爬虫方案直接把我这种本来用途很正路的用户给挡在门外。

数据库网站很多,各种类型都有,但是很多连试看的机会都没有,我怎么知道你们有的数据就是我想要的呢?现在的竞价交易在国家平台,所以国家肯定有所有竞价交易的数据。为什么国家就不能提供一个查询渠道让大众去了解行情呢?

每当遇到收费的数据库都会让我有很强的破解欲望,虽然我知道我根本做不到。

2023-08
26

一次一个小愿望

By xrspook @ 10:58:44 归类于: 烂日记

每次都定下一个小目标,然后去实现。结果发现一天多一点的时间居然就能搞定一个问题,这种进度有点出乎我意料,因为之前的那些问题让我挣扎了好长一段时间,起码有两三天,之所以后来进度加快了,大概是因为我明了了我要做什么,但是尽管是这样,还是会遇到很多奇奇怪怪的问题。

这周初我解决的是批量生成月度核对表。我把这个任务分成两个步骤,一个是查询到底要生成多少,接着就是把查询到的结果生成文件,但是那个结果跟文件又不一定是完全对应的,根据不同条件可能10条查询结果最终会生成9个表。因为实际上某些条件是需要合并才能得到我想要的文件。在怎么设定条件,如何进行循环方面,我纠结了好长时间,几乎可以这么说,上个周末我一直在做各种尝试,为的就是最终实现这个目标。

在完成了批量生成月报以后,接下来我要做的是生成某个仓的分仓台账。相对于之前的月度核对表,这个单仓台账相对而言条件是固定的,而且必定只生成一个文件。同样我首先做的也是做一个查询,查询一下这个仓到底有多少条记录是可以生成分仓台账的,我又要生成具体哪一条。有些是无法自动实现的,因为实际情况是某些仓某些筛选条件是不一样的,但实际上应该反映在同一个分仓台账里。这个时候就需要手动合并一下条件。这种例外的事件不确定会在什么时候发生,所以必须给手动留有余地。之所以分步骤,其实一个很重要的原因是其实有时并不是为了生成分仓台账,只是要查询一下这个仓的情况。批量生成月度核对表,我花了好几天的时间,但是生成分仓台账,我只花了一天不到。

接着,我研究的是库存查询。在不同的条件之下进行库存查询,最后的结果是以一个透视表的方式展现出来,根据不同的查询条件透视的项目不一样。虽然我想到透视的项目是不一样的,但实际上在我研究的过程中,我先在单一的条件上做尝试,当单一的条件生成的数据没有问题以后再把它扩充到动态条件。因为有了之前月度核对表的锻炼,所以动态条件该怎么做我是有点底的。

SQL最基本的查询语句基本上我已经比较熟悉,这一次库存查询最后一步需要做一个透视。透视这个东西是我之前没有尝试过的,虽然我是Excel数据透视表的超级粉丝,但是在SQL里面控制这个东西,我还是很不在行的。所以到底什么条件可以控制,可以控制到什么程度我是不知道的。教程通常都只是最简单的那些,用上面的数据你重复100遍都不会出什么幺蛾子,但是在实际情况下你会有更多需求。比如当我要控制被透视列的排序的时候发现好像在Excel的SQL里无法做到。即便我在透视之前那一步已经排好序了,但是透视的时候依然是我行我素。让我比较挣扎的是,在透视之前我已经通过分组合并计算出被透视的列的合计数了,但是透视之后合计混在了那一堆被透视的字段中间。最后我已经想到不计算合计,在SQL里面生成透视以后输出到数组,我在数组里面做合计。就在我几乎要放弃的时候,原来合计可以通过在透视的select里用一个聚合函数实现,这样的话透视之后的表格就是先是条件列,然后是合计,接着是那些被透视的列。虽然合计不是放在我想要的最后面,但起码放在了最前面。

库存查询研究过程中让我纠结的问题是什么,明天继续。

2023-07
27

PQ为什么不改进

By xrspook @ 8:26:19 归类于: 烂日记

上周开始我就在用Power Query跟Power Pivot做跨表的数据合并。与其说是数据合并,不如说是数据查询。一开始我用的是PQ,因为从感觉上来说好像 PQ做这个就够了,但当我把东西都做出来了以后发现PQ很多规则都非常奇怪。让我觉得要试一下PP到底怎么样。根本原因是明明数据量很少,但是PQ的运行效率却很低,而且运行效果很不稳定。从0-1生成PQ的过程比较挣扎,虽然整体的思路我都有,我知道我要有什么后效果。但是该如何实现还是花费了我不少时间,比如查询参数应该用什么格式的表格表达出来。一开始我把4个日期和3个文本以左右的方式表达。的确这样的取数没有什么问题。虽然实际上PQ是用列去进行各种魔法运算的,但要精确定位到某个单元格也就是某条记录一点问题都没有。后来当我要用PP,那个东西至今我不知道如何在某列混杂着各种内容的单元格里获取我需要的数据。要顺畅用起PP,我得把日期参数跟文本参数拆分为两个表格。文本参数我不是直接给PP用,而先给PQ,所以横的竖的都无所谓。日期参数是直接在PP里做限定,所以必须以PP的规格去设定表格的形式。这仅仅是参数的表达,是最简单的东西。如果以普通人的视角考虑,某一列数据日期和文本混搭一点问题都没有,但是从机器的角度考虑,从我使用的那两个软件的规范考虑,显然这样是不行的,又或者说不是不行,是你为什么非得以一种如此随意的方式去做这么简单的设定呢?混搭的方式,肯定也会得到你想要的结果,但是对软件新手来说,绕那么一大圈显然就比较费劲了。

用PQ和PP的方式做出来的两个查询都能实现我的目标。数据都是没有问题的,但是一个文件体积很大,一个查询时间很长,且查询效率忽高忽低不稳定。这两个都不是我想要的。我不过是想做一个查询而已,很简单的东西,实际上我就只需要一个结果。那个结果以我想要的方式输出,后续的格式化纯粹是让我自己觉得比较顺眼好看而已。但是这两个Microsoft 365内置的Power都不能达到我的预期目标。

在挣扎之前,我觉得应该用PQ实现目标,但实际上出来的效果跟我想象的相差挺远,最根本的原因是我实在不太理解PQ的数据处理。PQ是用来做数据清洗的,所以从某个大表里获取数据,然后进行各种筛选,接着以各种目标形式输出表格,理论上这是很简单的事情。这大表的查询几乎可以这么说,一定是引用外表,因为源数据已经很大,你不可能在上面直接运行,虽然其实一直以来我都是这么干的,但是那个时候我并没有进行跨表操作。从现在的运行效果看来,即便是同一个代表同一个源数据,最终需要以几种方式输出分组筛选后的结果,最终要生成多少个查询效果,我就得把那个源数据查询多少次。理论上怎么会干这么傻的事情呢?直接把大的源数据查询一次缓存起来,往后就不需要调用了。但问题是从我现在的观察看来。最终我要多少个查询结果,他们就同时开始查询多少遍,于是有些时候就会导致有些查询结果失败,你得刷新再来。原因是这个查询正在使用那个源数据,那个查询也在用那个源数据,为了抢那个源数据打架了,抢不赢那个就刷新失败。都是查询一个源数据,我考虑过既然无法避免它们一次又一次查询,那么我就把那几个查询按顺序来,完了一个再到下一个,但实际上这个也是无法控制的。都说VBA是单线程的,但是PQ是多线程的,单线程虽然慢,但是多线程这样打架,最终反而得不到我想要的效果。从理论上说,我把那个大表一开始就缓存起来,后面的都用内存缓存,这很正常啊。我设置查询的优先等级,先刷新一些,然后再刷新另外一些,这也很正常啊,为什么却没有一个很直接的实现方式呢?有些人想到要用VBA去控制PQ的刷新顺序,但是VBA却很难判定某个刷新是不是完毕了,VBA也很难做到这个刷新完毕了再开始下一个。

接下来我要试一下python方案,我的目标是查询时间小于10秒,生成的文件小于100K。

2023-07
21

外部数据查询

By xrspook @ 9:37:46 归类于: 烂日记

近几天都沉醉于做Excel的数据合并,实际上就只是两个表,一个是交易情况另外一个是出入库明细。出入库明细是一个大表,交易情况里面除了交易本身以外还有货款明细以及损溢明细,所以原始表格合计有4个。相对于我之前纠结过的那些东西来说,这几个表有一个数据是必定唯一的,也就是交易情况里面的合同号。损溢明细里一个合同号可能出现多次,货款明细里一个合同号可能会出现多次,出入库明细里一个合同号绝大多数情况会出现多次。所以这些表里,交易情况的合同号是1,其它是多。以前在Excel里面用Power Pivot建立表的关系的时候,我是直接把某一个列拉到另外一个表的列建立关联,但这一次我发现交易情况和损溢明细无论我怎么拉,PP都默认,一是损溢明细,多是交易情况。直到昨天我才知道原来建立表关系的时候是可以不用手拉的。理论上我已经把PP的界面看过一遍又一遍,不仅仅是软件本身,关于它的书我也看过一些,但是好像在昨天之前我就从来没有发现原来有那么个界面。1对多到底谁是一,最重要的一点是哪个表先选定,后选定的表在Excel的Power Pivot里默认是多,但如果二者关系不成立,会建立不了关系。我不知道Excel的PP为什么会这么设定,理论上应该还有1对1,多对多之类的关系,显然在Power BI里面就有,但Excel就是这么神经。用Excel PP默认给的那个1对多的关系,在用透视表的时候,无论如何都得不出我想要的结果,但实际上我想要的那个结果我想了半天也都是合理的。结果手动建立正确的1对多关系后,透视表的数据就正常了。之前,我在Excel的PP上耗了好长时间研究其它东西,之所以有些坎无论如何迈不过,无论如何觉得有毛病我猜是不是也跟这个1对多的关系自动默认给我生成错了。

在玩PP之前,其实我已经折腾了一天的Power Query,之所以从PQ转投PP,是因为我发现虽然我的原数据很简单。最大的那个表才几千行,载入以后进行初次筛选,剩下700多行,另外的那些表只有几行和几十行。但即便这样,它们关联了以后,做全体刷新的时候依然会出现卡顿,依然会偶尔告诉我数据不是我期待的那个格式,所以刷新失败,但实际上当我重新再去刷新失败的那个表,又会成功。在不修改参数的情况下刷新同一个查询,有时都能刷出来,有时一些刷不出来,有时刷的时间要长一点,有时刷的时间挺短,到底这是为什么?各种缓存的参数我都试过了,各种PQ本身设置相关的参数我也试过了,但是PQ自己就是这么不稳定。快的时候可能5秒就出来了,但是慢的时候可能30秒都出不来。折腾了我一天后,当我用PP做出跟PQ完全一样的功能的时候,发现PP的稳定性好很多,几乎不会出现数据刷新失败,大多数情况下,PP刷新需要10秒钟,但是它俩最大的区别在于PQ这个查询文件只有50KB,但是PP的查询文件是800KB,之所以这样,是因为实际上PP把整个原数据都抓过来了。考虑到这些查询文件我肯定会在不同的机器上运行,所以虽然PP可以直接连接某个外部源文件,但我还是选择先在PQ里做一个动态接口,然后再转到PP的模型上,同时在一开始的时候让PQ把3000多条数据出筛成700多条。

10秒钟和不知道到底要多少时间,以及50KB和800KB这两个答案我都不太满意。所以接下来估计我会尝试一下python方案。

2021-04
26

16个仓

By xrspook @ 8:40:39 归类于: 烂日记

昨天破了个记录,单位一共有16个仓发生作业,之前的记录是14个仓。一下子就把这个极限提升了两个仓,有点牛逼。对某些单位来说,他们甚至没有16个仓这么多,而我们一天就要搞16个仓,虽然有些仓可能量不大,只有一两台车。车船作业全部都在加起来才138。之所以所以有这么多,其中很大一部分都是集装箱卸货。如果我们做的不是集装箱卸货,而是集装箱装货的话,估计作业的量会少很多,但是作业的时间会更长。

现在我不奢望晚上11点前能做到全部都结束,我只希望在我需要查看系统数据的时候,我不需要翻四五个表才能找全我要的东西,因为我要把握的是现在正在作业的量以及即将作业的量,那些全部都是变动的数据,当我查完四五个表,数据肯定已经不再一样了,当我查到最后一个表的时候,第一个表的数据已经发生变化。于是当我急着要知道结果的时候,实际上我根本无法知道结果。

我一直都觉得浪潮做出来的系统很垃圾,但一定程度上为什么会这么垃圾呢?为什么他们给我们这个方案我们就要接受呢,理论上是有一个界面可以反映东西,但是那个界面居然把所有数据都汇总在一起,而且是以图标的方式显示,这到底是给谁看的呢?纯粹给领导看的吗?反正不是给我看,因为某些细节、我想要的东西根本看不出来。大概领导不会看那个界面,谁会看那个界面呢?大概只有那些完全不懂行的客人。我只想知道那个流程是什么,但是看到那个图标,我还得进行联想,然后才能得出那是一个什么流程,这是在给小学生猜谜语吗?我不知道这种思路是我们提出的,还是浪潮的人蹦出来的想法,反正我觉得非常反人类。昨天我就给我们这里的程序员下了个定制查询的需求,有了那些数据,我就可以通过一个表得出我想要的所有,不仅仅是我想要的,任何人想要、多大的颗粒度,都可以做到。还记得大概一两年前他们找我写数据中心的技术需求,基本上我是用数据透视表的思维去想象的,但跟现在比起来,那时我的透视表示为或许还差那么一点点。我非常肯定的是,那时候那帮人根本不知道我在说什么。数据透视表是什么呢?我给你所有要素,你可以根据你的需要的维度得到不同的结果,但是浪潮那帮人只会在一个大屏里面做既定的模式。一个是活动的,一个是写死的,这是根本的区别,还有一个是写死的东西没有任何颗粒度可言,颗粒度完全被固定下来,我怎么可能挖掘得到我想要的东西呢?又或者他们觉得如果我想在数据里找出某些东西,我就不应该是在那个板面里找,而是应该通过其他途径,但数据无法导出,我可以用什么途径去找我想要的东西呢?图形表达出来的东西不是我想要的,我想要的数据没办法查询得到,这样的系统还要来干嘛?

每次当我不得不在好几个表里面兜兜转转查询的时候我都会无数次诅咒浪潮。

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