SQL 的后计算脚本( 三 )
本文插图
上面已经省略了数据库输出输出的过程 , 可以看到代码还是有点繁琐 。
再比如集合计算 + 多步骤运算的例子:计算分期贷款明细 。 库表 loan 记录着贷款信息 , 包括贷款 ID , 贷款总额、期数、年利率 , 示意如下:
本文插图
需要计算出各期明细 , 包括:当期还款额、当期利息、当期本金、剩余本金 。 计算结果如下:
本文插图
实现上述运算的 Pandas 核心代码如下:
本文插图
可以看到 , 在简化 SQL 复杂运算方面 Python 虽然比 JAVA 强很多 , 但只限于简单情况 , 如果需求再复杂些 , 代码也会变得冗长难懂 。 之所以出现这种现象 , 可能因为 Pandas 只是第三方函数库 , 不能得到 Python 从语法层面的底层支撑 , 设计的专业性也不足 。
Pandas 的专业性不足 , 还体现在多样性数据上 。 Pandas 没有为各类数据源开发统一接口 , 只支持常见的本地文件 , 但不支持复杂的数据源 , 比如 Hadoop、MongoDB , 用户还要自己寻找第三方(实际是第四方)函数库 , 并编写复杂的访问代码 。 Pandas 甚至没有统一数据库接口 , 比如 MySQL 就有好几种第三方函数库 , 常见的有 PyMySQL、sqlalchemy、MySQLdb 。 不过 , 这个问题对于大多数桌面应用场景还不严重 , 常见的数据库 Python 基本上都能简单地支持 。
对于多源混合关联问题 , 只要能读出各种数据源的数据 , 基本上也就能实现了 , Pandas 在这方面的表现基本令人满意 。 不过 , 还是上面的说法 , 对于简单的混合关联关系 , Pandas 都容易实现 , 而一旦出现较复杂的关联运算 , 实现过程就会变得困难起来 。
在大数据量方面 , Pandas 的表现就不尽如人意了 。 Pandas 没有游标数据类型 , 这导致解决较大数据量的计算时 , 必须硬编码实现循环取数 , 而不能自动进行内外存交换 , 代码因此异常繁琐 。 详情可参考《How Python Handles Big Files》
Pandas 的运算性能也一般 , 但基本够用 。 令人经常诟病的主要是多线程并行 , Python 下很难实现此类运算 。 比如数据库 IO 一般都较慢 , 但可以在数据库不忙时使用并行取数的办法来提高取数性能 。 而 Python 要借助其他第三方函数库才能实现并行 , 代码异常繁琐 , 且在表达效率、执行效率、稳定性等方便均缺乏保障 。
Pandas 虽然是结构化计算函数库 , 但仍不够好用 。
esProc
与 Pandas 类似 , esProc 也具有丰富的结构化计算函数 , 与 Pandas 不同的是 ,esProc 是由商业公司支持的产品 , 是专业的结构化计算语言 , 而不是开源社区的第三方库函数 , 也不存在一个松散的上级组织 。 esProc 可以从全局角度设计一致的结构化计算语法 , 可以自底向上设计统一的结构化数据类型 , 使函数之间以最大的灵活度搭配组合 , 从而快捷方便地解决 SQL 后计算中遇到的问题 。
作为专业的结构化计算语言 , esProc 擅长简化 SQL 复杂运算 , 比如 , 求最长连续上涨天数 , 实现前面说过的自然思路 , esProc 只需短短 2 行:
本文插图
上述代码使用了序表和循环函数 , 序表是专用于结构化计算的数据结构 , 可以比 Pandas 更容易进行跨行取数 , 可以更方便地实现有序计算 , 循环函数可以避免大部分的 for 语句(复杂情况下还是应该用 for) , 可以大幅简化代码 。 此外 , esProc 对 SQL 取数的封装更紧凑 , 比 Pandas 代码更加简短 。
- 计算机视觉工坊 汇总|基于激光雷达的3D目标检测开源项目&数据集
- 大数据&云计算降低程序开发门槛 用友推出低代码开发平台YonBuilder
- 计算机视觉工坊汇总|基于激光雷达的3D目标检测开源项目&数据集
- FreeBuf如何用Chimera进行PowerShell脚本混淆
- 书圈 可穿戴计算:无时无处不在、不可见的计算【好书连载第1期D4】
- “2020中国文化计算大会”举行 探讨科技与文化深度融合
- 个股|两市百元股达138只 医药生物、计算机、电子行业较集中
- 科技云报道:数字经济成果遍地开花的背后,有一个云计算“答案”
- 计算器|刚刚,最新LPR利率曝光!连续7个月按兵不动
- 中年用于实战的人类行为计算模型