80 votes

Accéder à une URL et lire des données avec R

Existe-t-il un moyen de spécifier et d'obtenir des données à partir de l'URL d'un site web vers un fichier CSV pour les analyser à l'aide de R ?

93voto

Dirk Eddelbuettel Points 134700

Dans le cas le plus simple, il suffit de faire

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

plus toutes les options possibles read.csv() peut avoir besoin.

Édition en septembre 2020, soit 9 ans plus tard :

Depuis quelques années, R permet également de passer directement l'URL à la commande read.csv :

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

Fin de l'édition 2020. L'article original continue.

Réponse longue : Oui, c'est possible et de nombreux paquets utilisent cette fonctionnalité depuis des années. Par exemple, le tseries utilise exactement cette fonction pour télécharger les cours de la bourse à partir de Yahoo ! depuis près de dix ans :

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
[...]

Tout cela est extrêmement bien documenté dans les pages du manuel de l'UE. help(connection) y help(url) . Consultez également le manuel sur l'importation et l'exportation de données fourni avec R.

13voto

mpalanco Points 6903

base

read.csv sans le url fonctionne parfaitement. Il est probable que je manque quelque chose si Dirk Eddelbuettel l'a inclus dans sa réponse :

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

Une autre option utilisant deux paquets populaires :

table.de.données

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

lecteur

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

2 votes

Votre réponse est venue beaucoup de années après la mienne et, en effet, le code a été modifié pour supporter la méthode plus directe. Mais elle n'était pas disponible lorsque j'ai écrit ma réponse.

9voto

DavidC Points 729

Les données figurant sur les pages web se présentent souvent sous la forme d'un tableau XML. Vous pouvez lire un tableau XML dans R en utilisant le paquet XML .

Dans ce paquet, la fonction

readHTMLTable(<url>)

recherche dans une page les tableaux XML et renvoie une liste de cadres de données (un pour chaque tableau trouvé).

8voto

larkee Points 106

A côté de read.csv(url("...")) vous pouvez également utiliser read.table("http://...") .

Exemple :

> 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
>

1 votes

C'est une excellente réponse, utilisée abondamment dans r-graph-gallery à lire dans csv données provenant de github

2voto

Aaron Points 15093

scan peut lire automatiquement une page Web ; vous n'avez pas nécessairement besoin de vous occuper des connexions.

0 votes

Je pense que vous avez besoin de la connexion pour accéder à la page Web (distante, après tout). La connexion est un merveilleux qui vous permettent d'utiliser un fichier, une URL, un tube vers stdout à partir d'une commande, etc. de manière cohérente.

0 votes

Non pas que je doute de l'utilité des connexions, mais le fichier d'aide de scan dit que "le fichier peut aussi être une URL complète". Je l'ai fait de cette façon sans connexion formelle et cela fonctionne.

0 votes

Mais vous ne voulez généralement pas scan mais plutôt read.table() o read.csv() qui vous donnent un accès de niveau supérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X