随着互联网的快速发展,大数据时代的到来,数据资源的处理成了各行各业都面临的热点问题。除了通过特别专业、特别特别昂贵、特别特别特别复杂的分析平台来处理特别 x4 海量的数据外,我们还常常会遇到 Excel(xls,xlsx)文件这样手边能够即时获得的数据文件。使用 Excel 记录、处理和交换数据,是因为这个软件的简单方便,而如果又需要通过一堆外部调用来进行后续的分析处理,那就会显得十分笨拙。现在我们就来分享一下如果通过轻量级地使用集算器来分析处理 Excel 形式的数据来源。

最近,中美贸易战愈演愈烈,我们也来蹭一下热度,用一些公开获得的中美两国的经济指标做个简单对比,模拟一下实战的场景,找一下掌上观文,了如指掌,一切尽在掌握的感觉……

下面是我们用到的基础数据文件 Indicators.xlsx,其中,每个工作表是一个国家的各项指标:

接下来,我们打开集算器了,写下第一行脚本:

| =file(“Indicators.xlsx”) | =A1.xlsopen() |

然后我们把脚本文件保存到和 Indicators.xlsx 数据文件一个目录下,以方便引用相对路径,名称就叫 indicators.dfx。

说明一下,”=”开头的格子称为“计算格”,其中的表达式的计算结果会自动赋予单元格,后面的脚本中就可以用单元格名称(A1、C25 等等)来直接使用了。同时,这里用到了两个函数。第一个是 file()函数,返回一个文件对象。参数”Indicators.xlsx”是文件名,因为这里写的是相对路径,所以会在 indicators.dfx 文件的同级目录查找。第二个是 xlsopen() 函数,把文件对象 A1 当做一个 Excel 工作簿对象打开。

集算器的好处是可以随时进行测试,我们就来看一下现在的状态,点击“执行”图标后,结果如下:

在右侧面板,可以看到 Excel 文件被显示为一个表格,除去最左侧的序号列,第一列是工作表名称,第二列和第三列分别是工作表的行列数。这三个字段构成了一个数据结构。若干条具有这个数据结构的记录组成了一个有序的集合,我们称之为“序表”。如果有序集合中不是具有相同数据结构的记录,而只是一般的一些数据成员,那么我们就称之为“序列”,所以说,序表是一种特殊的序列。集算器对于序列和序表提供了大量的函数,能够支持各种复杂运算,因此,这两种数据对象在集算器中会经常遇到。

接下来,我们就要读取工作表的内容了,先看脚本:

| =B1.xlsimport@t() |

xlsimport() 函数是从工作簿对象 B1 中导入一个工作表。这里用到了 @t 选项,这个选项会把首行内容作为标题而不是数据(这是 Excel 表格常见的样子)。选项需要写在函数名后,以 @开头,多个选项只需要写一个 @,例如 @tx。这里我们没有使用参数,所以函数会默认导入第一个工作表的全部内容。再点下“执行”看看结果,如下:

可以看到第一个工作表的内容导入成了一个序表。不过这里我们会遇到第一个问题,每个经济指标 Indicator 包括两行,第二行是指标更新的时间,是我们不关心的内容。集算器的序表要解决这类问题非常简单,加一个选出函数就可以了:

| =B1.xlsimport@t().select(Indicator!=null) |

select() 是选出函数,参数 Indicator!=null 是选出条件,也就是根据 Indicator 列是不是空来决定是不是选择这一行内容,还是执行看下效果:

筛选无效(不感兴趣)数据的的问题已经解决,继续研究发现每个指标中的 Last 是我们需要关心的,因此我们希望只导入 Indicator 和 Last 字段。脚本调整如下:

| =B1.xlsimport@t(Indicator,Last).select(Indicator!=null) |

这里用到了 xlsimport() 函数的选出字段参数,”Indicator,Last”就是希望选出的字段名(逗号分隔)。接下来专门导入中国的数据:

