Skip to content

第4章 探索性数据分析

探索性数据分析(Exploratory Data Analysis,EDA)是指对已有数据集在尽可能减少先验假设的条件下,综合运用统计图表、计算和模型来发现数据中的模式、趋势和异常值等,以便对数据集有一个初步的理解,从而为后续的数据处理、模型构建及假设检验等分析提供重要线索和依据。该方法在上世纪70年代由著名的美国统计学家约翰·图基(John.Wilder.Tukey)首次明确提出,自那时以来,它已成为数据科学家、统计学家和各个领域研究人员在进行数据分析时不可或缺的工具之一,极大地促进了数据驱动决策和科学研究的发展。

传统的统计分析方法通常是先假设样本服从某种分布,然后把数据套入假设模型再做分析,其主要目标是验证或拒绝先前提出的假设,更多的依赖于数学模型和统计检验,适用于数据较为规范,符合特定分布假设的场景。但由于多数数据并不能满足假设的分布,因此,传统统计分析结果常常不能让人满意。

探索性数据分析方法注重数据的真实分布,尽量减少先验假设,强调数据本身来揭示其结构和规律,使分析者能一目了然看出数据中隐含的规律,从而得到启发,以此帮助分析者找到适合数据的模型。“探索性”是指分析者对待问题的理解会随着研究的深入不断变化,是一个迭代的过程。

探索性数据分析的基本流程包括:
◎收集数据:收集所需的数据,可能来自数据库、文件、API等。
◎认识数据:数据基本信息,包括数据结构与类型、数据的缺失值、异常值等。
◎预处理数据:数据类型或者形式转换和缺失值、异常值、重复记录等处理。
◎分析与可视化数据:使用图表和图形来直观展示数据的分布和关系等。
本章将结合DataFocus对上述流程进行详细介绍。

4.1 数据收集

在EDA中,数据收集是整个分析过程的基石。没有高质量的数据,后续的分析和决策将失去依据。数据收集的质量直接影响到数据分析的准确性和有效性。因此,明确数据收集的目标、选择合适的数据收集方法和工具,以及确保数据的质量,是进行有效数据分析的关键步骤。

在开始数据收集之前,明确收集目标和指标是至关重要的,这有助于我们更好地了解需要收集哪些数据,以及如何收集和分析这些数据。同时明确收集目标和指标也是确保高质量数据的第一步。这包括确定所需的数据类型、数据来源和数据用途。例如,如果目标是进行市场调研,需要明确是收集消费者偏好、市场趋势还是竞争对手信息等。

接下来,选择合适的方法或者工具收集所需要的数据。常见的数据收集方法包括问卷调查法、访谈法、实验法、二手数据法以及基于现代大语言模型(Large language models, LLMs)等AI工具生成合成数据等方法。其中,调查问卷是通过在线工具、纸质问卷或面对面访谈等方式向目标人群发放设计好的问卷,收集他们的意见、看法和经验等方面的信息。其优点是简单易行,适用范围广;缺点是数据质量可能不高,存在主观性和偏见。而二手数据是指已经存在的数据,如政府数据、公司数据、行业调查数据、学术论文等。二手数据的优点是获取方便、成本低;缺点是可能存在数据质量和时效性问题。

基于LLMs可以生成高质量的合成数据,模拟真实世界数据的特征和模式。例如,可以使用预训练的DeepSeek、通义千问等LLMs生成客户评论,或者通过目标任务数据微调LLMs,引导LLMs生成特定类型的数据,以及利用多个强大的模型联合生成高质量的偏好数据,减少偏见并增加响应的多样性。如图4-1和图4-2,展示了使用表格数据微调LLMs之后再利用其生成新的表格数据的过程。

图4-1 使用表格数据微调大语言模型
其中(a)将原始表格数据转化为文本数据,(b)进行语句间位置的随机交换,(c)进行自回归式学习。

图4-2 微调之后的大语言模型生成表格数据
其中,(a)输入端输入提示,(b)让大语言模型生成后续的语句,(c)让大语言模型从语句中提取出表格数据.

4.2 认识数据

4.2.1 数据结构类型

针对不同的应用,我们采集到的数据类型丰富多样,包括表格数据、HTML网页文件、XML文件、RDF(Resource Description Framework,资源描述框架)数据、文本数据、图(社交网络)数据、多媒体数据(音频/视频/图像)等。这些数据可以划分成结构化数据、非结构化数据和半结构化数据等不同类型。

