详解:规整数据(Tidy Data)的理论与Python实践
|
来源: 数据科学DataScience 多数数据科学/机器学习项目都遵循帕累托原理,即我们用将近80%的时间进行数据准备,其余20%的时间用于选择和训练合适的机器学习模型。 通常,我们用于创建机器学习模型的数据集是混乱的,无法直接在模型中使用。我们需要确保输入到模型中的数据都是规整的数据,这就需要执行一些数据清理步骤以获得可以拟合到模型中的数据集。实际上,机器学习/数据科学项目的第一步正是数据的清洗与整理,而且在面对新的项目和问题时,我们往往需要多次重复数据清理过程。可以说数据清理是数据科学家在对数据执行任何EDA(探索性数据分析)或统计分析之前执行的最重要且耗时的过程之一。
1、什么是Tidy Data? Tidy data(规整数据)是为了可以方便地查看数据和将数据应用在模型中而进行数据清理过程的产物。数据规整的原则定义了一些在执行数据清理操作时需要遵循的准则,从而有助于我们进行数据分析。 它提供了一种标准的方法来组织数据集中的数据值,并使我们定义数据集的方式形式化。 而且,规整数据使数据处理过程更容易。与数据库规范化形式(1NF,2NF,3NF和BCNF)一样,规整数据原则具有一些预定义的规则。
2、整洁数据原则 规整数据的原则包括: 每列代表数据集中的一个单独变量 每行代表数据集中的单个观察值 每种观察单位组成一个表格 (这些原则等效于数据库第三范式,3NF)。 接下来让我们看一些现实的数据集示例,以更详细地了解规整数据的原则。
3、每列代表一个单独变量 假设我们有一个存储每位员工的每日冰淇淋销售数据数据集, 单击此处下载冰淇淋销售示例csv文件,内容如下图所示。
这样的数据在报告中展示是十分友好的,但在分析过程中并不好用。数据中每天(周一至周日)的数据作为单独的变量用一列表示出来,但是按照规整数据原则的第一条(每列代表数据集中的一个单独变量), 我们需要将日期名称转置为一列,因为所有日期列其实代表的是同一个变量–日期。 我们可以使用pandas.melt将日期名称列转换为单列值的方法,这将帮助我们将凌乱的数据集转换为规整数据集。具体代码如下所示: # 导入pandas库 # 使用pandas.read_csv方法 读取每位员工每日冰淇淋销售数据的csv文件 ''' # 打印出转换后的规整数据集前十行
4、每行代表单个观察值 假设我们有几个城市的天气数据,每个日期下都有最低和最高温度的详细信息, 单击此处下载城市气温示例csv文件,内容如下图所示。
这个数据集主要有两个问题: (1)单一变量“日期”的值分布在不同列上,在分析过程中要在不同列中移动; (2)置于行中的最低和最高温度值需要作为单独的列进行转置,因为它们其实代表两个不同的变量-–最低和最高温度。 要解决这些问题,我们可以先使用pandas.melt方法将日期值移动到行中, 然后使用数据透视表pivot或者pivot_table方法将最低和最高温度值作为数据集中的独立列。具体代码如下所示: # 使用pandas.read_csv方法 读取每位员工每日冰淇淋销售数据的csv文件 # pandas.melt方法将日期值转换为一列,各参数含义如第一部分所示 # 打印出前十行以供参考 '''pivot_table方法将最低和最高温度行转化为独立的列。 ''' # 将列名称VarType重置为空
5、每种观察组成一个表格 按照规整数据的原则,每种类型的观察单位组成一个表格,因此当一种类型的观测分布在多个文件或表格中时需要将其合并为一个表。 假设我们有两个含有日期列的csv文件,内容如下图所示,单击此处下载示例文件。
我们可以使用pandas库中concat、merge、join等方法完成两个或多个数据表向规整数据的转换。具体代码如下所示: # 导入两个含有相同观测的csv文件 # pandas.merge中left、right参数分别传入含有同名列的数据框,on参数传入进行合并的列名 # 打印合并后的规整数据集 # concat与join方法
原文作者:Gopal Krishna Ranjan 原文标题:Tidy Data in Python – First Step in Data Science and Machine Learning 原文来源:https://www.sqlrelease.com/tidy-data-in-python-first-step-in-data-science-and-machine-learning 本文由师兵范、朝乐门负责翻译、整理,并适当扩展。 |
时间:2019-12-31 07:29 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。