| =B1.xlsimport@t(Indicator,Last;”China”).select(Indicator!=null) |

这里参数又增加了一个”China”,指定了要导入的工作表名称,与前面的字段参数用”;”隔开。(还可以指定导入的开始行和结束行,因为例子中没有用到就不介绍了,有兴趣的话可以参考教程文档试验一下。)执行后就可以看到中国的指标了:

现在开始进行简单的比较,把两个表根据 Indicator 连接起来:

| =A2.join(Indicator,B2:Indicator,Last:’China’) |

这里使用到了 join() 函数,用单元格 A2 的字段 Indicator 匹配单元格 B2 的键 Indicator,找到相应记录后拼上 B2 的 Last 字段,并使用字段名’China’拼到 A2 序表中,如下图:

然后把美国的 Last 更名为 US:

| =A2.join(Indicator,B2:Indicator,Last:’China’).rename(Last:’United States’) |

这里的 rename() 函数用来修改序表的字段名,每个字段修改用”:”映射,Last 是曾用名,’United States’为新字段名:

前面提到过,集算器对于序列和序表提供了很多函数进行计算,用起来十分方便。这里我们就利用 sort 函数,把中美指标按照差距大小进行排序:

| =A3.sort@z(abs(‘United States’-‘China’)) |

这里用到了 sort()函数进行排序,@z 选项用来使结果降序排列。参数是用做排序依据的表达式,这里用美中指标进行了简单的差值,然后用 abs() 函数计算绝对值。结果如下:

至此,需要的数据已经整理好了。为了以后可以重复使用,我们把这个比较结果添加到工作簿的一个新工作表’US vs China’中,并写回到源文件中:

| >B1.xlsexport@t(A4;”US vs China”) | >A1.xlswrite(B1) |

前面提到过“=”开头的是计算格,这里又遇到了一种”>”开头的格子,我们称之为“执行格“。执行格执行后不会自动为单元格赋值。

这里用到的 xlsexport()函数用来把序表 A4 写到工作簿对象 B1 中,”:”隔开的第二个参数是工作表名称。这里同样用到了选项,这里的 @t 表示需要导出标题行到工作表中。而 xlswrite() 函数则把工作簿对象 B1 写出到文件对象 A1。

最后,我们打开 excel 文件查看一下最终结果:

简单的几行脚本,Excel 文件多个工作表的导入、连接、排序、导出等功能就轻松实现了。这还只是揭开了集算器的一角,还有更多的功能等待着我们去探索和应用。

完整脚本参考如下:

A B
1 =file(“Indicators.xlsx”) =A1.xlsopen()
2 =B1.xlsimport@t(Indicator,Last).select(Indicator!=null) =B1.xlsimport@t(Indicator,Last;”China”).select(Indicator!=null)
3 =A2.join(Indicator,B2:Indicator,Last:’China’).rename(Last:’United States’)
4 =A3.sort@z(abs(‘United States’-‘China’))
5 >B1.xlsexport@t(A4;”US vs China”) >A1.xlswrite(B1)