1. 结构化数据

结构化数据,是高度组织和整齐格式化的数据,由明确定义的信息组成,是最为常见的一种数据形态。一般使用关系型数据库进行存储。大部分结构化数据可以简单地用二维表格形式表示。如表4-1,一般以行为单位,一行数据表示一个实体的信息,而不同列则表示不同的属性。每一行数据的各个属性是相同的,它记录了人员的编号、姓名、年龄以及性别。

表4-1 二维表格示例

编号姓名年龄性别
1张三13
2李四14
3王二12

结构化数据的存储和排列是很有规律的,也便于查询、修改。但是,它的扩展性并不好。比如,表4-1中,如果要临时增加一个身高的字段,就不能直接记录,必须先修改表格的结构才能办到。

2. 半结构化数据

半结构化数据是结构化数据的一种形式,它并不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,可用来分隔语义元素以及对记录和字段进行分层。因此,它也被称为自描述的结构。半结构化数据,属于同一类实体可以有不同的属性,即使它们被组合在一起,这些属性的顺序也并不重要。

常见的半结构化数据有XML和JSON,图4-3为两个XML格式的数据记录。

图4-3 XML数据结构示例

从上面的例子中可以看到这些记录,其属性的顺序是不重要的,属性的个数也可以是不一样的。这些半结构化数据的结构类似树或者图。在图4-3中,<person > 标签是树的根节点,< name >和< gender >标签是子节点。通过这样的数据格式,可以自由地表达很多有用的信息,包括自我描述信息(元数据)。所以,半结构化数据的扩展性是很好的。

3. 非结构化数据

顾名思义,非结构化数据就是没有固定结构的数据。各种文档(如word、pdf、ppt)、图片(jpeg、png、gif等)、视频、音频等都属于非结构化数据,如图4-4。对于这类数据,我们一般采用二进制的数据格式直接整体进行存储。

图4-4 非结构化数据示例

非结构化数据分析起来难度大,也不那么直观,比如视频、音频数据,或一些文件、网页等等,这些数据一般存储在NoSQL数据库或者文件存储系统中。本书主要针对结构化数据展开相关分析。

4.2.2 结构化数据的类型

结构化数据的字段类型简单来分,可以分为数值型(Measure)数据和非数值型(Attribute)数据。其中,数值型数据是可度量的数据,比如记录的“学生成绩”或者“销售收入”,可以用来求和,计算平均值、最大值或最小值等,一般细分为双精度型(Double)和整型(Integer)。

非数值型数据指的是不能以数值方式表示的数据,它通常是具有分类或描述性质的数据。可以细分为字符串(String)类型、日期时间(Timestamp)和布尔型(boolean)三大类。字符串一般用来表达多种类别,如“男”“女”;或者“广东省”“浙江省”等。字符串类型的数据是不能进行求和(Sum)等计算的,但是可以用来计数(Count)或计算分布。日期时间是一种特殊的属性数据,有顺序和周期的特性。时间序列往往支持一些特殊的聚合操作,比如可以对日期时间数据按周、月、季度、年进行统计。布尔型数据只有两个取值,即True和False,通常用来表示真假、对错等概念。

结构化数据的类型概念非常重要,在DataFocus系统中,需要我们有效识别数据类型,才能合理地做出数据分析和可视化呈现。

4.3 数据预处理

数据预处理主要包括数据转换,缺失值、异常值的处理,连续数据的离散化,数值型数据的规范化等。其中,数据转换包含数据类型的转换以及数据形式的转换。同时,为了更好使用搜索式数据分析,DataFocus还设置了搜索扩展相关内容,用于对数据进行预处理。本节将分别进行详细介绍。

4.3.1 数据类型转换

DataFocus系统中处理的是结构化数据。在数据导入的过程中,系统会自动识别数据类型,但在一些特殊情况下,当系统识别的数据类型出现偏差时,则需要用户手动介入,在数据导入时,更改错误的数据类型,如图4-5。

图4-5 系统识别数据类型

当用户选定数据类型并且将数据导入DataFocus后,就不能在数据表中直接修改数据类型了,但是可以在数据表的详情页面使用简单的公式命令新建一个进行数据类型转换的公式列。 目前DataFocus系统支持转化的数据类型有7种,分别是字符串(string)、整型(integer)、双精度浮点型(double)、时间戳(timestamp)、长整型(bigint)、布尔型(boolean)和浮点型(decimal)。例如对于日期数据,因为涉及时间类关键词搜索,需要单独作为时间戳(timestamp)。

