Doutorando em Epidemiología aplicada as zoonoses, FMVZ, USP
O título da minha tese é: 'Avaliação do sistema de vigilância para peste suína clássica do Equador. Proposta de sistema de vigilância baseado em risco', orientado pelo professor Fernando Ferreira.
Linque para a página com os meus exercícios resolvidos Exercicios de Alfredo Acosta
A Agencia de regulação e controle fito zoo sanitário e uma organização adscrita ao Ministério de Agricultura do Equador, nas suas competências tem a execução e fiscalização do Projeto de erradicação de Peste suína clássica (PSC). A PSC e uma das principais doenças infecciosas dos suínos domésticos, não tem cura e eventualmente causa a morte do animal infetado, sua erradicação se baseia em prevenção mediante vacinação e remoção sistemática dos animais infetados.
No Equador se tem implementado um proceso de vacinação obrigatória para seu controle, para isso se tem um sistema de registro de atestados de vacina, numa base de dados (PostgreSQL) com uma interface desenvolvida em código PHP, reportes dinâmicos ainda não foram desenvolvidos. Atualmente se baseiam em análise de reportes excel mediante filtros e tabela dinâmicas tanto nos funcionários públicos, como professionais autorizados que tem aceso aos reportes.
Para o controle do processo, são definidos no inicio do ano, metas baseadas na população existente e vacinada (baseados na mais alta vacinação histórica registrada), são registrados os atestados de vacina (50.000 por ano), e o respetivo seguimento e controle em cada órgão estadual (24 províncias) quem a sua vez fazem o controle nos municípios (221 cantones) e 1024 parroquias (mínima unidade territorial). 330 Fiscais agropecuários Veterinários e Agrônomos fiscalizam o avance das metas usando reportes da cobertura de vacina em cada unidade territorial, e uns 100 credenciados privados para o que é usado vários reportes de avance de cobertura, semanais, mensuais e anuais (Exemplo1).
Ao introduzir um banco de dados (que se encontra padronizado desde o servidor), a função responderia a pergunta Qual é o status (porcentagem de avanço) de imunização neste período e neste território. Mostrando um reporte PDF com a informação proporcionada e analisada.
Entrada: vac(arquivo, territorio, ordem)
arquivo = Nome do arquivo em formato excel (class: dataframe).territorio = Análise territorial (class: list, 3 fatores [provincia, canton ou parroquia]).ordem = Alfabético ou ranking (class: list, 2 fatores [alf, rank]).- Um objeto meta fornecido antecipadamente debe rá vir como fonte de dados dentro da função.
dados. resultv com N fileiras, e 3 colunas UT (executado, meta, porcentagem), prenche tudo com NAs. porcentagem e salva a divisão da soma do numero de animais vacinados do objeto dados pela soma do numero de animais vacinados no objeto meta por cada UT. Valida a existência do nome de cada UT antes de fazer a divisão. result com um match por nomes da UT meta com dados. result de acordo com o parâmetro order alfabético das UT ou numérico da porcentagem. range com a resta do tempo em dias do primeiro e última data encontradas na coluna data de registro e salva tambem as duas datas. data com data e hora do fim do processo. timestamp com o tempo de análise desde a importação ate a geração do PDF. porcentagem. http://www.agrocalidad.gob.ec/proyecto-de-control-y-erradicacion-de-peste-porcina-clasica-ppc/ https://guia.agrocalidad.gob.ec/agrodb/ingreso.php
O controle da movimentação animal e um processo mandatório padronizado ao redor do mundo no qual todos os animais de produção (bovinos, suínos, aves, equinos e outros), para se mobilizar precisam de um atestado no qual indique sua condição sanitária.
Os atestados de mobilização são salvos, mas em geral não se tem visualização padrado dos dados registrados. Uma análise gráfica feita com mapas das densidades por localização da origem e destino dos animais poderia ser bem útil para analisar tendências de movimentações ou lugares de maior densidade. Isto para melhorar controles baseados nas tendências deses movimentos ou simplesmente para saber espacialmente onde foram movimentados.
Mapas são feitos a través de programas de geoprocessamento como ARCGIS ou QGIS mas, um mapa com densidades como no proporcionado no exemplo(2) demora em fazer unos 20-30 minutos em pessoal experiente ou dificilmente seriam feitos pelos propietários dos animais.
A função pretende traçar o movimento de animais de produção em diferentes escalas espaciais, fornecendo ao usuário de um resumo estatístico e mapas em escala apropriada registrando as movimentações dos animais.
A estatística descritiva mstats vai analisar o : total de atestados, animais, lotes, media de animais por atestado e media de animais e lotes por atestado por unidade territorial, summary do número de animais.
Entrada: mov(arquivo,divter,dir,tipo,especie)
arquivo = Nome do arquivo em formato csv (class: dataframe).divter = Divisão territorial (class: list, 3 fatores [d1, d2 ou d3]).dir = Direção do movimento (class: list, 2 fatores [from, to]).tipo = Animais ou lotes movimentados (class: list, 2 fatores [animais, lotes])especie = Tipo de espécie de animais (class: list, [aves, bovinos, suínos, caprinos]Se não escreve: “O arquivo deve ter os parametros requeridos”.
dados. resultm, colnames [Divisão_territorial, n_animais, n_lotes, Código_divisão]. resultm com o resultado da soma de todos os animais consolidados ao número de divisão territorial escolhida, se o parâmetro tipo é animais. resultm com o resultado da conta única do número de atestado consolidados ao número de UT escolhido, se o parâmetro tipo é lote.resultm com o código da divisão territorial[t1], fazendo uma comparação do nome de divisão territorial contida no arquivo shp com o nome da divisão territorial do resultm[Divisão_territorial].resultm com o código da divisão territorial[t2], fazendo uma comparação do nome de divisão territorial contida no arquivo shp com o nome da divisão territorial do resultm[Divisão_territorial t1+t2].resultm com o código da divisão territorial[t3], fazendo uma comparação do nome de unidade territorial contida no arquivo shp com o nome da unidade territorial do resultm[Unidade_Territorial t1+t2+t3].mstats com informação descritiva e estatísticas incluindo as informações indicadas na contextualização.divter e salva como objeto shp.grapm e representa graficamente os dados de resultm num mapa com coloração de escala de 4 níveis de cor, baseado no shape. range com a resta do tempo em dias do primeiro e última data encontrada na coluna data do df. Salva tambem as duas datas. data com data e hora do fim do processo. timestamp com o tempo de análise desde a importação ate a geração do PDF. gramp com as unidades territoriais preenchidas de acordo com a escala de 4 níveis de cor por densidade de número de animais ou lotes movimentados resultm para a unidade territorial selecionada. data, mstats e o timestamp. | nome | projeto | telefone | |
|---|---|---|---|
| Alfredo | alfredoacosta@usp.br | ~~~~~ |
Olá Alfredo,
Você estruturou bem ambas as propostas de funções, apresentou bem os argumentos de entrada e as saídas das mesmas. Achei muito legal que ambas as funções pretendem verificar que os parâmetros de entrada estejam nos formatos certos e retornem mensagem de erro para os usuários. E também achei bem legal os pseudo-códigos. Contudo, ambas as propostas têm uma deficiência crítica, e é que elas são muito específicas. Da forma como você as contextualiza e as apresenta dá para entender que suas propostas irão apenas resolver os problemas destacados por você, não mais disso. Um ponto importante da função que vocês devem criar é a capacidade de resolver problemas amplos, dentre os quais problemas na sua área de atuação devem ser apenas um exemplo do que a função pode fazer. Ou seja, mesmo que sua função se encaixe dentro de um contexto acadêmico específico, a aplicabilidade da tarefa que desenvolverá deve abranger diversos problemas da área. Sugiro você dar uma olhada de novo aos “Passos para uma boa proposta” explicitados para o Trabalho final. Veja que não estou pedindo para você trocar suas propostas, de fato gostei mais da B por exemplo. Mas reformule suas propostas de forma que a aplicabilidade das funções seja mais abrangente. — Gustavo Agudelo 2018/05/10 11:34
— Alexandre Adalardo de Oliveira 2018/05/18 10:39 Caro Alfredo,
Concordo com o Gustavo que ambas as propostas estão muito bem colocadas e apresentadas. Apesar de serem específicas a um problema, são desafios interessantes de implementação de atividades repetitiva que pode ser útil. Pode seguir com aquela que tiver mais interesse.
mov <- function(arquivo,divter,dir,tipo,map) {
t1i <- Sys.time() #00 Contando o tempo da funcao
#Requiring package
require(ggplot2, quietly = F)
require(readxl, quietly = F)
require(raster, quietly = F)
require(tidyverse, quietly = F)
require(leaflet, quietly = F)
require(webshot, quietly = F)
require(htmlwidgets, quietly = F)
# A Validacao de argumentos ----
if(divter != "t1" && divter != "t2" && divter !="t3") #01 Verifica se divter foi inserido corretamente
{
stop("divter so pode ser t1, t2 ou t3") #2 indica os valores permitidos
}
if(dir != "o" && dir != "d") #3 Verifica se dir foi inserido corretamente
{
stop("dir so pode ser 'o' ou 'd' (origem ou destino)" ) #4 Indica os valores permitidos
}
if(tipo != "a" && tipo !="l") #5 Verifica se tipo foi inserido corretamente
{
stop("tipo so pode ser 'a' ou 'l' (animais ou lotes)") #6 indica os valores permitidos
}
if(map != "q" && map != "qq") # 7 Verifica se opcoes do mapa foram inseridas corretamente
{
stop("map so pode ser 'q', 'qq'(quantidade, quartil)") #8 indica os valores permitidos
}
#B Validacoes no arquivo ----
m <- readxl::read_excel(path = arquivo,
col_types = c("text", "text", "text",
"text", "text", "text",
"text", "numeric","date"))# 9 carrego o arquivo fornecido para validacoes
m <<- m
#10 crio um dataframe com as clases correctas para comparacao
a <- data.frame(as.character("a"), as.character("b"), as.character("c"),
as.character("d"), as.character("e"), as.character("f"),
as.character("g"), as.numeric('5'), as.Date("2018-01-01"),
stringsAsFactors = FALSE)
if(!sapply(a, class) == sapply(m, class)) #11 Compara as variaveis do arquivo fornecido com as do exemplo
{
stop("Suas 9 variavels, tem que ser no formato especificado na ajuda") #12 Indica as variaveis
}
#C Somando e agregando animais dependendo dos territorios origen ----
if(divter=="t1" && dir=="o" && tipo=="a") #13 Especificando argumentos para somas
{
result <- aggregate(x= m[ ,8], by=m[ ,2], FUN=sum) #14 somatoria de animais t1 e origem }
}
if(divter=="t2" && dir=="o" && tipo=="a") #15 Especificando argumentos para somas
{
result <- aggregate(x= m[ ,8], by=m[ ,3], FUN=sum) #16 somatoria de animais t2 e origem
}
if(divter=="t3" && dir=="o" && tipo=="a") #17 Especificando argumentos para somas
{
result <- aggregate(x= m[ ,8], by=m[ ,4], FUN=sum) #18 somatoria de animais t3 e origem
}
#D Somando e agregando animais dependendo dos territorios destino ----
if(divter=="t1" && dir=="d" && tipo=="a") #19 Especificando argumentos para somas
{
result <- aggregate(x= m[ ,8], by=m[ ,5], FUN=sum) #20 somatoria de animais t1 e destino
}
if(divter=="t2" && dir=="d" && tipo=="a") #21 Especificando argumentos para somas
{
result <- aggregate(x= m[ ,8], by=m[ ,6], FUN=sum)#22 somatoria de animais t2 e destino
}
if(divter=="t3" && dir=="d" && tipo=="a") #23 Especificando argumentos para somas
{
result <- aggregate(x= m[ ,8], by=m[ ,7], FUN=sum)#24 somatoria de animais t3 e destino
}
#E Contando e agregando lotes dependendo dos territorios origen ----
if(divter=="t1" && dir=="o" && tipo=="l") #25 Especificando argumentos para conta de lotes
{
result <- aggregate(x= m[ ,8], by=m[ ,2], FUN=NROW) #26 Contagem dos lotes t1 e origem
}
if(divter=="t2" && dir=="o" && tipo=="l") #27 Especificando argumentos para conta de lotes
{
result <- aggregate(x= m[ ,8], by=m[ ,3], FUN=NROW) #28 Contagem dos lotes t2 de origem
}
if(divter=="t3" && dir=="o" && tipo=="l") #29 Especificando argumentos para conta de lotes
{
result <- aggregate(x= m[ ,8], by=m[ ,4], FUN=NROW) #30 Contagem dos lotes t3 de origem
}
#F Contando e agregando lotes dependendo dos territorios destino ----
if(divter=="t1" && dir=="d" && tipo=="l") #31 Especificando argumentos para conta de lotes
{
result <- aggregate(x= m[ ,8], by=m[ ,5], FUN=NROW) #32 Contagem dos lotes t1 de origem
}
if(divter=="t2" && dir=="d" && tipo=="l") #33 Especificando argumentos para conta de lotes
{
result <- aggregate(x= m[ ,8], by=m[ ,6], FUN=NROW) #34 Soma os animais t2 de origem
}
if(divter=="t3" && dir=="d" && tipo=="l") #35 Especificando argumentos para conta de lotes
{
result <- aggregate(x= m[ ,8], by=m[ ,7], FUN=NROW) #36 Soma os animais t3 de origem
}
# E Fazendo mapa para t1
if(divter == 't1')#37 Se e t1 muda o colname para t1
{
colnames(result) <- c("t1","cantidad") #38 muda o nome da coluna para nao confundir
ec1 <- getData("GADM", country = "ecuador", level = 1)#39 baixa o mapa para t1
#40 elimino carateres especiais do resultado para poder fazer match correcto entre dados e mapa
result$t1 <- gsub("á","a", result$t1)
result$t1 <- gsub("é","e", result$t1)
result$t1 <- gsub("í","i", result$t1)
result$t1 <- gsub("ó","o", result$t1)
result$t1 <- gsub("ú","u", result$t1)
#41 elimino caracteres especiais do data frame
ec1@data$NAME_1 <- gsub("á","a", ec1@data$NAME_1)
ec1@data$NAME_1 <- gsub("é","e", ec1@data$NAME_1)
ec1@data$NAME_1 <- gsub("í","i", ec1@data$NAME_1)
ec1@data$NAME_1 <- gsub("ó","o", ec1@data$NAME_1)
ec1@data$NAME_1 <- gsub("ú","u", ec1@data$NAME_1)
#42 Comparo dados do mapa com os dos dados do result de obter match mantenho o valor se nao aplicar NA
### e importante conhecer os NA, que sao territorios que nao tem dados.
result <- data.frame(t1 = setdiff(ec1@data$NAME_1, result$t1),
cantidad = NA,
stringsAsFactors = FALSE) %>% bind_rows(result)
# 43 Crio no data do shape as quantidades para usarlas na projeccao do mapa
ec1@data$cantidad <- result$cantidad[match(ec1@data$NAME_1, result$t1)]
ec1 <<- ec1 #44 envia o shape file para o global enviroment
}
if(divter == 't1' && map == "q")#45 Se e mapa solicitado e por quantidade
{
#46 meus colores de paleta calculados por numero de animais
mypal <- colorNumeric(palette = "viridis", na.color = "#ffffff", domain = ec1@data$cantidad)
map <- leaflet() %>% #47 Apertura ambiente grafico html
addProviderTiles("OpenStreetMap.Mapnik") %>%#48 Apertura open maps
setView(lat = -1.7, lng = -78.5, zoom = 7) %>%#49 Localiza o mapa
addPolygons(data = ec1, stroke = FALSE, smoothFactor = 0.5, fillOpacity = 0.7, #50 Agrega poligonos e define opacidades
fillColor = ~ mypal(ec1@data$cantidad),#51 Prence cores do shape de acordo a quantidade
popup = paste("Terr: ", ec1$NAME_1, "<br>",#52 Pop-up dados de territorio
"Quantidade: ", ec1@data$cantidad, "<br>")) %>%#53 Pop-up quantidade
addLegend(position = "bottomleft", pal = mypal, values = ec1@data$cantidad,#54 Posicao da legenda, paleta e dados
title = "Quantidade", opacity = 0.7)# 55 Legenda e opacidade
}
if(divter == 't1' && map == "qq")# 56 Se o mapa e solicitado por quartis
{
mypal <- colorQuantile(palette = "viridis", na.color = "#ffffff", domain = ec1@data$cantidad)#57 muda as cores de paleta para calculo com quartis
#58 Usa as mesmas opcoes para os graficos dos outros territorios
map <- leaflet() %>% #58 Apertura ambiente grafico html
addProviderTiles("OpenStreetMap.Mapnik") %>%#59 Apertura open maps
setView(lat = -1.7, lng = -78.5, zoom = 7) %>% #60 Localiza o mapa
addPolygons(data = ec1, stroke = FALSE, smoothFactor = 0.5, fillOpacity = 0.7, #61 Agrega poligonos e define opacidades
fillColor = ~mypal(ec1@data$cantidad), #62 Prence cores do shape de acordo a quantidade
popup = paste("Terr: ", ec1$NAME_1, "<br>", #63 Pop-up dados de territorio
"Quant: ", ec1@data$cantidad, "<br>")) %>% #64 Pop-up quantidades
addLegend(position = "bottomleft", pal = mypal, values = ec1@data$cantidad,#65 Posicao da legenda, paleta e dados
title = "Quartis", opacity = 0.7)#66 Lenda e opacidade
}
# F Fazendo mapa para t2
if(divter == 't2')#67 Se e t1 muda o colname para t1
{
colnames(result) <- c("t2","cantidad") #68 muda o nome da coluna para nao confundir
ec2 <- getData("GADM", country = "ecuador", level = 2)#69 baixa o mapa para t2
#70 elimino carateres especiais do resultado t2 para poder fazer match correcto entre dados e mapa
result$t2 <- gsub("á","a", result$t2)
result$t2 <- gsub("é","e", result$t2)
result$t2 <- gsub("í","i", result$t2)
result$t2 <- gsub("ó","o", result$t2)
result$t2 <- gsub("ú","u", result$t2)
#71 elimino carateres especiais do mapa para poder fazer match correcto entre dados e mapa
ec2@data$NAME_2 <- gsub("á","a", ec2@data$NAME_2)
ec2@data$NAME_2 <- gsub("é","e", ec2@data$NAME_2)
ec2@data$NAME_2 <- gsub("í","i", ec2@data$NAME_2)
ec2@data$NAME_2 <- gsub("ó","o", ec2@data$NAME_2)
ec2@data$NAME_2 <- gsub("ú","u", ec2@data$NAME_2)
#72 Comparo o data do mapa com os dos dados e de nao encontrar algum aplicar NA
result <- data.frame(t2 = setdiff(ec2@data$NAME_2, result$t2),
cantidad = NA,
stringsAsFactors = FALSE) %>% bind_rows(result)
#73 Envio cantidades dato para o shape
ec2@data$cantidad <- result$cantidad[match(ec2@data$NAME_2, result$t2)]
ec2 <<- ec2 #74 envia o mapa para o global enviroment
}
if(divter == 't2' && map == "q")#75 Se e mapa solicitado e por quantidade
{
#76 Colores de paleta calculados por numero de animais
mypal <- colorNumeric(palette = "viridis", na.color = "#ffffff", domain = ec2@data$cantidad)
#77 Usa as mesmas opcoes para os graficos dos outros territorios desde #47
map <- leaflet() %>% #78 Apertura ambiente grafico html
addProviderTiles("OpenStreetMap.Mapnik") %>% #79 define proveedor open maps
setView(lat = -1.7, lng = -78.5, zoom = 7) %>% #80 Localiza o mapa
addPolygons(data = ec2, stroke = FALSE, smoothFactor = 0.5, fillOpacity = 0.7, #81 Agrega poligonos e define opacidades
fillColor = ~mypal(ec2@data$cantidad),#82 Prence cores do shape de acordo a quantidade
popup = paste("Terr: ", ec2@data$NAME_2, "<br>",#83 Pop-up dados de territorio
"Quant: ", ec2@data$cantidad, "<br>")) %>% #84 Pop-up quantidades
addLegend(position = "bottomleft", pal = mypal, values = ec2@data$cantidad,#85 Posicao da legenda, paleta e dados
title = "Quantidade", opacity = 0.7) #86 Lenda e opacidade
}
if(divter == 't2' && map == "qq") #87 Se o mapa e solicitado por quartis
{
mypal <- colorQuantile(palette = "viridis", na.color = "#ffffff", domain = ec2@data$cantidad) #88 muda os colores de paleta para calculo com quartis
map <- leaflet() %>% #88 Abre ambiente grafico html
addProviderTiles("OpenStreetMap.Mapnik") %>% #89 Apertura open maps
setView(lat = -1.7, lng = -78.5, zoom = 7) %>% #90 Localiza o mapa
addPolygons(data = ec2, stroke = FALSE, smoothFactor = 0.5, fillOpacity = 0.7, #91 Agrega poligonos e define opacidades
fillColor = ~mypal(ec2@data$cantidad), #100 Prence cores do shape de acordo a quantidade
popup = paste("Terr: ", ec2@data$NAME_2, "<br>", #101 Pop-up dados de territorio
"Quant: ", ec2@data$cantidad, "<br>")) %>% #102 Pop-up quantidades
addLegend(position = "bottomleft", pal = mypal, values = ec2@data$cantidad,#103 Posicao da legenda, paleta e dados
title = "Quartis", opacity = 0.7) #104 Lenda e opacidade
}
# G Fazendo mapa para t3
if(divter == 't3') #105 Se e t1 muda o colname para t1
{
colnames(result) <- c("t3","cantidad") #106 muda o nome da coluna t3 para nao confundir
ec3 <- getData("GADM", country = "ecuador", level = 3) #107 baixa o mapa para t3
#108 elimino carateres especiais do resultado t3 para poder fazer match correcto entre dados e mapa
result$t3 <- gsub("á","a", result$t3)
result$t3 <- gsub("é","e", result$t3)
result$t3 <- gsub("í","i", result$t3)
result$t3 <- gsub("ó","o", result$t3)
result$t3 <- gsub("ú","u", result$t3)
#109 elimino carateres especiais do mapa para poder fazer match correcto entre dados e mapa
ec3@data$NAME_3 <- gsub("á","a", ec3@data$NAME_3)
ec3@data$NAME_3 <- gsub("é","e", ec3@data$NAME_3)
ec3@data$NAME_3 <- gsub("í","i", ec3@data$NAME_3)
ec3@data$NAME_3 <- gsub("ó","o", ec3@data$NAME_3)
ec3@data$NAME_3 <- gsub("ú","u", ec3@data$NAME_3)
#110 Comparo o data do mapa com os dos dados e de nao encontrar algum aplicar NA
result <- data.frame(t3 = setdiff(ec3@data$NAME_3, result$t3),
cantidad = NA,
stringsAsFactors = FALSE) %>% bind_rows(result)
#111 Envio cantidades dato para o shape
ec3@data$cantidad <- result$cantidad[match(ec3@data$NAME_3, result$t3)]
ec3 <<- ec3#112 envia o mapa para o global enviroment
}
if(divter == 't3' && map == "q")#113 Se e mapa solicitado e por quantidade
{
#114 meus colores de paleta calculados por numero de animais
mypal <- colorNumeric(palette = "viridis", na.color = "#ffffff", domain = ec3@data$cantidad)
map <- leaflet() %>% #115 Apertura ambiente grafico html
addProviderTiles("OpenStreetMap.Mapnik") %>% #116 Apertura open maps
setView(lat = -1.7, lng = -78.5, zoom = 7) %>% #117 Localiza o mapa
addPolygons(data = ec3, stroke = TRUE, weight = 0.3, smoothFactor = 0.5, fillOpacity = 0.4, #118 Agrega poligonos e define opacidades
fillColor = ~mypal(ec3@data$cantidad),#119 Prence cores do shape de acordo a quantidade
popup = paste("Terr: ", ec3@data$NAME_3, "<br>",#120 Pop-up dados de territorio
"Quant: ", ec3@data$cantidad, "<br>")) %>%#121 Pop-up quantidades
addLegend(position = "bottomleft", pal = mypal, values = ec3@data$cantidad,#122 Posicao da legenda, paleta e dados
title = "Quantidade", opacity = 0.4) #123 Legenda e opacidad
}
if(divter == 't3' && map == "qq")# 124 Se o mapa e solicitado por quartis
{
mypal <- colorQuantile(palette = "viridis", na.color = "#ffffff", domain = ec3@data$cantidad)#125 muda os colores de paleta para calculo com quartis
map <- leaflet() %>% #126 Apertura ambiente grafico html
addProviderTiles("OpenStreetMap.Mapnik") %>% #127 Apertura open maps
setView(lat = -1.7, lng = -78.5, zoom = 7) %>% #128 Localiza o mapa
addPolygons(data = ec3, stroke = TRUE, weight = 0.3, smoothFactor = 0.5, fillOpacity = 0.4, #129 Agrega poligonos e define opacidades
fillColor = ~mypal(ec3@data$cantidad), #130 Prence cores do shape de acordo a quantidade
popup = paste("Terr: ", ec3@data$NAME_3, "<br>", #131 Pop-up dados de territorio
"Quant: ", ec3@data$cantidad, "<br>")) %>% #132 Pop-up quantidades
addLegend(position = "bottomleft", pal = mypal, values = ec3@data$cantidad,#133 Posicao da legenda, paleta e dados
title = "Quartis", opacity = 0.4) #134 Lenda e opacidade
}
#G Mostra dados no console
cat("mov (1) -- Os territorios sem valores numericos (NA's) sao:") #135 Etiqueta
cat("\n") #136 line break
print(result[is.na(result$cantidad), ]) #137 Mostra dados do #135
result <<- result #138 Envia para o global enviroment os valores calculados
print(map)#139 Mostra o mapa na janela grafica
t1f <- Sys.time() #140 Registra o tempo final da corrida da funcao
tt1 <- t1f - t1i #141 Diferenca de tempos entre inicial e final
cat("\n") #142 line break
cat("mov (2) -- O tempo total utilizado na analise foi: ") #143 Etiqueta
print(round(tt1,1)) #144 Mostra no console, tempo utilizado na corrida da funcao
cat("\n") #144 line break
cat("mov (3) -- Presione nos territorios do mapa para saber os valores numericos.") #145 Etiqueta
cat("\n")#146 line break
cat("mov (4) -- Um arquivo (txt), imagem (png) e um site (html) foram salvos na pasta de trabalho com mais informacoes") #147 Etiqueta
cat("\n") #148 line break
cat("mov (5) -- Obrigado por usar mov() !! ") #149 Etiqueta
cat("\n") #150 line break
#H Exporta mapa como png
saveWidget(map, "mov_mapa.html", selfcontained = FALSE) #150 Cria um temp html para salvar uma imagem
webshot::webshot("mov_mapa.html","mov_mapa.png", zoom = 2)#151 Salva a imagem como png
# I Exporta arquivo txt com resumo dos analises
sink("mov_dados.txt") #152 funcao para escrever texto
cat("RESUMO ANALISE DE MOVIMENTACAO ANIMAL")#153 Etiqueta
cat("\n") #154 line break
cat("\n")#155 line break
cat("\n") #156 line break
cat("RESUMO DO BANCO CONFERIDO") # 157 Etiqueta
cat("\n")# 158 line break
cat("Data do primeiro registro encontrado: ") #159 etiqueta
range <- summary(m$`Fecha Inicio Vigencia`) #160 Resumen de datas do arquivo
class(range) <-class(m$`Fecha Inicio Vigencia`) #161 asigno a mesma clase do df para que se mostre como data (POSIXct)
print(range[1]) #162 Mostro a data menor
cat("\n")# 163 line break
cat("Data do ultimo registro encontrado: ") #164 Etiqueta
print(range[6]) #165 Mostro a date maior
cat("\n") #166 line break
cat("Faixa de atestados analizados: ") #167 Etiqueta
print(round(range[6]-range[1]),2) #168 Tempo de diferenca entre atestados registrados
cat("\n") #169 line break
cat("Numero de atestados analizados: ") #170 Etiqueta
print(length(m$`Número Certificado`))#171 Quantidade de GTA analizadas
cat("\n")#172 line break
cat("Numero de animais movimentados: ") #173 Etiqueta
print(sum(m$Cantidad)) #174 Quantidade de animais movilizados
cat("\n") #175 line break
cat('Media de animais por atestado: ') #176 Etiqueta
round(sum(m$Cantidad)/length(m$`Número Certificado`),0)#177 Promedio animais por atestado
cat("\n")#178 line break
print("Resumo do numero de animais movimentados: ") #179 Etiqueta
summary(m$Cantidad) #180 Resumo do numero de animais movilizados
cat("\n")#181 line break
cat("\n")#182 line break
cat("RESUMO DOS RESULTADOS") #183 Etiqueta
cat("\n")#184 line break
cat("Resumo das quantidades movimentadas por territorios (NA's=territorios sem informacao): ")
cat("\n") #185 line break
print(summary(result$cantidad)) #186 resultados
cat("\n")#187 line break
cat("\n")#188 line break
cat("\n")#189 line break
cat("Data de execucao do analisis:") #190
print(t1f <- Sys.time()) #191 Registra o tempo final da corrida da funcao
cat("\n")#192 line break
cat("\n")#193 line break
cat("\n")#194 line break
cat("Nome dos territorios sem informacao") #195 etiqueta
print(result[is.na(result$cantidad), ]) #196 Territorios sem informacoes
cat("\n")#197 line break
cat("Territorios ordenados com informacao") #198 etiqueta
print(count(result[!is.na(result$cantidad), ]))# 199 Imprime os que nao sao NA
print(result[order(result$cantidad,decreasing=TRUE), ]) #200 Territorios ordenados por seu numero de animais
cat("\n")#201 line break
sink() #202 fecha dispositivo
} #203 fim da funcao
mov("arquivo.xlsx",divter="t1",dir="d",tipo = "l", map = "qq")
mov package:unknown R Documentation
Mapa dinâmico de movimentação animal
-Description
Esta função gera caraterização espacial dos animais e lotes de animais movimentados em
origem ou destino. A função traça o movimento de animais de produção em tres escalas
espaciais territoriais, fornecendo uma visualização HTML dinâmica e interativa dos
registros de movimentação no nivel nacional e local.
-Usage
function(arquivo,divter,dir,tipo,map)
-Arguments
x Nome do arquivo em formato xlsx, contendo os registros a serem analizados em
9 colunas.
divter Um caracter indicando a divisão territorial na cual sera plotados os dados.
"t1", "t2" ou "t3". Sendo as divisões territoriais dos países em geral nesta
ordem de maior a menor.
dir Um caracter indicando ao mapa a forma de representar a direção da movimentação.
Sendo "o" origem ou "d" para destino.
tipo Um caracter indicando se seram plotados o numero de atestados ou lotes de animais
ou os animais contidos neses lotes. Sendo "a" animais e "l" para lotes.
map Um caracter indicando o de representação por quantidade ou por quartis. Sendo "q"
para quantidade ou "qq" para quartis.
-Detais
O arquivo fornecido deve ser .xlsx e ter 9 colunas: código único, territorio origem 1,
territorio origem 2, territorio origem 3, territorio destino 1, territorio destino 2,
territorio destino 3, quantidade e data.
colnames exemplo ex(cod,ot1, ot2, ot3, dt1, dt2, dt3, num, data).
Os mapas utilizados são disponibilizados pela GADM Database of Global Administrative Areas,
[[www.gadm.org/]], usando os 3 niveis gerais correspondentes com t1, t2 e t3.
-Value
Mapa Web iterativo
Reporte txt con resumo do análise total de atestados, animais, lotes, media de animais por
atestado e media de animais e lotes por atestado por unidade territorial, se indicam os
territorios sem informação.
Arquivo de imagem png do mapa.
-Author(s)
Alfredo Acosta alfredoacosta@usp.br
-Examples:
mov(x,divter="t1",dir="d",tipo = "l", map = "q")
mov(x,divter="t2",dir="o",tipo = "a", map = "qq")