简单几行程序轻松分析Excel相关推荐

  1. 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 通过vi程序进行编程: int g(int x) { return x + 3; } int f(int x) ...

  2. c理c利用计算机怎么弹,通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的...

    通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 计算机的工作方式: 现代计算机的基本体系结构都是采用冯诺依曼结构,冯诺依曼的设计思想最重要之处是"存储程序"的这个概念 ...

  3. api有哪些 javasocket_简单hello/hi程序、分析及Java Socket API与Linux Socket API对比

    1.Socket 定义 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应 ...

  4. linux c语言反汇编分析,通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作...

    刘子健原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000对一下代码进行反汇编分析:in ...

  5. oracle行列转换关联union的方式_几行代码轻松玩转 Excel 行列转换

    几行代码轻松玩转 Excel 行列转换 下面这种交叉式的 Excel 表是很常见的格式,用来填写和查看都比较方便: 但是,如果想做进一步的统计分析,这种格式就不方便了,需要行列转换,变成如下格式的明细 ...

  6. 【Windows 逆向】CheatEngine 工具 ( 汉化版 CE 工具推荐 | 编写简单 C++ 程序 | C++ 程序执行分析 | 使用 CE 修改上述 C++ 程序 )

    文章目录 一.汉化版 CE 工具推荐 二.编写简单 C++ 程序 三.C++ 程序执行分析 四.使用 CE 修改上述 C++ 程序 一.汉化版 CE 工具推荐 推荐一个汉化版的 CE 工具 : htt ...

  7. adsl拨号无公网地址如何用ddns_【好玩的网络-第5期】分享自编ddns程序,17行代码轻松实现免费ddns,服务器或nas玩家的福音...

    [好玩的网络]系列面向普通人的网络科普视频.我在我的哔哩哔哩账号(up主:旋律果子)更新[好玩的网络]视频版,在我的知乎(用户:曾彦)专栏更新[好玩的网络]文字版.最新消息以及预告在我的个人网站www ...

  8. 轻松使用计算机,职称计算机Excel辅导:简单四招让你使用Excel轻松提速

    1.闪电般地输入数据 当你可以使用填充柄一步就完成数据输入时,为什么还要浪费时间在Excel中输入一连串的数据呢?这个程序能够为你自动生成所有类型的数字和文本序列,它甚至还能够在你创建自定义序列的时候 ...

  9. python运行不了程序代码_Python源码分析2 - 一个简单的Python程序的执行

    本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构. 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum ...

最新文章

  1. docker 查看容器磁盘大小_软件安全 : Docker逃逸详解
  2. 与其倒推以前不如推到重建
  3. 编程中python怎么读-对Python新手编程过程中如何规避一些常见问题的建议
  4. [转]毕业五年决定你的命运-----值得所有不甘平庸的人看看
  5. 记录奥运-当今五大Java记录框架之间的竞赛
  6. python中的键不允许重复_为什么python允许您使用重复键创建字典
  7. win10 安装 mysql-8.0.12
  8. c语言666题目,c语言题目及答案
  9. PyQt5教程(七)——实现QQ登录界面(一、Qt Designer创建界面,Eric6创建项目)
  10. vscode自动补全c语言_vscode代码自动补全失效
  11. w10计算机恢复出厂设置,win10强制恢复出厂设置教程
  12. 福特汉姆大学计算机科学专业,福特汉姆大学计算机科学专业
  13. 在线配资平台哪家正规?排名在前的有哪些平台?
  14. HDCTF2023 Writeup
  15. 橙仕汽车荣膺中国商业联合会商贸物流与供应链分会“副会长单位”
  16. pdf怎么分割成多个文件?有两种方式
  17. kubernetes API 访问控制之:准入控制
  18. 数学类笔试题(四分位数、数据规约和协方差)
  19. 计算机财务管理技术pdf,计算机财务管理技术在财务管理方面的应用研究.pdf
  20. 样本册的制作思路设计

热门文章

  1. 从摩尔定律到人工智能,指数定律释放人类潜能
  2. 如此精心整理的深度学习资源只在这里,值得你拥有!(上篇)
  3. 两次杀人,自动驾驶技术之恶
  4. 谷歌无人车之父刚推出的“无人驾驶入门”课,到底能学到啥?
  5. 这款IDEA插件刷爆了朋友圈,网友:这用起来有点酸爽~
  6. Java jar 如何防止被反编译?代码写的太烂,害怕被人发现
  7. 面试热点Redis分布式锁,再细说一次
  8. 听说程序猿不会撩妹,我笑了
  9. 图像、视频生成大一统!MSRA+北大全华班「女娲」模型怒刷8项SOTA,完虐OpenAI DALL-E...
  10. 零样本风格迁移:多模态CLIP文本驱动图像生成