Aquesta prova d’avaluació continuada cobreix els mòduls 1, 2 i 8 del programa de l’assignatura.
Les competències que es treballen en aquesta prova són:
La prova està estructurada en 1 exercici teòric/pràctic i 1 exercici pràctic que demana que es desenvolupi la fase de preparació amb un joc de dades. S’han de respondre’s tots els exercicis per a poder superar la PAC.
Per a realitzar aquesta pràctica recomanem com a punt de partida la lectura dels següents documents:
El format de lliurament desitjat és: usernameestudiant-PAC1.html i rmd. Data de Lliurament: 28/10/2020. S’ha de lliurar la PAC en la bústia de lliuraments de l’aula.
Sovint és inevitable, en produir una obra multimèdia, fer ús de recursos creats per terceres persones. És per tant comprensible fer-ho en el marc d’una pràctica dels estudis d’Informàtica, Multimèdia i Telecomunicació de la UOC, sempre que això es documenti clarament i no suposi plagi en la pràctica.
Per tant, en presentar una pràctica que faci ús de recursos aliens, s’ha de presentar juntament amb ella un document en què es detallin tots ells, especificant el nom de cada recurs, el seu autor, el lloc on es va obtenir i el seu estatus legal: si l’obra està protegida pel copyright o s’acull a alguna altra llicència d’ús (Creative Commons, llicència GNU, GPL …). L’estudiant haurà d’assegurar-se que la llicència no impedeix específicament el seu ús en el marc de la pràctica. En cas de no trobar la informació corresponent haurà d’assumir que l’obra està protegida per copyright.
Haureu, a més, adjuntar els fitxers originals quan les obres utilitzades siguin digitals, i el seu codi font si correspon.
Com a mostra, treballarem amb el joc de dades “Titànic” i “Titanic2 que recull dades sobre el famós creuer i sobre el que és fàcil fer tasques de classificació predictiva sobre la variable”Survived".
De moment deixarem per a les següents pràctiques l’estudi d’algorismes predictius i ens centrarem ara com ara en l’estudi de les variables d’un joc de dades, és a dir, farem un treball descriptiu d’aquest.
Les activitats que durem a terme en aquesta pràctica solen emmarcar-se en les fases inicials d’un projecte de mineria de dades i consisteixen en la selecció de característiques o variables, la preparació del joc de dades per a posteriorment ser consumit per un algorisme i intentar extreure el màxim coneixement possible de les dades. Són un subconjunt de tasques mínimes i d’exemple. Podem incloure moltes més i molt més profundes, com hem vist als material docent.
Les tècniques que treballarem com exemple són les següents:
Primer contacte amb el joc de dades, visualitzem la seva estructura.
# Carreguem els paquets R que utilitzarem
library(ggplot2)
library(dplyr)
# Carreguem el fitxer de dades
totalData <- read.csv('titanic.csv',stringsAsFactors = FALSE)
files=dim(totalData)[1]
# Verifiquem l'estructura del joc de dades
str(totalData)
## 'data.frame': 2207 obs. of 11 variables:
## $ name : chr "Abbing, Mr. Anthony" "Abbott, Mr. Eugene Joseph" "Abbott, Mr. Rossmore Edward" "Abbott, Mrs. Rhoda Mary 'Rosa'" ...
## $ gender : chr "male" "male" "male" "female" ...
## $ age : num 42 13 16 39 16 25 30 28 27 20 ...
## $ class : chr "3rd" "3rd" "3rd" "3rd" ...
## $ embarked: chr "S" "S" "S" "S" ...
## $ country : chr "United States" "United States" "United States" "England" ...
## $ ticketno: int 5547 2673 2673 2673 348125 348122 3381 3381 2699 3101284 ...
## $ fare : num 7.11 20.05 20.05 20.05 7.13 ...
## $ sibsp : int 0 0 1 1 0 0 1 1 0 0 ...
## $ parch : int 0 2 1 1 0 0 0 0 0 0 ...
## $ survived: chr "no" "no" "no" "yes" ...
Descripció de les variables contingudes al fitxer:
name a string with the name of the passenger.
gender a factor with levels male and female.
age a numeric value with the persons age on the day of the sinking. The age of babies (under 12 months) is given as a fraction of one year (1/month).
class a factor specifying the class for passengers or the type of service aboard for crew members.
embarked a factor with the persons place of of embarkment.
country a factor with the persons home country.
ticketno a numeric value specifying the persons ticket number (NA for crew members).
fare a numeric value with the ticket price (NA for crew members, musicians and employees of the shipyard company).
sibsp an ordered factor specifying the number if siblings/spouses aboard; adopted from Vanderbild data set.
parch an ordered factor specifying the number of parents/children aboard; adopted from Vanderbild data set.
survived a factor with two levels (no and yes) specifying whether the person has survived the sinking.
Treiem estadístiques bàsiques i despres treballem els atributs amb valors buits.
#Estadístiques bàsiques
summary(totalData)
## name gender age class
## Length:2207 Length:2207 Min. : 0.1667 Length:2207
## Class :character Class :character 1st Qu.:22.0000 Class :character
## Mode :character Mode :character Median :29.0000 Mode :character
## Mean :30.4367
## 3rd Qu.:38.0000
## Max. :74.0000
## NA's :2
## embarked country ticketno fare
## Length:2207 Length:2207 Min. : 2 Min. : 3.030
## Class :character Class :character 1st Qu.: 14262 1st Qu.: 7.181
## Mode :character Mode :character Median : 111427 Median : 14.090
## Mean : 284216 Mean : 33.405
## 3rd Qu.: 347077 3rd Qu.: 31.061
## Max. :3101317 Max. :512.061
## NA's :891 NA's :916
## sibsp parch survived
## Min. :0.0000 Min. :0.0000 Length:2207
## 1st Qu.:0.0000 1st Qu.:0.0000 Class :character
## Median :0.0000 Median :0.0000 Mode :character
## Mean :0.4996 Mean :0.3856
## 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :8.0000 Max. :9.0000
## NA's :900 NA's :900
# Estadístiques de valors buits
colSums(is.na(totalData))
## name gender age class embarked country ticketno fare
## 0 0 2 0 0 81 891 916
## sibsp parch survived
## 900 900 0
colSums(totalData=="")
## name gender age class embarked country ticketno fare
## 0 0 NA 0 0 NA NA NA
## sibsp parch survived
## NA NA 0
# Prenem valor "Desconegut" per als valors buits de la variable "country"
totalData$country[totalData$country==""]="Desconegut"
# Prenem la mitjana per a valors buits de la variable "age"
totalData$age[is.na(totalData$age)] <- mean(totalData$age,na.rm=T)
Discretitzem quan té sentit i en funció de les capacitats de cada variable.
# Afegim un camp nou a les dades. Aquest valor és l'edat discretitzada amb un mètode simple de intervals d'igual amplitud.
# Veiem com es distribueixen els valors
summary(totalData[,"age"])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.1667 22.0000 29.0000 30.4367 38.0000 74.0000
# Discretitzem
totalData["segment_edat"] <- cut(totalData$age, breaks = c(0,10,20,30,40,50,60,70,100), labels = c("0-9", "10-19", "20-29", "30-39","40-49","50-59","60-69","70-79"))
# Obervem les dades discretitzades
head(totalData)
## name gender age class embarked country
## 1 Abbing, Mr. Anthony male 42 3rd S United States
## 2 Abbott, Mr. Eugene Joseph male 13 3rd S United States
## 3 Abbott, Mr. Rossmore Edward male 16 3rd S United States
## 4 Abbott, Mrs. Rhoda Mary 'Rosa' female 39 3rd S England
## 5 Abelseth, Miss. Karen Marie female 16 3rd S Norway
## 6 Abelseth, Mr. Olaus Jørgensen male 25 3rd S United States
## ticketno fare sibsp parch survived segment_edat
## 1 5547 7.11 0 0 no 40-49
## 2 2673 20.05 0 2 no 10-19
## 3 2673 20.05 1 1 no 10-19
## 4 2673 20.05 1 1 yes 30-39
## 5 348125 7.13 0 0 yes 10-19
## 6 348122 7.13 0 0 yes 20-29
# Veiem com s'agrupaven per edat
plot(totalData$segment_edat)
Ens proposem analitzar les relacions entre les diferents variables del joc de dades per veure si es relacionen i com.
# Visualitzem la relació entre les variables "gender" i "survived":
ggplot(data=totalData[1:files,],aes(x=gender,fill=survived))+geom_bar()
# Un altre punt de vista. Survived com a funció de Embarked:
ggplot(data = totalData[1:files,],aes(x=embarked,fill=survived))+geom_bar(position="fill")+ylab("Frequència")
A la primer gràfica podem observar fàcilment la quantitat de dones que viatjaven respecte homes i observar els que no varem sobreviure. Numèricament el nombre d’homes i dones supervivents és similar.
A la segona gràfica de forma percentual observem els ports d’embarcament i els percentatges de supervivència en funció del port. Es podria treballar el port C (Cherbourg) per veure d’explicar la diferència a les dades. Poder percentualment van embarcar més dones o nens… O gent de primera classe?
Obtenim ara una matriu de percentatges de freqüència. Veiem, per exemple que la probabilitat de sobreviure si es va embarcar en “C” és d’un 56.45%
t<-table(totalData[1:files,]$embarked,totalData[1:files,]$survived)
for (i in 1:dim(t)[1]){
t[i,]<-t[i,]/sum(t[i,])*100
}
t
##
## no yes
## B 78.17259 21.82741
## C 43.54244 56.45756
## Q 64.22764 35.77236
## S 70.85396 29.14604
Vegem ara com en un mateix gràfic de freqüències podem treballar amb 3 variables: Embarked, Survived i class.
# Mostrem el gràfic d'embarcats per Pclass:
ggplot(data = totalData[1:files,],aes(x=embarked,fill=survived))+geom_bar(position="fill")+facet_wrap(~class)
Aquí ja podem extreure molta informació. Com a proposta de millora es podria fer un gràfic similar treballant només la classe. Caldria unificar tota la tripulació a una única categoria.
Comparem ara dos gràfics de freqüències: Survived-SibSp i Survived-Parch
# Survival com a funció de SibSp i Parch
ggplot(data = totalData[1:files,],aes(x=sibsp,fill=survived))+geom_bar()
ggplot(data = totalData[1:files,],aes(x=parch,fill=survived))+geom_bar()
# Veiem com la forma d'aquests dos gràfics és similar. Aquest fet ens pot indicar presència de correlacions altes. Fet previsible en funció de la descripció de les variables.
Vegem un exemple de construcció d’una variable nova: Grandària de família
# Construïm un atribut nou: family size..
totalData$FamilySize <- totalData$sibsp + totalData$parch +1;
totalData1<-totalData[1:files,]
ggplot(data = totalData1[!is.na(totalData[1:files,]$FamilySize),],aes(x=FamilySize,fill=survived))+geom_histogram(binwidth =1,position="fill")+ylab("Frequència")
# Observamos como las familias de 2 a 4 miembros tienen más del 50% de posibilidades de supervivencia.
Vegem ara dos gràfics que ens compara els atributs Age i Survived. Observem com el paràmetre position=“fill” ens dóna la proporció acumulada d’un atribut dins d’un altre
# Survival com a funció de age:
ggplot(data = totalData1[!(is.na(totalData[1:files,]$age)),],aes(x=age,fill=survived))+geom_histogram(binwidth =3)
ggplot(data = totalData1[!is.na(totalData[1:files,]$age),],aes(x=age,fill=survived))+geom_histogram(binwidth = 3,position="fill")+ylab("Frequència")
Estudia els tres casos següents i contesta justificant a la pregunta que es realitza:
Disposem d’un conjunt de variables referents a vehicles, tals com la marca, model, any de matriculació, etc. També es té el preu al qual es van vendre. Donat un nou vehicle posat a la venda, del qual es tenen les variables, però es desconeix el preu, quin tipus d’algorisme s’hauria d’aplicar per a predir de forma automàtica el preu?
En un magatzem de taronges es té una màquina que de forma automàtica obté un conjunt de variables de cada taronja, com la seva grandària, acidesa, grau maduració, etc. Si es desitja estudiar les taronges en diferents tipus segons les variables obtingudes, quin tipus d’algorisme és el més adequat?
Un servei de música per internet disposa dels historials de escolta dels seus clients: Quines cançons i grups trien els clients al llarg del temps de les seves escoltes. L’empresa desitja crear un sistema d’escolta que proposi la següent cançó i grup en funció de l’anterior escoltada. Quin tipus d’algorisme és el més adequat?
1.1
Ja que l’objectiu de l’algorisme és predir el preu d’un nou vehicle amb l’estudi de les seves variables, la millor opció és utilitzar un algorisme de predicció, ja que ‘Preu’ és una variable contínua i pot prendre infinitat de valors, per tant en cas d’usar algoritmes de classificació s’hauria de disposar d’infinitat d’etiquetes de classe, la qual cosa no és viable. Així, tot i que tendírem diverses opcions:
+ Arbres de decisió
+ Algoritmes de regressió
+ Xarxes neuronals: Aquesta model és el que em sembla més adequat pel nostre problema
En el nostre cas, la millor opció seria Multiple Linear Regression que és una tècnica estadística que utilitza diverses variables explicatives per predir el resultat d’una variable de resposta. L’objectiu de la regressió lineal múltiple (MLR) és modelar la relació lineal entre les variables explicatives (independents) i la variable de resposta (dependent).1
1.2
La tasca que es vol dur a terme, és la classificació de les taronges per tipus en funció de certes característiques de la taronja, i aquesta és la tasca dels mètodes d’agregació o clustering: “La base de l’agrupació és tenir la capacitat de detectar objectes semblants. El més important és saber què determina que dos objectes siguin semblants” de manera que si volem classificar taronges, aplicaríem un algoritme d’agregació que ens permetés trobar quins són els criteris que permeten assegurar que una taronja sigui d’un grup o no. És cert que es podria pensar que usar models classificatoris, però per això faria falta tenir definits a priori els tipus de taronja.
1.3
Per crear aquest sistema de recomanacions, la millor opció que veig, és l’ús d’un algoritme descriptiu que ens permeti trobar i expressar associacions significatives o causals entre diverses variables. Un algorismo molt emprat per usar aquesta tècnica serien les xarxes bayesianes que ens permetrà conèixer la influència entre variables i, per tant, predir els valors més probables d’una variable en funció d’altres. També es podrien usar les regles d’associació que permeten relacionar variables de manera significativa i crear regles amb caràcter explicatiu o predictiu.
A partir del joc de dades disponible en el següent enllaç http://archive.ics.uci.edu/ml/datasets/adult , realitza un estudi prenent com a proposta inicial el que s’ha realitzat amb el joc de dades “Titànic”. Amplia la proposta generant nous indicadors o solucionant altres problemes exposats en el mòdul 2. Explica el procés que has seguit, quin coneixement obtens de les dades, quin objectiu t’has fixat i detalla els passos, tècniques usades i els problemes resolts.
Nota: Si ho desitges pots utilitzar un altre conjunt de dades propi o d’algun repositori dades obertes sempre que sigui similar en diversitat de tipus de variables al proposat.
# Carreguem el joc de dades
dadesAdult <- read.csv('http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data',stringsAsFactors = FALSE, header = FALSE)
# Noms dels atributs
names(dadesAdult) <- c("age","workclass","fnlwgt","education","education-num","marital-status","occupation","relationship","race","sex","capital-gain","capital-loss","hour-per-week","native-country","income")
# Redacta aquí el codi R per a l'estudi del joc de dades Adult
#es verifica l'estructura de dades
str(dadesAdult)
## 'data.frame': 32561 obs. of 15 variables:
## $ age : int 39 50 38 53 28 37 49 52 31 42 ...
## $ workclass : chr " State-gov" " Self-emp-not-inc" " Private" " Private" ...
## $ fnlwgt : int 77516 83311 215646 234721 338409 284582 160187 209642 45781 159449 ...
## $ education : chr " Bachelors" " Bachelors" " HS-grad" " 11th" ...
## $ education-num : int 13 13 9 7 13 14 5 9 14 13 ...
## $ marital-status: chr " Never-married" " Married-civ-spouse" " Divorced" " Married-civ-spouse" ...
## $ occupation : chr " Adm-clerical" " Exec-managerial" " Handlers-cleaners" " Handlers-cleaners" ...
## $ relationship : chr " Not-in-family" " Husband" " Not-in-family" " Husband" ...
## $ race : chr " White" " White" " White" " Black" ...
## $ sex : chr " Male" " Male" " Male" " Male" ...
## $ capital-gain : int 2174 0 0 0 0 0 0 0 14084 5178 ...
## $ capital-loss : int 0 0 0 0 0 0 0 0 0 0 ...
## $ hour-per-week : int 40 13 40 40 40 40 16 45 50 40 ...
## $ native-country: chr " United-States" " United-States" " United-States" " United-States" ...
## $ income : chr " <=50K" " <=50K" " <=50K" " <=50K" ...
Hi ha més de 32500 objectes de 15 variables
PROCÉS DE NETEJA DEL CONJUNT DE DADES
Analitzarem i treballarem els atributs amb valors buits o nuls.
#Cercam els valores NA i ""
colSums(is.na(dadesAdult))
## age workclass fnlwgt education education-num
## 0 0 0 0 0
## marital-status occupation relationship race sex
## 0 0 0 0 0
## capital-gain capital-loss hour-per-week native-country income
## 0 0 0 0 0
colSums(dadesAdult=="")
## age workclass fnlwgt education education-num
## 0 0 0 0 0
## marital-status occupation relationship race sex
## 0 0 0 0 0
## capital-gain capital-loss hour-per-week native-country income
## 0 0 0 0 0
#Cercam els valores '?'
colSums(dadesAdult==" ?")
## age workclass fnlwgt education education-num
## 0 1836 0 0 0
## marital-status occupation relationship race sex
## 0 1843 0 0 0
## capital-gain capital-loss hour-per-week native-country income
## 0 0 0 583 0
Amb aquesta informació veiem que cal tractar els atributs workclass, occupation i native-country. En aquest cas tindríem dues opcions; la primera seria substituir el valor que falta per la mitjana que presenta l’atribut en les dades i la segona seria substituir-lo pel valor més freqüent. Tot i que només representen al voltant de el 5% de l’total d’observacions, aquests mètodes porten a introduir biaixos en les dades, i per aquest motiu no tractarem els casos que presenten un atribut “UnKwnow”.
# Eliminamos los casos que presentan un atributo NA
dadesAdult <- dadesAdult[complete.cases(dadesAdult),]
Aquest procés ens deixa les següents dades:
str(dadesAdult)
## 'data.frame': 32561 obs. of 15 variables:
## $ age : int 39 50 38 53 28 37 49 52 31 42 ...
## $ workclass : chr " State-gov" " Self-emp-not-inc" " Private" " Private" ...
## $ fnlwgt : int 77516 83311 215646 234721 338409 284582 160187 209642 45781 159449 ...
## $ education : chr " Bachelors" " Bachelors" " HS-grad" " 11th" ...
## $ education-num : int 13 13 9 7 13 14 5 9 14 13 ...
## $ marital-status: chr " Never-married" " Married-civ-spouse" " Divorced" " Married-civ-spouse" ...
## $ occupation : chr " Adm-clerical" " Exec-managerial" " Handlers-cleaners" " Handlers-cleaners" ...
## $ relationship : chr " Not-in-family" " Husband" " Not-in-family" " Husband" ...
## $ race : chr " White" " White" " White" " Black" ...
## $ sex : chr " Male" " Male" " Male" " Male" ...
## $ capital-gain : int 2174 0 0 0 0 0 0 0 14084 5178 ...
## $ capital-loss : int 0 0 0 0 0 0 0 0 0 0 ...
## $ hour-per-week : int 40 13 40 40 40 40 16 45 50 40 ...
## $ native-country: chr " United-States" " United-States" " United-States" " United-States" ...
## $ income : chr " <=50K" " <=50K" " <=50K" " <=50K" ...
Discretitzem en els casos que té sentit i en funció de cada variable Comprovem amb quines variables seria convenient dur a terme un procés de discretització
apply(dadesAdult,2, function(x) length(unique(x)))
## age workclass fnlwgt education education-num
## 73 9 21648 16 16
## marital-status occupation relationship race sex
## 7 15 6 5 2
## capital-gain capital-loss hour-per-week native-country income
## 119 92 94 42 2
A continuació discretitzem les variables que tenen poques classes
cols<-c("marital-status","race","sex","income")
for (i in cols){
dadesAdult[,i] <- as.factor(dadesAdult[,i])
}
Nova estructura de dades:
str(dadesAdult)
## 'data.frame': 32561 obs. of 15 variables:
## $ age : int 39 50 38 53 28 37 49 52 31 42 ...
## $ workclass : chr " State-gov" " Self-emp-not-inc" " Private" " Private" ...
## $ fnlwgt : int 77516 83311 215646 234721 338409 284582 160187 209642 45781 159449 ...
## $ education : chr " Bachelors" " Bachelors" " HS-grad" " 11th" ...
## $ education-num : int 13 13 9 7 13 14 5 9 14 13 ...
## $ marital-status: Factor w/ 7 levels " Divorced"," Married-AF-spouse",..: 5 3 1 3 3 3 4 3 5 3 ...
## $ occupation : chr " Adm-clerical" " Exec-managerial" " Handlers-cleaners" " Handlers-cleaners" ...
## $ relationship : chr " Not-in-family" " Husband" " Not-in-family" " Husband" ...
## $ race : Factor w/ 5 levels " Amer-Indian-Eskimo",..: 5 5 5 3 3 5 3 5 5 5 ...
## $ sex : Factor w/ 2 levels " Female"," Male": 2 2 2 2 1 1 1 2 1 2 ...
## $ capital-gain : int 2174 0 0 0 0 0 0 0 14084 5178 ...
## $ capital-loss : int 0 0 0 0 0 0 0 0 0 0 ...
## $ hour-per-week : int 40 13 40 40 40 40 16 45 50 40 ...
## $ native-country: chr " United-States" " United-States" " United-States" " United-States" ...
## $ income : Factor w/ 2 levels " <=50K"," >50K": 1 1 1 1 1 1 1 2 2 2 ...
files=dim(dadesAdult)[1]
Ara es miren els levels dels factors obtinguts:
levels(dadesAdult$`marital-status`)
## [1] " Divorced" " Married-AF-spouse" " Married-civ-spouse"
## [4] " Married-spouse-absent" " Never-married" " Separated"
## [7] " Widowed"
levels(dadesAdult$race)
## [1] " Amer-Indian-Eskimo" " Asian-Pac-Islander" " Black"
## [4] " Other" " White"
levels(dadesAdult$sex)
## [1] " Female" " Male"
levels(dadesAdult$income)
## [1] " <=50K" " >50K"
str(dadesAdult)
## 'data.frame': 32561 obs. of 15 variables:
## $ age : int 39 50 38 53 28 37 49 52 31 42 ...
## $ workclass : chr " State-gov" " Self-emp-not-inc" " Private" " Private" ...
## $ fnlwgt : int 77516 83311 215646 234721 338409 284582 160187 209642 45781 159449 ...
## $ education : chr " Bachelors" " Bachelors" " HS-grad" " 11th" ...
## $ education-num : int 13 13 9 7 13 14 5 9 14 13 ...
## $ marital-status: Factor w/ 7 levels " Divorced"," Married-AF-spouse",..: 5 3 1 3 3 3 4 3 5 3 ...
## $ occupation : chr " Adm-clerical" " Exec-managerial" " Handlers-cleaners" " Handlers-cleaners" ...
## $ relationship : chr " Not-in-family" " Husband" " Not-in-family" " Husband" ...
## $ race : Factor w/ 5 levels " Amer-Indian-Eskimo",..: 5 5 5 3 3 5 3 5 5 5 ...
## $ sex : Factor w/ 2 levels " Female"," Male": 2 2 2 2 1 1 1 2 1 2 ...
## $ capital-gain : int 2174 0 0 0 0 0 0 0 14084 5178 ...
## $ capital-loss : int 0 0 0 0 0 0 0 0 0 0 ...
## $ hour-per-week : int 40 13 40 40 40 40 16 45 50 40 ...
## $ native-country: chr " United-States" " United-States" " United-States" " United-States" ...
## $ income : Factor w/ 2 levels " <=50K"," >50K": 1 1 1 1 1 1 1 2 2 2 ...
Crearem una nova variable per agrupar les edats:
dadesAdult[["age"]] <- ordered(cut(dadesAdult[["age"]], c(15,25,45,65,100)),
labels = c("Adolescent", "Jove", "Adult", "Gent gran"))
PROCÉS D’ANÀLISI DEL CONJUNT DE DADES
Ara s’analitzaran les relacions entre les diferents variables del conjunt de dades: En el moment de l’enfonsament del titànic, es parlava sobre diferència salarial entre races, gènere, etc. Per això crec que és interessant que l’atribut incom tingui un pes important en aquests anàlisi.
# Es visualitza la relació entre las variables "sex" i "income":
ggplot(data = dadesAdult[1:files,],aes(x=sex,fill=income))+geom_bar() + ggtitle("Distribució d'ingresos per gènere")
Es pot observar com efectivament existeix una bretxa salarial entre el salari d’homes i dones
# Si es fa el mateix estudi, però tenint en compte les frqüències:
ggplot(data = dadesAdult[1:files,],aes(x=sex,fill=income))+geom_bar(position="fill") +ylab("Freqüència") + ggtitle("Distribució d'ingresos per gènere considerant la freqüencia")
Finalment, per tenir els percentatges exactes, s’obté la matriu de percentatges de frqüencia per gènere:
t<-table(dadesAdult[1:files,]$sex,dadesAdult[1:files,]$income)
for (i in 1:dim(t)[1]){
t[i,]<-t[i,]/sum(t[i,])*100
}
t
##
## <=50K >50K
## Female 89.05394 10.94606
## Male 69.42634 30.57366
Podem concloure que la probabilitat de guanyar> = 50K és més gran si el passatger és home amb quasi un 31% de possibilitats si el passatger és home.
Com s’ha comentat abans, també pot ser interessant analitzar ‘income’ en funció de race:
ggplot(data = dadesAdult[1:files,],aes(x=race,fill=income))+geom_bar(position="fill") + theme(axis.text.x = element_text(angle = 90)) +ylab("Freqüència") + ggtitle("Distribució d'ingressos per raça")
Matriu de percentatges de freqüència:
t<-table(dadesAdult[1:files,]$race,dadesAdult[1:files,]$income)
for (i in 1:dim(t)[1]){
t[i,]<-t[i,]/sum(t[i,])*100
}
t
##
## <=50K >50K
## Amer-Indian-Eskimo 88.424437 11.575563
## Asian-Pac-Islander 73.435996 26.564004
## Black 87.612036 12.387964
## Other 90.774908 9.225092
## White 74.414006 25.585994
A més, es poden combinar els dos anàlisis anteriors dividint el gràfic de race per gènere:
ggplot(data = dadesAdult[1:files,],aes(x=race,fill=income))+geom_bar(position="fill")+ ylab("Freqüència") + facet_wrap(~sex) + coord_flip() + ggtitle("Distribució d'ingresos per raça gènere")
observem com els homes asiàtics i de raça blanca perceben en major proporció + 50K. Mentre que les dones de raça negra i “altre” són les que menys perceben més de 50K.
Vegem ara dos gràfics que ens comparen els atributs education i Income.
ggplot(data = dadesAdult[!(is.na(dadesAdult[1:files,]$`education-num`)),],aes(x=`education-num`))+geom_histogram(binwidth = 5, fill= "blue", color ="black") + facet_grid(income~.) + ggtitle("Distribució dels ingressos en funció dels estudis")
Es verifica que com més gran sigui el nivell d’estudis tindran més probabilitats d’obtenir ingressos iguals o superiors a 50K.
Tenint en compte la frqüència:
ggplot(data = dadesAdult[!(is.na(dadesAdult[1:files,]$`education-num`)),],aes(x=`education-num`, fill=income))+geom_histogram(binwidth = 5 ,position="fill")+ylab("Frecuencia") + ggtitle("Distribució dels ingressos en funció dels estudis tenint en compte la frecuencia")
Podem comprovar que per als ingressos <= 50K aquesta gairebé normalment distribuïda, mentre que en el gràfic amb ingressos> = 50K està clarament esbiaixada.
Es verifica que com més gran sigui el nivell d’estudis tindran més probabilitats d’obtenir ingressos iguals o superiors a 50K.
A continuació anem a analitzar la relació entre l’estat civil i els ingressos Visualitzem la relació entre les variables “marital-status” i “income” a través de dos gràfics:
ggplot(data = dadesAdult[1:files,],aes(x=`marital-status`,fill=income))+geom_bar(position = position_dodge()) + theme(axis.text.x = element_text(angle = 90)) + ggtitle("Distribució d'ingressos por estatus civil")
Es pot comprovar que en general, les persones casades, són les que tenen un major income
ggplot(data=dadesAdult[1:files,],aes(x=income,fill=age))+geom_bar()
En aquesta gràfica visualitzem que la majoria d’adolescents i joves cobren menys de 50K i que el major percentatge de població que cobra + 50K són els adults i grans, per tant, assegurar que a major edat, major possibilitats de guanyar + 50K
ggplot(data = dadesAdult[1:files,],aes(x=`native-country`,fill=income,))+geom_bar(position="fill")+ylab("Frqüència")+theme(axis.text.x = element_text(angle = 90))
Podem visualitzar els països amb un major nombre de passatgers que cobren més de 50K, i el resultat és una mica sorprenent
ggplot(data = dadesAdult[1:files,],aes(x=education,fill=income,))+geom_bar(position="fill")+ylab("Frqüència")+theme(axis.text.x = element_text(angle = 90))
Existeix ha una relació entre els diners percebuts i els estudis, és a dir, Com més alt és el nivell d’estudis, major possibilitat de percebre 50k
Bibliografia: http://www.sthda.com/english/wiki/ggplot2-colors-how-to-change-colors-automatically-and-manually#use-a-single-color https://stackoverflow.com/questions/4935479/how-to-combine-multiple-conditions-to-subset-a-data-frame-using-or https://www.investopedia.com/terms/m/mlr.asp https://rmarkdown.rstudio.com/authoring_basics.html
Pregunta Concepte Pes en la nota final
1ª S’encerta en identificar el tipus de problema que presenta el cas. 5%
1ª L’explicació proporcionada és correcta. La justificació i argumentació és prou elaborada. 5%
1b S’encerta en identificar el tipus de problema que presenta el cas. 5%
1b L’explicació proporcionada és correcta. . La justificació i argumentació és prou elaborada. 5%
1c S’encerta en identificar el tipus de problema que presenta el cas. 5%
1c L’explicació proporcionada és correcta. . La justificació i argumentació és prou elaborada. 5%
2 Es carrega la base de dades, es visualitza la seva estructura i s’explica amb els fets bàsics que expliquen les dades. 5%
2 S’estudia si existeixen atributs buits, i si és el cas s’adopten mesures per a tractar aquests atributs. 2.5%
2 Es transforma algun atribut per adaptar-lo a un estudi posterior. 2.5%
2 Es realitza alguna discretització d’algun atribut. 2.5%
2 Es crea un indicador nou a partit d’altres atributs 2.5%
2 S’analitzen les dades de forma visual i s’extreuen conclusions tangibles. Cal elaborar un discurs coherent i amb conclusions clares. 35%
2 Es tracta en profunditat algun altre aspecte respecte a les dades presentat en el mòdul 2 15%
2 S’ha buscat informació addicional, s’ha inclòs en el document de resposta i les fonts s’han citat correctament 5%