数据处理与代数

本文是我在清华大数据产业联合会上的讲座内容,整理成文字,跟大家交流。

整个内容分五个部分:(1)数据处理与代数;(2)关联运算及描述;(3)序运算与离散化;(4)层次数据与交互;(5)云数据组织

本文介绍基本概念和背景;中间三部分都是数据分析的内容,是重点;最后一块研究得还不够深,但也涉及到关系代数,就放进来一起谈谈。

先从编程序谈起。

编程到现在仍然不是一件轻松的活。这里我们不去谈那些由于需求不清或变动而导致的困难,那是软件工程的目标。有一些问题,完全没有歧义,你明确知道解法,使用你最熟悉的程序设计语言,但这个程序仍然不好写。

比如计算一支股票连续上涨了多少天,计算利率变动时房贷还剩余多少本金。想完成这样的运算,都还是要写很多代码才可以。

最近股市不错,今天有不少例子是和股票相关的。

本质上讲,编写程序的过程就是把解决问题的思路翻译成计算机可识别的精确的形式语言的过程。举例来说,就象小学生解应用题,想清楚每分钟进水多少出水多少,鸡多少兔多少等,最后列出四则运算的表达式,也就是精确的形式语言,就可以解决问题。用计算机解决问题的过程是类似的,拿到一个问题,想出解法,然后还要把解法翻译成计算机能理解能执行的动作才能完成。

那么代码为什么难写呢?

其中很大一部分原因是用来记录解法的形式语言和人的自然思维相差很远,它不能直接描述我们的思路。你必须按形式语言规定的思路来完成,这样经常会导致你告诉计算机该怎么做比做本身还要难。也就是说,翻译问题解法到形式语言的过程,这个难度经常远远超过解决问题本身。经常需要受过专业训练的人员,也就是程序员才会做,而我们的精力应当更多地放在解决问题而不是翻译解法上。

进一步,这里面主要的原因,我认为是形式语言采用的代数体系不好。

什么是代数体系呢,通俗一点说,就是定义了一些数据类型,并在这些数据类型上规定一些运算,并且保证这个运算是封闭的,也就是不能算出新类型的数据,逻辑要自洽,也就是不能算出矛盾来。

这里的数据类型有些象面向对象的类,但又不同。面向对象更强调的是类的继承和重载能力,而这里更强调的是运算。

广义地说,我们做数据处理都是在相应的代数体系下做运算。就像我们平时基于数做四则运算。如果我们在这些数上定义的运算不方便,就会造成很多麻烦,比如,如果只有加减法,没有乘法,人们上街买菜都会成问题了。

形式语言中采用的代数体系将非常严重地影响数据处理的效率和能力。我们举两例不够好的代数:罗马数字和汇编语言。用罗马数字做通用的加减法都很困难,只适合做加1减1这类过于简单的运算。

mov ax,3

mov bx,5

mul bx,7

add ax,bx

这是用汇编语言写出来3+5*7这样的运算,你必须把这样一个算式翻译成寄存器的运算,因为汇编语言只有类似字节这样的数据类型及运算。这显然非常麻烦,如果是浮点数运算则完全不知道该怎么办了。而使用高级语言就方便得多,因为高级语言中直接有了整数、实数这些数据类型及四则运算。从这个意义上讲,FORTRAN是个伟大的发明。

我们用计算机分析数据的目的是找出事物之间的关联,而事物是由其属性决定的,这在技术上表现为结构化数据。数据分析处理的需求绝大多数都是已经或即将被结构化的数据。

非结构化的数据,在存储上可能是大头,但关联运算并不是很多。有一些很专业算法,比如说图象识别,很难把它归到数据分析的类别中。其他日志、地理信息等的分析都是要做结构化之后才能做。

大数据来了,很多人都说结构化数据的时代已经过去了,我不这么认为,结构化数据仍然是数据分析处理的重点。