在实际业务中,用户可能需要将数值列转化为字符串,用作属性列进行搜索,如图4-6;也可以将转化后的数据列作为参数在公式中嵌套使用。例如针对一些不规范的日期数据,需要利用字符串重组成规范的日期,再用“to_date”日期类型转换函数将其转换为时间戳,才可以进行各种日期关键词的搜索。

图4-6 添加公式列

这里只简单介绍了几个公式,DataFocus系统中具体有哪些类型转换公式,可以参考第1章的1.5公式生成。

4.3.2 数据形式转换

除了数据类型转化,DataFocus系统中还具备数据形式的转换功能。DataFocus支持的数据形式转换有6种,分别是行转列、列转行、列错行、列合并、子查询、列拆分,如图4-7。

图4-7 数据转换类型

1. 行转列

行转列是将表中的行数据按照某些列的值重新组织成列数据的过程,可以将数据从行方向转换为列方向。其目的通常是为了方便数据分析和比较,通过行转列操作,可以将分散在多个行中的相关数据聚合到一列中实现多维度的数据分析,从而帮助企业更好地理解业务情况。举例如下,各科老师在查询学生成绩时,记录的数据如表4-2所示。将其通过行转列的操作后,得到的数据结果如表4-3所示。

表4-2 学科原始数据

Student _IDSubjectS core
0001语文90
0001数学100
0001英语85
0002语文88
0002数学92
0002英语95

表4-3 行转列效果

Student _ID语文数学英语
00019010085
0002889295
2. 列转行

列转行功能可以被视为行转列的逆操作,对应的是数据从列方向转换为行方向。这两种数据转换是数据处理和分析中很常见的两种基础操作,当需要将原本分散在多个列中的数据合并到一起时,就很适合使用列转行功能。
例如,想了解职工的薪酬结构情况,选择基本工资、绩效工资、固定补贴、加班费、奖金或提成、其它补贴,得到如下图4-8原始2行6列的数据,该数据在DataFocus系统中仅支持仪表盘图、水位图等简单图形可视化。

图4-8 薪酬结构原始数据

在数据转换界面选择“列转行”,如图4-9所示,点击“下一步”,进行列转行的配置。这里,需要给两列的列名定义新的名称,同时可以对转换后的列中值的名称进行修改,如图4-10所示。

图4-9 薪酬结构数据转换界面

图4-10 薪酬结构数据列转行配置

在完成配置后点击“确定”按钮,就得到了新列名下的数据,该数据在DataFocus系统中支持柱状图、折线图等多种图形可视化方式,如下图4-11所示。

图4-11 薪酬结构新数据

3. 列错行

列错行是系统新增的数据转换功能,专为处理复杂数据排列需求及实际业务场景中的特殊情况设计。例如,表4-4是一份按月统计的销售额数据,当用户需要在同一行中同时查看当月与上个月的销售额数据,以便快进行同比计算时,就可以用到列错行功能。通过该功能,用户可以轻松地将上个月的销售额数据“错行”至本月数据的旁边,从而在视觉上实现数据的并置,数据结果如表4-5所示。

表4-4 销售额原始数据

月份销售额
1月43858.22
2月155303.17
3月51495.57
4月36484.55
5月35065.19
6月43713.73
7月9521.53
8月13903.2
9月14764.27
10月11943
11月62460.8
12月74116.46

表4-5列错行效果

月份销售额上月销售额
1月43858.22Null
2月155303.1743858.22
3月51495.57155303.17
4月36484.5551495.57
5月35065.1936484.55
6月43713.7335065.19
7月9521.5343713.73
8月13903.29521.53
9月14764.2713903.2
10月1194314764.27
11月62460.811943
12月74116.4662460.8

此外,列错行功能还支持用户自定义错行的列数、参与错行的列以及排序的顺序。如图4-12所示,在错行行数处选择执行列错行的行数,勾选参与的字段并且设置排序方式为升序还是降序,设置完成后,会新增一列数据用于展示列错行后的数据。

图4-12 列错行配置

4. 列合并

