Commit c5eec54e authored by Laurence Viry's avatar Laurence Viry
Browse files

modif manipDon 2/07/18

parent 7c8c449f
Pipeline #9419 passed with stages
in 47 seconds
individu;taille;poids;pointure;sexe
roger;184;80;44;M
theodule;175,5;78;43;M
theodule;175,5;5;43;M
nicolas;158;72;42;M
%% Cell type:code id: tags:
``` R
setwd("/home/viryl/notebooks/ATMO_IntroR")
```
%% Cell type:markdown id: tags:
# Manipuler des données dans R
En statistique, les données constituent le point de départ de toute analyse, un premier travail de mise en forme de ces données est presque toujours indispensable. Il faudra savoir maitriser des opérations comme:
......@@ -19,10 +25,11 @@
Chaque logiciel ayant son propre format de stockage, le plus simple est souvent d'échanger les données par un format commun à tous qui sera le plus souvent **le format texte** ( .csv par exemple).
On peut également utiliser **les formats propriétaires** des autres logiciels en utilisant un package adapté (le package **foreign** par exemple), le choix dépendant du contexte et du volume des données.
## Importer des données en format texte
### Cas des fichiers **csv**
Les avantages des fichiers **csv**:
- Peut être lu par n'importe quel logiciel passé, présent et probablement futur.
......@@ -42,70 +49,50 @@
%% Cell type:code id: tags:
``` R
# Lecture du fichier donnees.csv
#setwd("/home/viryl/notebooks/ATMO_IntroR/data")
getwd() # repertoire de travail
don <- read.csv(file = "data/donnees.csv",header=TRUE,sep=";",dec=",",row.names=1)
mode(don)
class(don)
summary(don)
```
%%%% Output: display_data
'/home/viryl/notebooks/ATMO_IntroR/notebooks'
'/home/viryl/notebooks/ATMO\_IntroR/notebooks'
'/home/viryl/notebooks/ATMO_IntroR'
'/home/viryl/notebooks/ATMO\_IntroR'
%%%% Output: display_data
'data.frame'
'data.frame'
'list'
'list'
%%%% Output: display_data
'data.frame'
'data.frame'
%% Cell type:markdown id: tags:
- l'argument **sep** : indique que les valeurs sont séparées par **";"** (**" "** pour un espace, **"\t"** pour une tabulation)
- l'argument **dep** : indique que le séparateur de décimal est **","**
- l'argument **header** : indique si la première ligne contient les noms des variables (TRUE) ou non(FALSE).
- l'argument **row.names** : indique que la colonne 1 n'est pas une variable mais l'identifiant des individus.
%% Cell type:markdown id: tags:
* Un caractère spécial peut indiquer qu'il y a des données manquantes:
%%%% Output: display_data
Le fichier **don2.csv** contient des données manquantes codées **"\*\*\*"**, on ajoute l'argument **na.strings**
%% Cell type:code id: tags:
``` R
don2 <- read.csv(file = "data/don2.csv",header=TRUE,sep=";",dec=",",row.names=1,na.strings="***")
summary(don2)
mode(don2)
class(don2)
attributes(don2)
mean(don2$poids)
mean(don2$poids,na.rm=TRUE)
# Fonctions utilisees sur un data-frame
attributes(don)
str(don)
names(don)
nrow(don)
ncol(don)
dimnames(don)
```
%%%% Output: display_data
%%%% Output: display_data
'list'
'list'
%%%% Output: display_data
'data.frame'
'data.frame'
%%%% Output: display_data
$names
: 1. 'taille'
2. 'poids'
3. 'pointure'
4. 'sexe'
......@@ -116,13 +103,10 @@
: 'data.frame'
$row.names
: 1. 'roger'
2. 'theodule'
3. 'nicolas'
4. 'Alice'
5. 'Marcel'
6. 'Claire'
......@@ -138,65 +122,120 @@
\item[\$class] 'data.frame'
\item[\$row.names] \begin{enumerate*}
\item 'roger'
\item 'theodule'
\item 'nicolas'
\item 'Alice'
\item 'Marcel'
\item 'Claire'
\end{enumerate*}
\end{description}
%%%% Output: display_data
1. 'taille'
2. 'poids'
3. 'pointure'
4. 'sexe'
\begin{enumerate*}
\item 'taille'
\item 'poids'
\item 'pointure'
\item 'sexe'
\end{enumerate*}
%%%% Output: display_data
55
55
3
3
%%%% Output: display_data
4
4
%%%% Output: display_data
1. 1. 'roger'
2. 'theodule'
3. 'nicolas'
2. 1. 'taille'
2. 'poids'
3. 'pointure'
4. 'sexe'
\begin{enumerate}
\item \begin{enumerate*}
\item 'roger'
\item 'theodule'
\item 'nicolas'
\end{enumerate*}
\item \begin{enumerate*}
\item 'taille'
\item 'poids'
\item 'pointure'
\item 'sexe'
\end{enumerate*}
\end{enumerate}
%% Cell type:markdown id: tags:
* Le chemin peut-être une URL:
- l'argument **sep** : indique que les valeurs sont séparées par **";"** (**" "** pour un espace, **"\t"** pour une tabulation,$\ldots$)
- l'argument **dep** : indique que le séparateur de décimal est **","**
- l'argument **header** : indique si la première ligne contient les noms des variables (TRUE) ou non(FALSE).
- l'argument **row.names** : indique que la colonne 1 n'est pas une variable mais l'identifiant des individus.
%% Cell type:markdown id: tags:
* Un caractère spécial peut indiquer qu'il y a des données manquantes:
Le fichier **don2.csv** contient des données manquantes codées **"\*\*\*"**, on ajoute l'argument **na.strings**
%% Cell type:code id: tags:
``` R
df <- read.table("https://s3.amazonaws.com/assets.datacamp.com/blog_assets/scores_timed.csv",header=TRUE,row.names = 1,sep = ",")
summary(df)
don2 <- read.csv(file = "data/don2.csv",header=TRUE,sep=";",dec=",",row.names=1,na.strings="***")
summary(don2)
mean(don2$poids)
mean(don2$poids,na.rm=TRUE)
```
%%%% Output: display_data
%% Cell type:markdown id: tags:
%%%% Output: display_data
%%%% Output: display_data
%% Cell type:markdown id: tags:
55
55
#### Fonctions utiles dans un data-frame
%% Cell type:markdown id: tags:
* **head()** - pour voir les 6 premières lignes
* **tail()** - pour voir les 6 dernières lignes
* **dim()** - ses dimensions
* **nrow()** - le nombre de lignes
* **ncol()** - le nombre de colonnes
* **str()** - structure de chaque colonne
* **names()** - liste l'attribut **names** d'un data.frame (ou n'importe quel autre objet), les noms des colonnes
* **dimnanes()** - liste l'attribut **row.names** d'un data.frame.
* Le chemin peut-être une URL:
%% Cell type:code id: tags:
``` R
str(df)
names(df)
nrow(df)
ncol(df)
dimnames(df)
df <- read.table("https://s3.amazonaws.com/assets.datacamp.com/blog_assets/scores_timed.csv",header=TRUE,row.names = 1,sep = ",")
summary(df)
```
%% Cell type:markdown id: tags:
### La fonction **scan**
......@@ -206,41 +245,66 @@
* Une différence est qu'il est possible de spécifier le mode des variables:
%% Cell type:code id: tags:
``` R
help(scan)
```
%% Cell type:code id: tags:
``` R
mydata <- scan("data/don.txt",skip=1,what = list("", 0, 0,0))
mydata <- scan("data/donnees.csv",skip=1,sep=";",dec=",",what = list("", 0, 0,0,""))
class(mydata)
str(mydata)
mydata[[1]] # premiere variable
mydata[[1]][1] #
```
%%%% Output: display_data
'list'
'list'
%%%% Output: display_data
5
5
%%%% Output: display_data
1. 'roger'
2. 'theodule'
3. 'nicolas'
\begin{enumerate*}
\item 'roger'
\item 'theodule'
\item 'nicolas'
\end{enumerate*}
%%%% Output: display_data
'roger'
'roger'
%% Cell type:markdown id: tags:
Dans cet exemple, scan lit 4 variables, la première de mode caractère et les trois suivantes sont de mode numérique.
Dans cet exemple, **scan** lit *5 variables*, la première en mode caractère, les trois suivantes sont en mode numérique et la cinquième en mode caractère.
**myDat** est une liste de 4 vecteurs.
**myDat** est une liste de 5 vecteurs.
* scan() peut être utilisée pour créer des objets de mode différent (vecteurs, matrices, tableaux de données, listes,...).
*
* Par défaut, c'est-à-dire si what est omis, scan() crée un vecteur numérique.
Pour en savoir plus **help(scan)**
%% Cell type:markdown id: tags:
### Cas des fichiers Excel
## Importer des fichiers Excel
%% Cell type:markdown id: tags:
### Les formats propriétaires
## Importer des fichiers avec un format propriétaire
R peut également lire des fichiers dans d'autres formats (**Excel, SAS, SPSS**,$\ldots$) et accéder à des **bases de données**.
* Le package **foreign** permet d'importer des données en format propriétaire binaire tels que **Stata, SAS, SPSS, etc**.
......@@ -250,11 +314,13 @@
**read.spss**("file.sav") # for SPSS format<br\>
**read.mpt**("file.mtp") # for Minitab Portable Worksheet<br\>
Une autre solution pour des **fichiers SPSS**, le package **Hmisc**<br\>
### Base de données relationnelles et autres formats
%% Cell type:markdown id: tags:
## Base de données relationnelles et autres formats
Certains packages permettent de se connecter directement sur des bases de données de type **MySQL** ou **PostgreSQL**
(MongoDB,Redis,ousqlite,...). Dans ce cas,le mode d’interaction avec les données est légèrement différent
car on utilise alors le langage de requête propre au langage, à moins d’utiliser des packages qui permettent d’assurer
la conversion à partir des commandes R habituelles telles que **subset()**.
......@@ -767,11 +833,11 @@
Pour en savoir plus:
* [Gestion des données avec R](https://www.fun-mooc.fr/c4x/UPSUD/42001S03/asset/data-management.html) (Christophe Lalanne & Bruno Falissard -MOOC "Introduction à la statistique avec R").
* [Begin'R (Bordeaux INP](http://beginr.u-bordeaux.fr/index.html#sommaire)
* [Begin'R (Bordeaux INP](http://beginr.u-bordeaux.fr/index.html#sommaire))
* [Cookbook for R](http://www.cookbook-r.com/Manipulating_data/)
* [Introduction à R et au tidyverse](https://juba.github.io/tidyverse/index.html)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment