评估数据是数据整理的第二步。评估数据就像作侦探一样,检查数据集是否存在两个问题:数据质量问题(即内容问题)和缺乏整洁度(即结构性问题)。
数据质量问题包含:数据缺失,数据重复以及数据错误等问题。又被称为脏数据
不整洁或杂乱的数据存在明显的结构问题。
评估的两个方法:目测评估,代码编程评估
首先,对脏数据和杂乱数据进行明确定义:
为了方便理解,将数据想象成卧室,一间脏兮兮的卧室可能有脏盘子和餐具,还有像糖果纸或香蕉皮这样的垃圾。甚至有从户外带进来的脏东西。这些东西本来不属于你的卧室。
卧室杂乱的部分则不同:杂乱是结构性和组织性的问题。想象一下卧室满地都是衣服。这些衣服应该属于卧室,不属于地上。想象你凌乱不堪的床。
内容有问题的脏数据通常被称为低质量数据。其中可能包括不准确的数据,损坏的数据和重复的数据。
杂乱是结构性和组织性的问题。通常称之为不整洁。
整洁的数据是指:每个变量构成一列,每次观察构成一行,每类观察单元构成一个表格。除此之外其他任何排列都是杂乱的。
hadley wickham是数据整洁格式的创始人,他在有关整洁数据的论文中使用了这一术语。
未清理数据分为两种:
脏数据,也称为低质量数据。低质量数据存在内容问题。
杂乱数据,也称为不整洁数据。不整洁数据存在结构问题。
评估类型和步骤:
数据评估类型和风格可以分为两种,目测评估,编程评估
编程评估:计算(info),绘制数据图(更多的用于探索性数据分析)。
无论用那种评估方式,数据评估都可以分为两步:
1、查找问题并记录该问题。记录时按质量和整洁度对问题进行分类。记录只是我们通过观察所发现的问题。不需要写出如何来纠正这个问题。因为这是数据整理框架中清理数据的一部分。
目测评估:
可以使用pandas,Google sheet,Excel等。数据比较小时使用Google sheet和Excel,当数据比较大时就不得不用pandas了。
目测评估的优势:
熟悉数据集的意义。真正了解每列的内容。
了解数据集,了解数据内容,就像将其映入你的脑海一样。
非定向的目测评估也是非常有用的,可以随意翻滚来发现一些问题。
评估与探索
数据评估和数据探索之间存在细微差别。
评估是数据整理的一部分,而探索是探索性数据分析的一部分。
数据整理重在收集正确的数据,评估数据的质量和结构,然后修改以清理数据。但评估和清理数据等环节,并不会改进你的分析。也不会改善可视化或模型。其目标仅仅是是数据为后面的工作提供助力。
EDA在于探索并后续增加数据,以最大限度的发挥你的分析,可视化和模型潜力。在探索数据时,通常会使用简单的可视化来总结数据的主要特征。进而删除异常数值,并从现有数据创建新的更具描述性的功能等。也成为特征工程。
实际上,数据整理和EDA可以可以同时进行。
评估是可以将评估问题分为质量问题和整洁度问题进行分类,将问题记录在不同的分类明细下。通常将评估的内容放在clean上面,这样在后面清理和编码的时候,不需要向上滚动过多的长度。
质量问题:
目测评估(质量问题):
一般是在了解你需要分析的内容之后,再进行评估。
评估内容:数据缺失(NaN)数据类型,数据长度,
数据质量维度
数据质量维度有助于在评估和清理数据时为我们提供思维指导。四个主要的数据质量维度分别是:
完整性(compleness):我们是否记录了所有内容?是否缺少记录?是否丢失某个行、列或单元格?
有效性(validity):我们已经做了记录,但却无效,即它们不符合定义的模式。模式是一组定义的数据规则。这些规则可以是真实世界约定成俗的事实(例如身高不可能是负数)和表格约定成俗的属性(例如表中的唯一键)。
准确性(accuracy):不正确的数据是有效的错误数据。这些数据符合定义的模式,但仍然不正确。例如:5 磅的患者体重太重,这显然是错误的,因为体重不可能这么轻。
一致性(consistency):不一致的数据是有效和准确的,但是指代同一件事情的正确方式有多个。最好确保表和/或表内表示相同数据的列中的数据具有一致性,即采用标准格式。
编程评估:使用pandas函数和方法—
1、根据解决的问题来进行评估
2、也可使用非定向编程评估,指的是随机输入编程评估,不带有任何目标,这种方法有助于你找到数据评估的线索,以便后期进行更准确的评估。
pandas的一个便捷方法是dateframe样本法。
df.sample()也可以获得任意数量的样本。–df.sample(5)
目测评估后一般先使用.info
1、info可以找到缺失值,然后使用df[df[‘column’].isnull()],反馈与数据框相同行数的布尔数组以及是否地址列中的该行为空。2、确定数据框各类的数据类型,确定是否有误。–数据类型问题都是有效性问题。
int—整数
object—对象想,字符型
float–浮点型
然后是df.decribe()–
df.sample()
df[df.column.duplicated()] 返回重复的列
df.column..sort_values()—对指定值排序
以下是你经常会在 pandas 中使用的程序评估方法:
.head (DataFrame 和 Series)
.tail (DataFrame 和 Series)
.sample (DataFrame 和 Series)
.info (仅限于 DataFrame)–返回数据框的简单结构,得到条目和列的数量,以及每一列的数据类型和整个数据框的占用内存。
.describe (DataFrame 和 Series)—会生成对数据框中值数据类型的描述性数据统计。
.value_counts (仅限于 Series)–是一种直方图函数,返回的是该列中某些特定值的计数
各种索引和筛选数据的方法 (.loc and bracket notation with/without boolean indexing, also .iloc)
在下面尝试这些方法,并记住结果。随后的课程中会需要一些结果。
核对 pandas API reference 获取详细使用方法信息。
在 patients 表格中使用 .head 和 .tail。
在 treatments 表格中使用 .sample 。
在 treatments 表格中使用 .info 。
在 patients 表格中使用 .describe。
在 adverse_reactions 表格的 adverse_reaction 一列使用 .value_counts 。
在 patients 表格中选择 city 来自纽约的病人记录。如果遇到困难,根据 Chris Albon 在 利用 Pandas 索引和筛选数据 ,核对 根据条件语句选择 (布尔)。
整洁度问题
目测评估:melt函数和split函数,主要用于评估第一个和第二个整洁度问题,及一个变量为一列
编程评估:可以轻松评估第三个整洁度问题。主要是使用.info()函数,确定每个变量到底属于什么表格,我们如果使数据最终成为一个整体,我们最终需要多少个表格。
lis(df)可以获得df的所有列名。
all.columns = pd.Series(list(df1)+list(df2)+list(df3))
all.columns[all.columns.duplicated()]
–可以查看不同的表格中重复的列名。
脏数据的原因
脏数据 = 低质量数据 = 内容问题
脏数据的原因有很多。基本上只要有人参与的地方,就会有脏数据。接触我们所处理数据的方式也很多。
可能会存在一些用户输入错误。某些情况下,我们不会设定任何数据编码标准,或者即使我们设定标准,人们也很少遵守,最终一样导致数据出现问题。我们可能需要集成数据,将不同的模式用于同一类型的项目。数据系统过时,光盘和内存限制比现在更具有局限性,所以不可能对数据进行编码。随着系统不断发展,需求发生了变化,数据也发生了变化。一些数据将不具有唯一的标识符。从一种格式转换为另一种格式将会导致其他数据丢失。当然,程序员可能会出错。最后,数据可能在传输或存储过程中被宇宙射线或其他物理现象破坏。所以呢,这不是我们的错。
杂乱数据的原因
杂乱数据 = 不整洁数据 = 结构性问题
杂乱数据通常是数据规划不当的结果。或者对 整洁度数据 的优点缺乏认识。但好的一点是,相对于上面提到的大多数脏数据,杂乱数据的原因更容易发现。