在本课程中,我们将学习如何将文件中的外部数据导入R。如果需要,还将学习如何将数据导出或写入文件。
一旦我们将数据加载到内存中,就可以执行数据过滤或查询以关注数据集的关键方面。
我们还将学习如何在数据框中重新排序数据,最后将探索数据可视化技术。
R提供了广泛的数据可视化选项,在本课程中,我们将研究如何绘制数据以进行趋势分析和分布分析。
在以后的课程中,我们将探讨许多其他类型的数据可视化技术。
首先让我们研究一下如何将文件中的数据读取到R中。
通常,我们的数据以半结构化文本文件形式提供。 数据被认为是半结构化的,因为每一行数据代表一个观察值以及与每个观察值相关的多个变量或测量值。 使用定界符或按位置将测量分开。
R可以从许多其他格式(包括电子表格和其他统计软件产品)中读取数据,但是我们将专注于分析中最常用的格式。
让我们首先检查一些使用定界符从文本文件中导入数据的选项。
read.table函数将假设第一行以及随后的每一行都包含观察值来导入数据。 如果您的数据在第一行中包含标题信息,则只需包含参数header = TRUE。
如果您指定数据具有标题行,则这些值将用作R中新数据帧的列名。
默认情况下,read.table函数将假定文本文件中的第二行和后续行是用空格字符分隔的度量。 如果使用其他方法对数据进行定界,请使用sep参数。
R将尝试根据遇到的数据类型自动确定每个测量的数据类型。 通常最好检查数据文件,并仔细考虑计划将其保留在R中进行分析的数据使用的数据类型。 为此,只需使用colClasses参数指定类名的字符向量,例如“整数”或“日期”。
如果数据集中没有标题,或者希望定义与数据第一行不同的列名,请使用col.names参数为数据框指定列名的字符向量。
通常,数据文件使用特殊字符定界,例如逗号“,”。 这些逗号分隔的值或CSV文件通常由电子表格应用程序(例如Microsoft Excel)创建。 默认情况下,read.csv函数将导入数据,其中每行的元素均以逗号分隔。 由于逗号字符通常在非英语国家/地区用作小数点,因此使用dec或小数选项。
read.delim函数可用于制表符分隔的文件。
其他有用的选项包括能够跳过文件开头的非观测数据,以及在文本行的第一位置使用特殊字符来忽略任何注释行的功能。
skip选项可用于绕过文件中的任何初始信息,comment.char可用于忽略任何数据,其中第一个字符表示不属于正在分析的数据集的信息。 colClasses选项可用于设置要读取的数据的类名称。 例如,如果第一个元素是日期值,则colClasses向量可以将“日期类”指定为第一个数据类型。
如果所提供的数据的观察值在每行的固定位置定义,则可以使用read.fwf(读取固定宽度格式)功能。
您可以通过提供包含每个值的宽度的数字矢量来指定每个测量的宽度。
列名和/或数据类型以与前面讨论的相同方式定义。
现在我们已经将数据存储在内存中,让我们开始探索。
让我们使用R探索公共数据。
在此示例中,我们将处理1917年至2010年在加拿大安大略省出生的男性的出生登记。数据集是由安大略省政府根据“开放数据”倡议提供的。
此处显示逗号分隔值文件的快照。
通过检查文件格式,我们了解到我们应该跳过第一行,而将第二行用作标题,因此应将描述用作数据框的列名。 我们将使用read.csv函数并将数据加载到称为n的数据帧中。
成功完成读取操作后,我们通常会检查新数据帧的结构。 我们已经确认n是一个data.frame,具有对3个不同变量的66,351个观察值。
度量或变量名称为:年,名称和频率
R已自动确定Year属性和Frequency属性均为整数数据类型。
注意,R如何将名称定义为因子而不是字符向量。 可以使用as.is = TRUE或stringsAsFactors = FALSE选项更改此默认行为。
在这种情况下,我们希望将每个名称都视为一个因素,因此我们了解数据中包含3736个级别或唯一名称。
R用户经常会使用head()函数检查几行数据,或者在这种情况下,我们将使用dim()函数的维来验证行数和列数。
现在是时候探索了。 我们的目标是找出最近一年最受欢迎的名字。
因此,我们首先需要使用max函数来确定最近的一年。 我们使用max函数和美元符号($)表示我们希望请求Year度量的bigts值。
我们发现最近的数据年份是2010年。现在,我们将创建一个仅包含2010年出生和登记的男婴的新数据框。此新数据框称为n.2010。
请注意,我们如何使用方括号表示法为返回的行指定过滤条件。 如果您熟悉SQL,则相当于WHERE子句或选择操作。 由于数据帧的索引方法涉及行和列,并用逗号(,)分隔,因此必须使用逗号运算符遵循n $ Year == 2010的条件表达式。 列没有条件,因此将返回所有定义的列信息。
我们使用nrow()函数检查2010年注册的姓名数量。现在我们知道,已经注册了1,503个男性姓名。 顺便说一句,根据我们的数据来源,如果注册的名称少于五(5)次,则出于隐私原因,该名称未包含在数据集中。
我们的目标是找到最近一年最受欢迎的婴儿名字,所以现在我们需要对数据进行排序以得到答案。
在我们对数据进行排序并确定5个最流行的名称之前,另一个过滤数据的方法是使用subset()函数。
在这里,我们将原始数据帧传递给函数,然后还提供条件表达式。 默认情况下,将返回所有列数据,但这可以指定。
我们验证具有相同的1,503个观察值。 现在让我们对数据进行排序。
From: https://bytes.com/topic/apis/insights/958468-lesson-4-part1-data-management-visualization