`
datamachine
  • 浏览: 163513 次
社区版块
存档分类
最新评论

在外存中实现分组的代码示例

阅读更多

   在数据分析中,我们经常需要将数据分组,然后计算出各组的汇总值,或者在各组中分别计算。集算器中,可以用groups函数计算数据的分组汇总结果,更可以用group函数将表中记录分成多组,以便后续计算。但是,如果需要排序的数据量巨大,情况就不同了,这时是不能一次将它们读入内存的,这样普通的分组汇总,或者分组的方法就无法执行了,此时就可能需要使用外存分组。

  下面,先来准备一个大数据表,简单模拟1,000,000条手机用户的通话时长记录,存储在二进制文件PhoneBill中:



 

   其中,电话号码使用8位整数,前4位固定为1234,后4位随机生成。通话开始时间在2014年8月中随机产生。通话时长为整数,也随机生成,产生时使通话时长有90%的可能性为1分钟,最长20分钟。数据文件完成后,在B11中读出前1000条如下:



 

  现在,需要根据PhoneBill中的数据计算:

  ① 8月中每天所有用户的总通话时长以及每次通话的平均时长。

  ② 每位用户在8月的通话时长。

  ③ 分别将每天的通话记录存储到文件中。

  ④ 8月的每一天中,通话总时长最多的5位用户号码。

  先来看问题①,这首先需要将所有的订单数据按日期来分组汇总。因为8月一共只有31天,所以结果集并不是大数据,可以直接在内存中汇总计算:



 

   A2用A1中的二进制文本数据生成游标。A3计算游标中数据的分组汇总结果如下:



 

   因为结果本身的数据量并不大,计算分组汇总时,其实只需要将游标中的数据遍历一次,并不需要外存分组,直接用groups函数就能计算。这里的结果集并不庞大,可以直接获得结果,并不需要使用游标。计算每天中,每次通话的平均时间,需要先统计出每天的通话总时间及总次数,再进一步计算出平均通话时间,A4中获得的结果如下:



 

   问题②中的情况就不同了,由于用户量要比8月的天数多得多,这时就需要考虑分组汇总的结果是不是能一次返回到内存中。在这里,最多只有10,000个用户,并不算太多,只是以此来说明大数据结果集的计算情况。计算时,假设内存中只能容纳1000条记录:



 

   在计算大数据分组汇总结果时,需要用groupx函数,利用外存,根据设定的缓冲区行数来将游标内的数据逐步读出分组。A3中,计算游标中数据,按Phone分组;汇总计算总通话时长的结果,同时设定缓冲区行数为1000。大数据分组汇总的结果是游标,读取数据的方法和普通的游标完全相同。A3中的结果如下:



 

   在A4中读出了前1000名用户的总通话时长结果:



 

   另外,游标中的数据如果没有全部读完,需要调用cs.close()函数,以及时清理外存临时文件。

   问题③需要先将数据按照日期分组,再将每天的数据存储到文件中:



 

   使用groupn函数的大数据分组和普通的分组不同,需要在分组表达式中直接指定组号,在A3中,用订单日期的“日”作为组号。A3的函数中计算的结果与前面的分组汇总不同,返回的是游标序列,每个分组对应1个游标:



 

   在第4、5行的代码中,将每天的游标数据分别存到文件中。在A6中,选择了其中4日的数据,在A7中读出了前1000条记录如下:



 

   问题④仍然将数据按照日期分组,再在每个分组中执行分组汇总,最后根据汇总结果选出所需的用户号码:



 

   A3中,仍然在分组表达式中直接指定“日”作为组号,分组时返回的仍然是游标的序列:



 

   第4行到第6行的代码循环每个分组的游标数据,分别汇总每个用户每天的总通话时间,并根据汇总结果再次汇总出通话时间排在前5名的用户信息。需要注意的是,用汇总函数topx计算降序排序时,在排序表达式前加负号即可,如B5中的-TotalDuration。在结果中,选出通话时间最长的5个号码数据,并存入B3的序表中。循环完毕后,可以从B3中读出最终的结果如下:



 

   除了将总的话费数据分组,也可以继续使用问题③中生成的文件数据来处理这个问题。

  • 大小: 54.2 KB
  • 大小: 36.9 KB
  • 大小: 23 KB
  • 大小: 31 KB
  • 大小: 41.6 KB
  • 大小: 18.9 KB
  • 大小: 7.2 KB
  • 大小: 22.9 KB
  • 大小: 31.6 KB
  • 大小: 38.3 KB
  • 大小: 32.5 KB
  • 大小: 32.6 KB
  • 大小: 34.7 KB
  • 大小: 49.8 KB
0
1
分享到:
评论

相关推荐

    JavaServlet示例代码

    在这个"JavaServlet示例代码"中,我们可能会看到以下关键点: 1. **注册功能**: - 用户信息可能被存储在一个数据库中,因此需要与数据库的交互。这通常通过JDBC(Java Database Connectivity)实现,包括加载...

    MATLAB实现单摆在外力矩作用下的动画 源程序代码.7z

    标题中的“MATLAB实现单摆在外力矩作用下的动画 源程序代码”是指使用MATLAB编程语言,通过模拟计算和可视化技术,展示了一个在外界力矩作用下的单摆运动的动态过程。这个项目可能包括了对物理模型的数学建模、数值...

    MATLAB实现单摆在外力矩作用下的动画 源程序代码.zip

    在本资源中,我们关注的是MATLAB环境下模拟...总之,"MATLAB实现单摆在外力矩作用下的动画 源程序代码.zip"提供了学习和研究单摆动力学的一个实用工具,不仅可以提升编程技能,还能增强对物理学中动态系统理解的能力。

    MATLAB源程序代码MATLAB图像处理信号处理设计源码52个合集.zip

    MATLAB中的基本语法和语句示例代码.rar MATLAB使用欧拉Euler法求解微分方程组 源程序代码.rar MATLAB信号处理 频谱分析加汉宁窗函数 源代码.rar MATLAB光通过三稜镜色散动画.rar MATLAB动画 龟兔赛跑 源程序代码.rar...

    进销存软件源代码vb.net语言开发

    进销存软件是企业管理中不可或缺的一部分,主要用于跟踪和管理商品的进货、销售和库存情况。在VB.NET语言环境下开发的进销存软件源代码,为开发者提供了一个强大的平台,可以自定义功能,满足特定业务需求。下面将...

    实例MATLAB实现单摆在外力矩作用下的动画源程序代码

    通过以上步骤,可以在MATLAB中实现对单摆在外力矩作用下动态模拟的可视化。这种模拟不仅有助于物理教学和理解复杂的动力学行为,还可以在工程上进行系统设计和测试的初步验证。在学习和应用的过程中,读者应当重点...

    MATLAB实现单摆在外力矩作用下的动画 源程序代码_matlab

    资源名:MATLAB实现单摆在外力矩作用下的动画 源程序代码_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合...

    GMDH算法实现代码

    在给定的代码中,我们看到作者使用MATLAB语言来实现GMDH算法。下面是代码中涉及的关键步骤和知识点: 1. **数据预处理**:首先,通过`xlsread`函数读取原始数据,这里有两个数据集——`ysj.xls`和`mohuhua.xls`。...

    句柄操作之(1)事件在外、代码在家.rar

    "句柄操作之(1)事件在外、代码在家.rar"这个压缩包文件可能包含了一个示例项目,演示了如何将控件从一个窗体移动到另一个窗体,同时保持事件处理代码在原始主窗体中执行。 首先,我们来看`SetParent` API函数,这...

    操作系统课设-文件管理系统

    一个操作系统文件管理的小课设,采用javafx做...文件管理,由于系统的内存有限并且不能长期保存,故平时总是把它们以文件的形式存放在外存中,需要时再将它们调入内存。如何高效的对文件进行管理是操作系统实现的目标。

    实验5 简单文件系统的实现

    【实验5 简单文件系统的实现】是一个操作系统课程中的实践项目,旨在让学生理解并实现一个基本的文件系统。这个文件系统是在内存中模拟的虚拟磁盘空间上构建的,支持多级目录结构,适用于单用户单任务环境。在实验...

    MATLAB实现单摆在外力矩作用下的动画 源程序代码.rar

    资源名:MATLAB实现单摆在外力矩作用下的动画 源程序代码.rar 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合...

    跨境电商“进销存”系统之“存” .doc

    在跨境电商运营中,“进销存”系统是企业管理核心之一,其中的“存”主要指的是库存管理,包括了库存的记录、跟踪和控制。库存管理对于企业的运营至关重要,因为它直接影响到销售效率、成本控制以及客户满意度。 1....

    最小二乘及其改进算法在外测数据处理中的应用.pdf

    在外测数据处理领域,最小二乘法作为一种经典的数学方法,广泛应用于从带有误差的观测数据中推断出最可能的参数值。它的基础思想是寻找参数值,使得观测值与由模型预测值之间的残差平方和最小化,这样可以减少误差对...

    基于MATLAB实现单摆在外力矩作用下的动画 源程序代码+使用说明文档.rar

    基于MATLAB实现单摆在外力矩作用下的动画 源程序代码+使用说明文档.rar 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示...

    100.MATLAB编程 实现单摆在外力矩作用下的动画 源程序代码.rar

    在MATLAB编程环境中,实现单摆在外力矩作用下的动画是一项具有挑战性的任务,它涉及到物理学、数值计算以及图形可视化等多个领域。这个压缩包提供的源程序代码,旨在帮助用户理解和模拟这种复杂的动态系统。 首先,...

Global site tag (gtag.js) - Google Analytics