SQL 的后计算脚本( 二 )
具体 SQL 如下:
本文插图
这段 SQL 并不算很长 , 但嵌套了四层 , 所用技巧古怪难懂 , 一般人很难想出这样的代码 。
用 JAVA 实现时 , 就可以回归自然思路:
本文插图
后面那段代码就是前面讲述的思路 , 只要一层循环就可以完成了 。
然而 , 我们也发现 , Java 写出的这段代码 , 虽然思路简单 , 难度不大 , 但显然代码很冗长 。
这个问题的复杂度并不高 , 还没涉及到常见的分组、连接等结构化数据计算 , 否则代码量将更为惊人 , 限于篇幅 , 就不再用 JAVA 举例了 。
在多样性数据、优化性能、处理大数据等高级功能方面 , JAVA 的特点同样是“能实现 , 但太繁琐” , 这里也不再赘述 。
JAVA 是个优秀的企业级通用语言 , 但通用的另一层意思往往是不专业 , 换句话说 , JAVA 缺乏专业的结构化计算类库 , 代码冗长繁琐 , 算不上理想的 SQL 后计算脚本 。
Python pandas
Python 有简捷的语法 , 还拥有众多的第三方函数库 , 其中就有服务于结构化计算的 Pandas 。 也正因为如此 , Pandas 常被用作 SQL 的后计算脚本 。
作为结构化计算函数库 , Pandas 简化 SQL 复杂运算的能力要比 JAVA 强很多 。
比如 , 同样的有序运算 “求最长连续上涨天数” , Pandas 代码是这样的:
本文插图
上述代码中 , Pandas 提供了用于结构化计算的数据结构 dataFrame , 这种数据结构天然带序号 , 在有序运算中可以简化代码 , 比 JAVA 更容易进行跨行取数 。 此外 , Pandas 对 SQL 取数的封装也很紧凑 , 比 JAVA 代码更加简短 。
再比如集合计算例子:一行拆分为多行 。 库表 tb 有 2 个字段 , 其中 ANOMALIES 存储以空格为分隔符的字符串 , 需将 ANOMALIES 按空格拆分 , 使每个 ID 字段对应一个成员 。
处理前的数据
本文插图
处理后的数据:
本文插图
Pandas 核心代码如下(省略数据库输入输出 , 下同):
本文插图
上述代码中 , Pandas 用集合函数将字符串直接拆分为 dataFrame , 再用集合函数将多个 dataFrame 直接合并 , 代码非常简练 。 JAVA 虽然可以实现类似的功能 , 但都要手工实现 , 代码要繁琐得多 。
作为结构化计算函数库 , Pandas 代码的确比 JAVA 简练 , 但这仅限于复杂度有限的情况下 , 如果复杂度进一步提高 , Pandas 代码也会变得冗长难懂 。
比如这个涉及集合计算 + 有序计算的例子:连续值班情况 。 库表 duty 记录着每日值班情况 , 一个人通常会持续值班几个工作日 , 之后再换人 , 现在请根据 duty 依次计算出每个人连续的值班情况 。 数据结构示意如下:
处理前(duty)
本文插图
处理后
本文插图
核心的 pandas 代码如下:
- 计算机视觉工坊 汇总|基于激光雷达的3D目标检测开源项目&数据集
- 大数据&云计算降低程序开发门槛 用友推出低代码开发平台YonBuilder
- 计算机视觉工坊汇总|基于激光雷达的3D目标检测开源项目&数据集
- FreeBuf如何用Chimera进行PowerShell脚本混淆
- 书圈 可穿戴计算:无时无处不在、不可见的计算【好书连载第1期D4】
- “2020中国文化计算大会”举行 探讨科技与文化深度融合
- 个股|两市百元股达138只 医药生物、计算机、电子行业较集中
- 科技云报道:数字经济成果遍地开花的背后,有一个云计算“答案”
- 计算器|刚刚,最新LPR利率曝光!连续7个月按兵不动
- 中年用于实战的人类行为计算模型