Índice
- O Curso R
-
- Tutoriais
-
- Apostila
-
- 6. Testes de Hipótese (em preparação!)
- Exercícios
-
- Material de Apoio
-
- Área dos Alunos
-
- Cursos Anteriores
-
IBUSP
Outras Insitutições
Linques
Visitantes
Outras Insitutições
Sou formada em Oceanologia pela Universidade Federal de Rio Grande-FURG. Atualmente sou mestranda em Oceanografia, com ênfase em Oceanografia Biológica, pelo Instituto Oceanográfico da USP.
Minha dissertação não prevê a utilização do R para a análise de dados, visto que estou trabalhando com a área social da Oceanografia e metodologias qualitativas. Mas sempre gostei de estatística e do ambiente R, além de acreditar na importância deste como ambiente de trabalho livre e colaborativo, por isso estou fazendo a disciplina.
EXERCÍCIOS
TRABALHO FINAL
1. Proposta principal:
No Brasil, de acordo com o Censo Demográfico de 2010, a zona costeira concentra 26,58% da população (IBGE, 2011). Considerando que muitas das grandes cidades se localizam nas zonas costeiras, é de grande importância para a gestão que se conheça o ambiente da praia e suas características. Nesse sentido, usuários, poder público, gestores, oficiais da defesa civil e do resgaste necessitam de meios rápidos e eficientes para monitorar o estado do mar a fim de: minimizar possíveis efeitos das ressacas conhecendo a altura de onda incidentes; entender o estágio morfodinâmico da praia que irá influenciar na morfologia (forma da praia), por exemplo: se a praia é de tombo (alta declividade) ou suave (figura 1 a), o que altera as chances de afogamento de pessoas que não são boas nadadoras; bem como prever a possibilidade das correntes de retorno. As correntes de retorno são canais de correntes que puxam os nadadores em direção ao mar aberto, muitas vezes provocando casos de afogamento (figura 1 b). Elas se formam de várias formas, podendo ser causadas por alterações rápidas na altura de ondas, como pela chegada de um swell (grandes ondas formadas em áreas remotas com ocorrência de tempestades) ou pontos de ruptura nos bancos de areia, relacionado ao estágio morfodinâmico da praia.
Para facilitar aos leigos na área de oceanografia a obterem de forma rápida informações sobre o estado do mar e monitorar o mesmo num período de 7 dias, será construída a função monitoraR
. Está irá utilizar dados de saída do modelo WaveWatch, baixados no R, das variáveis altura de onda em águas profundas e período da onda de forma a calcular a altura de onda na praia (equação 1), a importância da maré no sistema da praia (equação 2) e o estado morfodinâmico da praia (equação 3). Dessa forma, a função irá fornecer informações de previsão da altura da onda na praia, seu período, o estado morfodinâmico e o risco de correntes de retorno associadas para cada dia.
Hrasa = (g * Hprofundo) ^ 0.5 (Equação 1)
RTR = TR / Hraso (Equação 2)
Ω = Hraso / Ws. T (Equação 3)
Onde: Hrasa é altura de onda em águas rasas, g é a aceleração da gravidade, TR é a amplitude de maré, RTR é Related Tide Range, Ω é o estado morfodinâmico da praia, Ws é a velocidade de decaimento do grão de areia, T é o período da onda.
Planejamento da função
Entrada: monitoraR
(lat
, long
, dia.inicio
, dia.final
, estado.BR
, grão.carac
, ripcurrent = T
)
lat
= latitude da praia a ser investigada (classe: numeric).long
= longitude da praia a ser investigada (classe: numeric).dia.inicio
= data do dia de ínicio da previsão no formato YYYY-MM-DD (classe: data).dia.final
= data do dia de final da previsão no formato YYYY-MM-DD (classe: data).Estado.BR
= estado do BR a ser escolhido pelo usuário, dentre as opções estão as siglas dos estados costeiros (classe: character)grão.carac
= característica do grão a ser escolhida pelo usuário, dentre as opções “AGrossa”, “AMedia”, “AFina”, “AMuitoFina”ripcurrent
= se o usuário quer ou não calcular o indice de risco de corrente de retornoVerificando os parâmetros:
lat
é um número entre 3 N e 33 S? Caso não seja, para-se o processamento da função: “lat
precisa ser um número entre 3 N e 33S.”long
é um número e menor que 0? Se não, escreve: “long
precisa ser um número e < 0.”dia.inicio
e dia.final
devem ter intervalo de 7 dias.”estado.BR
é da classe caracter? Se não, escreve: “estado.BR
deve ser caracter.”grão.carac
é da classe caracter? Se não, escreve: “estado.BR
deve ser caracter.”Pseudo-código:
Ondas
, do site WaveWatch, entre a latitude (lat
), longitude(long
) e no intervalo de datas (dia.inicio
até dia.final
) escolhidos pelo usuário, das variáveis altura de onda (Hprof
), período de onda (T
);Ondas
(Ondas$Hrasa
) onde é convertida a altura de onda do WaveWatch para a altura de onda em águas rasas - equação 1dif.datas
para armazenar quantos dias de diferença entre o início e o fim do usuário escolheuGrao
)para armazenar relação entre característica do grão e a velocidade média de decantação da classe – na primeira coluna as opções de características do grão (Grao$nomes
) e na segunda as velocidades médias (Grao$Ws
)MareBR
) para armazenar a relação entre a amplitude média de maré em cada estado do Brasil – na primeira coluna a sigla dos estados costeiros brasileiros (MareBR$nome
) e na segunda a amplitude de maré (MareBR$TR
), conforme livro Brazilian Coastal Systems Estágio.praial
que armazena as informações que relacionam RTR
, K
, Hraso
e o nome do estágio praial (colocar link da figura da tabela 1.1 do livro Brazilian Beach Systems)RTR
para armazenar o RTR, calulado através da indexação no dataframe MareBR
que retorne o valor da segunda coluna que corresponda a sigla informada pelo usuário (armazenada na primeira coluna) e a média da coluna Ondas$Hrasa
do dataframe Ondas - equação 2RTR > 10
a função para e retorna a mensagem “Praia dominada por maré, não é possível calcular Ω”Hraso.m.dia
, T.m.dia
, omega
e nome.estágio
de NAs de tamanho dif.datas
;i
vai de 1 até dif.datas
; j
vai de 1 até dif.datas
; Hraso.m.dia
que armazena a média de Ondas$Hraso
por dia (cada 24 linhas de dados no dataframe Ondas correspondem aos dados de 1 dia) indexação será feita usando esse princípio – indo da linhas ((j*24) - 23) : j*24
)T.m.dia
que armazena a média de Ondas$T
por dia (cada 24 linhas de dados no dataframe Ondas correspondem aos dados de 1 dia) indexação será feita usando esse princípio, - indo da linhas ((j*24) - 23) : (j*24)
)omega
o estágio praial do dia: nome.estágio
o nome do estágio praial a cada dia a partir de indexação dos valores de RTR
e Ω
e Hraso
que estão no dataframe Estagio.praial
ripcurrent
de NAs e tamanho dif.datas
Hraso
, T
e TR
- baseado no índice descrito em Engle et al. (2002)Ω
e ripcurrent
em função de dif.datas
Saída:
Comentários Lucas Camacho
Essa parece ser uma função que está bem estruturada pra você e aplica alguns cálculos da oceanografia (se não for da oceanografia peço desculpas pela ignorância) para devolver algumas informações para o usuário. Porém, tenho algumas perguntas que podem te fazer pensar e te ajudar no “polimento” da função
estado.BR
só precisa ser um character. O que acontece se eu escrever estado.BR = ARIZONA
? A pessoa escreveu um character e vai rolar algum erro no meio da função sendo que a pessoa usando não vai ter a mínimo ideia do motivograo.caract = MAISOUMENOSDURO
? Exemplo idiota, mas acho que você pegou a ideia.Por fim, achei a ideia da função legal e parece bem organizado já.
2. Proposta B
Dentro da área da oceanografia, grandes partes das pesquisas realizadas necessitam de trabalhos em campo, às vezes de vários dias para serem executados, ou próximo ou na praia e até mesmo em alto mar. Por depender de condições climáticas muito variadas e dinâmicas e, ainda por cima, questões logísticas, é de grande importância que seja realizado uma boa análise do tempo nos períodos propostos para que o campo ocorra em situação de segurança para a equipe, que seja possível realizar a coleta dos dados e de forma a maximizar a obtenção dos dados em campo utilizando recurso público para a pesquisa.
Trabalhos embarcados utilizando Navios Oceanográficos, tripulação, equipe de pesquisadores custa em média: xxxxxxxxx reais por dia, sem contar os diversos equipamentos que devem ser acoplados para que sejam coletados os dados. Além de conseguir coletar dados em segurança, qualquer pesquisador que queira trabalhar no mar precisa se preocupar com a possibilidade da perda de equipamentos de custo elevado por conta de condições de tempo, sendo mais um fator relevante para ser levado em consideração no momento do planejamento. Mesmo os trabalhos que não são embarcados, necessitam de boas condições de tempo para serem executados. No caso de trabalhos que envolvam pescadores precisamos: quando embarcados junto com eles (observadores de bordo) que o tempo seja bom para a segurança de todos, quando realizadas entrevistas em terra é preciso que o pescador não tenho saído para realizar a atividade. Logo, para quase todos os projetos de pesquisa em ciências do mar é essencial que se considere as condições de tempo, em especial altura de onda, velocidade do vento, precipitação, etc. Fatores como a lua podem vir a ser importantes para a coleta de alguns organismos marinhos que tem ciclos, em geral, reprodutivos acoplados à fase da lua, bem como é de grande importância para aqueles que trabalham com pesca. O mesmo para os defesos de captura de espécies, que pode vir a ser de interesse de pesquisadores.
Planejamento da função
Entrada: campo.maR
(previsao, dia.inicio, dia.final, mes, wlim, hlim, prob.chuva, fase.lua, recurso)
previsao
= data frame contendo os dados de previsão de 7 dias das variáveis de altura (m) e período de onda (s), probabilidade de chuva (%), intensidade de vento (m/s), temperatura do ar (C).dia.incio
e dia.final
= números entre 1 e 31, referente aos dias dos mês (classe: numericmes
= mês escolhido pelo usuário (classe: character)wlim
= limite de intensidade do vento em m/s (classe: numeric, wlim > 0).hlim
= limite de altura de onda em metros (classe: numeric, hlim > 0)prob.chuva
= limite de probabilidade de chuva fase.lua
= fases da lua escolhidos pelo usuário, caso não deseje levar em consideração, fase.lua = FALSE (classe: character)recurso
= espécie que o usuário vai escolher, caso não venha trabalhar com a pesca colocar recurso = FALSE, dentre as opções dadas na descrição da funçãoVerificando os parâmetros:
previsao
é um dataframe contendo 5 colunas? Caso não seja, para-se o processamento da função: “previsao
precisa ser um dataframe com 5 colunas de dados.”dia.incio
e dia.final
são números entre 1 e 31? Se não, mensagem de erro e para-se a função “dia.incio
e dia.final
devem ser números entre 1 e 31”previsão
tem o mesmo número de linhas do intervalo entre dia.incio
e dia.final
Wlim, temp.lim, hlim
são números maiores que zero? Se não, escreve: “wlim, temp.lim, hlim
precisam ser números maiores que 0.”fase.lua
e mes
são da classe caracter? Se não, para a função “fase.lua
e mes
devem ser da classe character”recurso
é da classe caracter? Se não, escreve: “recurso
deve ser da classe caracter.”Pseudo-código:
-Cria um data frame calendario
com as seguintes colunas: dias do ano (seq(1:365)), meses do ano (rep (nome de cada mes), duração do mês), fases da lua ( rep (cada fase da lua), 7) e uma coluna para cada recurso e seu período de defeso no estado de SP (defeso = não poder pescar = False);
mes, dia.incio e dia.final
- indexa o dataframe calendário
retornando apenas as informações referentes àquele mês e no período de dias escolhidos, guardando no objeto período.campo
dados.periodo.campo
que é formado pela junção dos dataframes período.campo
e previsão
, formado por 9 colunasdados.periodo.campo
usando if
vamos selecionar os dias com valores acima dos valores limites fornecidos pelo usuário para wlim, temp.lim, hlim e prob.chuva
, criando outra coluna em dados.periodo.campo
chamada Tempo
e atribuindo valor 1 para esses dias wlim, temp.lim, hlim e prob.chuva
– atribuindo valor 0If fase.lua = T
selecionar os dias dentro do período escolhido (indo de dia.incio
ao dia.final
) e retornar as fases da lua referente a estes dias (coluna de dados no objeto calendário) – criar nova coluna em dados.periodo.campo
chamada lua
If recurso = T
selecionar os dias dentro do período escolhido (indo de dia.incio
ao dia.final
, de acordo com o recurso escolhido pelo usuário e retornar FALSE
para período de defeso e TRUE
para pesca aberta (coluna de dados no objeto calendario
) – criar nova coluna em dados.periodo.campo
chamada defeso
wlim, temp.lim, hlim e prob.chuva
para tempo igual a 1 e igual a 0Saída:
dias$dados.periodo.campo
, lua$dados.periodo.campo
, tempo$dados.periodo.campo
, defeso$dados.periodo.campo
e as médias de cada variável de acordo com os valores de tempo (0 ou 1)Comentários Lucas Camacho
Além disso, queria te atentar para a Verificação de parâmetros dessa proposta semelhante a feita na proposta anterior
character
, o que acontece se eu colocar um character
meio bizarro e inesperado? Parece bobo mas é sempre bom lembrar que uma pessoa que pegar sua função não vai saber direito como funciona e como ela pode ou não usá-la.Finalmente, se você manter as ideias dessa forma eu aconselho que você trabalhe com a proposta A e se quiser trabalhar com a B, pense no que você quer fazer, no que quer entregar para o usuário e o mais importante, o quão complexo ou quão desafiador construir essa função pode ser pra você.
Bom, qualquer dúvida ou desespero (rs) pode mandar e-mail pra mim que eu respondo assim que possível (lucas.camacho@usp.br)
Grandes abraços
Links para o trabalho final
Acabei decidindo fazer o trabalho final desenvolvendo a Proposta Principal. Os argumentos da função e alguns passos foram modificados da proposta, para facilitar o entendimento do usuário, reduzir a chance de erros e otimizar o processamento. A função monitoraR
baixa arquivos do modelo WaveWatch III e calcula diversos parâmetros importantes para entender a dinâmica da praia, suas características morfológicas e o risco de correntes de retorno para as datas desejadas pelo usuário, da data presente até 6 dias no futuro.