PREMIERE QUESTION

The American Community Survey distributes downloadable data about United States communities. Download the 2006 microdata survey about housing for the state of Idaho using download.file() from here:

https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv

and load the data into R. The code book, describing the variable names is here:

https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2FPUMSDataDict06.pdf

Apply strsplit() to split all the names of the data frame on the characters “wgtp”. What is the value of the 123 element of the resulting list?

Bon je met en place mon repertoire de travail

setwd("C:/Users/smooth computers llc/Desktop/Getting&cleaning_Data")
fileUrl <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"

Téléchargement du fichier

download.file(fileUrl, destfile = "./data/getdata%2Fdata%2Fss06hid.csv")
PUMSDATA <- read.csv("./data/getdata%2Fdata%2Fss06hid.csv")

Chargement du package dplyr

library(dplyr)
## Warning: package 'dplyr' was built under R version 3.4.4
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
pdata <- tbl_df(PUMSDATA)

Bon certains de vous se demande pourquoi J’ai chargé le package “dplyr”. En fait j’ai appris ce package grâce à un tuto magique sur Coursera. “Swirl package”

Elle affiche très bien les dataframe grâce “tbl_df” et fais pleines d’autres bonnes choses. ## vISUALISONS pdata

pdata
## # A tibble: 6,496 x 188
##    RT    SERIALNO DIVISION  PUMA REGION    ST ADJUST  WGTP    NP  TYPE
##    <fct>    <int>    <int> <int>  <int> <int>  <int> <int> <int> <int>
##  1 H          186        8   700      4    16 1.02e6    89     4     1
##  2 H          306        8   700      4    16 1.02e6   310     1     1
##  3 H          395        8   100      4    16 1.02e6   106     2     1
##  4 H          506        8   700      4    16 1.02e6   240     4     1
##  5 H          835        8   800      4    16 1.02e6   118     4     1
##  6 H          989        8   700      4    16 1.02e6   115     4     1
##  7 H         1861        8   700      4    16 1.02e6     0     1     2
##  8 H         2120        8   200      4    16 1.02e6    35     1     1
##  9 H         2278        8   400      4    16 1.02e6    47     2     1
## 10 H         2428        8   500      4    16 1.02e6    51     2     1
## # ... with 6,486 more rows, and 178 more variables: ACR <int>, AGS <int>,
## #   BDS <int>, BLD <int>, BUS <int>, CONP <int>, ELEP <int>, FS <int>,
## #   FULP <int>, GASP <int>, HFL <int>, INSP <int>, KIT <int>, MHP <int>,
## #   MRGI <int>, MRGP <int>, MRGT <int>, MRGX <int>, PLM <int>, RMS <int>,
## #   RNTM <int>, RNTP <int>, SMP <int>, TEL <int>, TEN <int>, VACS <int>,
## #   VAL <int>, VEH <int>, WATP <int>, YBL <int>, FES <int>, FINCP <int>,
## #   FPARC <int>, GRNTP <int>, GRPIP <int>, HHL <int>, HHT <int>,
## #   HINCP <int>, HUGCL <int>, HUPAC <int>, HUPAOC <int>, HUPARC <int>,
## #   LNGI <int>, MV <int>, NOC <int>, NPF <int>, NPP <int>, NR <int>,
## #   NRC <int>, OCPIP <int>, PARTNER <int>, PSF <int>, R18 <int>,
## #   R60 <int>, R65 <int>, RESMODE <int>, SMOCP <int>, SMX <int>,
## #   SRNT <int>, SVAL <int>, TAXP <int>, WIF <int>, WKEXREL <int>,
## #   WORKSTAT <int>, FACRP <int>, FAGSP <int>, FBDSP <int>, FBLDP <int>,
## #   FBUSP <int>, FCONP <int>, FELEP <int>, FFSP <int>, FFULP <int>,
## #   FGASP <int>, FHFLP <int>, FINSP <int>, FKITP <int>, FMHP <int>,
## #   FMRGIP <int>, FMRGP <int>, FMRGTP <int>, FMRGXP <int>, FMVYP <int>,
## #   FPLMP <int>, FRMSP <int>, FRNTMP <int>, FRNTP <int>, FSMP <int>,
## #   FSMXHP <int>, FSMXSP <int>, FTAXP <int>, FTELP <int>, FTENP <int>,
## #   FVACSP <int>, FVALP <int>, FVEHP <int>, FWATP <int>, FYBLP <int>,
## #   wgtp1 <int>, wgtp2 <int>, ...

