分享

数据类型与数据结构——企业大数据应用,从认识数据开始(3)

 企业数据化管理 2020-05-12

数据类型与数据结构——企业大数据应用,从认识数据开始(3)

1.3 数据类型

数值型数据是我们经常处理的数据,也是数据处理技术相对比较成熟的领域。从数据所表述内容的角度对数值型数据进行分类,可以分成定类数据、定序数据、定距数据和定比数据,下面分别具体介绍。

1.3.1 定类数据

定类数据也称定性数据,用于标识数据所描述的主体对象的类别或者属性、名称,例如人的名字、事物的名称。定类数据只能用来标识事物,不能进行任何运算,包括比较运算。因为你无法比较一个苹果和一个李子哪个好,除非你能够提供额外的数据来证明谁好谁坏,例如提供了额外的体积数据或者重量数据,按照体积或者重量来比较是可以的,但是苹果和李子这两个数据本身是没有任何比较或者运算意义的。

又例如,将人口按性别划分为男性和女性两类,数量化后可分别用0和l表示;将企业按行业类别分为农林牧渔业、采矿业、教育类、制造业、建筑业、金融业等,可分别用1、2、3、4、5、6等表示。这些数字只是代号而无顺序和大小之分,不能区分大小或进行任何数学运算。

定类数据有各种类型,它们的排序是无关紧要的,即哪一类在前,哪一类在后对所研究的问题并无实质性的影响。而且,定类数据能够进行的唯一运算就是计数,即计算每一种数据类型的频数或频率(即比重)。

1.3.2 定序数据

定序数据也称序列数据,用于对事物所具有的属性顺序进行描述。定序数据虽然可以用数字或者序号来排列,但是并不代表量化的数据的大小,它只代表数据之间的比较关系。例如第一名、第二名、第三名等,这些只代表顺序,按照大小正序排列第一名肯定比第二名大,具体大多少是无法比较的。第一名和第二名相加也不会等于第三名。定序数据只可以用来比较,不能用来做加减乘除等运算,因为这些运算是没有任何意义的。

定序数据不仅具有定类数据的特点,可以将所有的数据按照互斥和穷尽的原则(MECE原则)加以分类,而且还使各类型之间具有某种意义的等级差异,从而形成一种确定的排序。这种序列测定在社会经济管理工作中应用很广泛,例如,将企业按经营管理的水平和取得的效益划分为一级企业、二级企业等;将员工按所受正规教育划分为大学毕业、中学毕业、小学毕业等。这种排序是确定的,对所研究的问题有特定的意义。但是,它并不能具体测定各等级之间的间距大小,例如不能计算一级企业和二级企业有实质意义的量的差距,也不能计算服务质量与预想的之间的差距。

1.3.3 定距数据

定距数据也称间距数据,它比定序数据的描述功能更好一些。定距数据是指没有绝对零点的数据,例如温度,其零点是人为指定的。而且并不能说20摄氏度是10摄氏度的两倍,因为缺少绝对的零点温度,零度并不代表没有温度。

定距数据因为有了标准的距离差异度量,它不仅能将事物区分为不同类型并进行排序以及可以测定其间距大小,标明强弱程度,还可以做加法或者减法运算。我们可以说20摄氏度比10摄氏度高10摄氏度;30摄氏度比20摄氏度高10摄氏度,而这个温度差是一样的,也可以比较。

定序数据之间的差异缺少标准的度量尺度,因而无法比较,但定距数据是可以的,定距数据的差异值本身会成为定比数据,从而可以进行加减乘除运算。时间点是定距数据,没有绝对的零点,或者零点并不代表没有时间,但是时间差就是定比数据,可以进行加减乘除运算。如果时间差是零,则可以认为是没有时间差异。

1.3.4 定比数据

定比数据也称比率数据,用于描述事物的大小、多少、长短等,可以进行加减乘除运算。定比数据与定距数据的显著区别是:定比数据有一个自然确定的非任意的零点,即在数值序列中,零值是有实质意义的。

以上四类数据具有层级关系,高级的数据可以转换为低级的数据,反之则不成立。其转换关系如下图所示。

从数据所描述的现象上看,定类数据和定序数据是对事物属性的测量,而定距数据和定比数据是对事物定量的测量。

1.4 数据结构和数据结构化

1.4.1 什么是数据结构