列合并功能的含义和合并中间表是类似的,通过将选中的字段进行数据聚合后实现上下合并的效果。区别在于,合并中间表是将具有相同字段(列)的多个数据表,按照行的顺序合并成一个数据表的过程,通常用于整合结构相同但来源不同的多个数据表。列合并则是强制合并功能,允许字段的数据类型不同。

列合并功能是将多列数据整合为一个新的列输出,在查询结果中同时显示多个字段值,便于用户查看,还可以优化索引,减少索引中的段数量,提高搜索性能。虽然这不是直接的数据合并,但可以从数据组织和优化的角度理解为一种“合并”操作。假设有一张员工表,其中包含员工ID、性别、年龄、学历、籍贯等基础信息如表4-6,现需要查询某学历以上的全体员工信息,则可以用到列合并功能,结果如表4-7所示。

表4-6 员工信息原始数据

填表人 ID性别年龄学历籍贯
ID00127硕士北京
ID00244博士及以上浙江
ID00341大专黑龙江

表4-7 列合并效果

员工信息
27
44
41
浙江
黑龙江
北京
ID002
ID003
ID001
博士及以上
大专
硕士
5. 子查询

子查询又可以叫嵌套查询,是一种嵌套在其他语句中的查询,即为基于一个查询结果进行进一步查询。举例说明,如表4-8是一份商品销售数据,其中通过公式“销售金额/订单数”,计算得到了各区域的不同产品子类别的客单价。其中,客单价在DataFocus系统中可以直接通过在搜索框输入“销售金额的平均值”实现。

表4-8 商品销售数据

区域产品子类别销售金额订单数客单价
东北磕壳坚果158334.3251630.81394
东北特惠炒货29697.24155191.59510
东北果果仁仁77274.483170454.55578
华东特惠炒货33581.622201167.07275
华东果果仁仁81760.752220371.63978
华东磕壳坚果207105.183344602.04995
华北果果仁仁101710.505225452.04669
华北特惠炒货41674.255231180.40803
华北磕壳坚果219721.932360610.33870
华南果果仁仁197821.005468422.69446
华南磕壳坚果394466.195664594.07559
华南特惠炒货70000.959398175.88181
西北磕壳坚果95449.963144662.84697
西北特惠炒货15654.26184186.36025
西北果果仁仁48333.78397498.28642
西南果果仁仁15556.59141379.42905
西南磕壳坚果41702.28559706.81839
西南特惠炒货7213.87935206.11083

通过子查询可以添加不同维度的聚合方式,在弹出的数据转换对话框中选择“添加子查询”,选择查询字段“销售金额”并命名为“平均销售额”后配置聚合方式为“平均值”,再删除一个属性列“产品子类别”,如图4-13所示,得到如图4-14的查询结果。这里的平均销售额是按照产品子类别对区域汇总的销售金额求平均值,即同一区域的销售金额求和除以产品子类别的去重后的数量(这里是数值3)。区别于客单价,两列数据的聚合方式都是平均值,但数据结果完全不同,客单价的平均值是按照产品子类别对区域汇总后的客单价求平均。

图4-13 子查询配置

图4-14 子查询效果

6. 列拆分

列拆分数据是Excel等电子表格软件中常用的数据处理功能,它允许用户根据特定的分隔符或拆分列数将一列数据拆分成多列。假设有一张店铺分布表如表4-9,现需要将其按照“-”符号拆分成四列,参照图4-15配置列拆分的拆分列数和分隔符,并为拆分后的字段列命名,即可完成列拆分,拆分结果如图4-16。

表4-9 拆分前原始数据

数据 _ ID
华北销售1部-飞跃店-张飞-20170211
华南销售1部-隆回店-曹操-20130319
华南销售2部-五洲分店-刘备-20200506
华北销售2部-大夏会分店-孙权-20160801
华南销售3部-鱼跃分店-诸葛亮-20190916
华北销售3部-三本分店-司马懿-20150618

图4-15 列拆分配置

图4-16 列拆分效果

以上介绍了多种数据转换的方式,在实际应用中,用户可以根据具体的需求和数据结构来选择合适的功能进行数据实现。

4.3.3 搜索拓展

DataFocus凭借独特的自然语言搜索在数据分析领域独树一帜,进行数据分析,为了进一步优化用户的搜索体验,新增了数据拓展模块。这一模块专为数据分析前的数据预处理阶段设计,允许用户预设一系列数据处理条件,将企业组织内部的业务术语等背景知识通过自定义列中值的同义词、自定义关键词等方式保存下来。通过这些预设条件,可以为后续的小慧AI理解用户自然语言问题中的业务术语奠定坚实的基础,极大地提升了数据分析的流畅度与准确性。