Regardons le noms des colonnes ou variables

names(pdata)
##   [1] "RT"       "SERIALNO" "DIVISION" "PUMA"     "REGION"   "ST"      
##   [7] "ADJUST"   "WGTP"     "NP"       "TYPE"     "ACR"      "AGS"     
##  [13] "BDS"      "BLD"      "BUS"      "CONP"     "ELEP"     "FS"      
##  [19] "FULP"     "GASP"     "HFL"      "INSP"     "KIT"      "MHP"     
##  [25] "MRGI"     "MRGP"     "MRGT"     "MRGX"     "PLM"      "RMS"     
##  [31] "RNTM"     "RNTP"     "SMP"      "TEL"      "TEN"      "VACS"    
##  [37] "VAL"      "VEH"      "WATP"     "YBL"      "FES"      "FINCP"   
##  [43] "FPARC"    "GRNTP"    "GRPIP"    "HHL"      "HHT"      "HINCP"   
##  [49] "HUGCL"    "HUPAC"    "HUPAOC"   "HUPARC"   "LNGI"     "MV"      
##  [55] "NOC"      "NPF"      "NPP"      "NR"       "NRC"      "OCPIP"   
##  [61] "PARTNER"  "PSF"      "R18"      "R60"      "R65"      "RESMODE" 
##  [67] "SMOCP"    "SMX"      "SRNT"     "SVAL"     "TAXP"     "WIF"     
##  [73] "WKEXREL"  "WORKSTAT" "FACRP"    "FAGSP"    "FBDSP"    "FBLDP"   
##  [79] "FBUSP"    "FCONP"    "FELEP"    "FFSP"     "FFULP"    "FGASP"   
##  [85] "FHFLP"    "FINSP"    "FKITP"    "FMHP"     "FMRGIP"   "FMRGP"   
##  [91] "FMRGTP"   "FMRGXP"   "FMVYP"    "FPLMP"    "FRMSP"    "FRNTMP"  
##  [97] "FRNTP"    "FSMP"     "FSMXHP"   "FSMXSP"   "FTAXP"    "FTELP"   
## [103] "FTENP"    "FVACSP"   "FVALP"    "FVEHP"    "FWATP"    "FYBLP"   
## [109] "wgtp1"    "wgtp2"    "wgtp3"    "wgtp4"    "wgtp5"    "wgtp6"   
## [115] "wgtp7"    "wgtp8"    "wgtp9"    "wgtp10"   "wgtp11"   "wgtp12"  
## [121] "wgtp13"   "wgtp14"   "wgtp15"   "wgtp16"   "wgtp17"   "wgtp18"  
## [127] "wgtp19"   "wgtp20"   "wgtp21"   "wgtp22"   "wgtp23"   "wgtp24"  
## [133] "wgtp25"   "wgtp26"   "wgtp27"   "wgtp28"   "wgtp29"   "wgtp30"  
## [139] "wgtp31"   "wgtp32"   "wgtp33"   "wgtp34"   "wgtp35"   "wgtp36"  
## [145] "wgtp37"   "wgtp38"   "wgtp39"   "wgtp40"   "wgtp41"   "wgtp42"  
## [151] "wgtp43"   "wgtp44"   "wgtp45"   "wgtp46"   "wgtp47"   "wgtp48"  
## [157] "wgtp49"   "wgtp50"   "wgtp51"   "wgtp52"   "wgtp53"   "wgtp54"  
## [163] "wgtp55"   "wgtp56"   "wgtp57"   "wgtp58"   "wgtp59"   "wgtp60"  
## [169] "wgtp61"   "wgtp62"   "wgtp63"   "wgtp64"   "wgtp65"   "wgtp66"  
## [175] "wgtp67"   "wgtp68"   "wgtp69"   "wgtp70"   "wgtp71"   "wgtp72"  
## [181] "wgtp73"   "wgtp74"   "wgtp75"   "wgtp76"   "wgtp77"   "wgtp78"  
## [187] "wgtp79"   "wgtp80"