数据结构是我们存储、组织数据的方式,是数据内部的构成方法。数据结构是指数据元素之间存在着一种或多种关系,这种关系会因为数据主体、数据源头、数据处理方式、数据存储方式、数据组成要素之间的关系而形成数据之间的关系。数据结构包括三类,即数据的逻辑结构、数据的存储结构和数据的运算结构。

下面用一个实际案例来介绍什么是数据结构。一家公司的人力资源经理要收集员工的基本信息,于是他设计了一个员工信息登记表,如下表所示。

员工信息登记表

为了便于存储和查找,人力资源经理设计了一个Excel数据表格来存放这些员工的基本信息。在分析这个数据表存在的问题之前,下面先介绍三个概念。

数据主体——就是被记录数据的事物,包括动态的事和静态的物。员工基本信息数据的主体是员工;工资表的数据主体是“发工资”这个行为或者动作,属于“事”的范畴。

数据表——记录一系列数据的集合。例如员工信息表记录着公司所有员工或部分员工的个人信息数据。

一条数据——就是该数据集中某个员工的所有信息,一个员工对应一条数据,多个员工对应多条数据。

字段——每条数据中对数据主体的属性描述,例如员工基本信息数据中的“姓名”是一个字段,“性别”是另外一个字段。

该公司的人力资源经理在制作Excel表格时发现这个数据表涉及的数据存在以下三个问题。

问题1:学历,有些人的学历不止一项,从小学、初中、高中、大学、硕士到博士有一系列不同的记录,而这里却无法有效地填写;于是他把学历部分做了扩充,设计了以下的表格形式。

学历表格

人力资源经理认为留出7条记录的空间应该足够覆盖员工从小学到博士后的所有学历状况,即学历1(小学)、学历2(初中)、学历3(高中)、学历4(大学)、学历5(硕士)、学历6(博士)、学历7(博士后)。

然而在实际记录数据时,他又发现了两个问题。第一个问题是他碰到了一个“学霸”级的人物,本科修了两个专业,硕士修了两个专业,还读了一个在职MBA,此时数据表的记录空间不够用,如果单独为他加上一列,则对数据存储空间的影响还是很大的,而且数据表太宽也不利于阅读。

第二个问题是在记录数据时,有的人是从最高学历开始记录的,即大学记录在学历1中;有的人是从最低学历开始记录的,即小学记录在学历1中;有的人因为先上了专科,又读了本科,导致大学学历的记录位置不能统一。

问题2:学历的问题还好说,最多留出10条记录空间就能勉强解决这些难题,但工作经历就不同了。有的人换工作比较频繁,而有的人第一份工作就是现在的工作,没有其他的工作经历。而且岗位调动信息也有类似的问题,无法确定要留几条记录空间给岗位调动信息。

问题3:填写完员工的年龄后,到第二年每个人都需要加一岁,但是当年新记录的员工不能加1,这如何实现?司龄也有同样的问题。

最终人力资源经理制成的Excel数据表格非常不规范,这个表格存在的设计问题就是数据结构的问题,优化数据结构能够提高数据管理的效率,如果数据结构不合理,则未来会需要大量的时间进行数据处理、数据清洗,甚至对公司的信息系统资源也会造成浪费。优秀的数据结构设计人员(也叫数据库架构师)能够对公司的所有数据系统进行统筹架构,从而形成优化的数据库体系。

1.4.2 如何设计好的数据结构

数据结构是数据的组织形式,在组织数据之前,需要对数据进行分类。在对“员工”这个资源主体进行信息记录时,首先需要把数据分成静态数据和动态数据,因为静态数据是相对固定不变的,或者说变化不太频繁,而且变化之后,往往采用覆盖的方式;而动态数据则是持续增加的,并且增加时往往采用叠加的方式,并不覆盖原来的数据。我们可以把员工信息表中的数据分为静态数据和动态数据,如下表所示。

原则上,一个好的数据结构,要么是描述静态信息的,要么是记录动态信息的,然后通过数据表之间的关联形成一个完整的相互关联的数据库。所以,我们可以将上例中的员工信息表进行拆分,将静态数据放在一张表中,形成员工的静态信息表;而对于员工的动态信息,可以将每个动态信息都设计成一个单独的表,然后用员工编号关联起来,如下图所示。

其中最高学历信息可以从员工学历记录表中查询得到,员工所属子公司和部门信息可以通过员工岗位异动表查询得到。这种数据结构关系被称作运算结构关系。员工的年龄和生日,员工的司龄和入职日期都是运算关系。

