首页 > 其他分享 >第八章 获取数据

第八章 获取数据

时间:2023-08-13 09:12:39浏览次数:30  
标签:XML 文件 8.2 读取 read 第八章 获取数据 html

第八章 获取数据

8.1内置数据集

R 的基本分发包中有一个叫 datasets,里面全是示例数据集。使用 data 函数可查看所有你已成功加载了的包的数据集:

data()

如需更完整的列表,包括已安装的所有包的数据,可使用以下方法:

data(package = .packages(TRUE))

如果你想访问任意数据集里的数据,只需调用 data 函数,传入数据集的名称及其所在的包 名(如果此包已被加载,可省略这个 package 参数):

data("kidney", package = "survival")
head(kidney)

8.2读取文本文件

有众多的格式和文本文件标准可用于存储数据。用于存储数据的通用格式为分隔符值(即 CSV 或制表符分隔文件)、可扩展标记语言(XML)、JavaScript 对象表示法(JSON)和YAML(这是 YAML Ain’t Markup Language 的递归表示)。

8.2.1CSV和制表符分隔(Tab-Delimited)文件

8.2.1.1用read.table读取文件

read.table(file,header=TRUE,fill=TRUE,sep="符号",nrow=n,skip=n)

file要读取的文件

header读取该文件(该数据有标题行)的标题行

fill使用NA值代替缺失值

sep决定了使用哪个 字符作为字段之间的分隔符

nrow 可以指定读取数据的n行

skip 决定跳过文件开始的n行

更多高级选项包括:覆盖默认的行名、列名和类,指定输入文件的字符编码,以及输入的字符串格式的列如何声明。

8.2.1.2用read.csv和read.delim读取文件

read.csv 分隔符默认设置为逗号,并假设数据有标题行。

read.csv2 使用逗号作为小数位,并用分号作为分隔符。

read.delim 使用句号作为小数位来导入制表符分隔的文件。

read.delim2 使用逗号作为小数位来导入制表符分隔的文件。

8.2.1.3用write.table和write.csv写入文件

write.table(x,"file",row.names = T,quote=T)

x要写入的数据

file要写入的文件

row.names设置行名为真

quote代表字符串的双引号

8.2.2非结构化文本文件

不是所有的文本文件都像定界符文件那样有一个定义良好的结构。

8.2.2.1用readLines读取文件

text_file <- system.file(
   "extdata",
   "Shakespeare's The Tempest, from Project Gutenberg pg2235.txt",
   package = "learningr" ) the_tempest <- readLines(text_file) the_tempest[1926:1927]
## [1] " Ste. Foure legges and two voyces; a most delicate"
 ## [2] "Monster: his forward voyce now is to speake well of"

8.2.2.2用writeLines写入文件

writeLines(
   rev(text_file),
   "Shakespeare's The Tempest, backwards.txt" 
)

8.2.3XML和HTML文件

安装XML包

install.packages("XML")

XML 包将提供两种选择以存储结果:一是利用内部节点 ,或使用 R 节点。通常,你应使用内部节点来存储,因为这样就能用 XPath来查询节点树。

library(XML) xml_file
<- system.file("extdata", "options.xml", package = "learningr") r_options
<- xmlParse(xml_file)

使用内部节点的一个问题是,str 和 head 等汇总函数不能和它们一起使用。要使用 R- 级的节点,请设置 useInternalNodes = FALSE:

xmlParse(xml_file, useInternalNodes = FALSE) xmlTreeParse(xml_file)

XPath 是一种用于查询 XML 文档的语言,它能基于某些过滤规则寻找到相应的节点。

xpathSApply(r_options, "//variable[contains(@name, 'warn')]")

htmlParse 和 htmlTreeParse 是用于 HTML 页面导入的函数,它们的行为方式基本一样。 XML 格式在序列化(也即存储)对 象时非常有用,这种格式可被大多数其他软件读取。XML 包没有提供序列化的功能,但 你可以使用 Runiversal 包中的 makexml 函数来完成它。

library(Runiversal)
ops <- as.list(options())
cat(makexml(ops), file = "options.xml")