1. 自定义列中值的同义词

在数据表的“详情”页新增搜索拓展模块,通过点击“新增列中值的同义词”,在弹出的对话框中配置同义词,先选择该表中的某一属性列,然后为该属性列的一个或多个列中值设置一个或多个同义词。例如将数据表《教材_列合并数据》中学历列的列中值“博士及以上”设置为同义词“最高学历”,即可用该同义词在搜索模块中用作筛选项,如图4-17。

图4-17 新增列中值同义词

2. 自定义关键词

除了“新增列中值的同义词”,数据表的详情页还可以对该数据表配置“新增关键词”,为关键词命名并配置关键词内容后点击确定,即可保存新增的关键词,同样的,可以将关键词在搜索模块中用作筛选项,如图4-18。

图4-18 新增自定义关键词

除了在数据表的详情页面可以配置搜索拓展,系统管理模块也有同样的搜索配置模块。与数据表内的搜索拓展不同的是,在系统管理中配置的同义词需要先选择数据表,再配置同义词,如图4-19和图4-20。在搜索配置中新增的同义词和关键词都会出现在对应的数据表中,同样,用数据表的搜索拓展新增的同义词和关键词也会出现在搜索配置中。

拥有系统管理权限的用户可以在搜索配置中看到全局的列中值的同义词和自定义关键词,同时可以在搜索配置页面进行编辑和删除的操作,方便统一管理。

图4-19 搜索配置_新增列中值同义词

图4-20 搜索配置_新增自定义关键词

3. 自定义位置

系统管理模块的搜索配置模块拥有自定义位置的功能,可以通过新增自定义经纬度定义地点,也可以通过选择国家导入系统位置,如图4-21。

图4-21 搜索配置_自定义位置

4. 自定义日期

系统管理模块的搜索配置模块还拥有自定义日期的功能,针对一些具有循环性的电商平台活动,可以为其自定义起始日期、结束日期、是否循环及循环的时间范围、配置阴历阳历等,如图4-22。

图4-22 搜索配置_自定义日期

5. 其他配置

最后一个模块是其他配置,这里主要是配置搜索语句中相似度句式的模糊度,默认相似度为50%,相似度越高则搜索语句与自定义内容的搜索匹配度越高,如图4-23。

图4-23 搜索配置_自定义搜索匹配度

4.3.4 其他数据预处理

在实际中获取到的数据往往会存在缺失值、离群值、重复记录以及量纲相差较大等问题,对这些问题的合适处理有利于后续得到更合理的数据分析结果。下面将分别介绍几种处理方法。

1. 缺失值处理

下表4-10 缺失值数据示例展示了存在缺失值的数据表。
表4-10 缺失值数据示例

姓名年龄学历年收入(万元)职业
李明28硕士25数据分析师
王芳30本科18市场专员
张伟业36博士大学教授
陈雪晴22
赵刚41大专16销售经理

较为典型的缺失值处理方法有:
a. 删除法:删除记录中的缺失值。一般分为行删除和列删除,行代表样本,列代表属性。当一行或者一列的缺失值超过75%的时候,可以考虑将该行或者该列进行删除处理。相对而言,对于列的删除需要谨慎,主要因为列代表了对象的某种属性。对于行数据,当行的数量较大,存在缺失值的行较少时也可以考虑删除行。
b. 插补法:根据某种规则或者规律使用新的值进行缺失值的插补。一般包含下列方法:
l 虚拟插补:可以将缺少的值替换为虚拟值:例如,分类属性值用“未知”替代,数值型确实数据用“0”替代等。
l 均值/中位数/众数插补:对于数值型数据,可以使用平均值、中位数或众数来替换缺失值。这种方法简单易行,但可能无法反映数据的真实分布。众数填充适用于分类型数据。
l 向前向后插补:使用前或后一个值填补缺失值,适用于时间序列数据。
l 回归插补:使用回归模型,如线性回归,支持向量机,随机森林等,预测缺失值,适用于变量之间存在相关性的情况。这种方法能够利用数据集中的其他信息来更准确地预测缺失值,但需要满足一定的假设条件,如线性关系、无多重共线性等。
l 关联插补:使用随机森林等方法寻找与缺失样本有关联的样本,并利用关联样本的相关属性值对缺失数据进行填补。