names(pdata) est la liste de variable de notre dataframe pdata

Vous voyez déjà le type de chaine que nous voulons séparer n’est ce pas? Ce celles portant “wgtp dans leur chaine”, je peux voir “wgtp80”, “wgtp79” et même “wgtp43” il y a beaucoup deh!

Pour pouvoir correctement appliquer notre fonction strsplit il nous faut correctement séparer sur nos noms de variables(portant wgtp) les lettres des nombres grâce à la fonction “sub”

Pour comprendre ce que je dis regardez ceci

sub("p", "p_", "wgtp1")
## [1] "wgtp_1"

Nous avons transformé le caractère “wgtp1” en “wgtp_1” On remplace en fait les “p” par “p_” dans “wgtp1”. Lettres et nombres sont bien séparés maintenant par “_"

On peut dès lors indiquer dans notre argument strsplit, l’argument de séparation (“_“) et séparer convenablement”wgtp_1" en deux chaines: “wgtp” “1” ### Give it a try!

strsplit("wgtp_1","_" )
## [[1]]
## [1] "wgtp" "1"

Revenons

A trop expliquer je n’ai pas pensé que le temps s’écoulait! je dois pouvoir rendre mon devoir Je vais mettre un peu de technique, je vais créer une fonction qui va faire ses deux opérations en même temps Bon je veux aussi que ma fonction agisse uniquement sur les chaine de caractères comportant la chaine “wgtp” et qu’elle ne fasse rien sur d’autre “qualité” de chaine de caractère. J’habite au marécage donc mon style linguistique regardez seulement et avancez… le secret ici c’est la fonction de base “grepl” elle prend deux arguments, pattern = “le caractère que nous cherchons” et x = “le vecteur où nous allons chercher pattern”. Si “grepl” trouve pattern dans x il va renvoyer lui “TRUE” ooh. Et vous connaissez ce qu’il va renvoyer s’il ne trouve pas?..

Bon je crée donc cette fonction. soyons rapide les questions, on le fera après! ### Ma fonction StringSplit

StringSplit <- function(x){if (grepl("wgtp", x)){
  strsplit(sub("p", "p_", x), "_")
  } else {return(x)}
}

Bon si vous voulez voir comment fonctionne ma fonction regardez donc un exemple

StringSplit("wgtp45")
## [[1]]
## [1] "wgtp" "45"

Vous avez vu n’est ce pas?

Je vais l’appliquer une fois sur toute ma liste (names(pdata)) grâce à un outil que j’ai rencontré dans le module RProgramming de ma formation sur coursera, la fonction “sapply” Elle applique une fonction sur chaque élément d’une liste et retourne une liste. J’espère que vous voyez déjà ce que je veux faire

Je rappelle la question de mon devoir

Apply strsplit() to split all the names of the data frame on the characters “wgtp”. What is the value of the 123 element of the resulting list?

Voilà c’est ça que je suis entrain de faire!

Q1 <- sapply(names(pdata), StringSplit)

Bon je l’ai fait! comme il n’y a pas des écrits de couleurs rouges ce que c’est bon!

Si vous voulez visualisez la liste Q1 et bien la voici

head(Q1, 2)
## $RT
## [1] "RT"
## 
## $SERIALNO
## [1] "SERIALNO"

J’ai affiché deux éléments pour ne pas vous fatiguer, cette liste est très longue hein!

Bon maintenant je reponds vraiment à la première question de mon devoir J’étudie comme vous, donc c’est doucement! On m’appelle professeur SAAH, mais je suis encore sur les bancs!

Q1[123]
## $wgtp15
## [1] "wgtp" "15"

Je sais donc ce que je dois cocher comme reponse juste! good!

II) ma deuxième question.

J’espère que vous n’êtes déjà pas fatigués comme moi! je suis paresseux mais souvent je fais des efforts hein

Load the Gross Domestic Product data for the 190 ranked countries in this data set:

https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2FGDP.csv

Remove the commas from the GDP numbers in millions of dollars and average them. What is the average?

Original data sources:

http://data.worldbank.org/data-catalog/GDP-ranking-table

C’est l’anglais!

Je commence normalement par télécharger ce jeu de données!