8.2.4JSON和yaml文件

有两个包可用于处理 JSON 数据:RJSONIO 和 rjson。但在读入不正确的 JSON 时,RJSONIO 一般比 rjson 更宽容。双冒号 :: 用于把相同名字的函数从不同的包中分别出来(如果只加载两 个包中的一个,就不需要双冒号):

注:JSON 的规范不允许无穷值或 NaN 值,而且它对缺失数的定义比较模糊。这 两个包处理这些值的方式有所不同:RJSONIO 把 NaN 和 NA 映射为 JSON 的null,但保留正 负无穷;而 rjson 会把所有这些值都转换为字符串:

在 yaml 包中有两个函数能导入 YAML 数据:yaml.load 接受一个 YAML 的字符串,并将其转换为 一个 R 对象;yaml.load_file 也一样,不过它把输入的字符串作为包含 YAML 文件的路 径处理:

8.3读取二进制文件

8.3.1读取Excel文件

R提供了读取 Excel 文件的函数:使用 read.xlsx 和 read.xlsx2 导入电子表格,read.xlsx2的速度更快且底层的 Java 库也比 R 程序更加成熟。

8.3.2读取SAS、Stata、SPSS和MATLAB文件

使用 read.ssd 读取 SAS 永久数据集

使 用 read.dta 读取 Stata 的 DTA 文件

使用 read.spss 读取 SPSS 数据文件的方法

使用 write.foreign将SAS,Stata,SPSS 写入文件

可以使用 R.matlab 包中的 readMat 和 writeMat 分别对MATLAB 的二进制数据文件进行读写。

8.4Web数据

8.4.1网站API下载数据

有一些包可通过网站的 API 接口直接下载数据到 R 系统。例如:查看世界银行的世界发展指标数据

install.packages("WDI")#安装包
library(WDI) #导入包
wdi_datasets <- WDIsearch()#列出所有数据集
head(wdi_datasets)#查看
wdi_trade_in_services <- WDI(
    indicator = "BG.GSR.NFSV.GD.ZS"
 ) #取其中一条数据
 str(wdi_trade_in_services)#用str查看

8.4.2抓取网页

install.packages("RCurl")#安装XML包
library(RCurl)#加载XML包
install.packages("XML")#安装XML包
library(XML)#加载XML包
URL <-"http://nba.sports.163.com/stat/playerrank/all/point/"#网页地址
allSourceCode <- IMUFE_url %>% 	read_html(encoding = "UTF-8")#编码格式
allSourceCode <- allSourceCode %>% 
html_node("div[id=binf]")#读取id为binf的div
IMUFE_text <- allSourceCode %>% 
html_nodes("a") %>% html_text()#读取div中a标签中的文本
function_Name meaning_Chinese
back 导航工具
encoding 猜测并修复错误的字符编码。
follow_link 导航到一个新的url。
google_form 使链接到谷歌形式给定的id
guess_encoding 猜测并修复错误的字符编码。
html 解析HTML页面。
html_attr 从html中提取属性、文本和标记名称。
html_attrs 从html中提取属性、文本和标记名称。
html_children 从html中提取属性、文本和标记名称。
html_form 解析页面中的表单。
html_name 从html中提取属性、文本和标记名称。
html_node 从HTML文档中选择节点
html_nodes 从HTML文档中选择节点
html_session 在html浏览器中模拟会话。
html_table 将html表解析为数据帧。
html_text 从html中提取属性、文本和标记名称。
is.session 在html浏览器中模拟会话。
jump_to 导航到一个新的url。
pluck 按位置提取列表的元素。
read_xml.response 解析HTML页面。
read_xml.session 解析HTML页面。
repair_encoding 猜测并修复错误的字符编码。
session_history 历史记录导航工具
set_values 在表单中设置值。
submit_form 将表单提交回服务器。

8.5访问数据库

R可与所有常见的数据库相连接。DBI 包为访问 DBMS 提供了统一的语法——目前的 SQLite、MySQL/MariaDB、PostgreSQL 和 Oracle 都 能支持,它还提供了一个封装了 JDBC API 的函数。