2. 离群值处理

离群值是指在数据集中存在的不合理的值,这些值明显偏离其他观测值。针对异常值,一般先判断造成异常的原因,再进行处理。可以使用使用箱线图、散点图、直方图等图形工具直观识别离群值,如图4-24所示。其中(a)图中红色圆圈中的二维数值明显偏离了大多数数值所在的位置,可以被认为是离群值。(b)中基于统计方法计算数据的四分位距(IQR = Q3-Q1),若数据点小于Q1-1.5IQR或大于Q3 + 1.5IQR,则视为离群值。其中黑色点被认为是离群值。

(a) (b) 图4-24 离群值检测常用图形 :(a)散点图,(b)箱线图。

也可以使用聚类算法(如DBSCAN、密度峰值聚类)识别离群值,并将其视为噪声点。下图4-25展示了使用DBSCAN算法识别出离群值的情况。

图4-25 基于DBSCAN的离群值检测

处理离群值的常用方法包括以下几种:

l 删除法:如果离群值是由于数据录入错误或测量误差导致的,可以直接删除。

l 替换法:用均值、中位数或众数替换离群值。或者使用插值法(如线性插值、多项式插值)替换离群值。

l 变换法:对数据进行对数、平方根或Box-Cox变换,减少离群值的影响。

l 保留法:如果离群值是真实且有意义的(如极端事件),应保留并单独分析,而不是直接删除或替换。

选择哪种异常值处理方法取决于数据的性质、异常值的数量及分布、后续分析的需求以及模型的容忍度。在实际应用中,可能需要结合多种方法进行综合处理。同时,处理异常值时应谨慎操作,以避免误删重要信息或引入新的误差。

3. 数据规范化处理

数据规范化是数据处理中的重要环节,旨在将不同量纲、不同分布的数据转换为具有统一标准和可比性的形式。以下介绍几种常用的数据规范化处理方法:
l 最小-最大规范化(Min-Max Normalization):
最小-最大规范化通过将原始数据(按照列的形式)映射到一个特定的区间(通常是[0,1]),来消除量纲和数据取值范围对分析结果的影响。其计算公式为:

$$ x' = \frac{x-\min(x)}{\max(x)-\min(x)} $$

其中:

  • $x$ 是原始数据列
  • $x'$ 是规范化后的数据列
  • $\min(x)$ 是数据列的最小值
  • $\max(x)$ 是数据列的最大值
    l z-得分规范化(z-Score):
    z-得分标准化是将原始数据(按照列的形式)转换为以标准差为单位的离均差的过程。标准化后的数据均值为0,方差为1,从而消除了不同变量在均值和方差上的差异,增强了数据的纵向可比性。其计算公式为:

$$ z = \frac{x-\mu}{\sigma} $$

其中:

  • $z$ 是转换后的得分,表示数据点距离均值的多少个标准差
  • $x$ 是原始数据列
  • $\mu$ 是数据列的平均值(均值)
  • $\sigma$ 是数据列的标准差
    l 小数点缩放规范化:
    小数缩放规范化方法是通过移动数据的小数点位置来实现规范化。小数点移动的位数取决于该属性数据取值的最大绝对值。适用于数据取值范围较大,但小数位数相对固定的情况。
4. 数据离散化处理

数据离散化(也称量化或分箱)是将连续的数值型数据转换为离散的分类标签的一种处理方法。这种处理方式能有效地降低极端值(离群值)对后续数据分析以及建模的干扰。通过分箱,极端值被归入特定的区间内,其影响被相对削弱,从而提高了模型的稳健性和准确性。同时,分组后的值(即每个箱内的值)更加集中和更易于理解,对于业务分析师和决策者来说,能够清晰地看到不同区间内变量的变化以及影响情况,有助于他们更好地理解数据关系,并据此做出更加明智的决策。

数据离散化处理的常用方法有:
l 等宽分组(按距离)
等宽分组是指将一个属性的所有可能数据按照数值范围均匀分成几个组,每个组的范围是相等的。这种分组方法适用于数据分布比较均匀的情况,可以简单地将数据划分为几个区间,便于对数据进行整体描述和分析。
l 等高分组(按频率)
等高分组(按频率)是指将数据按照其值出现的频率或数量进行划分,使得每个分组(或区间)内的数据点数量大致相等。通过等高分组,可以更好地理解数据的分布情况,发现数据中的潜在规律和模式。

