访问 URL 并使用 R 读取数据

Posted

技术标签:

【中文标题】访问 URL 并使用 R 读取数据【英文标题】:Access a URL and read Data with R 【发布时间】:2011-09-12 01:20:30 【问题描述】:

有没有一种方法可以指定并从网站 URL 获取数据到 CSV 文件以使用 R 进行分析?

【问题讨论】:

【参考方案1】:

在最简单的情况下,只需这样做

X <- read.csv(url("http://some.where.net/data/foo.csv"))

加上read.csv() 可能需要的选项。

在 2020 年 9 月或 9 年后编辑:

几年来,R 还支持直接将 URL 传递给read.csv

X <- read.csv("http://some.where.net/data/foo.csv")

2020 年底编辑。原帖继续。

长答案:是的,这是可以做到的,许多软件包多年来一直使用该功能。例如。 tseries 软件包正是使用此功能从 Yahoo! 下载股票价格!近十年:

R> library(tseries)
Loading required package: quadprog
Loading required package: zoo

    ‘tseries’ version: 0.10-24

    ‘tseries’ is a package for time series analysis and computational finance.

    See ‘library(help="tseries")’ for details.

R> get.hist.quote("IBM")
trying URL 'http://chart.yahoo.com/table.csv?    ## manual linebreak here
  s=IBM&a=0&b=02&c=1991&d=5&e=08&f=2011&g=d&q=q&y=0&z=IBM&x=.csv'
Content type 'text/csv' length unknown
opened URL
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
........
downloaded 258 Kb

             Open   High    Low  Close
1991-01-02 112.87 113.75 112.12 112.12
1991-01-03 112.37 113.87 112.25 112.50
1991-01-04 112.75 113.00 111.87 112.12
1991-01-07 111.37 111.87 110.00 110.25
1991-01-08 110.37 110.37 108.75 109.00
1991-01-09 109.75 110.75 106.75 106.87
[...]

这在help(connection)help(url) 的手册页中有详细记录。另请参阅 R 随附的“数据导入/导出”手册。

【讨论】:

在最简单的情况下,只需执行 X &lt;- read.csv(url("http://some.where.net/data/foo.csv")) 加上 read.csv() 可能需要的选项。 如何关闭此连接? 我试过了,但没有用。任何人都可以帮忙吗? cv_today &lt;- read.csv(url("https://github.com/eparker12/nCoV_tracker/blob/master/input_data/coronavirus_today.csv")) 可能是错误的 URL。导航到文件,在 web ui 中选择 raw,使用该 URL。 有人可以帮助处理 Kaggle 上的这些数据吗:kaggle.com/c/house-prices-advanced-regression-techniques/data 我尝试使用以下代码:datakaggle.com/c/house-prices-advanced-regression-techniques/…", skip = 1)【参考方案2】:

基础

read.csv 没有 url 函数就可以正常工作。如果 Dirk Eddelbuettel 将其包含在他的回答中,我可能会遗漏一些东西:

ad <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
head(ad)

  X    TV radio newspaper sales
1 1 230.1  37.8      69.2  22.1
2 2  44.5  39.3      45.1  10.4
3 3  17.2  45.9      69.3   9.3
4 4 151.5  41.3      58.5  18.5
5 5 180.8  10.8      58.4  12.9
6 6   8.7  48.9      75.0   7.2

使用两个流行包的另一种选择:

数据表

library(data.table)
ad <- fread("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
head(ad)

V1    TV radio newspaper sales
1:  1 230.1  37.8      69.2  22.1
2:  2  44.5  39.3      45.1  10.4
3:  3  17.2  45.9      69.3   9.3
4:  4 151.5  41.3      58.5  18.5
5:  5 180.8  10.8      58.4  12.9
6:  6   8.7  48.9      75.0   7.2

阅读器

library(readr)
ad <- read_csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
head(ad)

# A tibble: 6 x 5
     X1    TV radio newspaper sales
  <int> <dbl> <dbl>     <dbl> <dbl>
1     1 230.1  37.8      69.2  22.1
2     2  44.5  39.3      45.1  10.4
3     3  17.2  45.9      69.3   9.3
4     4 151.5  41.3      58.5  18.5
5     5 180.8  10.8      58.4  12.9
6     6   8.7  48.9      75.0   7.2

【讨论】:

您的回答比我晚了 许多 年,事实上,代码已更改为支持更直接的方法。但是当我写下我的答案时它不可用。【参考方案3】:

网页上的数据通常采用 XML 表的形式。您可以使用the package XML 将 XML 表读入 R。

在这个包中,函数

readhtmlTable(<url>)

将在页面中查找 XML 表并返回数据框列表(找到的每个表对应一个)。

【讨论】:

【参考方案4】:

除了read.csv(url("...")),你还可以使用read.table("http://...")

例子:

> sample <- read.table("http://www.ats.ucla.edu/stat/examples/ara/angell.txt")
> sample
                V1   V2   V3   V4 V5
1        Rochester 19.0 20.6 15.0  E
2         Syracuse 17.0 15.6 20.2  E
...
43         Atlanta  4.2 70.6 32.6  S
> 

【讨论】:

这是一个很好的答案,在r-graph-gallery 中广泛用于从github 读取csv 数据【参考方案5】:

scan可以自动读取网页;你不一定要搞乱连接。

【讨论】:

我认为您需要连接才能访问(毕竟是远程的)网页。连接是一个奇妙的抽象,它允许您以一致的方式使用文件、URL、从命令到标准输出的管道等 pp。 不是我怀疑连接的有用性,而是扫描的帮助文件说“文件也可以是一个完整的URL”。我在没有正式联系的情况下就这样做了,它确实有效。 但是您通常不想要scan,而是想要read.table()read.csv(),它们会为您提供更高级别的访问权限。 是的。我现在意识到我读的是标题而不是问题,它说的是一个 CSV 文件。如果文件的格式是非标准的,那是你(可能)想要scan 的时候。 (这就是我使用它的情况。)

以上是关于访问 URL 并使用 R 读取数据的主要内容,如果未能解决你的问题,请参考以下文章

R语言 CSV文件

R读取MySql数据库

R语言读取Hive数据表

pandas使用read_csv函数读取文件最后N行数据并保留表头pandas使用read_csv函数读取网络url链接数据

如何用R读取数据

用lua语言访问一个URL,然后获取到相应的json数据