fileUrl2 <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2FGDP.csv"
download.file(fileUrl2, destfile = "./data/getdata%2Fdata%2FGDP.csv")

Bon c’est fait! J’ai pas beaucoup de méga, je suis un peu pauvre!

GDP_Data <- read.csv("./data/getdata%2Fdata%2FGDP.csv")

Bon j’aime le formtage du package “dplyr” J’ai lu que c’est celui dont utilise les grands data scientist ## Visualisons notre dataframe

gdp <- tbl_df(GDP_Data)
gdp
## # A tibble: 330 x 10
##    X     Gross.domestic.p~ X.1   X.2   X.3   X.4   X.5   X.6   X.7   X.8  
##    <fct> <fct>             <lgl> <fct> <fct> <fct> <lgl> <lgl> <lgl> <lgl>
##  1 ""    ""                NA    ""    ""    ""    NA    NA    NA    NA   
##  2 ""    ""                NA    ""    (mil~ ""    NA    NA    NA    NA   
##  3 ""    Ranking           NA    Econ~ US d~ ""    NA    NA    NA    NA   
##  4 ""    ""                NA    ""    ""    ""    NA    NA    NA    NA   
##  5 USA   1                 NA    Unit~ " 16~ ""    NA    NA    NA    NA   
##  6 CHN   2                 NA    China " 8,~ ""    NA    NA    NA    NA   
##  7 JPN   3                 NA    Japan " 5,~ ""    NA    NA    NA    NA   
##  8 DEU   4                 NA    Germ~ " 3,~ ""    NA    NA    NA    NA   
##  9 FRA   5                 NA    Fran~ " 2,~ ""    NA    NA    NA    NA   
## 10 GBR   6                 NA    Unit~ " 2,~ ""    NA    NA    NA    NA   
## # ... with 320 more rows

Il y’a une colonne sur ce dataframe qui comporte les nombres en millions of US dollars. oui le GDP des pays. Bon je vais selectionner quelques colonnes de ce tableau pour mettre en exergue la colonne des millions et des pays hein! Bon je vais utiliser une syntaxe simple qu’offre le package “dplyr” pour selectionner dans un tableau ## Selection de 4 colonnes

select(gdp, X, X.1, X.2, X.3)
## # A tibble: 330 x 4
##    X     X.1   X.2            X.3           
##    <fct> <lgl> <fct>          <fct>         
##  1 ""    NA    ""             ""            
##  2 ""    NA    ""             (millions of  
##  3 ""    NA    Economy        US dollars)   
##  4 ""    NA    ""             ""            
##  5 USA   NA    United States  " 16,244,600 "
##  6 CHN   NA    China          " 8,227,103 " 
##  7 JPN   NA    Japan          " 5,959,718 " 
##  8 DEU   NA    Germany        " 3,428,131 " 
##  9 FRA   NA    France         " 2,612,878 " 
## 10 GBR   NA    United Kingdom " 2,471,784 " 
## # ... with 320 more rows

Bon J’ai selectionné 4 colonnes, il y’a une longue documentation sur les noms de colonnes. Bon si vous voulez on fait le kongossa dessus après!

Je fais le devoir, regardez un peut la colonne “X.3” les chiffres sont séparés par les virgules “,” on souhaite que nous enlevons automatiquement ces virgules par des points, pour pouvoir les manipuler après comme des numerics Je pense à une fonction de base que j’ai rencontré en suivant ma 4ème semaine de cours: “gsub” c’est son nom, il fonctionne un peu comme sub, mais lui c’est partout qu’il agit! je vous explique: gsub(“,”, “”, “2,471,784”) = 2471784 Bon je sais que vous avez déjà vu ce qu’il est capable de faire! Drôle de façon d’expliquer n’est ce pas? Mais vous comprenez! profeseur SAAH let’s give it a real try!

gsub(",", "", "2,471,784")
## [1] "2471784"

Bon je vais encore utiliser ma fonction “sapply” pour que ma fonction virg_point qui a “gsub” comme arme fatale agisse une fois sur tous les éléments de la colonnes “X.3” où on lit des millions partout! Je veux aussi avoir des millions deh ## Créons donc cette fonction virg_point

