Está en la página 1de 3

####################################################################

##########################COVID-19 ANALYSIS#########################
####################################################################

#LIBRERIAS
########################################
library(tidyverse)
library(lubridate)
library(date)
library(ape)
library(factoextra)
library(dendextend)
library(circlize)
library(cluster)

#CAPTURA Y FORMATO DE DATOS


########################################
#"https://query.data.world/s/cdc5dussbvmp52xnluz6wvyntjn6am"
#setwd("C:/Users/SOCIAL DATA/Desktop/cursos/covid")
covid = read.csv("covid-21-04-2020.csv", header = T,
stringsAsFactors = F, encoding = "latin")
str(covid)
covid$Date= mdy(covid$Date)# mantener el formato de fecha ,al momento de importar
mantener los formatos de los datos
names(covid)
covid =
covid[order(covid$Country_Region,covid$ï..Case_Type,covid$Date,covid$Cases),]

#CREAR SUB CONJUNTO DE DATOS


########################################
casos = subset(covid,ï..Case_Type=="Confirmed")
casos$ï..Case_Type <-NULL # eliminar variable tipo de caso
table(casos$Country_Region)#almacena variable casos confirmados de la data cual
tiene seguimiento de 90d

#DATA FRAME DE PAÍSES (comparar la evolucion del virus a nivel de pais)


########################################
paises=as.character(subset(as.data.frame(table(casos$Country_Region)),
Freq <100)[,1])#90 casos x pais

casos_total = data.frame()#objeto dataframe vacio


for(i in 1:length(paises)){# se almacena nombre de 90 casos x pais que tienen casos
confirmados
casos_selec = subset(casos,Country_Region== paises[i])
casos_total <- rbind(casos_total, casos_selec)
}
#table(casos_total$Country_Region)
#c(2918,135,463,177,387,72372,538,513)
#DATA FRAME PARA PAÍSES QUE PRESENTABAN CASOS DESAGREGADOS
########################################
incluir = c("China", "Denmark", "France", "Netherlands",
"United Kingdom", "US", "Canada", "Australia")
casos_incluir= data.frame()#df vacio
for(i in 1:length(incluir)){#8 casos que son los condados
library(data.table)
casos_selec = subset(casos,Country_Region== incluir[i])
DT <- as.data.table(casos_selec)
DT[, mi_sum := sum(Cases), by=c("Country_Region","Date")]
DT <- DT[!duplicated(DT$Date),] #
DT$Cases <- DT$mi_sum
DT$mi_sum <-NULL # eliminar variable
casos_incluir <- rbind(casos_incluir, DT)
}
#table(casos_incluir$Country_Region)

#CONCATENAR DATA FRAME


########################################
CASOS_FINAL = rbind(casos_total,casos_incluir)#unimos los casos

#CREAR SUB CONJUNTO PARA MAYORES A 10 CASOS


########################################
CASOS_FINAL_MAS10 = subset(CASOS_FINAL, Cases >=10 )#los casos mayor a 10 lo
tomamos cuenta

#CREAR DATA HISTORIAL DE CASOS POR PAIS


##############################################
#seleccionamos 3 variables y agrupamos en funcion del pais
d1_casos <- CASOS_FINAL_MAS10 %>% select(Cases, Country_Region) %>%
group_by(Country_Region) %>% mutate(rn = row_number())

d11 <- spread(d1_casos, rn, Cases)


#na pues hay paises que aun no presentaban 49 dias de evolución(austria)
#REALIZAR LA SELECCIÓN SEGÚN DÍAS DE PERÚ
##############################################
peru=dim(d11)[2] - rowSums(is.na(d11[d11$Country_Region=="Peru",]))
d12 = d11[,1:peru]#paises similares a la evolución de Perú

#ELIMINAMOS CASOS QUE NO TENGAN UN PATRÓN DE EVOLUCIÓN


#SIMILAR EN DÍAS A PERÚ
##############################################
covid_casos.cl=na.omit(d12) #Para eliminar casos donde aparecen valores perdidos

#PREPARAMOS LOS DATOS PARA EL ANÁLISIS


#CLÚSTER JERÁRQUICO
##############################################
colnames(covid_casos.cl) <- tolower(colnames(covid_casos.cl))
nombres=covid_casos.cl[,1]#primera columna nombre de paises y transformamos en
formato caracter
nombres=as.character(nombres$country_region)
covid_casos.cl=covid_casos.cl[,-1]#sacamos los nombres y eliminamos campo
rownames(covid_casos.cl)=nombres#añaddimos nombre por filas de la columna nombre
head(covid_casos.cl)

#COEFICIENTE DE AGLOMERACIÓN
##############################################
res=agnes(scale(covid_casos.cl),#metodo a utilizar
method="weighted")
res$ac# interesa identificar el mayor coeficiente de Aglomeración

#ward = 0.9722
#single = 0.9658
#complete = 0.9673
#average = 0.9671
#weighted = 0.9652

#NÚMERO ÓPTIMO DE CLÚSTER


##############################################
diss.covid=daisy(scale(covid_casos.cl))#calculamos la matriz de disimilaridad
mediante distancia euclidians
res=agnes(scale(covid_casos.cl),method="ward")#modelo con metodo aglomerativo y
metod nlac ward

par(mfrow=c(1,3))
for(h in 2:4){#bucle2 a 4 conglomerados
conglomerados=cutree(as.dendrogram(res),h)#cutree etiqueta cluster k pertenece
cada obs
plot(silhouette(conglomerados,diss.covid))#h num de cluster a iterar
}#necesita el valor de la etiqueta de cada uno de los cluster y la matri de
disimilarudad
par(mfrow=c(1,1))
#K=2
help(cutree)
#Corta , por ejemplo, como resultado de hclust,
#en varios grupos, ya sea especificando el número
#deseado de grupos o la altura de corte.

#el coef de silueta k presenta mayor valor es ?


#CREAR DENDOGRAMA CON EL MÉTODO DE WARD
##############################################
hc=agnes(scale(covid_casos.cl),method="ward")#creamos dendograma con metodo ward
dend <- as.dendrogram(hc)#dend tiene el modelo tranformado n dendogram

#DENDOGRAMA RADIAL
##############################################
# Cortar el dendograma en 6 grupos siguiendo criterio de experto para caso se
ttrabaja con
colors = c("red", "blue", "green", "black","orange","pink")
clus6 = cutree(as.dendrogram(hc), 6)
plot(as.phylo(as.dendrogram(hc)), type = "fan", tip.color = colors[clus6],
label.offset = 0.3, cex = 0.7)# tam etiq y letra

plot(as.phylo(as.dendrogram(hc)), type = "cladogram", cex = 0.6,


edge.color = "steelblue", edge.width = 2, edge.lty = 2,
tip.color = "steelblue")

fviz_cluster(object = list(data=covid_casos.cl, cluster=cutree(as.dendrogram(hc),


k=4)),
ellipse.type = "convex", repel = TRUE, show.clust.cent = FALSE,
labelsize = 8) +
labs(title = "Clúster jerárquico + Proyección PCA",
subtitle = "Distancia euclídea, Linkage ward, K=4") +
theme_bw() +
theme(legend.position = "bottom")

peru = d11[d11$Country_Region=="Peru",]
rusia = d11[d11$Country_Region=="Russia",]
israel = d11[d11$Country_Region=="Israel",]

casos_cluster=rbind(peru,rusia,israel)

También podría gustarte