结构化数据上的选出运算

1. 选出符合条件的成员【例 1】 分栏列出欧洲和非洲人口超 200 万的城市名称及人口(每栏按从多到少排序)。世界城市人口表部分数据如下:ContinentCountryCityPopulationAfricaEgyptCairo6789479AsiaChinaShanghai24240000EuropeBritainLondon7285000…………期望结果如下:Europe   CityPopulationAfrica   CityPopulationMoscow8389200Cairo6789479London7285000Kinshasa5064000St   Petersburg4694000Alexandria3328196…………【SPL 脚本】AB1=connect("db").query("select   * from World where Continent in('Europe','Africa') and Population >=   2000000")/连接数据库,取出欧洲和非洲超过 200 万人口的记录2=A1.select(Continent:"Europe")/使用 A.select() 函数取出欧洲数据3=A1.select(Continent:"Africa")/使用 A.select() 函数取出非洲数据4=create('Europe City',Population,'Africa   City', Population)/按目标结构创建一个空表5=A4.paste(A2.(City),A2.(Population),A3.(City),A3.(Population))/使用 A.paste() 函数将值粘贴到对应列A4的执行结果如下:Europe   CityPopulationAfrica   CityPopulationMoscow8389200Cairo6789479London7285000Kinshasa5064000St   Petersburg4694000Alexandria3328196…………【例 2】 查询纽约研发部门员工的全名和收入。部分数据如下:IDNAMESURNAMESTATEDEPTSALARY1RebeccaMooreCaliforniaR&D70002AshleyWilsonNew   YorkFinance110003RachelJohnsonNew   MexicoSales90004EmilySmithTexasHR70005AshleySmithTexasR&D16000………………【SPL 脚本】AB1=connect("db")/连接数据源2=A1.query("select * from   Employee")/导入员工表3=A2.select(STATE=="New York"&&DEPT=="R&D")/使用函数 A.select() 选出纽约研发部门员工的记录。需要同时满足所有条件时,可以使用符号 "&&"。4=A3.new(NAME+" "+SURNAME:FULLNAME, SALARY)/使用符号 + 连接字符串,组成全名A4的执行结果如下:FULLNAMESALARYMatthew   Johnson6000Lauren   Thomas12000Brooke   Williams12000【例 3】 查询各部门 30 岁以下和 50 岁以上的员工的人数。部分数据如下:IDNAMEBIRTHDAYSTATEDEPTSALARY1Rebecca1974/11/20CaliforniaR&D70002Ashley1980/07/19New   YorkFinance110003Rachel1970/12/17New   MexicoSales90004Emily1985/03/07TexasHR70005Ashley1975/05/13TexasR&D16000………………【SPL 脚本】AB1=connect("db")/连接数据源2=A1.query("select * from   Employee")/导入员工表3=A2.select((age=age(BIRTHDAY), age<30 ||   age>50))/使用函数 A.select() 选出年龄小于 30 或者年龄大于 50 的员工。需要满足多个条件中任意一个时,可以使用符号 "||"。4=A3.groups(DEPT; count(~):Count)/分组汇总各部门满足条件的人数A4的执行结果如下:DEPTCount49556376812. 查找最大值 / 最小值对应记录【例 4】 根据成绩表,求一班数学成绩最低的学生 ID。部分数据如下:CLASSSTUDENTIDSUBJECTSCOREClass   one1English84Class   one1Math77Class   one1PE69Class   one2English81Class   one2Math80…………【SPL 脚本】AB1=connect("db")/连接数据库2=A1.query("select * from Scores where   SUBJECT='Math'and CLASS='Class one'")/查询一班的数学成绩3=A2.minp(SCORE)/使用 A.minp() 函数选出最低分所在记录4=A3.STUDENTID/从记录中取学生 ID最小值所在记录不一定是唯一的,如果想返回所有记录,可以使用函数 A.minp() 的选项 @a :AB3=A2.minp@a(SCORE)/使用 A.minp() 函数的 @a 选项,选出所有最高分的记录4=A3.(STUDENTID)/从多条记录中取出学生 IDA3的执行结果如下:CLASSSTUDENTIDSUBJECTSCOREClass   one5Math60Class   one14Math60A4的执行结果如下:Member514【例 5】 根据奥运会奖牌榜统计表,求总成绩蝉联第一名届数最长的国家。部分数据如下:GameNationGoldSilverCopper30USA46292930China38272330UK29171930Russia24263230Korea1387……………【SPL 脚本】AB1=file("Olympic.csv").import@cqt()/导入奥运会历届排名2=A1.sort@z(?Game, 1000000*Gold+1000*Silver+Copper)/按第几届和总成绩降序排列3=A2.group@o1(?Game)/每届取一名,因为有序也就是第一名4=A3.group@o(Nation)/将国家按原序分组5=A4.maxp(~.len())/使用函数 A.maxp() 选出成员数量最多的一组,也就是蝉联次数最多的A5的执行结果如下:GameNationGoldSilverCopper10USA4132309USA2218168USA4527277USA4127283. 分区段查找数据有时候我们需要通过计算数值在区间中的序号,来获取在集合中的对应成员。比如根据考试成绩返回评价(优、良、中、差);根据家庭年收入返回家庭所处的资产等级(贫困、小康、中产、富裕等)。【例 6】 根据成绩表,统计英语科目优秀、及格和不及格的人数。部分数据如下:CLASSSTUDENTIDSUBJECTSCOREClass   one1English84Class   one1Math77Class one1PE69Class   one2English81Class   one2Math80…………【SPL 脚本】AB1=connect("db").query("select   * from Scores where SUBJECT='English'")/连接数据库,查询英语成绩2=create(Assessment,Score).record(["fail",0,"pass",60,"excellent",90])/创建分数与评价对照表3=A1.derive(A2.segp(Score,SCORE).Assessment:Assessment)/使用 A.segp() 函数根据分数在对照表中的区间序号,获取相应的评价。4=A3.groups(Assessment;count(1):Count)/按评价分组统计人数A4的执行结果如下:AssessmentCountexcellent6fail4pass184. 选出前 N 名 / 后 N 名【例 7】 根据成绩表,求各班各科前两名的学生 ID。部分数据如下:CLASSSTUDENTIDSUBJECTSCOREClass   one1English84Class   one1Math77Class   one1PE69Class   one2English81Class   one2Math80…………【SPL 脚本】AB1=connect("db")/连接数据库2=A1.query("select * from Scores")/查询学生成绩3=A2.group(CLASS,SUBJECT;~.top(-2;SCORE):TOP2)/使用 A.top() 函数获取每个班级各科目分数的前两名。其中 -2 表示从大到小取两名。4=A3.conj(TOP2)/将所有班级各科的前两名记录合并到一起A4的执行结果如下:CLASSSTUDENTIDSUBJECTSCOREClass   one4English96Class   one9English93Class   one13Math97Class   one10Math97…………5. 根据主键值查找对应记录根据主键值查找对应记录是很常见的操作,例如根据员工 ID 查找员工记录,根据订单 ID 查询订单详细信息等等。【例 8】 根据相互关联的课程表和选课表,列出所有学生所选课程信息表,每个科目作为一列。课程表部分数据如下:IDNAMETEACHERID1Environmental   protection and …52Mental   health of College Students13Computer   language Matlab8………选课表部分数据如下:IDSTUDENT_NAMECOURSE1Rebecca2,72Ashley1,83Rachel2,7,10………希望转换成如下表格:IDSTUDENT_NAMECOURSE1COURSE2COURSE3…1RebeccaMental   health of College StudentsInto   Shakespeare…2AshleyEnvironmental   protection and …Modern   economics…3RachelMental   health of College StudentsInto   ShakespeareMusic   appreciation…………………【SPL 脚本】AB1=connect("db")/连接数据库2=A1.query("select * from   Course").keys(ID)/读取课程表,并设置主键 ID3=A1.query("select * from   SelectCourse")/读取学生选课表4=A3.run(COURSE=COURSE.split@cp())/将选课表中的课程按逗号拆分后赋值给课程字段5=A4.max(COURSE.len())/找到选课最多的数量6=create(ID,STUDENT_NAME,   ${A5.("COURSE"+string(~)).concat@c()})/创建空表,课程列按照最多的数量创建7>A4.run(A6.record([ID,STUDENT_NAME]|COURSE.(A2.find(~).Name)))/循环选课表,将学生 ID、学生姓名以及使用 A.find() 函数查找出的课程名称合并追加到 A6 的表中。A6的执行结果如下:IDSTUDENT_NAMECOURSE1COURSE2COURSE31RebeccaMental   health of College StudentsInto   Shakespeare2AshleyEnvironmental   protection and …Modern   economics3RachelMental   health of College StudentsInto   ShakespeareMusic   appreciation……………《SPL CookBook》中还有更多相关计算示例。