数据库
SQLite RSQLite
MySQL RMySQL
PostgreSQL PostgreSQL
Oracle ROracle
JDBC RJDBC
ODBC/SQL Server/Access RODBC
library(DBI)#加载包
library(RSQLite)#加载包
driver <- dbDriver("SQLite")#定义驱动
 db_file <- system.file(
   "extdata",
   "crabtag.sqlite",
   package = "learningr" )#定义文件
conn <- dbConnect(driver, db_file)#连接数据库
query <- "SELECT * FROM IdBlock" 
(id_block <- dbGetQuery(conn, query))#进行数据库操作
dbDisconnect(conn)#断开连接
dbUnloadDriver(driver)#卸载驱动

标签:XML,文件,8.2,读取,read,第八章,获取数据,html
From: https://www.cnblogs.com/simpleness/p/17626115.html

相关文章

  • 第八章:分布式系统的麻烦
    故障与部分失效如果发生内部错误,我们宁愿电脑完全崩溃,而不是返回错误的结果,因为错误的结果很难处理。因为计算机隐藏了模糊不清的物理实现,并呈现出一个理想化的系统模型,并以数学一样的完美的方式运作。在分布式系统中,尽管系统的其他部分工作正常,但系统的某些部分可能会以某种不......
  • C++ Primer 学习笔记——第八章
    第八章IO库前言C++语言并不会直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO。这些类型支持从设备中读取数据、向设备写入数据IO操作。设备可以是文件、控制台窗口等,还有一些类型允许内存IO。IO库定义了读写内置类型值的操作。8.1IO类在之前我们使用的IO类型......
  • 在 SQL Server 中获取数据库备份历史记录
    有多种方法可以获取SQLServer中的数据库备份历史记录。这里我列出了两种获取备份历史记录的最快方法。我经常使用这些方法。这些方法将有助于在对数据库进行重大更改之前确认最新的备份是否已成功进行。使用备份和恢复事件报告如果您使用SQLServerManagementStudio (SSMS......
  • 第八章:利于集成的分支策略
    版本控制系统的使用目的:用于存储及追踪目录(文件夹)和文件的修订历史(这里的修订操作包括3类:新增、修改和删除),从而让你能够回溯那些被纳入其管理范围之内的任意对象的任意一次修订。集中式版本控制系统:有一个单一的集中管理的版本控制管理服务器,典型代表SVN有两......
  • SQL 语句获取数据库各表分配空间、占用空间、记录行数
    SELECT    t.NAME AS TableName,    s.Name AS SchemaName,    p.rows AS RowCounts,    SUM(a.total_pages)*8 AS TotalSpaceKB,    CAST(ROUND(((SUM(a.total_pages)*8)/1024.00),2) AS NUMERIC(36,2)) AS TotalSpaceMB,    SUM(a.......
  • mongodb随机获取数据
    MongoDB随机获取数据在MongoDB中,我们可以使用find方法来查找符合特定条件的文档。通常,我们会使用查询操作符来指定条件,例如相等、大于、小于等。但是,有时我们需要从数据库中随机获取一些数据。本文将介绍如何在MongoDB中实现随机获取数据的操作。随机获取单个文档要随机获取单个......
  • redis 如何解决并发之前获取数据都是空
    Redis如何解决并发之前获取数据都是空在并发场景中,我们有时会遇到一个问题:多个线程在同一时刻获取数据,但是数据还没有被写入到数据库中,此时获取到的数据都是空。为了解决这个问题,我们可以利用Redis提供的锁机制和发布/订阅功能来实现。Redis锁机制Redis提供了一种简单而有......
  • 数据结构(第八章)
    数据结构(第八章)排序一、插入排序1.1、直接插入排序直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。代码展示:#defineMaxSize100//定义一个顺序表结构typedefstruct{intdata[MaxSize+1];//定义一个排序数......
  • AOP通知获取数据
         ......
  • Java获取数据库的列名、列数、标题、类型等信息, ResultSetMetaData
    importjava.sql.*;publicclassjdbcTest{publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{//1、加载驱动Class.forName("com.mysql.jdbc.Driver");//2、用户信息和urlStringurl="......