4.4 简单统计数据分析及可视化

对数据进行预处理之后,就可以借助DataFocus对数据的基本统计信息进行进一步的了解。

数据的描述性统计指标一般包含:集中趋势指标、离散程度指标和分布形态指标。其中,集中趋势指标主要反应数据的中心位置或者典型值,如平均值、中位数、众数等。离散程度指标用于描述数据的分布范围和差异程度,如方差、标准差、极差、四分位距等。分布形态指标用于描述数据的分布形状和对称性,如偏度、峰度等。

在DataFocus系统中,部分指标可以通过公式得到,如图4-26所示,对《教材_最新电商销售数据》,使用‘average(销售数量)’可以得到销售数量的平均值。同时,也可以直接在搜索框中输入‘销售数量的平均值’得到相同的结果。其它指标函数可以通过主界面的帮助文档中的用户手册进行查询使用,如图4-27所示。也可以参考第1.5节,查看公式使用方法。

图4-26 平均值计算示例

图4-27 用户手册界面

除了进行统计指标的计算之外,还可以使用统计图表对数据的三类指标进行更直观的展示以及认识。主要的图表包含四类,即,箱线图(又称箱型图)、直方图、散点图以及相关热力图。

箱线图通过简单的图形综合展示数据的中心位置、离散程度、偏态、异常值及分布范围。如图4-28所示。

图4-28 箱线图示例

箱体上下边分别对应第一四分位数(Q1,25%分位数)和第三四分位数(Q3,75%分位数),箱体高度IQR的计算公式是: IQR = Q3-Q1

其反映了中间50%数据的分布范围。箱体内的横线代表数据的中位数所在的位置,整体箱体在坐标轴上的位置可大致反映数据的集中区域。箱体外上下须末端通常代表数据的最小值与最大值。须越长,数据分布越分散;须越短,数据越集中。超出上下须范围(通常定义为 Q1-1.5IQR 和 Q3 + 1.5IQR 之外)的数据点通常认为是异常值或极端值。

直方图是一种用于直观展现实际数据分布状况的图表类型,如图4-29所示。该图表的构建过程遵循三个规范化步骤:首先将数据集的全距等宽划分为若干互斥区间(称为分箱),随后统计各区间内的观测值数量形成频数分布表,最终在二维坐标系中以矩形几何元素进行映射——横轴对应数据量纲的分箱边界,纵轴表征频数密度,每个矩形的底边长度恒等于分箱宽度,高度则与对应区间的频数密度成严格比例关系。这种可视化形式通过面积守恒原则,既保留了原始数据的分布形态特征,又能有效消除样本量差异对分布形态判读的干扰。

图4-29 直方图示例

散点图通过在二维平面上绘制一系列离散的点来表示数据,其中每个点的位置由两个变量的值确定。横轴(x轴)通常表示一个变量(自变量),纵轴(y轴)表示另一个变量(因变量)。通过观察这些点的分布,可以直观地识别出变量之间的关系,如正相关、负相关或无相关,如图4-30所示,图中的两个变量之间有较为明显的线性相关性。同时,散点图也能反映数据的分布情况,包括数据的集中程度、分散程度以及是否存在异常值或离群点。

图4-30 散点图示例

相关热力图反应多个变量两两之间的线性相关性,如图4-31所示。矩形中的每个单元格代表两个变量之间的相关性系数,颜色变化则用来表示相关系数的大小和方向。常用的相关性系数包括皮尔逊相关系数等,其取值范围在-1到1之间。其中,-1表示完全负相关,即一个变量的增加导致另一个变量的减少;1表示完全正相关,即一个变量的增加导致另一个变量的增加;0则表示无线性相关,即两个变量之间没有明显的线性关系。

图4-31 相关热力图示例

4.5 探索性数据分析应用案例:医院问诊数据分析

针对医院问诊数据进行分析不仅能够帮助医疗机构提升服务质量,还能为医学研究、政策制定以及患者健康管理提供有力支持。通过分析患者的就诊时间、科室分布、疾病类型等数据,医疗机构可以更合理地调配医疗资源,有助于减少患者等待时间,提高就诊效率,提升患者满意度的同时降低医疗成本。接下来将以《教材_问诊数据》作为数据源进行医院问诊数据分析,展示DataFocus对数据预处理的实现。先将数据表《教材_问诊数据》导入DataFocus。