virg_point <- function(x){
    if (grepl(",", x)){
      return(gsub(",", "", x))
    }else{return(x)}
}

Bon si vous voyez ma fonction, il y a une commande “as.character”, en fait je veux que ma fonction “gsub” “arme fatale”" agisse sur une chaine de caractère.Effectivement elle est configurée que pour agir sur ce type de variable. la fonction grepl, on la revoit encore ici, il vérifie juste si la chaine de caractère entrée en argument à la virgule “,” et vous connaissez le reste.

Maintenant appliquons la sur toute la colonne X.3

visualisons un peu notre colonne “X.3”

X_3 <- select(gdp, X.3)
X_3
## # A tibble: 330 x 1
##    X.3           
##    <fct>         
##  1 ""            
##  2 (millions of  
##  3 US dollars)   
##  4 ""            
##  5 " 16,244,600 "
##  6 " 8,227,103 " 
##  7 " 5,959,718 " 
##  8 " 3,428,131 " 
##  9 " 2,612,878 " 
## 10 " 2,471,784 " 
## # ... with 320 more rows

Il y’a des cellules avec des chaines: une avec “(millions of” et une autre “US dollars)”. Qui sait peut être on a affaire à une structure où il y’a des “nombres” et des caractères. c’est chaud! Bon j’exagère on ne va tidy les datas maintenant! En fait à partir de la 5ème ligne nous avons nos millions et cela se termine à la 194 lignes. Bon je le sais parce que je me suis permis de visualiser le dataframe. Je vous conseille de regarder aussi la description qui accompagne le df quelques fois!

View(GDP_Data)

Je vais convertis X_3 en dataframe et configurer cette colonne en vecteur de caractères parce “l’arme fatale”, “gsub” n’agit que sur des chaines de caractères.

X_3 <- as.data.frame(X_3)
X.3 <- as.character(X_3[,1])
str(X_3)
## 'data.frame':    330 obs. of  1 variable:
##  $ X.3: Factor w/ 207 levels ""," 1,008 "," 1,129 ",..: 1 191 207 1 40 178 143 100 66 63 ...
str(X.3)
##  chr [1:330] "" "(millions of" "US dollars)" "" " 16,244,600 " ...

Bon peut être vous êtes perdu, ce que je suis prudent: X_3[,1] me permet de recupérer les éléments de la colonne. “X_3[,1]” est un facteur. avec “as.character(X_3[,1])” je convertis ce facteur en vecteur de caractères. c’est ce que vous voyez quand on interroge la structure de X.3: str(X.3)

Bon J’opère avec ma fonction

Amoyenner <- sapply(X.3[5:194], virg_point)
Amoyenner[sample(20)]
##   1,322,965   16,244,600    1,821,424    2,014,775      631,173  
##  " 1322965 " " 16244600 "  " 1821424 "  " 2014775 "   " 631173 " 
##   5,959,718    2,014,670    1,841,710    1,129,598    3,428,131  
##  " 5959718 "  " 2014670 "  " 1841710 "  " 1129598 "  " 3428131 " 
##     878,043    2,252,664    2,612,878      711,050      770,555  
##   " 878043 "  " 2252664 "  " 2612878 "   " 711050 "   " 770555 " 
##   8,227,103    2,471,784      789,257    1,532,408    1,178,126  
##  " 8227103 "  " 2471784 "   " 789257 "  " 1532408 "  " 1178126 "
str(Amoyenner)
##  Named chr [1:190] " 16244600 " " 8227103 " " 5959718 " " 3428131 " ...
##  - attr(*, "names")= chr [1:190] " 16,244,600 " " 8,227,103 " " 5,959,718 " " 3,428,131 " ...

Amoyenner se presente comme un vecteur de caractère, je le convertir en vecteur numerique

Amoyenner2 <- as.numeric(Amoyenner) 

Je termine mon exercice en moyennant “Amoyenner2”

On a oublié de jeter un coup d’oeil sur “Amoyenner2”

Amoyenner2[sample(10)]
##  [1]  2014670  2612878 16244600  2471784  2014775  2252664  3428131
##  [8]  1841710  5959718  8227103

Hum

Calculons la moyenne et fermons cette page

moy <- mean(Amoyenner2, na.rm = TRUE)
moy
## [1] 377652.4