提到结构化的数据就要说关系代数了,关系代数是专门为结构化数据发明的一种代数体系,是现代关系数据库的理论基础。关系数据库是应用最广的一种数据库。虽然近年来,尤其大数据概念出来后,关系数据库有各种各样的问题,但仍然很强势。

结构化数据是计算机广泛应用之后才大量出现的数据类型,传统数学中很少涉及这种数据类型,关系代数是少有的几项专门为计算机科学发明的数学。计算机应用中有大量的数学,但大多数都是几十年甚至几百年前被数学家发明的。现在热门的数据挖掘,用到的概率论、图论、线性代数基本上都是这种,没有计算机学术界什么事。

关系代数是在结构化数据的集合上定义的一些运算,集合交并差,以及过滤、分组、连接等运算。关系代数中对关系的定义比较抽象,属性构成的集合称为关系,然后再研究关系的集合上的运算,这个不好懂。我们这里就用通俗地说法,简单地理解成有属性的对象集合,或者用程序员常说的术语,有字段的记录集合。

提到关系代数就要说SQL,SQL是关系代数的形式语言。我们说,这个形式语言没有达到它的设计初衷。

SQL的设计初衷是什么呢?它希望让普通的业务人员、不需要太懂技术的人员也能用起来。为什么这么说,因为它长得像英语,在它之前的程序设计语言都是形式化较强的,其中的单词只是符号。而SQL很象英语,甚至有些句子可以作为英语来读,希望懂英语的人就可以使用。但是,这个目的没有达到,稍微复杂一点的查询用SQL都很难写,需要很专业的人才能做出来的。数据库中大量存在着并非由于性能因素导致的难以计算出来的信息。

稍扯远一点,许多SQL教科书都会声称,用SQL写代码,你只要说明要做什么,而不用关心怎么做,说的很高大上,但其实都是胡扯。前两天我看SAS的书也这么说,不过这些胡扯倒不影响这些产品的伟大性。

事实上,任何一种程序设计语言都在某个层面满足这个说法,用汇编语言你也不用关心电子流是怎么流转的,而用SQL你仍然要关心表中的数据是如何组织的。

SQL的不足,我总结是这样几条:

分步这个比较容易理解,一个问题一步做出来总比分几步做出来要难,SQL不是不支持分步,是不提倡。

其它问题会在下面的讨论中涉及。

从这个意义上讲,关系代数还有很大的发展空间。它到现在也就四十年时间,与传统数学领域相比还很年轻,远远不像业界所说的那样,已经把结构化数据搞完了,其实差得很远。一个类比,现在的关系代数有点像三百年前搞微积分一样,可以搞的东西很多,门槛也不高。三百年前的微积分,现在大学低年级的学生都能够理解,而当前数学前沿的东西,你不读二十年书,根本就没有办法和人对话。计算机科学理论还处于可以有很多事可做的阶段。

时间: 2024-10-06 01:15:44

数据处理与代数的相关文章

MySQL数据处理函数

数据处理函数 有时从数据库表中获取到的数据需要进行一些处理.如将小写字母替换为相应的大写字母.这个处理过程可以在客户机上进行,也可以在数据库上进行.数据库上进行会更高效.数据库中有相应的数据处理函数来处理这些数据,但是在SQL中使用特殊的数据处理函数会降低其可移植性.不同的DBMS系统,其数据处理函数不同. 大多数的SQL支持以下类型的函数 用于处理文本串的函数,如删除.填充值.转换大小写: 用于在数值数据上进行算术操作的函数: 用于处理日期和时间值并从这些值中提取特殊成分,如两个日期只差的函数

mysql之数据处理函数与数据汇总函数

一.数据处理函数   1.函数 与其他大多数计算机语言一样, SQL支持利用函数来处理数据.函数一般是在数据上执行的,它给数据的转换和处理提供了方便. 注意:函数没有 SQL的可移植性强.能运行在多个系统上的代码称为可移植的( portable).相对来说,多数SQL语句是可移植的,在SQL实现之间有差异时,这些差异通常不那么难处理.而函数的可移植性却不强.几乎每种主要的 DBMS的实现都支持其他实现不支持的函数,而且有时差异还很大.为了代码的可移植,许多 SQL程序员不赞成使用特殊实现的功能.