在上例中,员工所属子公司、所属部门、所在岗位这三者存在包含的关系,公司的组织架构决定了三者之间的逻辑关系,即层级树形结构关系。逻辑结构关系还有很多,例如两个数据之间可能存在集合关系、线性关系、树形结构关系、层级结构关系、图形结构关系等。

物理结构关系比较容易理解,即因为数据的采集、存储、传输和处理所产生的关系。

数据结构是非常重要的概念,因为数据结构是数据的组织方式,而数据组织方式不同,存储和处理数据的效率也会不同。

1.4.3 结构化数据和非结构化数据

1.结构化数据结构化

数据主要指在数据存储和数据处理过程中结构设计比较合理的数据。

例如MySQL开源数据库、Oracle数据库、DB2、Sybase、Access、SQL Server等都是结构化的数据库。结构化数据库要求数据的结构都是由行和列组成的,每一列都表述了数据所描述对象的要素、属性和行动,而每一行都代表一个数据库所描述的对象。例如员工基本信息数据库。为了简化说明,我们选取5个信息点(字段)来讲解结构化数据。一个员工可以用姓名、员工编号、性别、出生日期、血型这5个信息点(字段)来描述,如下表所示。

每一列表示对象的一个属性或者变量,用来区分对象之间的差异;每一行表示一个对象,不同行表示不同的对象。在上表中有一类对象:员工;对每个员工的描述有5个字段:姓名、员工编号、性别、出生日期和血型;表中共有两个对象:张三和李四,他们在不同的属性上有不同的值。

该表即为结构化数据,随着员工人数的增多,表的结构不会改变,但数据可以不断累加。员工只要入职填写了个人信息表,这些信息就会被登记到公司的员工基本信息数据库中。结构化数据库基本上就是由行和列组成的数据集,分别表示同类的不同对象的属性差异。

目前大多数数据库都是结构化数据,自从SQL(Structured QueryLanguage)被发明以来,表状的结构化数据已经成为信息技术记录数据的标准,从而衍生了大量的数据处理软件,最常用的就是开源软件MySQL,当然还有商业化比较重的DB2、OracleSQL、SQLServer等。

2.非结构化数据

由固定的行和列组成的数据表一般被称为二维(行+列)结构数据表,它是结构化数据。如果行和列的数量不固定,即不能由固定的行和列组成二维结构数据表来表示和存储的数据,则被统称为非结构化数据。常见的非结构化数据包括所有格式的办公文档,文本,图片,标准通用标记语言下的子集XML、HTML,各类报表,图像和音频/视频信息等。

用HTML格式的文本来介绍非结构化数据会更加直观。HTML(HyperTextMarkLanguage),超级文本标记语言,它是浏览器解读网页内容,对网页内容进行显示的一种标记方法。每个标记语言都有的标记范式,例如超链接用<a></a>来标记,链接地址用href=“”来标记,段落用<p></p>来标记……通用的标准化标示语言,可以让所有的浏览器都用同样的方式来展示网页的内容。一个HTML文档中可以有数量不等的各种标记,并且其所在的位置序列也会不同,没有固定的“字段”之说,当然,我们可以把一个<a></a>看作一个字段,但这个字段可以重复,并且还可以出现在不同的地方。

部分非结构化的数据可以通过多表关联的方法进行结构化改造。例如微博数据可以通过一定的形式进行结构化处理,从而能够使用结构化查询语言即SQL来进行处理。

1.4.4 如何将非结构化数据结构化处理

如果数据是非结构化的,或者用结构化方法难以处理,就需要通过多表关联的方式进行结构化处理。

在处理非结构化数据的过程中,最核心的方法就是对数据进行分类,即按照数据的行为(或者属性主体)将数据分为静态数据和动态数据,然后分别进行结构化处理。对于静态数据,要采用单独的表格来记录事物的属性和要素。然后将动态数据也建立成单独的表格并与静态数据进行关联,从而构成了动静结合的数据表集。

在前面介绍的员工基本信息表中,就是把静态数据和动态数据分别制成表,然后通过表之间的关联形成数据表集,从而将非结构化的数据进行结构化的处理。

将非结构化数据结构化处理的方法就是:通过多表关联,让静态数据也单独成表,让动态数据单独成表并能够动态更新数据条目,简称“静动分离,动静结合”。

客户的动态数据对企业更有价值,因为静态数据记录了客户的基本信息,而针对该客户的动态数据才能让我们对客户有更加深刻的理解。当我们通过各种方式收集了客户的静态数据后,如果没有动态数据,例如交易数据,就不能形成完整的客户画像。

