在 R 中使用格式化文本文件
介绍
在本指南中,您将了解 R 提供的处理格式化文本文件的功能。处理文件是一项非常常见的任务,尤其是在 R 中。大多数时候,数据科学家在网络共享或硬盘上都有大量数据。了解如何访问它们并处理这些文件至关重要,因为要处理的大量数据与脚本的长时间运行有关。处理文件的效率越高,优化代码可以节省的时间就越多。首先,我们将阐明“格式化文本文件”的含义,然后使用 R 中提供的接口。
常见文本文件
这些格式对你来说应该很熟悉:
- TXT
- CSV
- JSON(JavaScript 对象表示法)
- XML(可扩展标记语言)
这些类型是存储非结构化或结构化数据的最常见类型。当您使用包含非结构化数据的常见文件格式时,您需要理解它。这意味着您需要了解这些文件中的每条信息并相应地调整您的应用程序。当数据是结构化时,情况要简单得多。非结构化数据和正则表达式齐头并进;正则表达式允许您解析出有意义的信息,同时保持资源消耗相对较低。有关正则表达式的更多信息,请查看此资源。
先决条件
默认的 R 安装没有支持您活动的软件包,但其多功能软件包存储库允许您添加此功能。您需要获取并安装readtext包。启动 R 控制台后,发出以下命令:
install.packages("readtext")
这样,最新的稳定版本就安装在你的系统上了。如果你想尝试最新版本及其功能,你可以从Github安装它。以下命令将为你执行此操作:
install.packages("devtools")
devtools::install_github("quanteda/readtext")
为了能够安装前沿软件包,您需要安装devtools软件包,那么该行下面的语法才是真正的关键。这里发生的事情是,以下前缀被添加到 https://github.com/,如果您在浏览器中输入 URL https://github.com/quanteda/readtext,它将带您到该软件包的源文件。
行动
在本节中,您将使用美国提供的有关被盗枪支的数据。只需下载一些 CSV 文件并将它们放在同一个文件夹中即可。启动 R 控制台并加载readtext库。
library(readtext)
现在您需要设置DATA_DIR变量,它将是您的工作区。当您安装readtext包时,它会附带一些安装在包位置的示例。
DATA_DIR <- system.file("extdata/", package = "readtext")
在 Windows 机器上你应该看到类似的输出:
1] "C:/Program Files/R/R-3.6.3/library/readtext/extdata"
它有几个子文件夹,如下所示:
├───csv
├───json
├───pdf
│ └───UDHR
├───tsv
├───txt
│ ├───EU_manifestos
│ ├───movie_reviews
│ │ ├───neg
│ │ └───pos
│ └───UDHR
└───word
如果要从word文件夹加载数据,需要执行以下操作:
word_data <- readtext(paste0(DATA_DIR, "/word/*"))
现在word_data包含以下信息:
readtext object consisting of 6 documents and 0 docvars.
# Description: df[,2] [6 x 2]
doc_id text
<chr> <chr>
1 21Parti_Socialiste_SUMMARY_2004.doc "\"[pic]\r\nRés\"..."
2 21vivant2004.doc "\"http://www\"..."
3 21VLD2004.doc "\"http://www\"..."
4 32_socialisti_democratici_italiani.doc "\"DIVENTARE \"..."
5 UK_2015_EccentricParty.docx "\"The Eccent\"..."
6 UK_2015_LoonyParty.docx "\"The Offici\"..."
现在让我们回到stealguns文件夹。您可以使用上述选项简单地指定stealguns的DIR_PATH文件夹,或者单独使用每个文件。
> gun_data_q1 <- readtext("C:/Users/dszabo/Desktop/stolenguns/2016-first-quarter-stolen-guns.csv")
> gun_data_q2 <- readtext("C:/Users/dszabo/Desktop/stolenguns/2016-second-quarter-stolen-guns.csv")
> gun_data_q3 <- readtext("C:/Users/dszabo/Desktop/stolenguns/2016-third-quarter-stolen-guns.csv")
> gun_data_q4 <- readtext("C:/Users/dszabo/Desktop/stolenguns/2016-fourth-quarter-stolen-guns.csv")
每个变量都会保存类似的内容。
readtext object consisting of 7 documents and 9 docvars.
# Description: df[,11] [7 x 11]
doc_id text Date Brand Model Color Stolen Stolen.From Status Incident.number Agency
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 2016-first-quar~ "\"P1382~ 01/06~ HI POI~ "9MM" "BLK" Stolen ~ Vehicle Recovere~ B16-00694 BPD
2 2016-first-quar~ "\"P1417~ 01/15~ JENNIN~ "" "COM" Stolen ~ Residence Not Reco~ B16-01892 BPD
3 2016-first-quar~ "\"P1437~ 01/24~ CENTUR~ "M92" "" Stolen ~ Residence Recovere~ B16-03125 BPD
4 2016-first-quar~ "\"P1470~ 02/08~ TAURUS "PT740~ "" Stolen ~ Residence Not Reco~ B16-05095 BPD
5 2016-first-quar~ "\"P1504~ 02/23~ HIGHPO~ "CARBI~ "" Stolen ~ Residence Recovere~ B16-06990 BPD
6 2016-first-quar~ "\"P1504~ 02/23~ RUGAR "" "" Stolen ~ Residence Recovere~ B16-06990 BPD
# ... with 1 more row
有一个选项,您可以自定义要加载到数据框中的内容,称为文档级元数据。您可以从文件名中获取文档变量,它甚至允许您单独命名它们。devsep参数定义分隔符或正则表达式字符串。
gun_data_q4 <- readtext("C:/Users/dszabo/Desktop/stolenguns/2016-fourth-quarter-stolen-guns.csv",docvarsfrom = "filenames", dvsep = "_", encoding = "ISO-8859-1")
这应该会产生以下结果。
doc_id text Date Brand Model Color Stolen Stolen.From Status Incident.number Agency docvar1
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 2016-fourth-quarter-stolen-guns.csv.1 "\"P22093\"..." 10/25/2016 SMITH AND WESSON "SD9VE" "" Stolen Locally Vehicle Not Recovered B16-42866 BPD 2016-fourth-quarter-stolen-guns
2 2016-fourth-quarter-stolen-guns.csv.2 "\"P22183\"..." 10/27/2016 TAURUS "PT111G2" "BLACK" Stolen Locally Residence Not Recovered B16-43134 BPD 2016-fourth-quarter-stolen-guns
3 2016-fourth-quarter-stolen-guns.csv.3 "\"P22497\"..." 11/07/2016 SIG SAUER "P290" "" Stolen Locally Vehicle Not Recovered B16-44838 BPD 2016-fourth-quarter-stolen-guns
4 2016-fourth-quarter-stolen-guns.csv.4 "\"P22910\"..." 11/18/2016 TAURUS "85UL" "SILVER" Stolen Locally Residence Not Recovered B16-46503 BPD 2016-fourth-quarter-stolen-guns
5 2016-fourth-quarter-stolen-guns.csv.5 "\"P23536\"..." 12/07/2016 SMITH & WESSON "" "" Stolen Locally Vehicle Not Recovered B16-48692 BPD 2016-fourth-quarter-stolen-guns
6 2016-fourth-quarter-stolen-guns.csv.6 "\"P23657\"..." 12/09/2016 COBRA ".380" "BLACK" Stolen Locally Residence Not Recovered B16-49060 BPD 2016-fourth-quarter-stolen-guns
使用readtext模块的方式很大程度上取决于数据所采用的实际格式。
结论
在本指南中,我们了解了 R 提供哪些功能来处理常见格式的文本文件。我们了解了有哪些先决条件可以帮助我们完成这一旅程,并掌握了帮助我们进一步前进的基础。我希望本指南对您有所帮助,并感谢您阅读它。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~