(0)

相关推荐

  • 让你彻底明白sql注入攻击

    SQL注入攻击是黑客对数据库进行攻击常用的手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没 ...

  • PHP的SPL扩展库(四)函数

    PHP的SPL扩展库(四)函数 今天我们继续来学习 SPL 中的内容,这篇文章的内容是比较简单的关于 SPL 中所提供的一系列函数相关的内容.其实在之前的不少文章中我们都已经接触过一些 SPL 中提供 ...

  • flask的orm框架(SQLAlchemy)

    一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个 ...

  • 大文件上的结构化数据计算示例

    在数据分析过程中,经常会处理文本文件中的结构化数据(txt,csv等),有时这些文件还会很大,计算机内存不足以一次性读入.这时,只能将数据分批读入内存,对每批数据计算出临时中间结果,分批处理完以后,再 ...

  • Pandas 不擅长的结构化数据运算

    Pandas 是 python 的一个数据分析包,是基于 NumPy 的一种数据分析工具,其中纳入了大量库和一些标准的数据模型,提供了快速便捷地处理数据的函数和方法,是高效地操作结构化数据集所需的工具 ...

  • 中国非结构化数据中台实践白皮书(资料下载)

    资料下载方式: 3.到选型宝订阅号发送 截图 并回复文字 " 中台014 " 即可获得资料下载链接 资料下载方式:

  • extruct提取结构化数据

    extruct库 extruct库可以从HTML标记语言中抽取嵌入的metadata数据.目前支持的数据格式有: w3c的html microdata 嵌入在html中的JSON-LD数据 先看看Mi ...

  • 释放非结构化数据价值,助力数据驱动型组织 | 爱分析报告

    近日,在爱数 2021 SMART大会上,大数据基础设施提供商爱数联合爱分析发布了<非结构化数据中台实践白皮书V2>.白皮书首先从行业.政策层面深度剖析,数字化转型大趋势下正在催生越来越多 ...

  • 非结构化数据的高效处理:RPA识别自动化

    UB Store 日常办公中,我们会接触到大量的文档.报表.文本.票据等.本质上,这些文件材料都可称为"数据". 我们办公的内容则是围绕如何高效处理这些数据而展开.所以,一个人数据 ...

  • 独家 | 使用机器学习对非结构化数据加速查询-第2部分(具有统计保证的近似选择查询)

    作者:Daniel Kang, Edward Gan, Peter Bailis, Tatsunori Hashimoto, and Matei Zaharia 翻译:殷之涵 校对:方星轩 本文约28 ...

  • 【文本信息抽取与结构化】详聊文本的结构化【上】

    常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识图谱.信息抽取.文本摘要这些任务中格外明 ...

  • 结构化数据中的存在判断问题

    结构化数据中的存在判断问题