Niveau | Intermédiaire |
Logiciels utilisés |
R Project RStudio |
Plateforme | Windows | Mac | Linux | FreeBSD |
La plupart des spécialistes de R nous afffirment que les tableurs, dont Microsoft Excel, sont des outils, disons maladroits (pour ne pas dire plus...), pour traiter statistiquement les données (preuves à l'appui, voir www.cybaea.net/Blogs/Data/Spreadsheet-errors.html ou www-unix.oit.umass.edu/~evagold/excel.html parmi d'autres).
Fort bien, mais alors, que faire ? Utiliser R, répondent-t-ils, mais il faut alors commencer par importer ces fichiers dans R.
Après les avoir importés, nous verrons ensuite que la transformation d'un fichier Excel de points xy en un fichier shapefile peut être traitée avec 5 lignes de code.
Principes
R offre plusieurs packages pour lire et écrire des fichiers Microsoft Excel. Ils sont détaillés dans rwiki.sciviews.org/doku.php. Parmi ceux-ci :
- il y en a qui sont liés à un OS (Windows, Mac OS X, Linux), d'autres non ;
- il y en a qui nécessitent que Microsoft Excel soit installé, d'autres non ;
- il y en a qui nécessitent que des programmes tiers soient installés, comme Java, Python ou Perl, d'autres non ;
- et enfin, il y en a qui ne sont liés à rien, élaborés en pur R.
Notons que sur Windows, il est même possible d'utiliser R directement dans Excel avec RExcel ( answers.oreilly.com/topic/1009-how-to-use-r-inside-microsoft-excel/).
Lecture
Pour les lire, le plus simple est gdata (multi OS, sans nécessité qu'Excel ou un autre programme soit installé) avec la fonction read.xls (les formats xls et xslx sont supportés). Les feuilles d'un classeur sont spécifiées par leur numéro.
fichier Excel testxy.xls
importation fichier
> library(gdata) > # ouverture du fichier Excel et importation des données présentes sur la feuille 1 > mes_données <- read.xls('testxy.xls',sheet=1) > class(mes_données) [1] "data.frame" > str(mes_données) 'data.frame': 7 obs. of 4 variables: $ id : int 1 2 3 4 5 6 7 $ x : int 235 245 255 265 275 285 295 $ y : int 424 444 464 484 504 524 544 $ test: Factor w/ 7 levels "a ","b ","c ",..: 1 2 3 4 5 6 7 > # les données sont importées dans un dataframe > mes_données id x y test 1 1 235 424 a 2 2 245 444 b 3 3 255 464 c 4 4 265 484 d 5 5 275 504 e 6 6 285 524 f 7 7 295 544 g > summary(mes_données) id x y test Min. :1.0 Min. :235 Min. :424 a :1 1st Qu.:2.5 1st Qu.:250 1st Qu.:454 b :1 Median :4.0 Median :265 Median :484 c :1 Mean :4.0 Mean :265 Mean :484 d :1 3rd Qu.:5.5 3rd Qu.:280 3rd Qu.:514 e :1 Max. :7.0 Max. :295 Max. :544 f :1 g :1 > mes_données$x [1] 235 245 255 265 275 285 295 > mes_données$y [1] 424 444 464 484 504 524 544 > mes_données$id [1] 1 2 3 4 5 6 7 > # plot basique des données x,y > plot(mes_données$x, mes_données$y)
- 4476 lectures
Écriture
Le résultat de la lecture est donc un dataframe. Pour écrire un fichier Microsoft Excel, une des solutions est alors dataframes2xls qui nécessite que Python (> 2.4) soit installé. Comme son nom l'indique, il permet d'exporter un dataframe (ou plusieurs dataframes) dans une (ou plusieurs) feuille(s) d'un fichier Excel.
écriture
> library(dataframes2xls) > # écriture du fichier > dataframes2xls::write.xls(c(mes_données), "nouveau.xls")
- 3845 lectures
(voir aussi learnr.wordpress.com/2009/10/06/export-data-frames-to-multi-worksheet-excel-file/).
Pour aller plus loin : R-Spatial
Tout ça, c'est valable pour les statisticiens de tout poil, mais quel rapport avec les SIGs, penserez-vous ?
Transformation du dataframe en dataframe spatial
Il est très facile de transformer un tel dataframe avec des valeurs x,y en dataframe spatial grâce aux packages spatiaux. (cran.r-project.org/web/views/Spatial.html, voir aussi « R - spatial : principes généraux et exemples de représentations cartographiques brutes (sans traitements (geo)statistiques) » sur le Portail). Utilisons le package spatial de base : sp (les autres packages spatiaux dépendent de lui) :
dataframe spatial
> library(sp) > # transformation du dataframe originel en un dataframe spatial > coordinates(mes_données) <- ~ x+y > # résultat > class(mes_données) [1] "SpatialPointsDataFrame" attr(,"package") [1] "sp" > str(mes_données) Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots ..@ data :'data.frame': 7 obs. of 2 variables: .. ..$ id : int [1:7] 1 2 3 4 5 6 7 .. ..$ test: Factor w/ 7 levels "a ","b ","c ",..: 1 2 3 4 5 6 7 ..@ coords.nrs : int [1:2] 2 3 ..@ coords : num [1:7, 1:2] 235 245 255 265 275 285 295 424 444 464 ... .. ..- attr(*, "dimnames")=List of 2 .. .. ..$ : NULL .. .. ..$ : chr [1:2] "x" "y" ..@ bbox : num [1:2, 1:2] 235 424 295 544 .. ..- attr(*, "dimnames")=List of 2 .. .. ..$ : chr [1:2] "x" "y" .. .. ..$ : chr [1:2] "min" "max" ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots .. .. ..@ projargs: chr NA
- 3219 lectures
Le résultat est bien un SpatialPointsDataFrame (sans projection, qu'il est possible d'ajouter) qui peut être soumis à tous les traitements spatiaux ou géostatistiques de R dont les principes ont déjà été illustrés en partie sur le Portail.
Exportation en shapefile
Après les traitements éventuels ou de manière brute, il est très facile d'exporter les données en shapefile ( www.nceas.ucsb.edu/scicomp/usecases/ReadWriteESRIShapeFiles, ou autre format spatial comme PostGIS) :
Traitement avec le package maptools :
Shapefile résultant sur Quantum GIS :
Conclusions
En pratique il suffit donc de 5 lignes de code pour écrire la procédure complète de transformation d'un fichier Excel en un fichier shapefile (maptools dépend de sp qui est donc chargé)
Excel -> shapefile
library(gdata) library (maptools) mes_données <- read.xls('testxy.xls',sheet=1) coordinates(mes_données) <- ~ x+y writeSpatialShape(mes_données, "données")
- 3581 lectures
Cette procédure n'est évidemment valable que pour des données ponctuelles xy (et non des lignes ou des polygones). Pour les traitements éventuels, c'est un des domaines ou R excelle (« spatial point pattern »), sans nécessité d'extension payante...
Les résultats des traitements peuvent évidemment être exportés en shapefiles lignes ou polygones (sans oublier les shapefiles 3D, les TIN, les rasters, les rasters 3D vers GRASS GIS, etc.).
Le rôle des tableurs pour stocker les données est aussi valorisé, en l'absence de base de données spatiales. Je traite de cette manière (traitements spatiaux et géostatistiques) des prélèvements géochimiques ponctuels avec environ 10000 échantillons et 20 variables.
Avec la solution en Python (« Python : lire et écrire des fichiers Microsoft Excel, application à Quantum GIS »), c'est donc une deuxième manière de traiter les fichiers Excel avec des solutions libres.
Tous les traitements ont été effectués sur Mac OS X, avec RStudio, merveilleux nouvel environnement de développement intégré pour R, multi OS. Le travail devient beaucoup plus convivial.
Site officiel : package gdataSite officiel : RExcel
Site officiel : package maptools
Autres Liens : R - spatial : principes généraux et exemples de représentations cartographiques brutes (sans traitements (geo)statistiques)
Autres Liens : Python : lire et écrire des fichiers Microsoft Excel, application à Quantum GIS
Commentaires
je veux savoir comment
je veux savoir comment exporter par exemples j'ai plusieurs donneés danc le fichier exel juste moi je cherche a enlevés la colonne que j'ai besoin pas tous je cherche un script avec R pour ça car j'ai bcp de donnes danc ce fichier danc c'est pour ça que je veux exporter que les colonnes que je veux si c possible bien sur et merci pour votre aide
Poster un nouveau commentaire