From 00af14315e2199e8efa0d054255e5a1bdbcfae70 Mon Sep 17 00:00:00 2001 From: EduardoHidalgoGarcia Date: Mon, 4 Dec 2017 22:49:37 -0600 Subject: [PATCH 1/2] Tratando de subir al git mis tareas --- intro-to-data-science-2017 | 1 + 1 file changed, 1 insertion(+) create mode 160000 intro-to-data-science-2017 diff --git a/intro-to-data-science-2017 b/intro-to-data-science-2017 new file mode 160000 index 0000000..7d86024 --- /dev/null +++ b/intro-to-data-science-2017 @@ -0,0 +1 @@ +Subproject commit 7d860243917fd2a67ef00356d573ac1dfbce8b3c From 183017570352faad49803990037927cc2aa280d5 Mon Sep 17 00:00:00 2001 From: EduardoHidalgoGarcia Date: Mon, 4 Dec 2017 22:52:06 -0600 Subject: [PATCH 2/2] Add files via upload --- EduardoHidalgo/algas/00-load.R | 1 + EduardoHidalgo/algas/01-prepare.R | 15 ++++++ EduardoHidalgo/algas/02-clean.R | 13 +++++ EduardoHidalgo/algas/algas.R | 79 ++++++++++++++++++++++++++++ EduardoHidalgo/algas/algas.rds | Bin 0 -> 8270 bytes EduardoHidalgo/algas/metadata.R | 81 +++++++++++++++++++++++++++++ EduardoHidalgo/algas/utils.R | 34 ++++++++++++ EduardoHidalgo/german/00-load.R | 1 + EduardoHidalgo/german/01-prepare.R | 15 ++++++ EduardoHidalgo/german/02-clean.R | 1 + EduardoHidalgo/german/german.R | 37 +++++++++++++ EduardoHidalgo/german/german.Rproj | 13 +++++ EduardoHidalgo/german/german.rds | Bin 0 -> 13500 bytes EduardoHidalgo/german/german.zip | Bin 0 -> 22312 bytes EduardoHidalgo/german/metadata.R | 81 +++++++++++++++++++++++++++++ EduardoHidalgo/german/utils.R | 32 ++++++++++++ 16 files changed, 403 insertions(+) create mode 100644 EduardoHidalgo/algas/00-load.R create mode 100644 EduardoHidalgo/algas/01-prepare.R create mode 100644 EduardoHidalgo/algas/02-clean.R create mode 100644 EduardoHidalgo/algas/algas.R create mode 100644 EduardoHidalgo/algas/algas.rds create mode 100644 EduardoHidalgo/algas/metadata.R create mode 100644 EduardoHidalgo/algas/utils.R create mode 100644 EduardoHidalgo/german/00-load.R create mode 100644 EduardoHidalgo/german/01-prepare.R create mode 100644 EduardoHidalgo/german/02-clean.R create mode 100644 EduardoHidalgo/german/german.R create mode 100644 EduardoHidalgo/german/german.Rproj create mode 100644 EduardoHidalgo/german/german.rds create mode 100644 EduardoHidalgo/german/german.zip create mode 100644 EduardoHidalgo/german/metadata.R create mode 100644 EduardoHidalgo/german/utils.R diff --git a/EduardoHidalgo/algas/00-load.R b/EduardoHidalgo/algas/00-load.R new file mode 100644 index 0000000..a68f80d --- /dev/null +++ b/EduardoHidalgo/algas/00-load.R @@ -0,0 +1 @@ +algas_data <- load() diff --git a/EduardoHidalgo/algas/01-prepare.R b/EduardoHidalgo/algas/01-prepare.R new file mode 100644 index 0000000..f8cddc2 --- /dev/null +++ b/EduardoHidalgo/algas/01-prepare.R @@ -0,0 +1,15 @@ +colnames(algas_data) <- algas_colnames + +#german_data$good_loan <- as.factor( +# ifelse( +# german_data$good_loan == 1, +# 'GoodLoan', +# 'BadLoan' +# ) +#) + +#german_data <- german_data %>% +# mutate_all(funs(german_decode)) + +#german_data <- german_data %>% +# mutate_at(c(1,3,4,6,7,9,10,12,14,15,17,19,20),funs(as.factor)) diff --git a/EduardoHidalgo/algas/02-clean.R b/EduardoHidalgo/algas/02-clean.R new file mode 100644 index 0000000..a3e8c02 --- /dev/null +++ b/EduardoHidalgo/algas/02-clean.R @@ -0,0 +1,13 @@ +colnames(algas_data) <- algas_clean_colnames(algas_colnames) + +problematic_rows <- problems(algas_data)$row + +algas_data[problematic_rows,] <- algas_data %>% + slice(problematic_rows) %>% + unite(col="all", -seq(1:6), sep = "/", remove=TRUE) %>% + extract(all, into=c("NO3", "NH4", "resto"), regex="([0-9]*.[0-9]{5})([0-9]*.[0-9]*)/(.*)/NA", remove=TRUE) %>% + separate(resto, into=names(algas_data)[9:18], sep="/", remove=TRUE) + +algas_data <- algas_data %>% mutate_at(c(2,3), funs(algas_clean_data)) + +algas_data <- readr::type_convert(algas_data) diff --git a/EduardoHidalgo/algas/algas.R b/EduardoHidalgo/algas/algas.R new file mode 100644 index 0000000..9822576 --- /dev/null +++ b/EduardoHidalgo/algas/algas.R @@ -0,0 +1,79 @@ +setwd("~/GitHub/MineriaYAnalisisDeDatos/algas") + +library(readr) +library(stringr) +library(tidyr) +library(dplyr) +library(ggplot2) +library(ggthemes) + +source("metadata.R") +source("utils.R") +source("00-load.R") +source("01-prepare.R") +source("02-clean.R") + +summary(algas_data) + +glimpse(algas_data) + +problems(algas_data) + + +library(mice) +md.pattern(algas_data) + +library("VIM") +aggr(algas_data, prop=FALSE, numbers=TRUE) + +matrixplot(algas_data) + + +x <- as.data.frame(abs(is.na(algas_data))) # df es un data.frame + +head(algas_data) + +head(x) + +# Extrae las variables que tienen algunas celdas con NAs +y <- x[which(sapply(x, sd) > 0)] + +# Da la correación un valor alto positivo significa que desaparecen juntas. +cor(y,y) + +summary(algas_data[-grep(colnames(algas_data),pattern = "^a[1-9]")]) + +algas_con_NAs <- algas_data[!complete.cases(algas_data),] + +algas_con_NAs[c('max_ph', 'min_o2', 'cl', 'no3', 'nh4', 'opo4', 'po4', 'chla')] %>% + print(n = 33) + + +algas_data %>% + select(-c(1:3)) %>% + cor(use="complete.obs") %>% + symnum() + +ggplot(data=algas_data) + + aes(x=opo4, y=po4) + + geom_point(shape=1) + # Usamos una bolita para los puntos + geom_smooth(method=lm, se=FALSE) + + theme_hc() +# Mostramos la linea de la regresión y no mostramos la región de confianza + + +### + + +c2 <- ggplot(algas_data, aes(max_ph)) + + geom_histogram(aes(y = ..density..), binwidth=1) + + geom_density()+ + xlab("PH Maximo") + ylab("") + ggtitle("Distribucion Empirica del PH Maximo Por Estacion")+facet_wrap(~ season, nrow = 3) + +p2 <- ggplot(father.son, aes(fheight)) + + geom_histogram(aes(y = ..density..), binwidth=1) + + geom_density() + xlim(58, 80) + ylim(0, 0.16) + + xlab("ht (inches)") + ylab("") + + ggtitle("Fathers") + +grid.arrange(c2, p2, nrow = 1) \ No newline at end of file diff --git a/EduardoHidalgo/algas/algas.rds b/EduardoHidalgo/algas/algas.rds new file mode 100644 index 0000000000000000000000000000000000000000..33fca7548b9235aac58bc12d68fc77bf9dc8d0b9 GIT binary patch literal 8270 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 Me>TR1m|vFw0Q_l<(EtDd literal 0 HcmV?d00001 diff --git a/EduardoHidalgo/algas/metadata.R b/EduardoHidalgo/algas/metadata.R new file mode 100644 index 0000000..49f5a5f --- /dev/null +++ b/EduardoHidalgo/algas/metadata.R @@ -0,0 +1,81 @@ +.## German credit --------------------------------------------------------------- + +## Nombres de columnas --------------------------------------------------------- +german_colnames <- c('Status of existing checking account', + 'Duration in month', + 'Credit history', + 'Purpose', + 'Credit amount', + 'Savings account/bonds', + 'Present employment since', + 'Installment rate in percentage of disposable income', + 'Personal status and sex', + 'Other debtors / guarantors', + 'Present residence since', + 'Property', + 'Age in years', + 'Other installment plans', + 'Housing', + 'Number of existing credits at this bank', + 'Job', + 'Number of people being liable to provide maintenance for', + 'Telephone', + 'foreign worker', + 'good_loan' +) + +## Códigos --------------------------------------------------------------------- +german_codes <- list('A11'='... < 0 DM', + 'A12'='0 <= ... < 200 DM', + 'A13'='... >= 200 DM / salary assignments for at least 1 year', + 'A14'='no checking account', + 'A30'='no credits taken/all credits paid back duly', + 'A31'='all credits at this bank paid back duly', + 'A32'='existing credits paid back duly till now', + 'A33'='delay in paying off in the past', + 'A34'='critical account/other credits existing (not at this bank)', + 'A40'='car (new)', + 'A41'='car (used)', + 'A42'='furniture/equipment', + 'A43'='radio/television', 'A44'='domestic appliances', 'A45'='repairs', + 'A46'='education', 'A47'='(vacation - does not exist?)', + 'A48'='retraining', 'A49'='business', 'A410'='others', 'A61'='... < 100 DM', + 'A62'='100 <= ... < 500 DM', 'A63'='500 <= ... < 1000 DM', + 'A64'='.. >= 1000 DM', 'A65'='unknown/ no savings account', + 'A71'='unemployed', 'A72'='... < 1 year', 'A73'='1 <= ... < 4 years', + 'A74'='4 <= ... < 7 years', 'A75'='.. >= 7 years', 'A91'='male : divorced/separated', + 'A92'='female : divorced/separated/married', + 'A93'='male : single', + 'A94'='male : married/widowed', + 'A95'='female : single', + 'A101'='none', + 'A102'='co-applicant', + 'A103'='guarantor', 'A121'='real estate', + 'A122'='if not A121 : building society savings agreement/life insurance', + 'A123'='if not A121/A122 : car or other, not in attribute 6', + 'A124'='unknown / no property', + 'A141'='bank', 'A142'='stores', 'A143'='none', 'A151'='rent', 'A152'='own', + 'A153'='for free', 'A171'='unemployed/ unskilled - non-resident', + 'A172'='unskilled - resident', 'A173'='skilled employee / official', + 'A174'='management/ self-employed/highly qualified employee/ officer', + 'A191'='none', 'A192'='yes, registered under the customers name', + 'A201'='yes', 'A202'='no' +) + + +## Algas ----------------------------------------------------------------------- + +## Nombre de columnas ---------------------------------------------------------- +algas_colnames <- c('season', + 'river_size', + 'fluid_velocity', + 'max_PH', + 'min_O2', + 'Cl', + 'NO3', + 'NH4', + 'oPO4', + 'PO4', + 'Chla', + paste('a', seq(1:7), sep="") +) \ No newline at end of file diff --git a/EduardoHidalgo/algas/utils.R b/EduardoHidalgo/algas/utils.R new file mode 100644 index 0000000..d05e437 --- /dev/null +++ b/EduardoHidalgo/algas/utils.R @@ -0,0 +1,34 @@ + +load <- function(){ + if(!file.exists('algas.rds')){ + algas_url <- 'https://archive.ics.uci.edu/ml/machine-learning-databases/coil-mld/analysis.data' + + algas_data <- read_csv(algas_url, + col_names = algas_colnames, + na = 'XXXXXXX') + saveRDS(algas_data, "algas.rds") + print('algas.rds se bajó y guardó\n') + } + else{ + warning('algas.rds ya existe\n') + algas_data <- readRDS("algas.rds") + } + + return(algas_data) +} + +algas_decode <- function(columna){ + if(is.character(columna)){ + unlist(german_codes[columna],use.names = F) + }else{ + columna + } +} + +algas_clean_colnames <- function(x){ + str_replace_all(tolower(x),"/| ",'_') +} + +algas_clean_data <- function(x){ + str_replace_all(tolower(x),"_",'') +} diff --git a/EduardoHidalgo/german/00-load.R b/EduardoHidalgo/german/00-load.R new file mode 100644 index 0000000..62c7f44 --- /dev/null +++ b/EduardoHidalgo/german/00-load.R @@ -0,0 +1 @@ +german_data <- load() \ No newline at end of file diff --git a/EduardoHidalgo/german/01-prepare.R b/EduardoHidalgo/german/01-prepare.R new file mode 100644 index 0000000..2ca6ec3 --- /dev/null +++ b/EduardoHidalgo/german/01-prepare.R @@ -0,0 +1,15 @@ +colnames(german_data) <- german_colnames + +german_data$good_loan <- as.factor( + ifelse( + german_data$good_loan == 1, + 'GoodLoan', + 'BadLoan' + ) +) + +german_data <- german_data %>% + mutate_all(funs(german_decode)) + +german_data <- german_data %>% + mutate_at(c(1,3,4,6,7,9,10,12,14,15,17,19,20),funs(as.factor)) diff --git a/EduardoHidalgo/german/02-clean.R b/EduardoHidalgo/german/02-clean.R new file mode 100644 index 0000000..6c22fea --- /dev/null +++ b/EduardoHidalgo/german/02-clean.R @@ -0,0 +1 @@ +colnames(german_data) <- german_clean_colnames(german_colnames) diff --git a/EduardoHidalgo/german/german.R b/EduardoHidalgo/german/german.R new file mode 100644 index 0000000..8ac8c74 --- /dev/null +++ b/EduardoHidalgo/german/german.R @@ -0,0 +1,37 @@ +setwd("~/GitHub/MineriaYAnalisisDeDatos/german") + +library(readr) +library(stringr) +library(dplyr) +library(ggplot2) +library(ggthemes) + +source("metadata.R") +source("utils.R") +source("00-load.R") +source("01-prepare.R") +source("02-clean.R") + +ggplot(data = german_data) + + geom_bar(mapping = aes(x = `personal_status_and_sex`, fill = `good_loan`), position = "fill")+ + theme(axis.text.x = element_text(angle = 60, hjust = 1)) + +ggplot(data = german_data) + + geom_bar(mapping = aes(x = `good_loan`, fill = `credit_history`), position = "fill") + +ggplot(data = german_data) + + geom_bar(mapping = aes(x = `credit_history`, fill = `good_loan`), position = "fill")+ + theme(axis.text.x = element_text(angle = 70, hjust = 1)) + +german_data %>% + group_by(credit_history) %>% + dplyr::summarise(count = n()) %>% + arrange(desc(count)) %>% + ggplot(.) + + geom_bar(aes(x=reorder(credit_history, count), y = count), stat="identity", fill="gray") + + coord_flip() + + theme_hc() + + ylab('casos') + + xlab('Historial de crédito') + +summary(german_data) diff --git a/EduardoHidalgo/german/german.Rproj b/EduardoHidalgo/german/german.Rproj new file mode 100644 index 0000000..f43d039 --- /dev/null +++ b/EduardoHidalgo/german/german.Rproj @@ -0,0 +1,13 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: ISO8859-1 + +RnwWeave: Sweave +LaTeX: pdfLaTeX diff --git a/EduardoHidalgo/german/german.rds b/EduardoHidalgo/german/german.rds new file mode 100644 index 0000000000000000000000000000000000000000..313c0802ccedc10a8286a2d74c15d97fb67affae GIT binary patch literal 13500 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