mysql必知必会--使用数据处理函数

函数 与其他大多数计算机语言一样,SQL支持利用函数来处理数据.函数 一般是在数据上执行的,它给数据的转换和处理提供了方便. 在前一章中用来去掉串尾空格的 RTrim() 就是一个函数的例子 函数没有SQL的可移植性强 能运行在多个系统上的代码称 为可移植的(portable).相对来说,多数SQL语句是可移植的, 在SQL实现之间有差异时,这些差异通常不那么难处理.而函 数的可移植性却不强.几乎每种主要的DBMS的实现都支持其 他实现不支持的函数,而且有时差异还很大. 为了代码的可移植,许多S

海量数据处理技术学习

海量数据处理的常用技术可分为: 外排序:因为海量数据无法全部装入内存,所以数据的大部分存入磁盘中,小部分在排序需要时存入内存. MapReduce:分布式处理技术 hash技术:以Bloom filter技术为代表 外排序:主要适用于大数据的排序.去重. 分布式处理技术:MapReduce 技术思想是将数据交给不同的机器去处理,将数据切分,之后结果归约. 举例,统计出一批数据的TOP N 首先可以根据数据值或者数据HASH(MD5)后的值将数据按照范围划分,不同的服务器负责处理各种的数值范围,实

Jquery调用从ashx文件返回的jsonp格式的数据处理实例

开发环境:vs2010+jquery-1.4.min.js 解决问题:网上代码比较少,好多调试不通,返回数据不用json而用jsonp主要考虑解决跨域问题 开发步骤:打开VS2010,新建一web站点,保存位置选择D:\Website1;添加新项,选择一般处理程序,命名cmdHandler.ashx;添加新项,选择HTML页,命名为testAshx.htm;网上下载jquery-1.4.min.js拷贝到web站点中 项目相关网站源码和运行截图如下: 1.testAshx.htm代码如下: <!

Pandas日期数据处理:如何按日期筛选、显示及统计数据

前言 pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows系统,64位,python3.5. 1 读取并整理数据 首先引入pandas库 import pandas as pd 从csv文件中读取数据 df = pd.read_csv('date.csv', header=None) print(df.head(2)) 0 1 0 2013-10-24 3

实时计算,流数据处理系统简介与简单分析

转自:http://www.csdn.net/article/2014-06-12/2820196-Storm 摘要:实时计算一般都是针对海量数据进行的,一般要求为秒级.实时计算主要分为两块:数据的实时入库.数据的实时计算.今天这篇文章详细介绍了实时计算,流数据处理系统简介与简单分析. 编者按:互联网领域的实时计算一般都是针对海量数据进行的,除了像非实时计算的需求(如计算结果准确)以外,实时计算最重要的一个需求是能够实时响应计算结果,一般要求为秒级.实时计算的今天,业界都没有一个准确的定义,什么

开源大数据处理系统/工具大全

本文一共分为上下两部分.我们将针对大数据开源工具不同的用处来进行分类,并且附上了官网和部分下载链接,希望能给做大数据的朋友做个参考.下面是第一部分. 查询引擎 一.Phoenix 贡献者::Salesforce 简介:这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询.Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动. Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的J

数据分析师之Excel数据处理与分析实战

Excel数据处理与分析实战 课程学习地址:http://www.xuetuwuyou.com/course/191 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介 本门课程详细介绍了 Microsoft Excel 的应用知识,Excel也称为电子表格,是Microsoft office 套装软件的一个重要组成部分.利用它可以进行各种数据的混合运算外,还可以应用于财务会计.统计分析.证券管理.决策管理以及市场营销等众多领域.正因为它具有如此广泛的应用,所以才得