“静动分离,动静结合”的数据处理方式在对非结构化数据进行结构化处理方面发挥着巨大的作用,它让数据处理更加有效。而将数据结构化处理后,计算机进行增加、删除、修改、查询等各种运算时效率都会得到大幅度提升。

1.4.5 什么是单维数据表

单维数据表是结构化数据表的一种形式,而且是最简单的形式。其要求相同属性的字段统一且固定,所有的字段都在描述相同的数据主体。换句话说:单维数据表是结构化数据表,但结构化数据表不见得一定是单维数据表。

下面这张表格由行和列组成,每列都是独立的。这个数据可以构成结构化数据,但不是单维数据表。

通过“静动分离,动静结合”方式组成的数据集基本都是结构化数据。而单维数据表强调的是每个数据条目描述的都是一个主体,要么是资源的描述数据,即静态数据,要么是资源的动作和行为,即动态数据,在同一个数据表中不存在两个不同的主体。例如员工基本信息表与工资表,如果独立看这两个数据表,那么它们就是单维数据表,一个表以员工作为主体进行数据采集,而另外一个表以“发工资”这个活动作为主体。将两个数据表合并在一起,仍然构成了结构化数据表,但是数据的描述主体不同,导致数据不够集约,形成了冗余,例如一个员工要发12次工资,在合并表中,员工的个人信息就会重复12次。

单维数据表首先必须得是结构化数据表,同时强调数据描述主体的一致性。通过这两个标准来衡量一个数据表是否是单维数据表就比较容易了。下面举例说明。

下表中的数据是结构化数据,可以导入SQL数据库并可以进行查询,但它不是单维数据表,这个表虽然由行和列组成,但是其每个字段都在描述不同的数据主体。这个表是单维数据表的汇总计算表。

员工奖金汇总表

将上表转换为单维数据表后其形式如下表所示。

单维数据表

将结构化数据表转化为单维数据表的技巧在于如何审视数据主体,主体越明确,数据越精准。

单维数据表结构对以后的数据统计汇总工作来说非常重要。

1.4.6 为什么要求动态数据都要按照单维数据表的形式组织

单维数据表的组织形式便于数据分析、数据表之间进行关联以及未来的数据建模,能够大幅度节省数据清洗的时间,以及数据存储的空间,也避免了数据更新时导致的数据不一致。

例如人力资源部门有3个数据表,第一个是员工基本信息表,为静态数据表;第二个是员工工资表,为动态数据表;第三个是员工岗位异动表,为动态数据表。其结构如下表所示。

在动态数据表中除用于索引和追溯的编码类静态数据外,还包含其他的静态数据,如果要对静态数据表进行调整,则动态数据表中的静态数据也要相应地进行调整,如果不能实现自动调整,则必然会产生数据不一致的现象。

例如,一个员工通过自学提高了自己的学历,人力资源部门对其个人的基本信息表进行了更新,最高学历发生了变化,而在员工工资表中也需要进行相应的调整,如果调整不及时,那么这两个表就产生了数据不一致的现象。动态数据表中的静态数据越多,需要更新的数据就会越多。

采用单维数据表结构的好处在于,除编码数据用于索引外,不包含其他额外的信息,当我们知道了员工编号,可以通过其他的单维数据表去查询相关的信息,通过自动关联形成当期数据,保证了数据的一致性。

单维数据表的一个基本原则是通过多表关联的方式分别记录不同的信息,将静态数据和动态数据分别存储,相互之间通过唯一的编码进行关联。上面的3个数据表之间通过各个ID编码进行关联。其中标记“*”号的数据都是重复的数据。

通过以上单维数据表结构的建表原则,我们可以引申出另外一条基本的原则:一条需要录入的数据信息只能出现在一张表上(除编码索引外)。例如,在上面的3个表中,有了员工编号ID自然可以通过员工的基本信息表索引到员工的姓名、性别、年龄、出生日期、入职日期等信息;如果每张表上都有员工姓名这个字段,而当员工改了名字后,就需要在很多表上进行手工修改,如果采用索引的方式,则只需要在员工基本信息表中进行修改,而其他表中的数据就会自动更新了。

全文摘自《企业经营数据分析-思路、方法、应用与工具》赵兴峰著

该文转载已取得作者认可

版权说明:版权所有归明悦数据所有,如需转载请联系我们,我们将在第一时间处理,或请注明内容出处(《企业经营数据分析》赵兴峰著),非常感谢!【往期内容已在(明悦数据)公众号同步发布】

下期内容更实战!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多