1. 缺失值处理

运用定数值中的关键词“的数量”,输入“就诊人ID去重后的数量 是否住院 是否住院的数量”很明显就可以看到“是否住院”字段存在明显的缺失值,如图4-32。

图4-32 确定属性列缺失

如果选择将缺失值进行删除,也有两种方式可以进行处理。在搜索模块中双击选择列“是否住院”、“病患名称”,在搜索框中输入“是否住院不为空”,通过圈范围关键词“不为空”将缺失值排除在外,如图4-33。

图4-33 关键词筛选删除

第二种方式可以对数据表中的所有字段进行全选,全部添加到搜索框中,找到“是否住院”字段进行配置,筛选---排除空值,然后将得出的结果导出为csv文件,如图4-34。

图4-34 筛选排除空值

也可以选择用虚拟值替换缺失,这里我们默认“是否住院”缺失的列中值用“否”进行替换,点击“增加公式”,输入公式: ifnull(是否住院,“否”)或者 if 是否住院!=“是 ”and 是否住院!=“否 ”then"否"else是否住院 如图4-35和图4-36。

图4-35 ifnull公式替换

图4-36 if逻辑公式替换

2. 列拆分

在搜索模块双击选择列“问诊科室”,可以看到其中列中值由两个部分组成,分别是大科室和具体的问诊部门,因此可以选择将其进行列拆分。选择数据转换,如图4-37,数据转换类型选择“列拆分”,属性列选择“问诊科室”,拆分成2列,分隔符为“-”,更改列名为科室和部门,如图4-38,完成后点击确定。

图4-37 问诊科室列拆分

图4-38 拆分后列命名

3. 多列横向合并

观察数据集,可以看到数据列中的就诊日期字段缺少具体的就诊时间点,因此需要将“就诊日期”和“就诊时间”两个字段进行拼接,合并成完整的时间戳,为后续的时序相关分析打下基础。点击“增加公式”,输入: to_date(concat(substr(to_string(就诊日期),1,11), 就诊时间)) 公式内容如图4-39所示,拼接后的结果如图4-40。

图4-39 数据横向拼接

图4-40 数据拼接结果

4. 通过公式进行数据转换

数据集中包含了“出生日期”字段,因此可以根据“出生日期”计算病患的“年龄”。 点击“增加公式”,输入:
【年龄】:2024-year(出生日期)
公式内容如图4-41所示。

图4-41 年龄计算公式

5. 数据离散化

将年龄字段进行分箱处理。构建公式
【年龄分段】:if年龄<=18,then ‘0-18岁’, else if 年龄<=40 and 年龄>18,then ‘19-40岁’else if 年龄<=60 and 年龄>40,then ‘41-60岁’else‘60岁以上’。
接下来,在输入框输入‘年龄分段 费用’,可以得到不同年龄段的费用情况,如图4-42。

图4-42 年龄分段示例

6. 数据规范化

最后,可以选择将度量列“费用”进行数据规范化,映射到区间【0,1】。
第一种方法是通过最小-最大规范化,点击“增加公式”:
【normcost】:(费用-group_min(费用))/(group_max(费用)-group_min(费用))
公式内容如图4-43所示。

图4-43 最小最大规范化

还可以通过z-得分标准化进行,点击“增加公式”
【znorm】:(费用-group_average(费用))/group_stddev(费用)
公式内容如图4-44所示。

图4-44 z-得分标准化

本章小结

本章概述了数据结构的基本知识,介绍了结构化数据的具体类型:存储于二维表中的数值型数据和非数值型数据各自对应着不同的统计计算和数学操作。
其次是介绍了一些DataFocus支持的数据预处理方式,包含但不限于数据类型转换、数据形式转换、搜索拓展,帮助用户快速定位并提取关键信息。此外,还详细介绍了一些基础但至关重要的数据清洗技巧,如缺失值的填充或删除策略,离群值的检测与处理、数据的规范化处理以及离散化处理等。这些预处理步骤不仅为后续的统计分析奠定了坚实的基础,更是实现数据可视化的前提与关键,它们共同构成高质量可视化的基础。

课后习题

1.结构化数据一般包括哪几种类型?不同数值类型可以对应哪些统计计算?
2.参考应用案例,对《教材_问诊数据》实现数据预处理,并将数据后的数据导出。